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

Trong bài viết này, chúng ta sẽ xem hợp đồng thông minh là gì, chúng là gì, chúng ta sẽ làm quen với các nền tảng hợp đồng thông minh khác nhau, tính năng của chúng, đồng thời thảo luận về cách chúng hoạt động và những lợi thế chúng có thể mang lại. Tài liệu này sẽ rất hữu ích cho những độc giả chưa hiểu rõ về chủ đề hợp đồng thông minh nhưng muốn tìm hiểu sâu hơn về chủ đề này.

Hợp đồng thường xuyên vs. hợp đồng thông minh

Trước khi đi sâu vào chi tiết, hãy lấy một ví dụ về sự khác biệt giữa hợp đồng thông thường, được nêu rõ trên giấy và hợp đồng thông minh, được thể hiện dưới dạng kỹ thuật số.

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

Điều này hoạt động như thế nào trước khi hợp đồng thông minh ra đời? Hãy tưởng tượng một nhóm người muốn thiết lập các quy tắc và điều kiện nhất định để phân phối các giá trị, cũng như một cơ chế nhất định để đảm bảo việc thực hiện việc phân phối này theo các quy tắc và điều kiện nhất định. Sau đó, họ sẽ cùng nhau viết một tờ giấy để viết chi tiết nhận dạng của họ, các điều khoản, giá trị liên quan, ghi ngày tháng và ký tên. Hợp đồng này cũng được chứng nhận bởi một bên đáng tin cậy, chẳng hạn như công chứng viên. Hơn nữa, những người này đã đi theo những hướng khác nhau với bản sao hợp đồng như vậy trên giấy và bắt đầu thực hiện một số hành động có thể không tương ứng với bản thân hợp đồng, tức là họ đã làm một việc, nhưng trên giấy tờ đã chứng nhận rằng họ nên làm điều gì đó. hoàn toàn khác. Và làm thế nào để thoát khỏi tình trạng này? Trên thực tế, một trong các thành viên trong nhóm cần lấy tờ giấy này, lấy một số bằng chứng, đưa ra tòa và đạt được sự tuân thủ giữa hợp đồng và hành động thực tế. Thông thường, rất khó để đạt được việc thực hiện hợp đồng này một cách công bằng, dẫn đến những hậu quả khó chịu.

Có thể nói gì về hợp đồng thông minh? Họ kết hợp cả khả năng viết các điều khoản của hợp đồng và cơ chế thực hiện nghiêm ngặt. Nếu các điều kiện đã được đặt ra và giao dịch hoặc yêu cầu tương ứng đã được ký kết thì khi yêu cầu hoặc giao dịch đó đã được chấp nhận thì không thể thay đổi các điều kiện hoặc ảnh hưởng đến việc thực hiện chúng nữa.

Có một trình xác nhận hoặc toàn bộ mạng cũng như cơ sở dữ liệu lưu trữ tất cả các hợp đồng thông minh đã được gửi để thực hiện theo thứ tự thời gian nghiêm ngặt. Điều quan trọng nữa là cơ sở dữ liệu này phải chứa tất cả các điều kiện kích hoạt để thực hiện hợp đồng thông minh. Ngoài ra, cần phải tính đến giá trị mà sự phân bổ được mô tả trong hợp đồng. Nếu điều này áp dụng cho một số loại tiền kỹ thuật số thì cơ sở dữ liệu này sẽ tính đến nó.

Nói cách khác, người xác thực hợp đồng thông minh phải có quyền truy cập vào tất cả dữ liệu mà hợp đồng thông minh hoạt động. Ví dụ: một cơ sở dữ liệu duy nhất nên được sử dụng để tính toán đồng thời các loại tiền kỹ thuật số, số dư của người dùng, giao dịch của người dùng và dấu thời gian. Sau đó, trong hợp đồng thông minh, điều kiện có thể là số dư của người dùng bằng một loại tiền tệ nhất định, thời điểm đến vào một thời điểm nhất định hoặc thực tế là một giao dịch nhất định đã được thực hiện, nhưng không có gì hơn thế.

Định nghĩa hợp đồng thông minh

Nhìn chung, thuật ngữ này do nhà nghiên cứu Nick Szabo đặt ra và được sử dụng lần đầu tiên vào năm 1994, đồng thời được ghi lại vào năm 1997 trong một bài báo mô tả chính ý tưởng về hợp đồng thông minh.

Hợp đồng thông minh ngụ ý rằng một số tự động hóa phân phối giá trị được thực hiện, điều này chỉ có thể phụ thuộc vào các điều kiện đã được xác định trước. Ở dạng đơn giản nhất, nó trông giống như một hợp đồng với các điều khoản được xác định chặt chẽ, được ký kết bởi một số bên.

Hợp đồng thông minh được thiết kế để giảm thiểu sự tin tưởng vào bên thứ ba. Đôi khi trung tâm ra quyết định mà mọi thứ phụ thuộc vào đều bị loại trừ hoàn toàn. Ngoài ra, những hợp đồng như vậy dễ kiểm toán hơn. Đây là hệ quả của một số tính năng thiết kế của một hệ thống như vậy, nhưng hầu hết chúng ta thường hiểu hợp đồng thông minh là một môi trường phi tập trung và sự hiện diện của các chức năng cho phép mọi người phân tích cơ sở dữ liệu và tiến hành kiểm tra toàn bộ việc thực hiện hợp đồng. Điều này đảm bảo sự bảo vệ chống lại những thay đổi dữ liệu có hiệu lực hồi tố sẽ kéo theo những thay đổi trong việc thực hiện hợp đồng. Số hóa hầu hết các quy trình khi tạo và khởi chạy hợp đồng thông minh thường đơn giản hóa công nghệ và chi phí thực hiện chúng.

Một ví dụ đơn giản - Dịch vụ ký quỹ

Hãy xem một ví dụ rất đơn giản. Nó sẽ giúp bạn hiểu rõ hơn về chức năng của hợp đồng thông minh, cũng như hiểu rõ hơn về trường hợp nào chúng nên được sử dụng.

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

Nó cũng có thể được triển khai bằng Bitcoin, mặc dù hiện tại Bitcoin khó có thể được gọi là nền tảng chính thức cho các hợp đồng thông minh. Vì vậy, chúng tôi có một số người mua và chúng tôi có một cửa hàng trực tuyến. Một khách hàng muốn mua màn hình từ cửa hàng này. Trong trường hợp đơn giản nhất, người mua hoàn tất và gửi thanh toán, sau đó cửa hàng trực tuyến chấp nhận, xác nhận và sau đó vận chuyển hàng hóa. Tuy nhiên, trong tình huống này cần có sự tin tưởng lớn - người mua phải tin tưởng vào cửa hàng trực tuyến về toàn bộ chi phí của màn hình. Vì cửa hàng trực tuyến có thể có uy tín thấp trong mắt người mua nên có nguy cơ vì lý do nào đó, sau khi chấp nhận thanh toán, cửa hàng sẽ từ chối phục vụ và không gửi hàng cho người mua. Do đó, người mua đặt câu hỏi (và theo đó, cửa hàng trực tuyến đặt câu hỏi này) điều gì có thể được áp dụng trong trường hợp này để giảm thiểu những rủi ro đó và làm cho các giao dịch đó trở nên đáng tin cậy hơn.

Trong trường hợp của Bitcoin, có thể cho phép người mua và người bán lựa chọn một người hòa giải một cách độc lập. Có rất nhiều người tham gia giải quyết các vấn đề gây tranh cãi. Và những người tham gia của chúng tôi có thể chọn từ danh sách chung các hòa giải viên mà họ sẽ tin tưởng. Họ cùng nhau tạo ra 2 trong 3 địa chỉ đa chữ ký, trong đó có XNUMX khóa và XNUMX chữ ký với XNUMX khóa bất kỳ được yêu cầu để tiêu tiền từ địa chỉ đó. Một chìa khóa sẽ thuộc về người mua, chiếc thứ hai thuộc về cửa hàng trực tuyến và chiếc thứ ba thuộc về người hòa giải. Và đến một địa chỉ đa chữ ký như vậy, người mua sẽ gửi số tiền cần thiết để trả cho màn hình. Giờ đây, khi người bán nhận thấy số tiền đó bị chặn một thời gian tại một địa chỉ có nhiều chữ ký phụ thuộc vào mình, anh ta có thể gửi màn hình qua đường bưu điện một cách an toàn.

Tiếp theo, người mua nhận bưu kiện, kiểm tra hàng hóa và đưa ra quyết định mua hàng cuối cùng. Anh ta có thể hoàn toàn đồng ý với dịch vụ được cung cấp và ký giao dịch bằng chìa khóa của mình, nơi anh ta chuyển tiền từ địa chỉ có nhiều chữ ký cho người bán hoặc anh ta có thể không hài lòng với điều gì đó. Trong trường hợp thứ hai, anh ta liên hệ với một người hòa giải để thực hiện một giao dịch thay thế nhằm phân phối những đồng tiền đó một cách khác nhau.

Giả sử màn hình bị trầy xước một chút và bộ sản phẩm không bao gồm cáp để kết nối với máy tính, mặc dù trang web của cửa hàng trực tuyến nói rằng cáp phải được bao gồm trong bộ sản phẩm. Sau đó, người mua thu thập các bằng chứng cần thiết để chứng minh với hòa giải viên rằng mình đã bị lừa trong tình huống này: chụp ảnh màn hình trang web, chụp ảnh biên nhận thư, chụp ảnh các vết xước trên màn hình và cho thấy con dấu đã được đóng dấu. bị đứt và dây cáp bị rút ra. Đến lượt mình, cửa hàng trực tuyến sẽ thu thập bằng chứng của mình và chuyển nó cho người hòa giải.

Người hòa giải quan tâm đến việc đồng thời thỏa mãn cả sự phẫn nộ của người mua và lợi ích của cửa hàng trực tuyến (sau này sẽ rõ lý do). Nó tạo thành một giao dịch trong đó tiền từ một địa chỉ có nhiều chữ ký sẽ được chi tiêu theo tỷ lệ nào đó giữa người mua, cửa hàng trực tuyến và người hòa giải, vì anh ta lấy một phần cho mình làm phần thưởng cho công việc của mình. Giả sử 90% tổng số tiền thuộc về người bán, 5% cho người hòa giải và 5% cho người mua. Người hòa giải ký giao dịch này bằng chìa khóa của mình, nhưng nó vẫn chưa thể được áp dụng vì nó yêu cầu hai chữ ký, nhưng chỉ có một chữ ký là có giá trị. Nó gửi một giao dịch như vậy cho cả người mua và người bán. Nếu ít nhất một trong số họ hài lòng với tùy chọn phân phối lại tiền này thì giao dịch sẽ được ký trước và phân phối vào mạng. Để xác thực nó, chỉ cần một trong các bên tham gia giao dịch đồng ý với lựa chọn của người hòa giải là đủ.

Điều quan trọng ban đầu là chọn một người hòa giải để cả hai người tham gia đều tin tưởng vào người đó. Trong trường hợp này, anh ta sẽ hành động độc lập với lợi ích của bên này hay bên kia và đánh giá khách quan tình hình. Nếu người hòa giải không cung cấp tùy chọn phân phối tiền xu sẽ làm hài lòng ít nhất một người tham gia, thì sau khi đã đồng ý với nhau, cả người mua và cửa hàng trực tuyến đều có thể gửi tiền đến một địa chỉ có nhiều chữ ký mới bằng cách đặt hai chữ ký của họ. Địa chỉ đa chữ ký mới sẽ được biên soạn với một người hòa giải khác, người có thể có thẩm quyền hơn trong vấn đề này và cung cấp tùy chọn tốt hơn.

Ví dụ với ký túc xá và tủ lạnh

Hãy xem xét một ví dụ phức tạp hơn hiển thị rõ ràng hơn các khả năng của hợp đồng thông minh.

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

Giả sử có ba chàng trai mới chuyển đến cùng một phòng ký túc xá. Ba người họ quan tâm đến việc mua một chiếc tủ lạnh cho phòng của mình để họ có thể sử dụng cùng nhau. Một người trong số họ tình nguyện quyên góp số tiền cần thiết để mua một chiếc tủ lạnh và thương lượng với người bán. Tuy nhiên, họ chỉ mới gặp nhau gần đây và giữa họ chưa có đủ sự tin tưởng. Rõ ràng là hai người trong số họ đang mạo hiểm đưa tiền cho người thứ ba. Ngoài ra, họ cần đạt được sự thống nhất trong việc lựa chọn người bán.

Họ có thể sử dụng dịch vụ ký quỹ, tức là chọn một người hòa giải sẽ giám sát việc thực hiện giao dịch và giải quyết các vấn đề gây tranh cãi nếu có phát sinh. Sau đó, khi đã đồng ý, họ soạn thảo một hợp đồng thông minh và quy định một số điều kiện nhất định trong đó.

Điều kiện đầu tiên là trước một thời điểm nhất định, chẳng hạn như trong vòng một tuần, tài khoản hợp đồng thông minh tương ứng phải nhận được ba khoản thanh toán từ các địa chỉ nhất định cho một số tiền nhất định. Nếu điều này không xảy ra, hợp đồng thông minh sẽ ngừng thực thi và trả lại tiền cho tất cả người tham gia. Nếu điều kiện được đáp ứng thì các giá trị của số nhận dạng người bán và người hòa giải sẽ được đặt và điều kiện được kiểm tra là tất cả những người tham gia đều đồng ý với lựa chọn của người bán và người hòa giải. Khi tất cả các điều kiện được đáp ứng, tiền sẽ được chuyển đến các địa chỉ được chỉ định. Cách tiếp cận này có thể bảo vệ người tham gia khỏi gian lận từ mọi phía và thường loại bỏ nhu cầu tin tưởng.

Trong ví dụ này, chúng ta thấy nguyên tắc chính là khả năng thiết lập các tham số từng bước để đáp ứng từng điều kiện cho phép bạn tạo các hệ thống ở bất kỳ mức độ phức tạp và độ sâu nào của các cấp độ lồng nhau. Ngoài ra, trước tiên bạn có thể xác định điều kiện đầu tiên trong hợp đồng thông minh và chỉ sau khi thực hiện xong, bạn mới có thể đặt tham số cho điều kiện tiếp theo. Nói cách khác, điều kiện được viết chính thức và các tham số cho nó có thể được đặt trong quá trình hoạt động.

Phân loại hợp đồng thông minh

Để phân loại, bạn có thể đặt các nhóm tiêu chí khác nhau. Tuy nhiên, tại thời điểm phát triển công nghệ, bốn trong số đó đều có liên quan.

Hợp đồng thông minh có thể được phân biệt bằng môi trường thực thi của chúng, có thể là tập trung hoặc phi tập trung. Trong trường hợp phân cấp, chúng tôi có tính độc lập và khả năng chịu lỗi cao hơn nhiều khi thực hiện hợp đồng thông minh.

Chúng cũng có thể được phân biệt bằng quá trình thiết lập và đáp ứng các điều kiện: chúng có thể được lập trình tự do, có giới hạn hoặc được xác định trước, tức là được gõ đúng. Khi chỉ có 4 hợp đồng thông minh cụ thể trên nền tảng hợp đồng thông minh, các tham số cho chúng có thể được đặt theo bất kỳ cách nào. Theo đó, việc thiết lập chúng đơn giản hơn nhiều: chúng tôi chọn hợp đồng từ danh sách và chuyển các tham số.

Theo phương pháp khởi tạo, có các hợp đồng thông minh tự động, nghĩa là khi một số điều kiện nhất định xảy ra, chúng sẽ tự thực hiện và có những hợp đồng trong đó các điều kiện được chỉ định, nhưng nền tảng không tự động kiểm tra việc thực hiện chúng; vì điều này chúng cần phải được bắt đầu một cách riêng biệt.

Ngoài ra, hợp đồng thông minh còn khác nhau về mức độ riêng tư. Chúng có thể được mở hoàn toàn, bí mật một phần hoặc hoàn toàn. Điều sau có nghĩa là các nhà quan sát bên thứ ba không nhìn thấy các điều khoản của hợp đồng thông minh. Tuy nhiên, chủ đề về quyền riêng tư rất rộng và tốt hơn nên xem xét nó riêng biệt với bài viết hiện tại.

Dưới đây chúng ta sẽ xem xét kỹ hơn ba tiêu chí đầu tiên để hiểu rõ hơn về chủ đề hiện tại.

Hợp đồng thông minh theo thời gian chạy

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

Dựa trên môi trường thực thi, có sự khác biệt giữa nền tảng hợp đồng thông minh tập trung và phi tập trung. Trong trường hợp hợp đồng kỹ thuật số tập trung, một dịch vụ duy nhất được sử dụng, trong đó chỉ có một người xác nhận và có thể có dịch vụ sao lưu và phục hồi cũng được quản lý tập trung. Có một cơ sở dữ liệu lưu trữ tất cả thông tin cần thiết để thiết lập các điều khoản của hợp đồng thông minh và phân phối giá trị được tính đến trong chính cơ sở dữ liệu dịch vụ này. Một dịch vụ tập trung như vậy có một khách hàng đặt ra các điều kiện với một số yêu cầu nhất định và sử dụng các hợp đồng đó. Do tính chất tập trung của nền tảng, các cơ chế xác thực có thể kém an toàn hơn so với tiền điện tử.

Làm ví dụ, chúng ta có thể lấy các nhà cung cấp dịch vụ truyền thông di động (các nhà khai thác di động khác nhau). Giả sử một nhà điều hành nhất định lưu giữ một bản ghi lưu lượng truy cập tập trung trên các máy chủ của mình, bản ghi này có thể được truyền ở các định dạng khác nhau, ví dụ: dưới dạng cuộc gọi thoại, truyền SMS, lưu lượng truy cập Internet di động và theo các tiêu chuẩn khác nhau, đồng thời cũng lưu giữ các bản ghi tiền trên số dư của người dùng. Theo đó, nhà cung cấp dịch vụ thông tin di động có thể soạn thảo hợp đồng hạch toán các dịch vụ được cung cấp và thanh toán với các điều kiện khác nhau. Trong trường hợp này, thật dễ dàng để đặt các điều kiện như “gửi SMS có mã như vậy đến số đó và bạn sẽ nhận được các điều kiện như vậy để phân phối lưu lượng truy cập”.

Có thể đưa ra một ví dụ nữa: các ngân hàng truyền thống với chức năng Internet Banking mở rộng và các hợp đồng rất đơn giản như thanh toán thông thường, tự động chuyển đổi các khoản thanh toán đến, tự động khấu trừ lãi vào một tài khoản cụ thể, v.v.

Nếu chúng ta đang nói về hợp đồng thông minh với môi trường thực thi phi tập trung thì chúng ta có một nhóm người xác nhận. Lý tưởng nhất là bất cứ ai cũng có thể trở thành người xác nhận. Do giao thức đồng bộ hóa cơ sở dữ liệu và đạt được sự đồng thuận, chúng tôi có một số cơ sở dữ liệu chung hiện sẽ lưu trữ tất cả các giao dịch với các hợp đồng được mô tả chặt chẽ chứ không phải một số truy vấn có điều kiện, định dạng của chúng thường thay đổi và không có thông số kỹ thuật mở. Tại đây, các giao dịch sẽ chứa các hướng dẫn thực hiện hợp đồng theo một đặc điểm kỹ thuật nghiêm ngặt. Thông số kỹ thuật này được mở và do đó, chính người dùng nền tảng có thể kiểm tra và xác thực hợp đồng thông minh. Ở đây, chúng ta thấy rằng các nền tảng phi tập trung vượt trội hơn các nền tảng tập trung về tính độc lập và khả năng chịu lỗi, nhưng thiết kế và bảo trì của chúng phức tạp hơn nhiều.

Hợp đồng thông minh theo phương pháp thiết lập và thực hiện các điều kiện

Bây giờ chúng ta hãy xem xét kỹ hơn các hợp đồng thông minh có thể khác nhau như thế nào trong cách chúng đặt ra và đáp ứng các điều kiện. Ở đây chúng tôi chuyển sự chú ý sang các hợp đồng thông minh được lập trình ngẫu nhiên và hoàn thành Turing. Hợp đồng thông minh hoàn chỉnh Turing cho phép bạn đặt hầu hết mọi thuật toán làm điều kiện để thực hiện hợp đồng: viết chu trình, một số hàm để tính xác suất và những thứ tương tự - ngay đến thuật toán chữ ký điện tử của riêng bạn. Trong trường hợp này, chúng tôi muốn nói đến việc viết logic thực sự tùy ý.

Ngoài ra còn có các hợp đồng thông minh tùy ý, nhưng không có hợp đồng Turing hoàn chỉnh. Điều này bao gồm Bitcoin và Litecoin với tập lệnh riêng của chúng. Điều này có nghĩa là bạn chỉ có thể sử dụng một số thao tác nhất định theo bất kỳ thứ tự nào nhưng bạn không thể viết các vòng lặp và thuật toán của riêng mình nữa.

Ngoài ra, còn có các nền tảng hợp đồng thông minh thực hiện các hợp đồng thông minh được xác định trước. Chúng bao gồm Bitshares và Steemit. Bitshares có một loạt các hợp đồng thông minh để giao dịch, quản lý tài khoản, quản lý nền tảng và các thông số của nó. Steemit là một nền tảng tương tự, nhưng nó không còn tập trung vào việc phát hành token và giao dịch như Bitshares nữa mà tập trung vào việc viết blog, tức là nó lưu trữ và xử lý nội dung theo cách phi tập trung.

Các hợp đồng hoàn chỉnh Turing tùy ý bao gồm nền tảng Ethereum và RootStock, vẫn đang được phát triển. Do đó, dưới đây chúng tôi sẽ trình bày chi tiết hơn một chút về nền tảng hợp đồng thông minh Ethereum.

Hợp đồng thông minh theo phương pháp khởi tạo

Dựa trên phương thức khởi tạo, hợp đồng thông minh cũng có thể được chia thành ít nhất hai nhóm: tự động và thủ công (không tự động). Hợp đồng tự động có đặc điểm là, với tất cả các tham số và điều kiện đã biết, hợp đồng thông minh được thực hiện hoàn toàn tự động, nghĩa là nó không yêu cầu gửi bất kỳ giao dịch bổ sung nào và chi thêm hoa hồng cho mỗi lần thực hiện tiếp theo. Bản thân nền tảng này có tất cả dữ liệu để tính toán cách thức hoàn thành hợp đồng thông minh. Logic ở đó không phải là tùy tiện mà được xác định trước và tất cả những điều này đều có thể dự đoán được. Nghĩa là, bạn có thể ước tính trước mức độ phức tạp của việc thực hiện hợp đồng thông minh, sử dụng một số loại hoa hồng cố định cho hợp đồng đó và tất cả các quy trình thực hiện hợp đồng đều hiệu quả hơn.

Đối với các hợp đồng thông minh được lập trình tự do, việc thực thi không được tự động hóa. Để bắt đầu một hợp đồng thông minh như vậy, hầu như ở mỗi bước bạn cần tạo một giao dịch mới, giao dịch này sẽ gọi giai đoạn thực hiện tiếp theo hoặc phương thức hợp đồng thông minh tiếp theo, trả hoa hồng thích hợp và chờ giao dịch được xác nhận. Việc thực thi có thể hoàn thành thành công hoặc không, vì mã hợp đồng thông minh là tùy ý và một số khoảnh khắc không thể đoán trước có thể xuất hiện, chẳng hạn như vòng lặp vĩnh cửu, thiếu một số tham số và đối số, ngoại lệ chưa được xử lý, v.v.

Tài khoản Ethereum

Các loại tài khoản Ethereum

Hãy xem những loại tài khoản nào có thể có trên nền tảng Ethereum. Ở đây chỉ có hai loại tài khoản và không có lựa chọn nào khác. Loại đầu tiên được gọi là tài khoản người dùng, loại thứ hai là tài khoản hợp đồng. Hãy tìm hiểu xem chúng khác nhau như thế nào.

Tài khoản người dùng chỉ được kiểm soát bằng khóa cá nhân của chữ ký điện tử. Chủ tài khoản tạo cặp khóa riêng cho chữ ký điện tử bằng thuật toán ECDSA (Thuật toán chữ ký số đường cong Elliptic). Chỉ những giao dịch được ký bằng khóa này mới có thể thay đổi trạng thái của tài khoản này.

Một logic riêng được cung cấp cho tài khoản hợp đồng thông minh. Nó chỉ có thể được kiểm soát bằng mã phần mềm được xác định trước để xác định hoàn toàn hành vi của hợp đồng thông minh: cách nó sẽ quản lý tiền của mình trong những trường hợp nhất định, theo sáng kiến ​​​​của người dùng nào và những đồng tiền này sẽ được phân phối theo những điều kiện bổ sung nào. Nếu một số điểm không được nhà phát triển cung cấp trong mã chương trình, vấn đề có thể phát sinh. Ví dụ: hợp đồng thông minh có thể nhận được một trạng thái nhất định trong đó nó không chấp nhận việc bắt đầu thực hiện thêm từ bất kỳ người dùng nào. Trong trường hợp này, tiền thực sự sẽ bị đóng băng vì hợp đồng thông minh không cung cấp khả năng thoát khỏi trạng thái này.

Cách tạo tài khoản trên Ethereum

Trong trường hợp tài khoản người dùng, chủ sở hữu sẽ tạo cặp khóa một cách độc lập bằng ECDSA. Điều quan trọng cần lưu ý là Ethereum sử dụng chính xác cùng một thuật toán và đường cong elip giống hệt nhau cho chữ ký điện tử như Bitcoin, nhưng địa chỉ được tính theo một cách hơi khác. Ở đây, kết quả của việc băm kép không còn được sử dụng nữa, như trong Bitcoin, nhưng việc băm đơn được cung cấp với hàm Keccak với độ dài 256 bit. Các bit ít quan trọng nhất bị cắt khỏi giá trị kết quả, cụ thể là 160 bit ít quan trọng nhất của giá trị băm đầu ra. Kết quả là chúng tôi nhận được một địa chỉ bằng Ethereum. Trên thực tế, nó chiếm 20 byte.

Xin lưu ý rằng mã nhận dạng tài khoản trong Ethereum được mã hóa dưới dạng hex mà không áp dụng tổng kiểm tra, không giống như Bitcoin và nhiều hệ thống khác, trong đó địa chỉ được mã hóa trong hệ thống số cơ sở 58 có bổ sung tổng kiểm tra. Điều này có nghĩa là bạn cần phải cẩn thận khi làm việc với số nhận dạng tài khoản trong Ethereum: ngay cả một sai sót trong số nhận dạng cũng có thể dẫn đến mất tiền.

Có một tính năng quan trọng đó là tài khoản người dùng ở cấp cơ sở dữ liệu chung được tạo vào thời điểm anh ta chấp nhận khoản thanh toán đến đầu tiên.

Tạo một tài khoản hợp đồng thông minh có một cách tiếp cận hoàn toàn khác. Ban đầu, một trong những người dùng viết mã nguồn của hợp đồng thông minh, sau đó mã được chuyển qua trình biên dịch đặc biệt dành cho nền tảng Ethereum, lấy mã byte cho máy ảo Ethereum của riêng họ. Mã byte kết quả được đặt trong một trường đặc biệt của giao dịch. Nó được chứng nhận thay mặt cho tài khoản của người khởi xướng. Tiếp theo, giao dịch này được lan truyền khắp mạng và đặt mã hợp đồng thông minh. Hoa hồng cho giao dịch và theo đó, cho việc thực hiện hợp đồng sẽ được rút từ số dư tài khoản của người khởi tạo.

Mỗi hợp đồng thông minh nhất thiết phải có hàm tạo riêng của nó (của hợp đồng này). Nó có thể trống hoặc có thể có nội dung. Sau khi hàm tạo được thực thi, mã định danh tài khoản hợp đồng thông minh sẽ được tạo, bằng cách sử dụng mã này bạn có thể gửi tiền, gọi một số phương thức hợp đồng thông minh nhất định, v.v.

Cấu trúc giao dịch Ethereum

Để làm rõ hơn, chúng ta sẽ bắt đầu xem xét cấu trúc của một giao dịch Ethereum và một mã hợp đồng thông minh mẫu.

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

Một giao dịch Ethereum bao gồm một số trường. Đầu tiên trong số này, nonce, là một số sê-ri nhất định của giao dịch liên quan đến chính tài khoản phân phối nó và là tác giả của nó. Điều này là cần thiết để phân biệt các giao dịch kép, tức là loại trừ trường hợp cùng một giao dịch được chấp nhận hai lần. Bằng cách sử dụng mã định danh, mỗi giao dịch có một giá trị băm duy nhất.

Tiếp theo là một lĩnh vực như giá xăng. Điều này cho biết mức giá mà đồng tiền cơ sở Ethereum được chuyển đổi thành gas, được sử dụng để thanh toán cho việc thực hiện hợp đồng thông minh và phân bổ tài nguyên máy ảo. Nó có nghĩa là gì?

Trong Bitcoin, phí được thanh toán trực tiếp bằng loại tiền cơ bản—chính Bitcoin. Điều này có thể thực hiện được nhờ một cơ chế tính toán đơn giản: chúng tôi thanh toán nghiêm ngặt cho lượng dữ liệu có trong giao dịch. Trong Ethereum, tình hình phức tạp hơn vì rất khó dựa vào khối lượng dữ liệu giao dịch. Ở đây, giao dịch cũng có thể chứa mã chương trình sẽ được thực thi trên máy ảo và mỗi thao tác của máy ảo có thể có độ phức tạp khác nhau. Ngoài ra còn có các thao tác cấp phát bộ nhớ cho các biến. Chúng sẽ có độ phức tạp riêng, phụ thuộc vào mức thanh toán cho mỗi hoạt động.

Chi phí của mỗi hoạt động tính theo lượng khí tương đương sẽ không đổi. Nó được giới thiệu cụ thể để xác định chi phí không đổi của mỗi hoạt động. Tùy thuộc vào tải trên mạng, giá gas sẽ thay đổi, tức là hệ số theo đó đồng tiền cơ sở sẽ được chuyển đổi thành đơn vị phụ trợ này để trả hoa hồng.

Có một tính năng nữa của giao dịch trong Ethereum: mã byte chứa trong nó để thực thi trong máy ảo sẽ được thực thi cho đến khi nó hoàn thành với một số kết quả (thành công hay thất bại) hoặc cho đến khi hết một lượng tiền nhất định được phân bổ để trả hoa hồng. . Để tránh trường hợp xảy ra lỗi, tất cả số tiền từ tài khoản của người gửi đã được sử dụng cho hoa hồng (ví dụ: một loại chu kỳ vĩnh cửu nào đó bắt đầu trong máy ảo), trường sau đây tồn tại - khí khởi động (thường được gọi là giới hạn gas) - nó xác định số lượng xu tối đa mà người gửi sẵn sàng chi để hoàn thành một giao dịch nhất định.

Trường tiếp theo được gọi là địa chỉ đích. Điều này bao gồm địa chỉ của người nhận tiền hoặc địa chỉ của một hợp đồng thông minh cụ thể có phương thức sẽ được gọi. Sau đó là đến cánh đồng giá trị, trong đó nhập số lượng xu được gửi đến địa chỉ đích.

Tiếp theo là một lĩnh vực thú vị được gọi là dữ liệu, nơi toàn bộ cấu trúc phù hợp. Đây không phải là một trường riêng biệt mà là toàn bộ cấu trúc trong đó mã cho máy ảo được xác định. Bạn có thể đặt dữ liệu tùy ý ở đây - có những quy tắc riêng cho việc này.

Và trường cuối cùng được gọi là chữ ký. Nó đồng thời chứa cả chữ ký điện tử của tác giả giao dịch này và khóa chung để xác minh chữ ký này. Từ khóa chung, bạn có thể lấy mã định danh tài khoản của người gửi giao dịch này, nghĩa là xác định duy nhất tài khoản của người gửi trong chính hệ thống. Chúng tôi đã tìm ra điều chính về cấu trúc của giao dịch.

Mã hợp đồng thông minh mẫu cho Solidity

Bây giờ chúng ta hãy xem xét kỹ hơn hợp đồng thông minh đơn giản nhất bằng một ví dụ.

contract Bank {
    address owner;
    mapping(address => uint) balances;
    
    function Bank() {
        owner = msg.sender;
    }

    function deposit() public payable {
        balances[msg.sender] += msg.value;
    }

    function withdraw(uint amount) public {
        if (balances[msg.sender] >= amount) {
            balances[msg.sender] -= amount;
            msg.sender.transfer(amount);
        }
    }

    function getMyBalance() public view returns(uint) {
        return balances[msg.sender];
    }

    function kill() public {
        if (msg.sender == owner)
            selfdestruct(owner);
    }
}

Trên đây là mã nguồn được đơn giản hóa có thể giữ tiền của người dùng và trả lại theo yêu cầu.

Vì vậy, có một hợp đồng thông minh của Ngân hàng thực hiện các chức năng sau: nó tích lũy tiền trên số dư của mình, nghĩa là khi giao dịch được xác nhận và hợp đồng thông minh đó được đặt, một tài khoản mới sẽ được tạo có thể chứa tiền trên số dư của nó; nó ghi nhớ người dùng và việc phân phối tiền giữa họ; có một số phương pháp để quản lý số dư, nghĩa là có thể bổ sung, rút ​​tiền và kiểm tra số dư của người dùng.

Chúng ta hãy đi qua từng dòng mã nguồn. Hợp đồng này có các trường không đổi. Một trong số họ, với địa chỉ loại, được gọi là chủ sở hữu. Ở đây hợp đồng ghi nhớ địa chỉ của người dùng đã tạo hợp đồng thông minh này. Hơn nữa, có một cấu trúc động duy trì sự tương ứng giữa địa chỉ và số dư của người dùng.

Tiếp theo là phương thức Ngân hàng - nó có cùng tên với hợp đồng. Theo đó, đây là hàm tạo của nó. Ở đây, biến chủ sở hữu được gán địa chỉ của người đặt hợp đồng thông minh này trên mạng. Đây là điều duy nhất xảy ra trong hàm tạo này. Nghĩa là, msg trong trường hợp này chính xác là dữ liệu được chuyển đến máy ảo cùng với giao dịch chứa toàn bộ mã của hợp đồng này. Theo đó, msg.sender là tác giả của giao dịch lưu trữ mã này. Anh ta sẽ là chủ sở hữu của hợp đồng thông minh.

Phương thức gửi tiền cho phép bạn chuyển một số lượng xu nhất định vào tài khoản hợp đồng bằng giao dịch. Trong trường hợp này, hợp đồng thông minh, nhận những đồng tiền này, để chúng trên bảng cân đối kế toán, nhưng ghi lại trong cấu trúc số dư chính xác ai là người gửi những đồng tiền này để biết chúng thuộc về ai.

Phương thức tiếp theo được gọi là rút tiền và cần một tham số - số lượng xu mà ai đó muốn rút từ ngân hàng này. Điều này kiểm tra xem có đủ tiền trong số dư của người dùng gọi phương thức này để gửi chúng hay không. Nếu có đủ thì hợp đồng thông minh sẽ tự trả lại số xu đó cho người gọi.

Tiếp theo là phương pháp kiểm tra số dư hiện tại của người dùng. Bất cứ ai gọi phương thức này sẽ được sử dụng để lấy số dư này trong hợp đồng thông minh. Điều đáng chú ý là công cụ sửa đổi của phương thức này là view. Điều này có nghĩa là bản thân phương thức này không thay đổi các biến của lớp nó theo bất kỳ cách nào và nó thực sự chỉ là một phương thức đọc. Không có giao dịch riêng biệt nào được tạo để gọi phương thức này, không phải trả phí và tất cả các phép tính được thực hiện cục bộ, sau đó người dùng sẽ nhận được kết quả.

Phương thức kill là cần thiết để phá hủy trạng thái của hợp đồng thông minh. Và ở đây có một kiểm tra bổ sung xem người gọi phương thức này có phải là chủ sở hữu của hợp đồng này hay không. Nếu vậy, hợp đồng sẽ tự hủy và hàm hủy sẽ lấy một tham số - mã nhận dạng tài khoản mà hợp đồng sẽ gửi tất cả số tiền còn lại trong số dư của nó. Trong trường hợp này, số tiền còn lại sẽ tự động chuyển đến địa chỉ của chủ sở hữu hợp đồng.

Nút đầy đủ trên mạng Ethereum hoạt động như thế nào?

Chúng ta hãy xem xét một cách sơ đồ cách các hợp đồng thông minh như vậy được thực thi trên nền tảng Ethereum và cách hoạt động của một nút mạng đầy đủ.

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

Một nút đầy đủ trên mạng Ethereum phải có ít nhất bốn mô-đun.
Đầu tiên, như đối với bất kỳ giao thức phi tập trung nào, là mô-đun mạng P2P - mô-đun để kết nối mạng và hoạt động với các nút khác, nơi các khối, giao dịch và thông tin về các nút khác được trao đổi. Đây là một thành phần truyền thống cho tất cả các loại tiền điện tử phi tập trung.

Tiếp theo, chúng ta có một mô-đun để lưu trữ dữ liệu blockchain, xử lý, chọn nhánh ưu tiên, nối thêm các khối, hủy liên kết các khối, xác thực các khối này, v.v.

Mô-đun thứ ba được gọi là EVM (máy ảo Ethereum) - đây là máy ảo nhận bytecode từ các giao dịch Ethereum. Mô-đun này lấy trạng thái hiện tại của một tài khoản cụ thể và thực hiện các thay đổi đối với trạng thái của nó dựa trên mã byte nhận được. Phiên bản máy ảo trên mỗi nút mạng phải giống nhau. Các phép tính diễn ra trên mỗi nút Ethereum hoàn toàn giống nhau, nhưng chúng diễn ra theo cách không đồng bộ: ai đó kiểm tra và chấp nhận giao dịch này sớm hơn, nghĩa là thực thi tất cả mã có trong đó và ai đó sau đó. Theo đó, khi một giao dịch được tạo, nó sẽ được phân phối vào mạng, các nút chấp nhận nó và tại thời điểm xác minh, giống như cách Bitcoin Script được thực thi bằng Bitcoin, mã byte của máy ảo sẽ được thực thi tại đây.

Một giao dịch được coi là đã xác minh nếu tất cả mã chứa trong đó đã được thực thi, trạng thái mới của một tài khoản nhất định đã được tạo và lưu cho đến khi rõ ràng liệu giao dịch này đã được áp dụng hay chưa. Nếu giao dịch được áp dụng thì trạng thái này không chỉ được coi là đã hoàn thành mà còn được coi là hiện tại. Có một cơ sở dữ liệu lưu trữ trạng thái của từng tài khoản cho mỗi nút mạng. Do tất cả các phép tính diễn ra theo cùng một cách và trạng thái của blockchain giống nhau nên cơ sở dữ liệu chứa trạng thái của tất cả các tài khoản cũng sẽ giống nhau đối với mỗi nút.

Những lầm tưởng và hạn chế của hợp đồng thông minh

Đối với những hạn chế tồn tại đối với các nền tảng hợp đồng thông minh tương tự như Ethereum, có thể trích dẫn những điều sau:

  • thực thi mã;
  • phân bổ bộ nhớ;
  • dữ liệu chuỗi khối;
  • gửi thanh toán;
  • tạo hợp đồng mới;
  • gọi các hợp đồng khác.

Chúng ta hãy xem xét các hạn chế được áp dụng đối với máy ảo và theo đó, xóa tan một số lầm tưởng về hợp đồng thông minh. Trên một máy ảo, không chỉ có trong Ethereum mà còn trên các nền tảng tương tự, bạn có thể thực hiện các hoạt động logic thực sự tùy ý, nghĩa là viết mã và nó sẽ được thực thi ở đó, bạn có thể phân bổ thêm bộ nhớ. Tuy nhiên, phí được thanh toán riêng cho từng thao tác và cho từng đơn vị bộ nhớ bổ sung được phân bổ.

Tiếp theo, máy ảo có thể đọc dữ liệu từ cơ sở dữ liệu blockchain để sử dụng dữ liệu này làm công cụ kích hoạt để thực thi một hoặc một logic hợp đồng thông minh khác. Máy ảo có thể tạo và gửi giao dịch, nó có thể tạo các hợp đồng mới và gọi các phương thức của các hợp đồng thông minh khác đã được xuất bản trên mạng: hiện có, có sẵn, v.v.

Huyền thoại phổ biến nhất là các hợp đồng thông minh Ethereum có thể sử dụng thông tin từ bất kỳ tài nguyên Internet nào theo điều kiện của chúng. Sự thật là máy ảo không thể gửi yêu cầu mạng tới một số tài nguyên thông tin bên ngoài trên Internet, nghĩa là không thể viết một hợp đồng thông minh sẽ phân phối giá trị giữa những người dùng tùy thuộc vào thời tiết bên ngoài như thế nào, hoặc ai đã giành được chức vô địch nào đó, hoặc dựa trên những sự cố khác đã xảy ra ở thế giới bên ngoài, bởi vì thông tin về những sự cố này đơn giản là không có trong cơ sở dữ liệu của chính nền tảng. Đó là, không có gì trên blockchain về điều này. Nếu nó không xuất hiện ở đó thì máy ảo không thể sử dụng dữ liệu này làm trình kích hoạt.

Nhược điểm của Ethereum

Hãy liệt kê những cái chính. Nhược điểm đầu tiên là có một số khó khăn trong việc thiết kế, phát triển và thử nghiệm hợp đồng thông minh trên Ethereum (Ethereum sử dụng ngôn ngữ Solidity để viết hợp đồng thông minh). Quả thực, thực tế cho thấy một tỷ lệ rất lớn các sai sót đều thuộc về yếu tố con người. Điều này thực sự đúng với các hợp đồng thông minh Ethereum đã được viết sẵn có độ phức tạp trung bình hoặc cao hơn. Nếu đối với các hợp đồng thông minh đơn giản, xác suất xảy ra lỗi là nhỏ thì trong các hợp đồng thông minh phức tạp rất thường xuyên xảy ra lỗi dẫn đến trộm tiền, đóng băng, phá hủy hợp đồng thông minh một cách không mong muốn, v.v. Nhiều trường hợp như vậy đã xảy ra được biết đến.

Nhược điểm thứ hai là bản thân máy ảo không hoàn hảo vì nó cũng được viết bởi con người. Nó có thể thực thi các lệnh tùy ý và tiềm ẩn lỗ hổng: một số lệnh có thể được cấu hình theo một cách nhất định sẽ dẫn đến những hậu quả không thể lường trước được. Đây là một lĩnh vực rất phức tạp, nhưng đã có một số nghiên cứu cho thấy những lỗ hổng này tồn tại trong phiên bản hiện tại của mạng Ethereum và chúng có thể dẫn đến sự thất bại của nhiều hợp đồng thông minh.

Một khó khăn lớn nữa, có thể coi là bất lợi. Thực tế là bạn có thể đi đến kết luận về mặt thực tế hoặc kỹ thuật rằng nếu bạn biên dịch mã byte của hợp đồng sẽ được thực thi trên máy ảo, bạn có thể xác định một số thứ tự hoạt động cụ thể. Khi được thực hiện cùng nhau, các thao tác này sẽ tải rất nhiều máy ảo và làm chậm nó một cách không tương xứng với mức phí phải trả cho việc thực hiện các thao tác này.

Trước đây, đã có một giai đoạn phát triển của Ethereum, khi nhiều người hiểu chi tiết về hoạt động của máy ảo đã tìm thấy những lỗ hổng như vậy. Trên thực tế, các giao dịch phải trả một khoản phí rất nhỏ nhưng thực tế đã làm chậm toàn bộ mạng. Những vấn đề này rất khó giải quyết, vì trước tiên cần phải xác định chúng, thứ hai là điều chỉnh giá để thực hiện các hoạt động này và thứ ba là thực hiện hard fork, nghĩa là cập nhật tất cả các nút mạng lên phiên bản mới của phần mềm và sau đó kích hoạt đồng thời những thay đổi này.

Đối với Ethereum, rất nhiều nghiên cứu đã được thực hiện, đã thu được rất nhiều kinh nghiệm thực tế: cả tích cực và tiêu cực, nhưng vẫn còn những khó khăn và lỗ hổng cần phải giải quyết bằng cách nào đó.

Vậy là phần chủ đề của bài viết đã hoàn thành, chúng ta hãy chuyển sang những câu hỏi phát sinh khá thường xuyên.

Hỏi đáp

— Nếu tất cả các bên tham gia hợp đồng thông minh hiện tại muốn thay đổi các điều khoản, họ có thể hủy hợp đồng thông minh này bằng cách sử dụng nhiều chữ ký, sau đó tạo một hợp đồng thông minh mới với các điều khoản thực hiện được cập nhật không?

Câu trả lời ở đây sẽ có hai mặt. Tại sao? Bởi vì một mặt, hợp đồng thông minh được xác định một lần và nó không còn hàm ý bất kỳ thay đổi nào nữa, mặt khác, nó có thể có logic viết sẵn cung cấp sự thay đổi hoàn toàn hoặc một phần của một số điều kiện. Nghĩa là, nếu bạn muốn thay đổi điều gì đó trong hợp đồng thông minh của mình thì bạn phải quy định các điều kiện để bạn có thể cập nhật các điều kiện này. Theo đó, chỉ bằng cách thận trọng như vậy, việc gia hạn hợp đồng mới có thể được tổ chức. Nhưng ở đây, bạn cũng có thể gặp rắc rối: mắc một số sai lầm và gặp phải lỗ hổng tương ứng. Vì vậy, những thứ như vậy cần phải được thiết kế và thử nghiệm rất chi tiết, cẩn thận.

— Điều gì sẽ xảy ra nếu người hòa giải ký kết thỏa thuận với một trong các bên tham gia: ký quỹ hoặc hợp đồng thông minh? Có cần thiết phải có người hòa giải trong hợp đồng thông minh không?

Một người hòa giải không cần thiết trong một hợp đồng thông minh. Nó có thể không tồn tại. Nếu, trong trường hợp ký quỹ, người hòa giải có âm mưu với một trong các bên, thì đúng vậy, kế hoạch này khi đó sẽ mất hết giá trị. Do đó, hòa giải viên được lựa chọn theo cách mà họ được tất cả các bên tham gia vào quá trình này cùng một lúc tin tưởng. Theo đó, bạn sẽ không chuyển tiền đến một địa chỉ có nhiều chữ ký bằng một trung gian hòa giải mà bạn không tin tưởng.

— Có thể với một giao dịch Ethereum để chuyển nhiều mã thông báo khác nhau từ địa chỉ của bạn sang các địa chỉ mục tiêu khác nhau, ví dụ: địa chỉ trao đổi nơi các mã thông báo này được giao dịch không?

Đây là một câu hỏi hay và nó liên quan đến mô hình giao dịch Ethereum cũng như nó khác với mô hình Bitcoin như thế nào. Và sự khác biệt là triệt để. Nếu trong mô hình giao dịch Ethereum, bạn chỉ cần chuyển tiền thì chúng chỉ được chuyển từ địa chỉ này sang địa chỉ khác, không thay đổi, chỉ số tiền cụ thể mà bạn đã chỉ định. Nói cách khác, đây không phải là mô hình đầu ra chưa chi tiêu (UTXO), mà là mô hình tài khoản và số dư tương ứng. Về mặt lý thuyết, có thể gửi nhiều mã thông báo khác nhau trong một giao dịch cùng một lúc nếu bạn viết một hợp đồng thông minh xảo quyệt, nhưng bạn vẫn sẽ phải thực hiện nhiều giao dịch, tạo hợp đồng, sau đó chuyển mã thông báo và tiền xu vào đó, sau đó gọi phương thức thích hợp . Điều này đòi hỏi nỗ lực và thời gian, vì vậy trên thực tế nó không hoạt động như vậy và tất cả các khoản thanh toán bằng Ethereum được thực hiện trong các giao dịch riêng biệt.

— Một trong những lầm tưởng về nền tảng Ethereum là không thể mô tả các điều kiện sẽ phụ thuộc vào dữ liệu của tài nguyên Internet bên ngoài, vậy sau đó phải làm gì?

Giải pháp là bản thân hợp đồng thông minh có thể cung cấp một hoặc nhiều cái gọi là nhà tiên tri đáng tin cậy, thu thập dữ liệu về trạng thái của mọi thứ ở thế giới bên ngoài và truyền dữ liệu đó đến hợp đồng thông minh thông qua các phương pháp đặc biệt. Bản thân hợp đồng coi dữ liệu nhận được từ các bên đáng tin cậy là đúng sự thật. Để có độ tin cậy cao hơn, chỉ cần chọn một nhóm lớn các nhà tiên tri và giảm thiểu nguy cơ thông đồng với họ. Bản thân hợp đồng có thể không tính đến dữ liệu từ các nhà tiên tri mâu thuẫn với đa số.

Một trong những bài giảng của khóa học trực tuyến về Blockchain được dành cho chủ đề này - “Giới thiệu về Hợp đồng thông minh".

Nguồn: www.habr.com

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