Gửi bài viết tới BigCoin

Hướng dẫn cho người mới bắt đầu học lập trình ứng dụng Blockchain

Đăng bởi: Charlotte  - 30/05/2018 - 781 lượt xem
Chia sẻ
 

Tôi đã có rất nhiều câu hỏi về cách hoạt động của nền tảng Blockchain. Điều quan trọng là "Làm thế nào đểl ập trình ứng dụng blockchain và xây dựng các ứng dụng trên nó?". Phải mất một vài tuần đào bới, đọc và thử nghiệm để cuối cùng có được nó. Tôi không thể tìm thấy hướng dẫn ngắn nhưng toàn diện. Bây giờ, sau khi có một số hiểu biết tốt, tôi nghĩ đến việc viết một cái  gì đó có thể giúp đỡ người khác. Đây là một hướng dẫn ngắn gọn về lập trình blockchain, tôi đã chỉ giữ những phần quan trọng để giảm sự phức tạp.

1. Mục đích của Blockchain cũng như lập trình Blockchain?

Roopa sống ở một trong những vùng hẻo lánh của Delhi. Chính phủ Ấn Độ đã phân bổ ít tài nguyên lương thực mỗi tháng. Vì cô ấy thuộc nhóm BPL (Dưới mức nghèo). Chính phủ sử dụng một người trung gian để phân phối các nguồn thực phẩm này. Chỉ một phần ba nguồn thực phẩm được phân bổ tiếp cận những người như Roopa, phần còn lại được bán bởi người trung gian vì lợi nhuận.

Sara viết sách hư cấu, cô xuất bản chúng trên Amazon. Cô ấy buồn vì Amazon chiếm 50% doanh số bán hàng là hoa hồng. Điều đó không công bằng bởi vì cô ấy đã một mình  nỗ lực viết và tiếp thị.

Vấn đề là trung gian đi đôi với quyền lực và tiền bạc. Phương châm của họ là "lợi nhuận bằng mọi giá", để hỗ trợ các nhà sản xuất và trao quyền cho người nghèo, chúng ta cần những người trung gian hành động theo đạo đức. Điều đó gần như không thể đạt được, nhưng nếu chúng ta có thể thay thế người trung gian bằng một hệ thống tự động thì sao?

Vì máy tính không có thành kiến nên chúng không cần tiền hoặc điện. Đây có thể là suy nghĩ của Satoshi Namakato khi ông phát minh ra bitcoin sử dụng công nghệ blockchain trong năm 2008.

2. Blockchain được phát minh như thế nào?

Tiền đã phát triển theo thời gian, mỗi một cuộc cải cách sẽ làm giảm chi phí sản xuất và làm cho giao dịch của họ thuận tiện hơn. Tiền vàng là tốn kém để sản xuất. Việc phát minh tiền giấy đã giải quyết vấn đề này. Tuy nhiên, sau khi phát minh ra máy tính và internet, mọi người tìm thấy một cách tốt hơn để thực hiện giao dịch thuận tiện và nhanh hơn.

Để đảm bảo giữ được các khoản thu nhập an toàn suốt cả đời và tạo điều kiện thuận lợi cho các giao dịch số, chúng tôi cần một người trung gian (ngân hàng). Điều này làm cho các ngân hàng  trở nên quan trọng, họ có thể áp đặt một khoản phí nặng nề trên các giao dịch rút tiền, bán thông tin cá nhân của chúng ta, v.v ...

Các ngân hàng thiếu tiền đã gây ra khủng hoảng tài chính năm 2008. Các ngân hàng không tôn trọng quyền riêng tư của khách hàng. Hệ thống an ninh yếu của họ đã dẫn đến gian lận kỹ thuật số.

Sự tiến hóa tiếp theo của tiền phải giải quyết các vấn đề sau.

  1. Nó không nên được lưu trữ với một thực thể trung ương.
  2. Nó cần phải được bảo mật cao.
  3. Nó phải đảm bảo sự riêng tư.

Vì tiền tệ fiat được kiểm soát bởi chính phủ, Satoshi không có lựa chọn nào khác ngoài việc phát minh ra một loại tiền tệ mới (tiền mã hóa Bitcoin). Ông giải quyết những vấn đề này với sự giúp đỡ của các mạng peer-to-peer và cryptography.

3. Decentralisation trong lập trình Blockchain

 

Torrents sử dụng công nghệ peer-to-peer để chia sẻ tập tin. Ứng dụng torrent không tải xuống tệp từ máy chủ trung tâm hoặc máy tính đơn lẻ, thay vào đó, nó kết nối với những người trong mạng của mình, tìm ra ai có tệp và tải tệp xuống từ máy tính của họ.

Bạn nhận được các phần của một tập tin từ các máy tính khác nhau trên toàn thế giới. Nếu một người trong mạng biến mất, nội dung tải xuống của bạn sẽ không bị ảnh hưởng bởi vì có những người khác có thể chia sẻ tệp.

Satoshi đã áp dụng công nghệ này vì nó lưu trữ tiền một cách phi tập trung. Không một thực thể nào có quyền kiểm soát nó.

4. Lập trình Blockchain với Cryptography

Trong cryptography, người ta có thể ký điện tử một tin nhắn. Để làm được điều này, chúng ta cần  ba điều đó là một khóa công khai, khóa riêng và tin nhắn.

Khóa công khai và khóa riêng là một tập hợp các ký tự dài được kết nối toán học. Khóa công khai được công khai như tên người dùng của bạn và khóa riêng là bí mật như mật khẩu của bạn.

Tin nhắn là thông tin bạn muốn ủy quyền, ví dụ: “Tôi cho phép bạn thanh toán cho John 100 đô la”.

Nếu bạn nhập thuật toán bằng khóa công khai, khóa riêng và tin nhắn. Thuật toán mã hóa sẽ tạo ra một chữ ký. Đó là một bộ ký tự khác duy nhất cho nội dung của thông điệp đó.

5. Public Key với lập trình Blockchain


-----BEGIN EC PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE50uE+YSxqDgMkFByhpcgTVqXCqHO h68Ljt1z0jklDff/WV7xo+U6o3REBtK/C0/LM+Ef3FB3wR9aXMGNMLb9EA== -----END EC PUBLIC KEY-----Private Key
-----BEGIN EC PRIVATE KEY----- MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgwqIsXl9FqsgrzMdx axI6flBwWIev0Z7i+WF4j8BGnrKhRANCAATnS4T5hLGoOAyQUHKGlyBNWpcKoc6H rwuO3XPSOSUN9/9ZXvGj5TqjdEQG0r8LT8sz4R/cUHfBH1pcwY0wtv0Q -----END EC PRIVATE KEY-----Message
Hello WorldSignature
B0A9A4F641D3A2E3A65576B7311DCD62ABE78BBF4D3F5FE856598508E24FCB2E6F0277C2F8D57E9E2E108B7C493986E783F5316B8046597019951669B4EE6922

 

Để xác minh tin nhắn, người ta phải nhập vào khóa công khai, tin nhắn và chữ ký. Thuật toán mã hóa có thể xác minh nếu thông điệp được chủ sở hữu của khóa công khai ký.

Phải mất 1000 năm để phá vỡ thuật toán mã hóa. Điều này không thể thực hiện nhanh hơn vì chúng tôi có giới hạn tính toán. Máy tính lượng tử trong tương lai có thể thách thức điều này. Tuy nhiên, hệ thống Bitcoin có thể được nâng cấp để đảm bảo an ninh.

Satoshi kết hợp cryptography trong hệ thống của mình để giúp mọi người cho phép các giao dịch bitcoin từ ví của họ.

6. Chế độ Riêng tư của Blockchain

 

Bạn đăng ký bitcoin bằng cách tạo một ví (khóa công khai / khóa riêng). Các hệ thống thu thập không có thông tin như id email, tên đầy đủ, vv Do đó bạn ẩn danh trừ khi bạn thông báo khóa công khai của mình.

7. Đặt nó cùng nhau

Satoshi đã xây dựng sổ kế toán dùng chung cryptography và các mạng peer-to-peer. Khi ai đó gửi bitcoin cho ai đó, một thông điệp được ký mã hóa và phát sóng cho toàn bộ mọi người trong mạng. Họ cập nhật sổ kế toán của họ, do đó tất cả mọi người trong mạng biết ai sở hữu cái gì.

8. Lập trình Blockchain

Mỗi giao dịch mười phút được nhóm lại với nhau thành một khối và liên kết ngược lại với các khối trước đó. Quá trình này tạo ra một blockchain liên tục. Khai thác là một quá trình mà theo đó một khối được xác nhận, điều này liên quan đến các máy tính trong mạng để giải quyết một vấn đề toán học. Máy tính / thợ mỏ đầu tiên giải quyết được vấn đề sẽ được thưởng bằng bitcoin mà được tạo ra từ không khí mỏng.

Khi khối đã được xác nhận và được thêm vào mạng, nó được nhân rộng trên toàn bộ mạng. Blockchain được phát minh trong quá trình tạo ra hệ thống Bitcoin tự trị xác nhận các giao dịch mà không có sự can thiệp của con người. Nếu bạn đang tìm kiếm một giải thích đơn giản cho blockchain, đây là một câu trả lời.

9. Giới thiệu về Ethereum & Hợp đồng thông minh

 

Trước đó chúng tôi đã nói về việc thay thế người trung gian bằng các hệ thống tự trị. Điều này có thể được thực hiện thông qua lập trình. Hệ thống Bitcoin sẽ gây  khó khăn cho người dùng để nắm giữ code các hệ thống tự trị.

Do đó Vitalik Buterin đã xây dựng một cryptocurrency mới gọi là Ethereum. Nó không chỉ là một tiền mã hóa phi tập trung mà là một mạng lưới các máy tính có thể lưu trữ code theo hình thức hợp đồng thông minh.

 

Trong hợp đồng thông minh, chúng tôi có thể lập trình các điều kiện. Nếu bạn muốn xây dựng một hiệu sách phân cấp. Bạn viết hướng dẫn để giúp tác giả thêm sách mới, gửi liên kết tải xuống sách điện tử khi khách hàng thực hiện giao dịch, v.v.

Theo bigcoinvietnam Hợp đồng thông minh không chỉ lưu trữ các điều kiện mà còn cả dữ liệu. Một hợp đồng thông minh của một hiệu sách phân cấp trong chính nó lưu trữ danh sách sách, mua hàng, v.v.

 

Tuy nhiên, chúng ta nên thừa nhận những hạn chế của hợp đồng thông minh. Một số hệ thống cần sự hỗ trợ của con người, máy tính không thể xử lý nó. Trong thế giới thực triển khai hợp đồng thông minh thì không dễ. Hợp đồng thông minh sau khi đưa ra thì không thể thay đổi, những sai lầm ngớ ngẩn có thể gây tốn kém.

10. Lập trình Blockchain hợp đồng thông minh trên Ethereum

Chúng ta sẽ xây dựng một hợp đồng thông minh đơn giản để lưu trữ và truy xuất điểm của học sinh. Chúng ta sẽ mã hóa hợp đồng trong solodity. Đây là github repo.

 

pragma solidity ^0.4.18;contract Grades{}

 

Dòng đầu tiên cho trình biên dịch biết chúng ta đang sử dụng phiên bản solidity nào. Sau đó, chúng ta xác định các loại hợp đồng.

Chúng ta cần lưu trữ hai thứ trong hợp đồng đó là, tên của học sinh và điểm số của họ. Do đó chúng ta sẽ tạo ra một mảng để lưu trữ tên học sinh và một mảng kết hợp để lưu trữ điểm số của họ.

 

pragma solidity ^0.4.18;contract Grades{mapping (bytes32 => string) public grades;
bytes32[] public studentList;}

 

Bây giờ, chúng ta sẽ tạo ra một cách mà qua đó chúng ta có thể gửi hợp đồng, một danh sách các tên học sinh. Chúng ta sẽ làm điều đó trong constructor.

 

pragma solidity ^0.4.18;contract Grades{mapping (bytes32 => string) public grades;
bytes32[] public studentList;function Grades(bytes32[] studentNames) public {
studentList = studentNames;
}}

 

Trong Solidity, chúng ta sẽ gọi hàm tạo chỉ một lần. Chúng ta sẽ chuyển tên học sinh như một đối số, sẽ được lưu trữ trong mảng studentList mà chúng ta đã khai báo trước đó.

Bây giờ, chúng ta cần viết một hàm để gán cho học sinh lớp của họ. Chúng ta cũng cần một chức năng khác để kiểm tra xem học sinh có hợp lệ hay không.

 

pragma solidity ^0.4.18;contract Grades{mapping (bytes32 => string) public grades;
bytes32[] public studentList;function Grades(bytes32[] studentNames) public {
studentList = studentNames;
}function giveGradeToStudent(bytes32 student, string grade) public {
require(validStudent(student));
grades[student] = grade;
}function validStudent(bytes32 student) view public returns (bool) {
for(uint i = 0; i < studentList.length; i++) {
if (studentList[i] == student) {
return true;
}
}
return false;
}}

 

Hàm “giveGradeToStudent” nhận hai đối số, tên học sinh và cấp lớp. Hàm require yêu cầu kiểm tra nếu hàm “validStudent” trả về true hoặc false. Nếu nó trả về false, thực thi sẽ bị hủy bỏ.

Cuối cùng, chúng ta cần viết một hàm để lấy điểm của một học sinh. Hàm “getGradeForStudent” nhận tên sinh viên làm đối số, trả về cấp tương ứng từ mảng kết hợp.

pragma solidity ^0.4.18;contract Grades{mapping (bytes32 => string) public grades;
bytes32[] public studentList;function Grades(bytes32[] studentNames) public {
studentList = studentNames;
}function giveGradeToStudent(bytes32 student, string grade) public {
require(validStudent(student));
grades[student] = grade;
}function validStudent(bytes32 student) view public returns (bool) {
for(uint i = 0; i < studentList.length; i++) {
if (studentList[i] == student) {
return true;
}
}
return false;
}function getGradeForStudent(bytes32 student) view public returns (string) {
require(validStudent(student));
return grades[student];
}}

Vì lợi ích của hướng dẫn này, bạn có thể triển khai điều này trên một blockchain cá nhân. Bạn có thể tạo bằng Ganache. Dưới đây là các lệnh để cài đặt và chạy ganache.

npm install ganache-cli web3@0.20.3 solc
node_modules/.bin/ganache-cli

 Giữ cho ganache chạy, trên một thiết bị cuối mới, chúng tôi sẽ triển khai hợp đồng thông minh của chúng tôi. Vui lòng lưu hợp đồng thông minh dưới dạng ‘Grades.sol’.

Hãy biên dịch code.

node
code = fs.readFileSync('Grades.sol').toString()

solc = require('solc')
compiledCode = solc.compile(code)

Bây giờ, hãy triển khai hợp đồng thông minh. Triển khai hợp đồng trên một blockchain sẽ làm bạn mất tiền, đây là phần thưởng để thuê người tính toán cho bạn. Tuy nhiên, bạn không phải trả tiền ngay bây giờ bởi vì bạn đang triển khai trên một blockchain cá nhân và đó là tài nguyên của bạn đang được sử dụng. Bạn sẽ phải trả tiền khi bạn triển khai hợp đồng trên blockchain Ethereum công cộng.

Web3 = require('web3')web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));abiDefinition = JSON.parse(compiledCode.contracts[':Grades'].interface)GradesContract = web3.eth.contract(abiDefinition)byteCode = compiledCode.contracts[':Grades'].bytecodedeployedContract = GradesContract.new(['John','James'],{data: byteCode, from: web3.eth.accounts[0], gas: 4700000})

Bây giờ hãy gọi các chức năng của chúng ta để cung cấp cho lớp 'A +' cho học sinh John. Sau đó, chúng ta sẽ kiểm tra xem nó có được cập nhật hay không bằng cách sử dụng chức năng 'getGradeForStudent'.

deployedContract.giveGradeToStudent('John', 'A+', {from: web3.eth.accounts[0]})deployedContract.getGradeForStudent.call('John')
'A+'

The Way Ahead

Bạn có thể có được sự hiểu biết sâu sắc về cách viết các hợp đồng thông minh Ethereum trong các trang web sau đây.

CryptoZombie

Bạn không phải tải xuống bất kỳ thứ gì, bạn có thể viết mã trên trình biên dịch tương tác của họ. Bạn sẽ tìm hiểu các khái niệm về lập trình solidity bằng cách xây dựng một trò chơi. Hoàn toàn miễn phí.

Zastrin

Zastrin có cả khóa học miễn phí và trả phí. Mahesh Murthy  bao gồm tất cả các khía cạnh quan trọng. Họ thậm chí còn dạy bạn xây dựng một thị trường phi tập trung tương tự như eBay.

Biên soạn:  https://bigcoinvietnam.com/

Chia sẻ  
  
  
  
100% Rating
Điểm: 5 / 5
2 Bình chọn

Charlotte

Hy vọng các bạn sẽ có thêm nhiều thông tin bổ ích về cộng đồng crypto từ các bài dịch của team dịch bigcoinvietnam.com!

Bài viết liên quan

Bigcoin Việt Nam - Phân tích đầu tư Bitcoin, Ethereum, đầu tư ICO theo 39 tiêu chí phân tích công nghệ