Cuốn sách “Tạo hợp đồng thông minh vững chắc cho chuỗi khối Ethereum. Hướng dẫn thực hành"

Cuốn sách “Tạo hợp đồng thông minh vững chắc cho chuỗi khối Ethereum. Hướng dẫn thực hành"
Trong hơn một năm, tôi đã nghiên cứu cuốn sách “Tạo hợp đồng thông minh vững chắc cho chuỗi khối Ethereum. Hướng dẫn thực hành", và bây giờ tác phẩm này đã được hoàn thành, và cuốn sách được xuất bản và có sẵn trong Lít.

Tôi hy vọng cuốn sách của tôi sẽ giúp bạn nhanh chóng bắt đầu tạo các liên hệ thông minh Solidity và các DApp được phân phối cho chuỗi khối Ethereum. Nó bao gồm 12 bài học với các nhiệm vụ thực tế. Sau khi hoàn thành chúng, người đọc sẽ có thể tạo các nút Ethereum cục bộ của riêng mình, xuất bản các hợp đồng thông minh và gọi các phương thức của chúng, trao đổi dữ liệu giữa thế giới thực và các hợp đồng thông minh bằng cách sử dụng các oracle cũng như làm việc với mạng gỡ lỗi thử nghiệm Rinkeby.

Cuốn sách được gửi đến tất cả những ai quan tâm đến các công nghệ tiên tiến trong lĩnh vực blockchain và muốn nhanh chóng có được kiến ​​thức cho phép họ làm những công việc thú vị và đầy hứa hẹn.

Dưới đây bạn sẽ tìm thấy mục lục và chương đầu tiên của cuốn sách (cũng trên lít các phần của cuốn sách có sẵn). Tôi hy vọng nhận được phản hồi, ý kiến ​​​​và đề xuất. Tôi sẽ cố gắng tính đến tất cả những điều này khi chuẩn bị ấn bản tiếp theo của cuốn sách.

Mục lụcGiới thiệuCuốn sách của chúng tôi dành cho những ai không chỉ muốn hiểu các nguyên tắc của chuỗi khối Ethereum mà còn muốn đạt được các kỹ năng thực tế trong việc tạo DApp phân tán bằng ngôn ngữ lập trình Solidity cho mạng này.

Tốt hơn hết là không chỉ đọc cuốn sách này mà còn làm việc với nó, thực hiện các nhiệm vụ thực tế được mô tả trong bài học. Để làm việc, bạn sẽ cần một máy tính cục bộ, máy chủ ảo hoặc đám mây được cài đặt hệ điều hành Debian hoặc Ubuntu. Bạn cũng có thể sử dụng Raspberry Pi để thực hiện nhiều tác vụ.

Ở buổi học đầu tiên Chúng ta sẽ xem xét các nguyên tắc hoạt động của chuỗi khối Ethereum và thuật ngữ cơ bản, đồng thời nói về nơi có thể sử dụng chuỗi khối này.

mục tiêu Bài học thứ hai — tạo một nút chuỗi khối Ethereum riêng tư để làm việc tiếp theo trong khóa học này trên máy chủ Ubuntu và Debian. Chúng ta sẽ xem xét các tính năng của việc cài đặt các tiện ích cơ bản, chẳng hạn như geth, đảm bảo hoạt động của nút blockchain của chúng ta, cũng như daemon lưu trữ dữ liệu phi tập trung.

bài học thứ ba sẽ hướng dẫn bạn cách thử nghiệm Ethereum trên máy vi tính Raspberry Pi rẻ tiền. Bạn sẽ cài đặt hệ điều hành (OS) Rasberian trên Raspberry Pi, tiện ích Geth hỗ trợ nút blockchain và daemon lưu trữ dữ liệu phi tập trung Swarm.

Bài học thứ tư dành riêng cho các tài khoản và đơn vị tiền điện tử trên mạng Ethereum, cũng như các cách chuyển tiền từ tài khoản này sang tài khoản khác từ bảng điều khiển Geth. Bạn sẽ tìm hiểu cách tạo tài khoản, bắt đầu các giao dịch chuyển tiền cũng như nhận được trạng thái và biên nhận giao dịch.

Trong bài học thứ năm Bạn sẽ làm quen với các hợp đồng thông minh trên mạng Ethereum và tìm hiểu về cách thực thi chúng bằng máy ảo Ethereum.

Bạn sẽ tạo và xuất bản hợp đồng thông minh đầu tiên của mình trên mạng riêng Ethereum và tìm hiểu cách gọi các chức năng của nó. Để làm điều này, bạn sẽ sử dụng Remix Solidity IDE. Bạn cũng sẽ học cách cài đặt và sử dụng trình biên dịch lô solc.
Chúng tôi cũng sẽ nói về cái gọi là Giao diện nhị phân ứng dụng (ABI) và hướng dẫn bạn cách sử dụng nó.

Bài học thứ sáu được dành riêng để tạo các tập lệnh JavaScript chạy Node.js và thực hiện các hoạt động với hợp đồng thông minh Solidity.

Bạn sẽ cài đặt Node.js trên Ubuntu, Debian và Rasberian OS, viết tập lệnh để xuất bản hợp đồng thông minh trên mạng cục bộ Ethereum và gọi các chức năng của nó.

Ngoài ra, bạn sẽ tìm hiểu cách chuyển tiền giữa các tài khoản thông thường bằng cách sử dụng tập lệnh cũng như ghi có vào tài khoản hợp đồng thông minh.

Trong bài học thứ bảy Bạn sẽ tìm hiểu cách cài đặt và sử dụng khung Truffle, phổ biến trong số các nhà phát triển hợp đồng thông minh Solidity. Bạn sẽ tìm hiểu cách tạo tập lệnh JavaScript gọi các hàm hợp đồng bằng mô-đun hợp đồng truffle và kiểm tra hợp đồng thông minh của bạn bằng Truffle.

Bài học thứ tám dành riêng cho các kiểu dữ liệu Solidity. Bạn sẽ viết các hợp đồng thông minh hoạt động với các loại dữ liệu như số nguyên có dấu và không dấu, số có dấu, chuỗi, địa chỉ, biến phức tạp, mảng, bảng liệt kê, cấu trúc và từ điển.

Trong bài học thứ chín Bạn sẽ tiến một bước gần hơn đến việc tạo hợp đồng thông minh cho mạng chính Ethereum. Bạn sẽ tìm hiểu cách xuất bản hợp đồng bằng Truffle trên mạng riêng Geth, cũng như trên mạng thử nghiệm Rinkeby. Việc gỡ lỗi hợp đồng thông minh trên mạng Rinkeby rất hữu ích trước khi xuất bản nó trên mạng chính - hầu hết mọi thứ đều có thật ở đó, nhưng miễn phí.

Là một phần của bài học, bạn sẽ tạo một nút mạng thử nghiệm Rinkeby, cấp vốn cho nút đó và xuất bản một hợp đồng thông minh.

Bài học 10 dành riêng cho việc lưu trữ dữ liệu phân tán Ethereum Swarm. Bằng cách sử dụng bộ nhớ phân tán, bạn tiết kiệm được việc lưu trữ lượng lớn dữ liệu trên chuỗi khối Ethereum.

Trong hướng dẫn này, bạn sẽ tạo một bộ lưu trữ Swarm cục bộ, các thao tác ghi và đọc trên tệp cũng như thư mục tệp. Tiếp theo, bạn sẽ tìm hiểu cách làm việc với cổng Swarm công cộng, viết tập lệnh để truy cập Swarm từ Node.js, cũng như sử dụng mô-đun Perl Net::Ethereum::Swarm.

Mục tiêu bài học 11 — bậc thầy làm việc với các hợp đồng thông minh Solidity bằng ngôn ngữ lập trình Python phổ biến và khung Web3.py. Bạn sẽ cài đặt khung, viết tập lệnh để biên dịch và xuất bản hợp đồng thông minh cũng như gọi các chức năng của nó. Trong trường hợp này, Web3.py sẽ được sử dụng riêng lẻ và kết hợp với môi trường phát triển tích hợp Truffle.

Ở bài học 12 bạn sẽ học cách chuyển dữ liệu giữa các hợp đồng thông minh và thế giới thực bằng cách sử dụng các oracle. Điều này sẽ hữu ích khi bạn nhận dữ liệu từ các trang Web, thiết bị IoT, các thiết bị và cảm biến khác nhau cũng như gửi dữ liệu từ hợp đồng thông minh đến các thiết bị này. Trong phần thực hành của bài học, bạn sẽ tạo một oracle và một hợp đồng thông minh nhận tỷ giá hối đoái hiện tại giữa USD và rúp từ trang web của Ngân hàng Trung ương Liên bang Nga.

Bài 1. Sơ lược về blockchain và mạng lưới EthereumMục đích của bài học: làm quen với các nguyên tắc hoạt động của chuỗi khối Ethereum, các lĩnh vực ứng dụng và thuật ngữ cơ bản của nó.
Nhiệm vụ thực tiễn: không được đề cập trong bài học này.

Hầu như không có nhà phát triển phần mềm nào ngày nay không nghe nói gì về công nghệ blockchain (Blockchain), tiền điện tử (Tiền điện tử hoặc Tiền điện tử), Bitcoin (Bitcoin), cung cấp tiền xu ban đầu (ICO, cung cấp tiền xu ban đầu), hợp đồng thông minh (Hợp đồng thông minh), cũng như các khái niệm, thuật ngữ khác liên quan đến blockchain.

Công nghệ chuỗi khối mở ra thị trường mới và tạo việc làm cho các lập trình viên. Nếu bạn hiểu tất cả sự phức tạp của công nghệ tiền điện tử và công nghệ hợp đồng thông minh, thì bạn sẽ không gặp vấn đề gì khi áp dụng kiến ​​thức này vào thực tế.

Phải nói rằng có rất nhiều suy đoán xung quanh tiền điện tử và chuỗi khối. Chúng tôi sẽ bỏ qua các cuộc thảo luận về những thay đổi trong tỷ giá tiền điện tử, việc tạo ra các kim tự tháp, sự phức tạp của luật pháp về tiền điện tử, v.v. Trong khóa đào tạo của chúng tôi, chúng tôi sẽ tập trung chủ yếu vào các khía cạnh kỹ thuật của việc áp dụng hợp đồng thông minh của chuỗi khối Ethereum (Ethereum, Ether) và phát triển cái gọi là ứng dụng phi tập trung (Ứng dụng phân tán, DApp).

Blockchain là gì

Blockchain (Block Chain) là một chuỗi các khối dữ liệu được kết nối với nhau theo một cách nhất định. Ở đầu chuỗi có khối đầu tiên, được gọi là khối chính (khối khởi nguồn) hoặc khối khởi nguồn. Tiếp theo là cái thứ hai, rồi cái thứ ba, v.v.

Tất cả các khối dữ liệu này được tự động sao chép trên nhiều nút của mạng blockchain. Điều này đảm bảo lưu trữ phi tập trung dữ liệu blockchain.
Bạn có thể hình dung hệ thống blockchain như một số lượng lớn các nút (máy chủ vật lý hoặc ảo) được kết nối trong mạng và sao chép tất cả các thay đổi trong chuỗi khối dữ liệu. Nó giống như một máy tính nhiều máy chủ khổng lồ và các nút của một máy tính (máy chủ) như vậy có thể nằm rải rác trên khắp thế giới. Và bạn cũng có thể thêm máy tính của mình vào mạng blockchain.

Cơ sở dữ liệu phân tán

Một blockchain có thể được coi là một cơ sở dữ liệu phân tán được sao chép trên tất cả các nút của mạng blockchain. Về lý thuyết, blockchain sẽ hoạt động miễn là có ít nhất một nút hoạt động, lưu trữ tất cả các khối của blockchain.

Sổ đăng ký dữ liệu phân tán

Blockchain có thể được coi là một sổ cái phân tán chứa dữ liệu và hoạt động (giao dịch). Một tên khác cho sổ đăng ký như vậy là sổ cái.

Dữ liệu có thể được thêm vào sổ cái phân tán nhưng không thể thay đổi hoặc xóa dữ liệu. Đặc biệt, điều không thể này đạt được bằng cách sử dụng các thuật toán mã hóa, các thuật toán đặc biệt để thêm các khối vào chuỗi và lưu trữ dữ liệu phi tập trung.

Khi thêm khối và thực hiện các hoạt động (giao dịch), khóa riêng và khóa chung sẽ được sử dụng. Họ hạn chế người dùng blockchain bằng cách chỉ cấp cho họ quyền truy cập vào khối dữ liệu của riêng họ.

Giao dịch

Blockchain lưu trữ thông tin về các hoạt động (giao dịch) theo khối. Đồng thời, các giao dịch cũ, đã hoàn thành không thể được khôi phục hoặc thay đổi. Các giao dịch mới được lưu trữ trong các khối mới được thêm vào.

Bằng cách này, toàn bộ lịch sử giao dịch có thể được ghi lại không thay đổi trên blockchain. Do đó, blockchain có thể được sử dụng, ví dụ, để lưu trữ an toàn các giao dịch ngân hàng, thông tin bản quyền, lịch sử thay đổi chủ sở hữu tài sản, v.v.

Chuỗi khối Ethereum chứa cái gọi là trạng thái hệ thống. Khi các giao dịch được thực hiện, trạng thái sẽ thay đổi từ trạng thái ban đầu sang trạng thái hiện tại. Các giao dịch được ghi lại theo khối.

Chuỗi khối công khai và riêng tư

Cần lưu ý ở đây rằng mọi điều được nói chỉ đúng với cái gọi là mạng blockchain công cộng, mạng này không thể bị kiểm soát bởi bất kỳ cá nhân hoặc tổ chức pháp lý, cơ quan chính phủ hoặc chính phủ nào.
Cái gọi là mạng blockchain riêng nằm dưới sự kiểm soát hoàn toàn của người tạo ra chúng và mọi thứ đều có thể xảy ra ở đó, chẳng hạn như thay thế hoàn toàn tất cả các khối của chuỗi.

Ứng dụng thực tế của blockchain

Blockchain có thể hữu ích cho việc gì?

Tóm lại, blockchain cho phép bạn thực hiện các giao dịch (giao dịch) một cách an toàn giữa những người hoặc công ty không tin tưởng lẫn nhau. Dữ liệu được ghi trong blockchain (giao dịch, dữ liệu cá nhân, tài liệu, chứng chỉ, hợp đồng, hóa đơn, v.v.) không thể bị làm sai lệch hoặc thay thế sau khi ghi lại. Do đó, dựa trên blockchain, có thể tạo ra các cơ quan đăng ký phân phối đáng tin cậy của nhiều loại tài liệu chẳng hạn.

Tất nhiên, bạn biết rằng các hệ thống tiền điện tử đang được tạo ra trên cơ sở chuỗi khối, được thiết kế để thay thế tiền giấy thông thường. Tiền giấy còn được gọi là fiat (từ Fiat Money).
Blockchain đảm bảo việc lưu trữ và tính bất biến của các giao dịch được ghi lại trong các khối, đó là lý do tại sao nó có thể được sử dụng để tạo ra các hệ thống tiền điện tử. Nó chứa toàn bộ lịch sử chuyển tiền điện tử giữa những người dùng (tài khoản) khác nhau và mọi hoạt động đều có thể được theo dõi.

Mặc dù các giao dịch trong hệ thống tiền điện tử có thể ẩn danh, việc rút tiền điện tử và đổi nó lấy tiền định danh thường dẫn đến việc tiết lộ danh tính của chủ sở hữu tài sản tiền điện tử.

Cái gọi là hợp đồng thông minh, là phần mềm chạy trên mạng Ethereum, cho phép bạn tự động hóa quá trình kết thúc giao dịch và giám sát việc thực hiện chúng. Điều này đặc biệt hiệu quả nếu thanh toán cho giao dịch được thực hiện bằng tiền điện tử Ether.

Ví dụ: chuỗi khối Ethereum và hợp đồng thông minh Ethereum được viết bằng ngôn ngữ lập trình Solidity có thể được sử dụng trong các lĩnh vực sau:

  • một giải pháp thay thế cho việc công chứng văn bản;
  • lưu trữ sổ đăng ký đối tượng bất động sản và thông tin về các giao dịch với đối tượng bất động sản;
  • lưu trữ thông tin bản quyền về sở hữu trí tuệ (sách, hình ảnh, tác phẩm âm nhạc, v.v.);
  • tạo ra các hệ thống bỏ phiếu độc lập;
  • tài chính và ngân hàng;
  • logistics trên quy mô quốc tế, theo dõi quá trình vận chuyển hàng hóa;
  • lưu trữ dữ liệu cá nhân tương tự như hệ thống chứng minh nhân dân;
  • giao dịch an toàn trong lĩnh vực thương mại;
  • lưu trữ kết quả khám bệnh cũng như lịch sử các thủ tục theo quy định

Các vấn đề với chuỗi khối

Nhưng, tất nhiên, không phải mọi thứ đều đơn giản như bạn tưởng!

Có vấn đề với việc xác minh dữ liệu trước khi thêm dữ liệu vào blockchain (ví dụ: chúng có phải là giả không?), vấn đề về bảo mật của hệ thống và phần mềm ứng dụng được sử dụng để hoạt động với blockchain, vấn đề về khả năng sử dụng các phương pháp kỹ thuật xã hội để đánh cắp quyền truy cập đến ví tiền điện tử, v.v. .P.

Một lần nữa, nếu chúng ta không nói về một blockchain công khai, các nút của nó nằm rải rác trên toàn thế giới, mà là về một blockchain riêng tư thuộc về một cá nhân hoặc tổ chức, thì mức độ tin cậy ở đây sẽ không cao hơn mức độ tin cậy ở người này hoặc tổ chức này.

Cũng cần lưu ý rằng dữ liệu được ghi trong blockchain sẽ có sẵn cho tất cả mọi người. Theo nghĩa này, blockchain (đặc biệt là công khai) không phù hợp để lưu trữ thông tin bí mật. Tuy nhiên, thực tế là thông tin trên blockchain không thể thay đổi có thể giúp ngăn chặn hoặc điều tra các loại hoạt động gian lận khác nhau.

Các ứng dụng phi tập trung Ethereum sẽ thuận tiện hơn nếu bạn trả tiền cho việc sử dụng chúng bằng tiền điện tử. Càng nhiều người sở hữu tiền điện tử hoặc sẵn sàng mua nó thì DApp và hợp đồng thông minh sẽ càng trở nên phổ biến hơn.

Các vấn đề phổ biến với blockchain cản trở ứng dụng thực tế của nó bao gồm tốc độ giới hạn khi thêm các khối mới và chi phí giao dịch tương đối cao. Nhưng công nghệ trong lĩnh vực này đang tích cực phát triển và người ta hy vọng rằng các vấn đề kỹ thuật sẽ được giải quyết theo thời gian.

Một vấn đề khác là các hợp đồng thông minh trên chuỗi khối Ethereum hoạt động trong môi trường biệt lập của máy ảo và không có quyền truy cập vào dữ liệu trong thế giới thực. Đặc biệt, chương trình hợp đồng thông minh không thể tự đọc dữ liệu từ các trang web hoặc bất kỳ thiết bị vật lý nào (cảm biến, danh bạ, v.v.) và cũng không thể xuất dữ liệu ra bất kỳ thiết bị bên ngoài nào. Chúng ta sẽ thảo luận về vấn đề này và cách giải quyết nó trong một bài học dành cho cái gọi là Oracles - trung gian thông tin của hợp đồng thông minh.

Ngoài ra còn có những hạn chế pháp lý. Ví dụ: ở một số quốc gia, việc sử dụng tiền điện tử làm phương tiện thanh toán bị cấm nhưng bạn có thể sở hữu nó như một loại tài sản kỹ thuật số, như chứng khoán. Những tài sản như vậy có thể được mua và bán trên sàn giao dịch. Trong mọi trường hợp, khi tạo một dự án hoạt động với tiền điện tử, bạn cần phải làm quen với luật pháp của quốc gia nơi dự án của bạn thuộc thẩm quyền.

Chuỗi blockchain được hình thành như thế nào

Như chúng tôi đã nói, blockchain là một chuỗi các khối dữ liệu đơn giản. Đầu tiên, khối đầu tiên của chuỗi này được hình thành, sau đó khối thứ hai được thêm vào chuỗi đó, v.v. Dữ liệu giao dịch được cho là được lưu trữ trong các khối và được thêm vào khối gần đây nhất.

Trong bộ lễ phục. 1.1, chúng tôi đã trình bày phiên bản đơn giản nhất của một chuỗi các khối, trong đó khối đầu tiên đề cập đến khối tiếp theo.

Cuốn sách “Tạo hợp đồng thông minh vững chắc cho chuỗi khối Ethereum. Hướng dẫn thực hành"
Cơm. 1.1. Chuỗi khối đơn giản

Tuy nhiên, với tùy chọn này, rất dễ giả mạo nội dung của bất kỳ khối nào trong chuỗi vì các khối không chứa bất kỳ thông tin nào để bảo vệ khỏi những thay đổi. Xem xét rằng blockchain dự định sẽ được sử dụng bởi những người và công ty mà giữa họ không có sự tin tưởng, chúng tôi có thể kết luận rằng phương pháp lưu trữ dữ liệu này không phù hợp với blockchain.

Hãy bắt đầu bảo vệ các khối khỏi hàng giả. Ở giai đoạn đầu tiên, chúng tôi sẽ cố gắng bảo vệ từng khối bằng tổng kiểm tra (Hình 1.2).

Cuốn sách “Tạo hợp đồng thông minh vững chắc cho chuỗi khối Ethereum. Hướng dẫn thực hành"
Cơm. 1.2. Thêm bảo vệ cho các khối này bằng tổng kiểm tra

Bây giờ kẻ tấn công không thể đơn giản thay đổi khối vì nó chứa tổng kiểm tra dữ liệu khối. Kiểm tra tổng kiểm tra sẽ cho thấy dữ liệu đã được thay đổi.

Để tính tổng kiểm tra, bạn có thể sử dụng một trong các hàm băm như MD-5, SHA-1, SHA-256, v.v. Hàm băm tính toán một giá trị (ví dụ: chuỗi văn bản có độ dài không đổi) bằng cách thực hiện các thao tác không thể đảo ngược trên một khối dữ liệu. Các hoạt động phụ thuộc vào loại hàm băm.

Ngay cả khi nội dung của khối dữ liệu thay đổi một chút thì giá trị băm cũng sẽ thay đổi. Bằng cách phân tích giá trị hàm băm, không thể xây dựng lại khối dữ liệu đã được tính toán.

Liệu sự bảo vệ như vậy có đủ không? Tiếc là không có.

Trong sơ đồ này, tổng kiểm tra (hàm băm) chỉ bảo vệ các khối riêng lẻ chứ không bảo vệ toàn bộ chuỗi khối. Biết thuật toán tính hàm băm, kẻ tấn công có thể dễ dàng thay thế nội dung của một khối. Ngoài ra, không có gì ngăn cản anh ta loại bỏ các khối khỏi chuỗi hoặc thêm các khối mới.

Để bảo vệ toàn bộ chuỗi, bạn cũng có thể lưu trữ trong mỗi khối, cùng với dữ liệu, hàm băm của dữ liệu từ khối trước đó (Hình 1.3).

Cuốn sách “Tạo hợp đồng thông minh vững chắc cho chuỗi khối Ethereum. Hướng dẫn thực hành"
Cơm. 1.3. Thêm hàm băm của khối trước vào khối dữ liệu

Trong sơ đồ này, để thay đổi một khối, bạn cần tính toán lại hàm băm của tất cả các khối tiếp theo. Có vẻ như, vấn đề là gì?

Trong các chuỗi khối thực, các khó khăn nhân tạo cũng được tạo ra để thêm các khối mới—các thuật toán yêu cầu nhiều tài nguyên máy tính được sử dụng. Xem xét rằng để thực hiện các thay đổi đối với một khối, bạn cần phải tính toán lại không chỉ khối này mà còn tất cả các khối tiếp theo, điều này sẽ cực kỳ khó thực hiện.

Chúng ta cũng hãy nhớ rằng dữ liệu blockchain được lưu trữ (sao chép) trên nhiều nút mạng, tức là. Lưu trữ phi tập trung được sử dụng. Và điều này làm cho việc giả mạo một khối trở nên khó khăn hơn nhiều, bởi vì những thay đổi phải được thực hiện đối với tất cả các nút mạng.

Vì các khối lưu trữ thông tin về khối trước đó nên có thể kiểm tra nội dung của tất cả các khối trong chuỗi.

chuỗi khối Ethereum

Chuỗi khối Ethereum là một nền tảng trên đó có thể tạo ra các DApp phân tán. Không giống như các nền tảng khác, Ethereum cho phép sử dụng cái gọi là hợp đồng thông minh (hợp đồng thông minh), được viết bằng ngôn ngữ lập trình Solidity.

Nền tảng này được tạo ra vào năm 2013 bởi Vitalik Buterin, người sáng lập Tạp chí Bitcoin và ra mắt vào năm 2015. Mọi thứ chúng tôi sẽ nghiên cứu hoặc làm trong khóa đào tạo của mình đều liên quan cụ thể đến hợp đồng thông minh chuỗi khối Ethereum và Solidity.

Khai thác hoặc cách tạo khối

Khai thác là một quá trình khá phức tạp và tốn nhiều tài nguyên để thêm các khối mới vào chuỗi blockchain chứ không phải “khai thác tiền điện tử”. Việc khai thác đảm bảo chức năng của blockchain, bởi vì chính quá trình này chịu trách nhiệm thêm các giao dịch vào chuỗi khối Ethereum.

Những người và tổ chức liên quan đến việc thêm khối được gọi là thợ mỏ.
Phần mềm chạy trên các nút khai thác cố gắng tìm tham số băm có tên Nonce cho khối cuối cùng để có được giá trị băm cụ thể do mạng chỉ định. Thuật toán băm Ethash được sử dụng trong Ethereum cho phép bạn chỉ nhận được giá trị Nonce thông qua tìm kiếm tuần tự.

Nếu nút khai thác tìm thấy giá trị Nonce chính xác thì đây được gọi là bằng chứng công việc (PoW, Proof-of-work). Trong trường hợp này, nếu một khối được thêm vào mạng Ethereum, người khai thác sẽ nhận được phần thưởng nhất định bằng loại tiền của mạng - Ether. Tại thời điểm viết bài, phần thưởng là 5 Ether, nhưng số tiền này sẽ giảm dần theo thời gian.

Do đó, những người khai thác Ethereum đảm bảo hoạt động của mạng bằng cách thêm các khối và nhận tiền điện tử cho việc này. Có rất nhiều thông tin trên internet về công cụ khai thác và khai thác, nhưng chúng tôi sẽ tập trung vào việc tạo các hợp đồng Solidity và DApp trên mạng Ethereum.

Tom tăt bai học

Trong bài học đầu tiên, bạn đã làm quen với blockchain và biết rằng nó là một chuỗi các khối được cấu tạo đặc biệt. Nội dung của các khối được ghi trước đó không thể thay đổi được vì điều này sẽ yêu cầu tính toán lại tất cả các khối tiếp theo trên nhiều nút mạng, đòi hỏi nhiều tài nguyên và thời gian.

Blockchain có thể được sử dụng để lưu trữ kết quả giao dịch. Mục đích chính của nó là tổ chức các giao dịch an toàn giữa các bên (cá nhân và tổ chức) mà không có sự tin tưởng. Bạn đã tìm hiểu về những lĩnh vực kinh doanh cụ thể và những lĩnh vực nào có thể sử dụng hợp đồng thông minh chuỗi khối Ethereum và Solidity. Đây là lĩnh vực ngân hàng, đăng ký quyền sở hữu, tài liệu, v.v.

Bạn cũng đã biết rằng nhiều vấn đề khác nhau có thể phát sinh khi sử dụng blockchain. Đây là các vấn đề về xác minh thông tin được thêm vào blockchain, tốc độ của blockchain, chi phí giao dịch, vấn đề trao đổi dữ liệu giữa hợp đồng thông minh và thế giới thực, cũng như các cuộc tấn công tiềm tàng của kẻ tấn công nhằm đánh cắp tiền điện tử từ tài khoản người dùng. .

Chúng tôi cũng đã nói ngắn gọn về việc khai thác như một quá trình thêm các khối mới vào chuỗi khối. Khai thác là cần thiết để hoàn thành giao dịch. Những người tham gia khai thác đảm bảo hoạt động của chuỗi khối và nhận phần thưởng bằng tiền điện tử cho việc này.

Bài 2. Chuẩn bị môi trường làm việc trên hệ điều hành Ubuntu và DebianLựa chọn hệ điều hành
Cài đặt các tiện ích cần thiết
Cài đặt Geth và Swarm trên Ubuntu
Cài đặt Geth và Swarm trên Debian
Chuẩn bị sơ bộ
Đang tải xuống bản phân phối Go
Đặt biến môi trường
Kiểm tra phiên bản Go
Cài đặt Geth và Swarm
Tạo một blockchain riêng tư
Đang chuẩn bị tệp Genesis.json
Tạo một thư mục cho công việc
Tạo một tài khoản
Bắt đầu khởi tạo nút
Tùy chọn khởi chạy nút
Kết nối với nút của chúng tôi
Quản lý khai thác và kiểm tra số dư
Tắt bảng điều khiển Geth
Tom tăt bai học

Bài 3. Chuẩn bị môi trường làm việc trên Raspberry Pi 3Chuẩn bị Raspberry Pi 3 để làm việc
Cài đặt Rasberian
Cài đặt bản cập nhật
Kích hoạt quyền truy cập SSH
Đặt địa chỉ IP tĩnh
Cài đặt các tiện ích cần thiết
Cài đặt Go
Đang tải xuống bản phân phối Go
Đặt biến môi trường
Kiểm tra phiên bản Go
Cài đặt Geth và Swarm
Tạo một blockchain riêng tư
Kiểm tra tài khoản và số dư của bạn
Tom tăt bai học

Bài 4. Tài khoản và chuyển tiền giữa các tài khoảnXem và thêm tài khoản
Xem danh sách tài khoản
Thêm tài khoản
tùy chọn lệnh tài khoản geth
Mật khẩu tài khoản
Tiền điện tử trong Ethereum
Đơn vị tiền tệ Ethereum
Chúng tôi xác định số dư hiện tại của tài khoản của chúng tôi
Chuyển tiền từ tài khoản này sang tài khoản khác
eth.sendPhương thức giao dịch
Xem trạng thái giao dịch
Biên nhận giao dịch
Tom tăt bai học

Bài 5. Xuất bản hợp đồng đầu tiên của bạnHợp đồng thông minh trong Ethereum
Thực thi hợp đồng thông minh
Máy ảo Ethereum
Môi trường phát triển tích hợp Remix Solidity IDE
Chạy biên dịch
Gọi hàm hợp đồng
Xuất bản hợp đồng trên mạng riêng
Lấy định nghĩa ABI và mã nhị phân hợp đồng
Công bố hợp đồng
Kiểm tra trạng thái giao dịch xuất bản hợp đồng
Gọi hàm hợp đồng
Giải pháp biên dịch hàng loạt
Cài đặt solc trên Ubuntu
Cài đặt solc trên Debian
Biên soạn hợp đồng HelloSol
Công bố hợp đồng
Cài đặt solc trên Rasberian
Tom tăt bai học

Bài 6. Hợp đồng thông minh và Node.jsCài đặt Node.js
Cài đặt trên Ubuntu
Cài đặt trên Debian
Cài đặt và chạy Ganache-cli
Cài đặt Web3
Cài đặt giải pháp
Cài đặt Node.js trên Rasberian
Tập lệnh để lấy danh sách tài khoản trong bảng điều khiển
Tập lệnh xuất bản hợp đồng thông minh
Khởi chạy và nhận thông số
Nhận các tùy chọn khởi chạy
Biên soạn hợp đồng
Bỏ chặn tài khoản của bạn
Đang tải ABI và mã nhị phân hợp đồng
Tính toán lượng gas cần thiết
Tạo một đối tượng và bắt đầu xuất bản hợp đồng
Chạy tập lệnh xuất bản hợp đồng
Gọi các chức năng hợp đồng thông minh
Có thể cập nhật hợp đồng thông minh đã xuất bản không?
Làm việc với Web3 phiên bản 1.0.x
Lấy danh sách tài khoản
Công bố hợp đồng
Gọi hàm hợp đồng
Chuyển tiền từ tài khoản này sang tài khoản khác
Chuyển tiền vào tài khoản hợp đồng
Cập nhật hợp đồng thông minh HelloSol
Tạo tập lệnh để xem số dư tài khoản của bạn
Thêm lệnh gọi hàm getBalance vào tập lệnh call_contract_get_promise.js
Chúng tôi nạp tiền vào tài khoản hợp đồng thông minh
Tom tăt bai học

Bài 7. Giới thiệu về TruffleCài đặt Truffle
Tạo dự án HelloSol
Tạo thư mục và tập tin dự án
Thư mục hợp đồng
Di chuyển danh mục
Kiểm tra thư mục
tập tin truffle-config.js
Biên soạn hợp đồng HelloSol
Bắt đầu xuất bản hợp đồng
Gọi các hàm hợp đồng HelloSol trong dấu nhắc Truffle
Gọi các hàm hợp đồng HelloSol từ tập lệnh JavaScript chạy Node.js
Cài đặt mô-đun hợp đồng truffle
Gọi các hàm hợp đồng getValue và getString
Gọi các hàm hợp đồng setValue và setString
Sửa đổi hợp đồng và xuất bản lại
Làm việc với Web3 phiên bản 1.0.x
Thực hiện các thay đổi đối với hợp đồng thông minh HelloSol
Tập lệnh gọi các phương thức hợp đồng
Thử nghiệm ở Truffle
Kiểm tra độ rắn
Kiểm tra JavaScript
Tom tăt bai học

Bài 8. Các kiểu dữ liệu SolidityHợp đồng học tập các loại dữ liệu
Các kiểu dữ liệu Boolean
Số nguyên không dấu và số nguyên có dấu
Số điểm cố định
địa chỉ
Các biến kiểu phức tạp
Mảng có kích thước cố định
Mảng động
Sự liệt kê
cấu trúc
Ánh xạ từ điển
Tom tăt bai học

Bài 9. Di chuyển hợp đồng sang mạng riêng và mạng RinkebyXuất bản hợp đồng từ Truffle lên mạng Geth riêng
Chuẩn bị một nút mạng riêng
Chuẩn bị hợp đồng làm việc
Biên dịch và di chuyển hợp đồng sang mạng Truffle
Bắt đầu di chuyển mạng cục bộ geth
Lấy hiện vật Truffle
Xuất bản hợp đồng từ Truffle lên mạng thử nghiệm Rinkeby
Chuẩn bị nút Geth để hoạt động với Rinkeby
Đồng bộ hóa nút
Thêm tài khoản
Nạp tiền vào tài khoản Rinkeby của bạn bằng ether
Khởi động di chuyển hợp đồng sang mạng Rinkeby
Xem thông tin hợp đồng trên mạng Rinkeby
Bảng điều khiển Truffle cho Mạng Rinkeby
Cách dễ dàng hơn để gọi các hàm hợp đồng
Gọi các phương thức hợp đồng bằng Node.js
Chuyển tiền giữa các tài khoản trong bảng điều khiển Truffle cho Rinkby
Tom tăt bai học

Bài 10. Lưu trữ dữ liệu phi tập trung của Ethereum SwarmEthereum Swarm hoạt động như thế nào?
Cài đặt và khởi chạy Swarm
Các thao tác với tập tin và thư mục
Tải tệp lên Ethereum Swarm
Đọc tệp từ Ethereum Swarm
Xem bảng kê khai của tệp đã tải lên
Đang tải thư mục với các thư mục con
Đọc một tập tin từ một thư mục đã tải xuống
Sử dụng cổng Swarm công cộng
Truy cập Swarm từ tập lệnh Node.js
Perl Net::Ethereum::Swarm mô-đun
Cài đặt mô-đun Net::Ethereum::Swarm
Viết và đọc dữ liệu
Tom tăt bai học

Bài 11. Web3.py framework làm việc với Ethereum trong PythonĐang cài đặt Web3.py
Cập nhật và cài đặt các gói cần thiết
Cài đặt mô-đun easysolc
Xuất bản hợp đồng bằng Web3.py
Biên soạn hợp đồng
Kết nối với nhà cung cấp
Thực hiện công bố hợp đồng
Lưu địa chỉ hợp đồng và abi trong một tập tin
Chạy tập lệnh xuất bản hợp đồng
Gọi các phương thức hợp đồng
Đọc địa chỉ và abi của hợp đồng từ tệp JSON
Kết nối với nhà cung cấp
Tạo đối tượng hợp đồng
Gọi các phương thức hợp đồng
Truffle và Web3.py
Tom tăt bai học

Bài học 12. Lời tiên triHợp đồng thông minh có thể tin cậy dữ liệu từ thế giới bên ngoài không?
Oracles là trung gian thông tin blockchain
Nguồn dữ liệu
Mã để thể hiện dữ liệu từ nguồn
Oracle để ghi lại tỷ giá hối đoái trong blockchain
USDRateHợp đồng Oracle
Cập nhật tỷ giá hối đoái trong hợp đồng thông minh
Sử dụng nhà cung cấp ổ cắm web
Đang chờ sự kiện RateUpdate
Xử lý sự kiện RateUpdate
Bắt đầu cập nhật dữ liệu trong hợp đồng thông minh
Tom tăt bai học

Nguồn: www.habr.com

Thêm một lời nhận xét