Chúng ta nên xây dựng một blockchain như thế nào?

Toàn bộ lịch sử nhân loại là một quá trình liên tục thoát khỏi xiềng xích và tạo ra những xiềng xích mới mạnh mẽ hơn. (Tác giả giấu tên)

Phân tích nhiều dự án blockchain (Bitshares, Hyperledger, Exonum, Ethereum, Bitcoin, v.v.), tôi hiểu rằng từ quan điểm kỹ thuật, chúng đều được xây dựng trên cùng một nguyên tắc. Blockchain gợi nhớ đến những ngôi nhà, mặc dù có nhiều kiểu dáng, kiểu trang trí và mục đích khác nhau nhưng vẫn có nền móng, tường, mái nhà, cửa sổ, cửa ra vào được kết nối với nhau theo những cách nhất định. Và nếu bạn hiểu các nguyên tắc cơ bản của thiết kế tòa nhà và biết các đặc tính của vật liệu được sử dụng, thì bạn có thể xác định mục đích dự định của một ngôi nhà cụ thể. Hiện nay, có một tình trạng phát sinh với blockchain mà ai cũng đã nghe nói đến nhưng ít người hiểu rõ về kiến ​​trúc và nguyên lý hoạt động. Do đó, có sự hiểu lầm về lý do và cách thức sử dụng công nghệ blockchain.

Trong bài viết này, chúng tôi sẽ phân tích các thuộc tính và nguyên tắc chung cho tất cả các chuỗi khối. Tiếp theo, hãy xem các vấn đề có thể được giải quyết bằng cách sử dụng chuỗi khối và để củng cố tài liệu, hãy xây dựng một chuỗi khối nhỏ nhưng thực sự trên trang web ảo của chúng ta!

Vì vậy, chúng ta hãy nhớ lại những vấn đề mà blockchain ban đầu đã giải quyết được.

Tôi chắc chắn rằng nhiều người sẽ nói về cơ sở dữ liệu phân tán, phi tập trung, công khai và bất biến. Nhưng tại sao tất cả điều này lại cần thiết?

Tôi thích bắt đầu nghiên cứu bất kỳ công nghệ nào bằng cách đọc các tiêu chuẩn, vì tất cả các bài báo và sách về chủ đề đang nghiên cứu đều dựa trên chúng. Nhưng hiện tại không có tiêu chuẩn blockchain; ISO chỉ tạo ra ủy ban cho sự phát triển của họ. Hiện tại, mỗi dự án blockchain công khai đều có tài liệu Sách trắng riêng, về cơ bản là một thông số kỹ thuật. Dự án blockchain đầu tiên được biết đến rộng rãi là mạng Bitcoin. Truy cập trang web chính thức của mạng và nhìn nơi tất cả bắt đầu.

Thử thách chuỗi khối

Vì vậy, nhiệm vụ mà blockchain giải quyết trong mạng tiên phong Bitcoin là thực hiện chuyển giao quyền sở hữu tài sản kỹ thuật số (tài sản) đáng tin cậy trong một môi trường không đáng tin cậy mà không cần qua trung gian. Ví dụ: trong mạng Bitcoin, tài sản kỹ thuật số là tiền kỹ thuật số bitcoin. Và tất cả các giải pháp kỹ thuật của Bitcoin và các blockchain khác đều nhằm giải quyết vấn đề này.

Các vấn đề mà blockchain giải quyết

Giả sử một tổ chức tài chính nào đó nói rằng họ đã xây dựng một mạng lưới trên toàn thế giới với sự trợ giúp của mạng lưới này có thể chuyển tiền cho bất kỳ người nào. Bạn sẽ tin cô ấy chứ? Nếu tổ chức này là Visa hoặc MasterCard, rất có thể bạn sẽ tin điều đó, nhưng nếu nói một cách tương đối là AnonymousWorldMoney, bạn có thể sẽ không tin. Tại sao? Nhưng bởi vì chúng tôi biết rất rõ hệ thống phân tán được các công ty tư nhân tạo ra như thế nào, nhằm mục đích gì và điều này có thể dẫn đến điều gì. Chúng ta hãy xem xét kỹ hơn các vấn đề của các hệ thống như vậy và cách giải quyết chúng bằng công nghệ blockchain.

Giả sử rằng trong AnonymousWorldMoney có điều kiện có các máy chủ có cơ sở dữ liệu và thật tốt nếu có một vài máy chủ ở các trung tâm dữ liệu khác nhau. Khi người gửi chuyển tiền, một giao dịch sẽ được đăng ký, giao dịch này sẽ được sao chép đến tất cả các máy chủ và tiền sẽ đến tay người nhận.

Chúng ta nên xây dựng một blockchain như thế nào?

Trong một thế giới lý tưởng, kế hoạch này hoạt động rất hiệu quả, nhưng trong thế giới của chúng ta lại nảy sinh những vấn đề sau:

  1. Một mặt là vấn đề xác định người tham gia và mặt khác là nhu cầu ẩn danh của các giao dịch. Những thứ kia. bạn cần chuyển tiền cho một người nhận cụ thể và theo cách mà không ai biết về giao dịch này ngoại trừ những người tham gia giao dịch. Các ngân hàng có số tài khoản và thẻ ngân hàng được liên kết với một cá nhân hoặc pháp nhân cụ thể và bí mật ngân hàng bảo vệ thông tin giao dịch. Và ai đảm bảo rằng AnonymousWorldMoney có điều kiện không sử dụng dữ liệu cá nhân và thông tin giao dịch cho mục đích riêng của mình?
  2. Làm thế nào để đảm bảo rằng người nhận nhận được chính xác số tiền đã được chuyển cho mình? Nói một cách tương đối, người gửi chuyển 100 USD và người nhận nhận được 10 USD. Người gửi đến văn phòng AnonymousWorldMoney với biên lai của mình và nhân viên bán hàng đưa ra phiên bản của anh ta, trong đó viết rằng người gửi chỉ chuyển 10 đô la.
  3. Vấn đề về một môi trường không đáng tin cậy, ví dụ như một trò lừa đảo có tên là chi tiêu gấp đôi. Một người tham gia vô đạo đức có thể chi tiêu số dư của mình nhiều lần cho đến khi khoản thanh toán được sao chép đến tất cả các máy chủ. định lý CAPTất nhiên, không ai hủy bỏ và cuối cùng sẽ đạt được thỏa thuận, nhưng ai đó sẽ không nhận được tiền cho các dịch vụ hoặc hàng hóa được cung cấp. Do đó, nếu không có sự tin tưởng hoàn toàn vào tổ chức thanh toán hoặc những người tham gia giao dịch, thì cần phải xây dựng một mạng lưới không dựa trên sự tin cậy mà dựa trên mật mã.
  4. Có điều kiện AnonymousWorldMoney có số lượng máy chủ hữu hạn có thể không hoạt động do vô ý hoặc do mục đích xấu.
  5. AnonymousWorldMoney sẽ nhận hoa hồng hữu hình của riêng mình.
  6. Khả năng kiểm soát. Trong quá trình hoạt động của Bitcoin, hóa ra mọi người không chỉ muốn chuyển tiền cho nhau mà còn muốn kiểm tra các điều kiện khác nhau cho giao dịch, lập trình kịch bản công việc, tự động thực hiện các hành động tùy theo điều kiện, v.v.

Blockchain giải quyết những vấn đề này như thế nào

  1. Việc nhận dạng người tham gia được thực hiện bằng cách sử dụng một cặp khóa: riêng tư và công khai, đồng thời thuật toán chữ ký số xác định duy nhất người gửi và người nhận, để ẩn danh tính của họ.
  2. Các giao dịch được tập hợp thành các khối, hàm băm của khối được tính toán và ghi vào khối tiếp theo. Trình tự băm ghi lại trong các khối này mang lại tên cho công nghệ blockchain và nó cũng khiến cho việc thay đổi/xóa các khối hoặc giao dịch riêng lẻ khỏi các khối là không thể được chú ý. Do đó, nếu một giao dịch được đưa vào blockchain, bạn có thể chắc chắn rằng dữ liệu của nó sẽ không thay đổi.
  3. Gian lận chi tiêu gấp đôi được ngăn chặn bằng cách đạt được sự đồng thuận của mạng về dữ liệu nào được coi là hợp lệ và dữ liệu nào cần loại bỏ. Trong mạng Bitcoin, sự đồng thuận đạt được bằng bằng chứng công việc (PoW).
  4. Độ tin cậy của mạng đạt được nhờ thực tế là blockchain là công khai, trong đó mỗi người tham gia có thể chạy nút riêng của họ, nhận bản sao hoàn chỉnh của blockchain và hơn nữa, bắt đầu kiểm tra tính chính xác của các giao dịch một cách độc lập. Cần lưu ý rằng các chuỗi khối hiện đại cho phép xây dựng không chỉ các chuỗi khối công khai (mở) mà còn cả các chuỗi khối riêng tư (đóng), cũng như việc sử dụng các sơ đồ kết hợp.
  5. Blockchain sẽ không hoàn toàn loại bỏ hoa hồng, bởi vì... bạn phải trả tiền cho những người hỗ trợ mạng, nhưng trong blockchain, nhu cầu về hoa hồng đã được chứng minh một cách thuyết phục đến mức không còn nghi ngờ gì về sự cần thiết của nó.
  6. Các chuỗi khối hiện đại có khả năng triển khai logic kinh doanh, trong chuỗi khối được gọi là Hợp đồng thông minh. Logic của hợp đồng thông minh được triển khai bằng nhiều ngôn ngữ cấp cao khác nhau.

Tiếp theo, chúng tôi sẽ xem xét các giải pháp này chi tiết hơn.

Kiến trúc chuỗi khối

Thành phần chuỗi khối

Mỗi người tham gia có thể khởi chạy nút riêng của họ với bản sao đầy đủ của blockchain (nút đầy đủ). Các nút đầy đủ có thể ghi lại các giao dịch trên blockchain được gọi là nút đồng thuận (nhân chứng) hoặc thợ mỏ (thợ mỏ). Các nút đầy đủ chỉ kiểm tra tính chính xác của giao dịch được gọi là nút kiểm tra (kiểm toán). Khách hàng nhẹ (máy khách nhẹ) không lưu trữ các bản sao đầy đủ của blockchain mà tương tác với mạng bằng các nút đầy đủ.
Hầu hết người dùng sử dụng ứng dụng khách nhẹ hoặc ví web để thực hiện giao dịch. Tất cả các nút được kết nối với nhau. Với bộ phần tử này, kiến ​​trúc mạng trở nên ổn định hơn:

Chúng ta nên xây dựng một blockchain như thế nào?

Vòng đời giao dịch

Hãy xem xét vòng đời giao dịch và chia nhỏ từng phần một:

Chúng ta nên xây dựng một blockchain như thế nào?

Công nghệ chuỗi khối

Chúng ta hãy tìm hiểu chi tiết hơn về các giải pháp kỹ thuật và mối liên hệ của chúng với nhau.

Nhận dạng

Mọi giao dịch blockchain phải được ký điện tử. Do đó, để hoàn thành giao dịch, mỗi người tham gia phải có một cặp khóa: riêng tư/công khai. Đôi khi một cặp chìa khóa được gọi là ví vì các khóa được liên kết duy nhất với địa chỉ kỹ thuật số và số dư duy nhất của người tham gia. Trên thực tế, khóa và địa chỉ chỉ là các chuỗi số trong các hệ thống số khác nhau. Ví dụ về khóa và địa chỉ ví:

Private key: 0a78194a8a893b8baac7c09b6a4a4b4b161b2f80a126cbb79bde231a4567420f
Public key: 0579b478952214d7cddac32ac9dc522c821a4489bc10aac3a81b9d1cd7a92e57ba
Address: 0x3814JnJpGnt5tB2GD1qfKP709W3KbRdfb27V

Để tạo chữ ký số trong chuỗi khối, một thuật toán dựa trên các đường cong elip được sử dụng: Thuật toán chữ ký số đường cong Elliptic (ECDSA). Để nó hoạt động, khóa riêng (số 256 bit) thường được lấy ngẫu nhiên. Số lượng tùy chọn khóa là 2 mũ 256, vì vậy chúng ta có thể nói về khả năng thực tế không thể khớp các giá trị của khóa riêng.

Tiếp theo, khóa chung được lấy từ khóa riêng bằng cách nhân giá trị của nó với tọa độ của một điểm nằm trên đường cong elip, dẫn đến tọa độ của một điểm mới trên cùng một đường cong. Hành động này đảm bảo rằng bạn có được cặp khóa phù hợp cho các giao dịch ký điện tử. Cuối cùng, địa chỉ ví được lấy từ khóa chung.

Có rất nhiều bài viết chi tiết về mật mã được sử dụng trong blockchain, ví dụ: Tóm tắt về Bitcoin – Mật mã học

Khóa riêng phải được bảo mật tuyệt đối và được giữ an toàn. Khóa công khai được mọi người biết đến. Nếu khóa riêng bị mất, quyền truy cập vào tài sản (đồng xu) sẽ không thể được khôi phục và số tiền sẽ bị mất vĩnh viễn. Do đó, nhiệm vụ lưu trữ an toàn các khóa riêng tư là vô cùng phù hợp, bởi vì Đây không phải là ngân hàng nơi bạn luôn có thể mang theo hộ chiếu và khôi phục tài khoản của mình. Có cả một ngành công nghiệp sản xuất cái gọi là ví tiền điện tử lạnh, tương tự như ổ đĩa flash:

Chúng ta nên xây dựng một blockchain như thế nào?

hoặc bạn có thể sử dụng các phương pháp đáng tin cậy hơn, ví dụ: dán giá trị của khóa riêng lên mã thông báo:

Chúng ta nên xây dựng một blockchain như thế nào?

Giao dịch

Thông tin chi tiết về cấu trúc giao dịch có thể được tìm thấy trong bài viết Tóm tắt về Bitcoin – Giao dịch. Điều quan trọng là chúng ta phải hiểu rằng mỗi giao dịch có ít nhất các dữ liệu sau:

From: 0x48C89c341C5960Ca2Bf3732D6D8a0F4f89Cc4368 - цифровой адрес отправителя
To: 0x367adb7894334678b90аfe7882a5b06f7fbc783a - цифровой адрес получателя
Value: 0.0001 - сумма транзакции
Transaction Hash: 0x617ede331e8a99f46a363b32b239542bb4006e4fa9a2727a6636ffe3eb095cef - хэш транзакции

Tiếp theo, giao dịch được ký bằng khóa riêng và gửi đi (xem chi tiết về hoạt động của giao thức Tóm tắt về Bitcoin-Giao thức) tới tất cả các nút trong chuỗi khối kiểm tra tính hợp lệ của giao dịch. Thuật toán xác minh giao dịch không tầm thường và bao gồm hai chục bước.

Khối giao dịch

Sau khi kiểm tra tính hợp lệ của các giao dịch, các nút sẽ tạo thành các khối từ chúng. Ngoài các giao dịch, hàm băm của khối trước đó và một số (bộ đếm không có lần) được ghi vào khối và hàm băm của khối hiện tại được tính bằng thuật toán SHA-256. Hàm băm phải được thiết lập các điều kiện phức tạp. Ví dụ: trong mạng Bitcoin, độ khó của hàm băm được tự động thay đổi 2 tuần một lần tùy thuộc vào sức mạnh của mạng để một khối được tạo khoảng 10 phút một lần. Độ phức tạp được xác định bởi điều kiện sau: hàm băm được tìm thấy phải nhỏ hơn số được xác định trước. Nếu điều kiện này không được đáp ứng thì 1 sẽ được thêm vào Nonce và công việc tính toán hàm băm được lặp lại. Để chọn một hàm băm, trường Nonce được sử dụng vì Đây là dữ liệu duy nhất trong khối có thể thay đổi được, phần còn lại không được thay đổi. Một hàm băm hợp lệ phải có một số số XNUMX đứng đầu nhất định, chẳng hạn như một trong các hàm băm thực:

000000000000000000000bf03212e7dd1176f52f816fa395fc9b93c44bc11f91

Việc tìm kiếm thành công hàm băm là bằng chứng về công việc đã được thực hiện (Proof-of-Work, PoW) cho mạng Bitcoin hoặc Ethereum. Quá trình tìm kiếm băm được gọi là khai thác, tương tự như khai thác vàng. Cái tên xác định khá chính xác bản chất của quá trình, bởi vì có một tìm kiếm tùy chọn đơn giản và nếu ai đó tìm thấy hàm băm phù hợp thì đây thực sự là một điều may mắn. Nó giống như việc tìm thấy một cục vàng thật trong hàng tấn đá thải. Phần thưởng khối hiện là 12.5 BTC và nếu bạn nhân nó với tỷ giá Bitcoin hiện tại là 3900 USD, bạn sẽ nhận được hơn một kg vàng nguyên chất. Có cái gì đó để chiến đấu!

Sau khi tìm thành công hàm băm, khối và chính hàm băm tìm thấy sẽ được ghi vào blockchain dưới dạng khối tiếp theo. Thông tin chi tiết về cấu trúc của các khối có thể được tìm thấy trong bài viết Tóm tắt về Bitcoin-Blockchain, và dưới đây là sơ đồ đơn giản hóa:

Chúng ta nên xây dựng một blockchain như thế nào?

Chuỗi khối bắt đầu bằng một khối chưa có hàm băm của khối trước đó. Chỉ có một khối như vậy trong blockchain và có tên riêng là khối Genesis. Các khối còn lại có cấu trúc giống nhau và chỉ khác nhau về số lượng giao dịch. Các giao dịch và khối thực sự hiện đang được tạo bằng Bitcoin hoặc Ethereum có thể được xem trong Khối thám hiểm.

Kích thước của các khối trong Bitcoin được giới hạn ở 1 MB và với lượng thông tin tối thiểu trong một giao dịch khoảng 200 byte, số lượng giao dịch tối đa trong một khối có thể là khoảng 6000. Nhân tiện, từ đây, theo dõi hiệu suất của Bitcoin, điều mà mọi người đều cười nhạo: một khối được tạo khoảng 10 phút một lần * 60 giây = 600 giây, mang lại hiệu suất chính thức khoảng 10 TPS. Mặc dù trên thực tế, đây không phải là năng suất mà là một thuật toán làm việc được thực hiện có chủ ý. Trong Ethereum, để cạnh tranh, họ chỉ đơn giản thực hiện thời gian tạo khối là 15 giây. và năng suất chính thức tăng vọt. Do đó, trong các blockchain sử dụng PoW làm sự đồng thuận, việc so sánh hiệu suất là vô nghĩa, bởi vì nó trực tiếp phụ thuộc vào độ phức tạp của phép tính bộ đệm, có thể được gán cho bất kỳ giá trị nào.

Nĩa

Ví dụ, điều gì sẽ xảy ra nếu một số nút tìm thấy các giá trị băm đáp ứng các điều kiện phức tạp nhưng có giá trị khác nhau (nói cách khác, chúng đi đến những sự đồng thuận khác nhau) và viết các khối vào blockchain? Hãy xem blockchain bảo vệ như thế nào trước tình huống này. Trong trường hợp này, cái gọi là fork xảy ra và blockchain có hai phiên bản của chuỗi:

Chúng ta nên xây dựng một blockchain như thế nào?

Chuyện gì xảy ra tiếp theo? Tiếp theo, một phần của mạng bắt đầu hoạt động trên khối N+2 từ một chuỗi và một phần từ chuỗi khác:

Chúng ta nên xây dựng một blockchain như thế nào?

Một trong những khối này sẽ được tìm thấy sớm hơn và gửi đến blockchain, sau đó, theo quy tắc, blockchain sẽ phải chuyển sang chuỗi dài hơn và hủy tất cả các giao dịch từ khối thay thế:

Chúng ta nên xây dựng một blockchain như thế nào?

Đồng thời, một tình huống có thể phát sinh khi giao dịch của người tham gia chỉ ở một trong các khối fork và đã bị hủy. Do đó, để chắc chắn rằng giao dịch mong muốn được ghi lại trong blockchain, có một khuyến nghị chung - trước khi tin tưởng vào giao dịch, bạn nên đợi cho đến khi một số khối tiếp theo được thêm vào blockchain. Các khuyến nghị về số lượng khối chờ cho các chuỗi khối khác nhau sẽ khác nhau. Ví dụ: đối với mạng Bitcoin tối thiểu là 2 khối, tối đa là 6.

Bức tranh tương tự với các nhánh khối sẽ được quan sát thấy trong cuộc tấn công được gọi là 51% - đây là khi một nhóm thợ mỏ cố gắng phát triển một chuỗi khối thay thế, tìm cách hủy chuỗi bằng các giao dịch gian lận của họ. Mặc dù hiện tại, thay vì gian lận, việc dành sức lực của mình cho việc khai thác trung thực sẽ có lợi hơn.

Đoàn kết

Để ghi lại một khối trên blockchain, mạng phải đạt được sự đồng thuận. Chúng ta hãy nhớ lại nhiệm vụ đạt được sự đồng thuận trong mạng truyền thông máy tính. Bài toán được đặt ra như là nhiệm vụ của các tướng Byzantine BFT (Khả năng chịu lỗi của Byzantine). Bỏ qua mô tả đẹp mắt về các vấn đề của quân đội Byzantine, vấn đề có thể được trình bày như sau: làm thế nào các nút mạng có thể đi đến kết quả chung nếu một số nút mạng có thể cố tình bóp méo chúng. Các thuật toán hiện tại để giải quyết vấn đề BFT cho thấy mạng có thể hoạt động chính xác nếu có ít hơn 1/3 số kẻ lừa đảo. Tại sao sự đồng thuận BFT không được áp dụng cho mạng Bitcoin? Tại sao cần phải sử dụng PoW? Có một số lý do:

  • BFT hoạt động tốt với một tập hợp nhỏ các nút cố định, nhưng trong một chuỗi khối công khai, số lượng nút là không thể đoán trước được và hơn nữa, các nút có thể được bật và tắt một cách ngẫu nhiên.
  • Cần phải thúc đẩy mọi người khởi chạy các nút blockchain. Để làm được điều này, mọi người phải được khen thưởng. Trong BFT chính thức không có gì để nhận phần thưởng, nhưng phần thưởng trong PoW là gì thì mọi người đều rõ ràng ở mức độ trực quan: về lượng điện mà bộ xử lý tiêu thụ trong quá trình tìm kiếm hàm băm khối.

Ngoài PoW, còn có một số sự đồng thuận khác được sử dụng trong các chuỗi khối hiện đại, ví dụ:

  • PoS (Bằng chứng cổ phần) - trên blockchain Hyperledger
  • DPoS (Bằng chứng cổ phần được ủy quyền) - trên blockchain BitShares
  • Các sửa đổi của BFT: SBFT (BFT đơn giản) và PBFT (BFT thực tế), ví dụ như trong blockchain ngoại lệ

Hãy tập trung một chút vào sự đồng thuận của PoS, bởi vì... PoS và các biến thể của nó phổ biến nhất trong các blockchain riêng tư. Tại sao lại ở riêng tư? Một mặt, các đặc tính của PoS tốt hơn so với PoW, bởi vì Để đạt được sự đồng thuận, cần ít tài nguyên máy tính hơn, điều đó có nghĩa là tốc độ ghi dữ liệu vào blockchain sẽ tăng lên. Nhưng mặt khác, PoS có nhiều cơ hội lừa đảo hơn nên để hóa giải điều này, tất cả những người tham gia blockchain đều phải biết rõ.

Sự đồng thuận PoS dựa trên việc lựa chọn một nút có thể ghi một khối với các giao dịch vào blockchain tùy thuộc vào số tiền trong tài khoản, hay nói đúng hơn là không phải trong tài khoản mà là trong tài sản thế chấp, tức là. Bạn càng có nhiều tiền làm tài sản thế chấp thì mạng càng có nhiều khả năng chọn nút của bạn để viết khối. Tiền đặt cọc sẽ không được trả lại nếu khối không hợp lệ. Điều này cung cấp sự bảo vệ chống lại gian lận. Có các biến thể sau của PoS:

  • Cơ chế đồng thuận Delegated PoS (DPoS) chia người tham gia thành “người bỏ phiếu” và “người xác nhận”. Người nắm giữ tiền xu (người tham gia bỏ phiếu) ủy quyền xác minh và ghi lại các giao dịch trên blockchain cho những người tham gia khác. Do đó, người xác thực thực hiện tất cả công việc tính toán và nhận được phần thưởng cho việc đó và sự hiện diện của những người tham gia bỏ phiếu đảm bảo tính trung thực của người xác thực, bởi vì chúng có thể được thay đổi bất cứ lúc nào.
  • Sự đồng thuận LPoS (Bằng chứng cổ phần cho thuê) cho phép bạn cho các nút khác thuê tiền của mình để chúng có cơ hội xác thực các khối tốt hơn. Cái đó. Bạn có thể nhận hoa hồng cho các giao dịch mà không cần tham gia xác minh giao dịch thực tế và khai thác khối.

Có một số sự đồng thuận khác chưa được sử dụng rộng rãi, tôi sẽ chỉ liệt kê chúng ở đây để biết thông tin và bạn có thể tìm thấy tổng quan về các thuật toán đồng thuận, chẳng hạn như trong bài viết: Thuật toán đồng thuận trong Blockchain.

  • PoET (Bằng chứng về thời gian đã trôi qua)
  • PoC (Bằng chứng năng lực)
  • PoB (Bằng chứng đốt cháy)
  • PoWeight (Bằng chứng về trọng lượng)
  • PoA (Bằng chứng hoạt động) – PoW + PoS
  • PoI (Bằng chứng nhập khẩu)

Độ tin cậy và mô hình triển khai của blockchain

Chuỗi khối công khai

Tính ổn định Công khai hoặc tên khác Blockchain không được phép Điều này đạt được bằng cách cho phép mọi người kết nối và xem thông tin hoặc thậm chí kết nối nút của riêng họ và niềm tin được xây dựng dựa trên sự đồng thuận của PoW.

Chuỗi khối riêng

Riêng hoặc Blockchain được phép riêng tư. Trong các chuỗi khối này, chỉ một nhóm người tham gia nhất định (tổ chức hoặc cá nhân) mới có quyền truy cập thông tin. Các chuỗi khối như vậy được xây dựng bởi các tổ chức với mục tiêu tăng lợi ích hoặc hiệu quả tổng thể. Độ tin cậy của chúng được đảm bảo bởi các mục tiêu chung của những người tham gia và thuật toán đồng thuận PoS và BFT.

Hiệp hội Blockchain

đó Hiệp hội hoặc Chuỗi khối được phép công khai. Đây là những chuỗi khối mà bất kỳ ai cũng có thể kết nối để xem, nhưng người tham gia chỉ có thể thêm thông tin hoặc kết nối nút của mình khi có sự cho phép của những người tham gia khác. Các chuỗi khối như vậy được các tổ chức xây dựng nhằm tăng cường niềm tin từ phía khách hàng hoặc người tiêu dùng sản phẩm hoặc toàn xã hội. Ở đây, độ tin cậy cũng đạt được nhờ sự tin cậy giữa những người tham gia và các thuật toán đồng thuận PoS và BFT giống nhau.

Hợp đồng thông minh

Các chuỗi khối được triển khai sau Bitcoin, ở mức độ này hay mức độ khác, đã bổ sung khả năng thực hiện các hợp đồng thông minh. Về cơ bản, hợp đồng thông minh là một giao dịch trong đó mã chương trình được đặt để thực thi. Hợp đồng thông minh trên mạng Ethereum được thực thi trong EVM (Máy ảo Ethereum). Để bắt đầu thực hiện một hợp đồng thông minh, nó phải được khởi chạy một cách rõ ràng bởi một giao dịch khác hoặc phải đáp ứng các điều kiện tiên quyết để thực hiện. Kết quả thực hiện hợp đồng thông minh cũng sẽ được ghi lại trong blockchain. Có thể nhận dữ liệu từ bên ngoài blockchain nhưng cực kỳ hạn chế.

Logic kinh doanh nào có thể được thực hiện bằng hợp đồng thông minh? Trên thực tế, không có nhiều thứ, chẳng hạn như kiểm tra các điều kiện sử dụng dữ liệu từ blockchain, thay đổi chủ sở hữu tài sản kỹ thuật số tùy thuộc vào các điều kiện này, ghi dữ liệu vào bộ lưu trữ vĩnh viễn trong blockchain. Logic được triển khai bằng ngôn ngữ cấp cao đặc biệt Solidity.

Một ví dụ điển hình về chức năng được triển khai bằng hợp đồng thông minh là việc phát hành token cho ICO. Ví dụ: tôi đã triển khai hợp đồng thông minh để phát hành 500 AlexToken khiêm tốn. Qua liên kết trong Etherscan

mã nguồn của hợp đồng thông minh bằng ngôn ngữ Solidity

pragma solidity ^0.4.23;
library SafeMath {
/**
* @dev Multiplies two numbers, throws on overflow.
**/
function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
if (a == 0) {
return 0;
}
c = a * b;
assert(c / a == b);
return c;
}
/**
* @dev Integer division of two numbers, truncating the quotient.
**/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// assert(b > 0); // Solidity automatically throws when dividing by 0
/**
* @title SafeMath
* @dev Math operations with safety checks that throw on error
*/
// uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return a / b;
}
/**
* @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
**/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
assert(b <= a);
return a - b;
}
/**
* @dev Adds two numbers, throws on overflow.
**/
function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
c = a + b;
assert(c >= a);
return c;
}
}
/**
* @title Ownable
* @dev The Ownable contract has an owner address, and provides basic authorization control
* functions, this simplifies the implementation of "user permissions".
**/
contract Ownable {
address public owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev The Ownable constructor sets the original `owner` of the contract to the sender account.
**/
constructor() public {
owner = msg.sender;
}
/**
* @dev Throws if called by any account other than the owner.
**/
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
/**
* @dev Allows the current owner to transfer control of the contract to a newOwner.
* @param newOwner The address to transfer ownership to.
**/
function transferOwnership(address newOwner) public onlyOwner {
require(newOwner != address(0));
emit OwnershipTransferred(owner, newOwner);
owner = newOwner;
}
}
/**
* @title ERC20Basic interface
* @dev Basic ERC20 interface
**/
contract ERC20Basic {
function totalSupply() public view returns (uint256);
function balanceOf(address who) public view returns (uint256);
function transfer(address to, uint256 value) public returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
}
/**
* @title ERC20 interface
* @dev see https://github.com/ethereum/EIPs/issues/20
**/
contract ERC20 is ERC20Basic {
function allowance(address owner, address spender) public view returns (uint256);
function transferFrom(address from, address to, uint256 value) public returns (bool);
function approve(address spender, uint256 value) public returns (bool);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
/**
* @title Basic token
* @dev Basic version of StandardToken, with no allowances.
**/
contract BasicToken is ERC20Basic {
using SafeMath for uint256;
mapping(address => uint256) balances;
uint256 totalSupply_;
/**
* @dev total number of tokens in existence
**/
function totalSupply() public view returns (uint256) {
return totalSupply_;
}
/**
* @dev transfer token for a specified address
* @param _to The address to transfer to.
* @param _value The amount to be transferred.
**/
function transfer(address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[msg.sender]);
balances[msg.sender] = balances[msg.sender].sub(_value);
balances[_to] = balances[_to].add(_value);
emit Transfer(msg.sender, _to, _value);
return true;
}
/**
* @dev Gets the balance of the specified address.
* @param _owner The address to query the the balance of.
* @return An uint256 representing the amount owned by the passed address.
**/
function balanceOf(address _owner) public view returns (uint256) {
return balances[_owner];
}
}
contract StandardToken is ERC20, BasicToken {
mapping (address => mapping (address => uint256)) internal allowed;
/**
* @dev Transfer tokens from one address to another
* @param _from address The address which you want to send tokens from
* @param _to address The address which you want to transfer to
* @param _value uint256 the amount of tokens to be transferred
**/
function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[_from]);
require(_value <= allowed[_from][msg.sender]);
balances[_from] = balances[_from].sub(_value);
balances[_to] = balances[_to].add(_value);
allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
emit Transfer(_from, _to, _value);
return true;
}
/**
* @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
*
* Beware that changing an allowance with this method brings the risk that someone may use both the old
* and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
* race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
* @param _spender The address which will spend the funds.
* @param _value The amount of tokens to be spent.
**/
function approve(address _spender, uint256 _value) public returns (bool) {
allowed[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
return true;
}
/**
* @dev Function to check the amount of tokens that an owner allowed to a spender.
* @param _owner address The address which owns the funds.
* @param _spender address The address which will spend the funds.
* @return A uint256 specifying the amount of tokens still available for the spender.
**/
function allowance(address _owner, address _spender) public view returns (uint256) {
return allowed[_owner][_spender];
}
/**
* @dev Increase the amount of tokens that an owner allowed to a spender.
*
* approve should be called when allowed[_spender] == 0. To increment
* allowed value is better to use this function to avoid 2 calls (and wait until
* the first transaction is mined)
* From MonolithDAO Token.sol
* @param _spender The address which will spend the funds.
* @param _addedValue The amount of tokens to increase the allowance by.
**/
function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
/**
* @dev Decrease the amount of tokens that an owner allowed to a spender.
*
* approve should be called when allowed[_spender] == 0. To decrement
* allowed value is better to use this function to avoid 2 calls (and wait until
* the first transaction is mined)
* From MonolithDAO Token.sol
* @param _spender The address which will spend the funds.
* @param _subtractedValue The amount of tokens to decrease the allowance by.
**/
function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
uint oldValue = allowed[msg.sender][_spender];
if (_subtractedValue > oldValue) {
allowed[msg.sender][_spender] = 0;
} else {
allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
}
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
}
/**
* @title Configurable
* @dev Configurable varriables of the contract
**/
contract Configurable {
uint256 public constant cap = 1000000000*10**18;
uint256 public constant basePrice = 100*10**18; // tokens per 1 ether
uint256 public tokensSold = 0;
uint256 public constant tokenReserve = 500000000*10**18;
uint256 public remainingTokens = 0;
}
/**
* @title CrowdsaleToken 
* @dev Contract to preform crowd sale with token
**/
contract CrowdsaleToken is StandardToken, Configurable, Ownable {
/**
* @dev enum of current crowd sale state
**/
enum Stages {
none,
icoStart, 
icoEnd
}
Stages currentStage;
/**
* @dev constructor of CrowdsaleToken
**/
constructor() public {
currentStage = Stages.none;
balances[owner] = balances[owner].add(tokenReserve);
totalSupply_ = totalSupply_.add(tokenReserve);
remainingTokens = cap;
emit Transfer(address(this), owner, tokenReserve);
}
/**
* @dev fallback function to send ether to for Crowd sale
**/
function () public payable {
require(currentStage == Stages.icoStart);
require(msg.value > 0);
require(remainingTokens > 0);
uint256 weiAmount = msg.value; // Calculate tokens to sell
uint256 tokens = weiAmount.mul(basePrice).div(1 ether);
uint256 returnWei = 0;
if(tokensSold.add(tokens) > cap){
uint256 newTokens = cap.sub(tokensSold);
uint256 newWei = newTokens.div(basePrice).mul(1 ether);
returnWei = weiAmount.sub(newWei);
weiAmount = newWei;
tokens = newTokens;
}
tokensSold = tokensSold.add(tokens); // Increment raised amount
remainingTokens = cap.sub(tokensSold);
if(returnWei > 0){
msg.sender.transfer(returnWei);
emit Transfer(address(this), msg.sender, returnWei);
}
balances[msg.sender] = balances[msg.sender].add(tokens);
emit Transfer(address(this), msg.sender, tokens);
totalSupply_ = totalSupply_.add(tokens);
owner.transfer(weiAmount);// Send money to owner
}
/**
* @dev startIco starts the public ICO
**/
function startIco() public onlyOwner {
require(currentStage != Stages.icoEnd);
currentStage = Stages.icoStart;
}
/**
* @dev endIco closes down the ICO 
**/
function endIco() internal {
currentStage = Stages.icoEnd;
// Transfer any remaining tokens
if(remainingTokens > 0)
balances[owner] = balances[owner].add(remainingTokens);
// transfer any remaining ETH balance in the contract to the owner
owner.transfer(address(this).balance); 
}
/**
* @dev finalizeIco closes down the ICO and sets needed varriables
**/
function finalizeIco() public onlyOwner {
require(currentStage != Stages.icoEnd);
endIco();
}
}
/**
* @title LavevelToken 
* @dev Contract to create the Lavevel Token
**/
contract AlexToken is CrowdsaleToken {
string public constant name = "AlexToken";
string public constant symbol = "ALT";
uint32 public constant decimals = 18;
}

và biểu diễn nhị phân khi mạng nhìn thấy nó

60806040526000600355600060045533600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560146101000a81548160ff021916908360028111156200006f57fe5b0217905550620001036b019d971e4fe8401e74000000600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200024a6401000000000262000b1d179091906401000000009004565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620001986b019d971e4fe8401e740000006001546200024a6401000000000262000b1d179091906401000000009004565b6001819055506b033b2e3c9fd0803ce8000000600481905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6b019d971e4fe8401e740000006040518082815260200191505060405180910390a362000267565b600081830190508281101515156200025e57fe5b80905092915050565b611cb880620002776000396000f300608060405260043610610112576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146104c7578063095ea7b31461055757806318160ddd146105bc57806323b872dd146105e7578063313ce5671461066c578063355274ea146106a3578063518ab2a8146106ce57806366188463146106f957806370a082311461075e57806389311e6f146107b55780638da5cb5b146107cc578063903a3ef61461082357806395d89b411461083a578063a9059cbb146108ca578063bf5839031461092f578063c7876ea41461095a578063cbcb317114610985578063d73dd623146109b0578063dd62ed3e14610a15578063f2fde38b14610a8c575b60008060008060006001600281111561012757fe5b600560149054906101000a900460ff16600281111561014257fe5b14151561014e57600080fd5b60003411151561015d57600080fd5b600060045411151561016e57600080fd5b3494506101a7670de0b6b3a764000061019968056bc75e2d6310000088610acf90919063ffffffff16565b610b0790919063ffffffff16565b9350600092506b033b2e3c9fd0803ce80000006101cf85600354610b1d90919063ffffffff16565b111561024c576101f66003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b915061022e670de0b6b3a764000061022068056bc75e2d6310000085610b0790919063ffffffff16565b610acf90919063ffffffff16565b90506102438186610b3990919063ffffffff16565b92508094508193505b61026184600354610b1d90919063ffffffff16565b6003819055506102886003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b6004819055506000831115610344573373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156102dd573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35b610395846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a361045184600154610b1d90919063ffffffff16565b600181905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501580156104bf573d6000803e3d6000fd5b505050505050005b3480156104d357600080fd5b506104dc610b52565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561051c578082015181840152602081019050610501565b50505050905090810190601f1680156105495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561056357600080fd5b506105a2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b8b565b604051808215151515815260200191505060405180910390f35b3480156105c857600080fd5b506105d1610c7d565b6040518082815260200191505060405180910390f35b3480156105f357600080fd5b50610652600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c87565b604051808215151515815260200191505060405180910390f35b34801561067857600080fd5b50610681611041565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3480156106af57600080fd5b506106b8611046565b6040518082815260200191505060405180910390f35b3480156106da57600080fd5b506106e3611056565b6040518082815260200191505060405180910390f35b34801561070557600080fd5b50610744600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061105c565b604051808215151515815260200191505060405180910390f35b34801561076a57600080fd5b5061079f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112ed565b6040518082815260200191505060405180910390f35b3480156107c157600080fd5b506107ca611335565b005b3480156107d857600080fd5b506107e16113eb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561082f57600080fd5b50610838611411565b005b34801561084657600080fd5b5061084f6114ab565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561088f578082015181840152602081019050610874565b50505050905090810190601f1680156108bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108d657600080fd5b50610915600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114e4565b604051808215151515815260200191505060405180910390f35b34801561093b57600080fd5b50610944611703565b6040518082815260200191505060405180910390f35b34801561096657600080fd5b5061096f611709565b6040518082815260200191505060405180910390f35b34801561099157600080fd5b5061099a611716565b6040518082815260200191505060405180910390f35b3480156109bc57600080fd5b506109fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611726565b604051808215151515815260200191505060405180910390f35b348015610a2157600080fd5b50610a76600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611922565b6040518082815260200191505060405180910390f35b348015610a9857600080fd5b50610acd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119a9565b005b600080831415610ae25760009050610b01565b8183029050818382811515610af357fe5b04141515610afd57fe5b8090505b92915050565b60008183811515610b1457fe5b04905092915050565b60008183019050828110151515610b3057fe5b80905092915050565b6000828211151515610b4757fe5b818303905092915050565b6040805190810160405280600981526020017f416c6578546f6b656e000000000000000000000000000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610cc457600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d1157600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d9c57600080fd5b610ded826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e80826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f5182600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b601281565b6b033b2e3c9fd0803ce800000081565b60035481565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083111561116d576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611201565b6111808382610b3990919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561139157600080fd5b60028081111561139d57fe5b600560149054906101000a900460ff1660028111156113b857fe5b141515156113c557600080fd5b6001600560146101000a81548160ff021916908360028111156113e457fe5b0217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561146d57600080fd5b60028081111561147957fe5b600560149054906101000a900460ff16600281111561149457fe5b141515156114a157600080fd5b6114a9611b01565b565b6040805190810160405280600381526020017f414c54000000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561152157600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561156e57600080fd5b6115bf826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611652826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b60045481565b68056bc75e2d6310000081565b6b019d971e4fe8401e7400000081565b60006117b782600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a0557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611a4157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6002600560146101000a81548160ff02191690836002811115611b2057fe5b021790555060006004541115611c0a57611ba5600454600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015611c89573d6000803e3d6000fd5b505600a165627a7a723058205bbef016cc7699572f944871cb6f05e69915ada3a92a1d9f03a3fb434aac0c2b0029

Thông tin chi tiết về hợp đồng thông minh có thể được tìm thấy trong bài viết: Hợp đồng thông minh trong Ethereum là gì.

Kết luận

Chúng tôi đã liệt kê các công nghệ mà các chuỗi khối hiện đại được xây dựng và cách chúng được kết nối với nhau. Bây giờ, hãy hình thành những vấn đề nào có thể được giải quyết bằng cách sử dụng blockchain và giải pháp nào tốt nhất sẽ không hiệu quả. Vì vậy, việc sử dụng blockchain là không cần thiết nếu:

  • Giao dịch được thực hiện trong một môi trường đáng tin cậy;
  • Sự hiện diện của một ủy ban trung gian không làm cuộc sống của những người tham gia trở nên tồi tệ hơn;
  • Người tham gia không có tài sản có thể được thể hiện dưới dạng tài sản kỹ thuật số;
  • Không có sự phân phối về tài sản kỹ thuật số, tức là. giá trị chỉ được sở hữu hoặc cung cấp bởi một người tham gia.

Tương lai giữ gì cho blockchain? Bây giờ chúng ta chỉ có thể suy đoán về những cách khả thi để phát triển công nghệ blockchain:

  • Blockchain sẽ trở thành công nghệ cơ sở dữ liệu phổ biến, chẳng hạn như SQL hoặc NoSQL để giải quyết nhiều vấn đề cụ thể;
  • Blockchain sẽ trở thành một giao thức phổ biến, giống như HTTP dành cho Internet;
  • Blockchain sẽ trở thành nền tảng cho một hệ thống tài chính và chính trị mới trên hành tinh!

Trong phần tiếp theo, chúng ta sẽ xem xét những blockchain nào hiện đang tồn tại và lý do chúng được sử dụng trong các ngành khác nhau.

Điều này chỉ là khởi đầu!

Nguồn: www.habr.com

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