Thực sự hiểu hợp đồng thông minh Ethereum
Lưu ý của biên tập viên: Bài viết này đến từGhi chú cáo xanhLưu ý của biên tập viên: Bài viết này đến từ
Ghi chú cáo xanh
Ghi chú cáo xanh
(ID: lanhubiji), tác giả: GjermundBjaanes, biên soạn: Dyna, được phát hành với sự cho phép.
Bạn có thể đã nghe nói về "hợp đồng thông minh" và thậm chí bạn có thể biết rằng chúng là mã chạy trên chuỗi khối.
Nhưng làm thế nào bạn có thể chạy mã trên blockchain? Đây không phải là một khái niệm đơn giản có thể dễ dàng hiểu được.
Bài viết này giải thích cách hợp đồng thông minh hoạt động trên chuỗi khối Ethereum. Hiểu biết cơ bản về lập trình sẽ hữu ích vì bài viết này bao gồm một số mã đơn giản cho các mục đích ví dụ. Một số chi tiết kỹ thuật được đơn giản hóa một chút để rõ ràng, nhưng các khái niệm đều có giá trị.
tiêu đề phụ
Chuỗi khối - Bắt đầu nhanh
Không đi sâu vào quá nhiều chi tiết ở đây, khái niệm cốt lõi của công nghệ chuỗi khối là sổ cái phân tán. Nó là một loại cơ sở dữ liệu đặc biệt được chia sẻ giữa nhiều người tham gia.

Cơ sở dữ liệu đặc biệt này là một danh sách giao dịch, ghi lại mọi giao dịch xảy ra trong mạng. Mọi người đều có một bản sao. Phân phối phi tập trung này, kết hợp với các ưu đãi tiền tệ mạnh mẽ, loại bỏ nhu cầu tin tưởng giữa các bên.
Theo truyền thống, sự tin tưởng giữa các bên được giải quyết thông qua một bên trung gian, tức là bên thứ ba, chẳng hạn như Paypal và các ngân hàng. Giao dịch với những người bạn không tin tưởng sẽ thông qua trung gian mà cả hai bên đều tin tưởng.
Bởi vì mọi người đều có danh sách giống nhau, rất khó để lừa mạng chấp nhận giao dịch sai. Kết hợp điều đó với một số phần thưởng mã hóa và tiền tệ cho việc tuân theo các quy tắc và bạn có một mạng rất an toàn.
Hợp đồng thông minh là gì?
Tất cả những điều này cũng làm cho chuỗi khối gần như bất biến, vì cách duy nhất để thay đổi lịch sử là có sự đồng ý của đa số toàn bộ mạng.
tiêu đề phụ
Hợp đồng thông minh là gì?
Sự khác biệt lớn nhất giữa Ethereum và Bitcoin là sự ra đời của khái niệm hợp đồng thông minh. Bitcoin là một loại tiền kỹ thuật số, Ethereum là một loại tiền kỹ thuật số, nhưng nó còn hơn thế nữa.
Cái tên "hợp đồng thông minh" có một chút sai lệch. Chúng không phải là hợp đồng thực sự, cũng không phải là đặc biệt thông minh. Chúng chỉ là những đoạn mã — hoặc hoạt động logic của máy tính — có thể chạy trên chuỗi khối.
Đầu tiên, tôi sẽ giải thích về hợp đồng thông minh là một loại tài khoản đặc biệt trên mạng Ethereum. Bạn có tài khoản người dùng và bạn cũng có tài khoản hợp đồng thông minh.
Một tài khoản người dùng bao gồm:
Một địa chỉ (tương tự như số tài khoản ngân hàng của bạn - nó cũng tồn tại trên Bitcoin)
Số dư (tôi có bao nhiêu tiền)
Một tài khoản hợp đồng thông minh bao gồm:
một địa chỉ
Số dư (Ethereum)
Một bang
mật mã
Địa chỉ giống với địa chỉ của tài khoản thông thường và là mã định danh duy nhất của tài khoản.
Số dư và tài khoản thông thường cũng là cùng một khái niệm. Điều thú vị duy nhất là số dư trên hợp đồng thông minh có nghĩa là mã đó có thể sở hữu tiền. Nó có thể xử lý tiền hoặc có thể xử lý sai do lỗi mã hóa.

Trạng thái của tài khoản hợp đồng thông minh là trạng thái hiện tại của tất cả các trường và biến được khai báo trong hợp đồng thông minh. Nó hoạt động giống như các biến trường của các lớp trong hầu hết các ngôn ngữ lập trình. Trên thực tế, khởi tạo các đối tượng của một lớp có lẽ là cách dễ nhất để hiểu hợp đồng thông minh. Sự khác biệt duy nhất là đối tượng này tồn tại lâu dài (trừ khi được lập trình để tự hủy).

Sự thật thú vị về hợp đồng thông minh: họ có thể gọi các hợp đồng thông minh khác. Điều này mở ra khả năng tạo ra các đại lý tự trị có thể tiêu tiền và tự mình thực hiện các giao dịch.
Giả sử tôi tạo một hợp đồng thông minh với mã ở trên. Mã có một trường được gọi là bộ đếm thuộc loại uint (số nguyên). Nội dung của biến đếm là trạng thái của hợp đồng. Bất cứ khi nào tôi gọi hàm đếm (), bất kỳ ai cũng có thể thấy rằng trạng thái của hợp đồng thông minh này trên chuỗi khối sẽ tăng thêm 1.
Chúng tôi sẽ giải thích cách nó hoạt động sau với nhiều ví dụ hơn, nhưng trước tiên tôi muốn quay lại giao dịch Ethereum và Bitcoin và sử dụng nó để giải thích một số điều.
tiêu đề phụ
Ở cấp độ giao dịch, Ethereum VS Bitcoin
Giao dịch bitcoin rất đơn giản. Bạn chỉ có thể làm một việc. Một loại giao dịch. Bỏ qua một số chi tiết, tất cả chỉ còn TO (đến, ai đang nhận tiền), TỪ (từ, ai đang trả tiền) và AMOUNT (số tiền, bao nhiêu). Điều này làm cho Bitcoin trở thành một kho lưu trữ giá trị, có khả năng chuyển giá trị giữa những người tham gia mạng.
Sự khác biệt trong Ethereum là giao dịch cũng có trường "DATA" (dữ liệu). Trường "DỮ LIỆU" hỗ trợ ba loại giao dịch:
Chuyển giá trị (giống như Bitcoin)
ĐẾN địa chỉ nhận
Trường DỮ LIỆU trống hoặc chứa bất kỳ thông báo nào để nối thêm
Từ bạn
AMOUNT là số Ethereum bạn muốn gửi
Tạo một hợp đồng thông minh
Trường TO trống (nó kích hoạt việc tạo hợp đồng thông minh)
Trường DATA chứa mã hợp đồng thông minh được biên dịch thành mã byte
Từ bạn
AMOUNT có thể là 0 hoặc bất kỳ số lượng Ethereum nào bạn muốn đưa vào hợp đồng
gọi hợp đồng thông minh
Trường TO là địa chỉ tài khoản hợp đồng thông minh
Trường DATA chứa tên hàm và tham số – cách gọi hợp đồng thông minh
Từ bạn
AMOUNT có thể là 0 hoặc bất kỳ số lượng Ethereum nào, chẳng hạn như số tiền bạn cần thanh toán cho hợp đồng dịch vụ
Có nhiều lĩnh vực và mức độ phức tạp hơn trong các giao dịch này, nhưng phần trên giải thích rõ các khái niệm cốt lõi. Hãy xem xét một số ví dụ cụ thể hơn về những giao dịch này.
giao dịch Ethereum

chuyển giá trị
rất đơn giản. TO gửi một lượng token Ethereum nhất định đến một địa chỉ. Bạn cũng có thể thêm một tin nhắn vào một giao dịch.

Như đã đề cập ở trên, trường TO trống biểu thị việc tạo hợp đồng thông minh. Trường DATA chứa hợp đồng thông minh được biên dịch thành mã byte.
hợp đồng cuộc gọi
Sẽ quay lại vấn đề này sau, nhưng khái niệm chính là bạn gửi giao dịch đến địa chỉ hợp đồng thông minh mà bạn muốn gọi, sau đó thực hiện lệnh gọi hàm trong trường DATA.
tiêu đề phụ
Chú ý đến chi phí và thực hiện
Việc thực thi mã được trả bởi người gọi bằng một thứ gọi là gas. Gas là nhiên liệu để chạy Máy ảo Ethereum. Bạn có thể coi nó như một khoản phí cho mỗi lần thực hiện một lệnh (như một dòng mã).
Bạn cần đặt mức gas tối đa có thể chi tiêu cho một cuộc gọi hợp đồng cụ thể. Ví dụ: nếu mã bạn gọi đi vào một vòng lặp mãi mãi, nó sẽ đảm bảo rằng lượng gas sử dụng trong quá trình thực thi sẽ không vượt quá mức gas tối đa đã đặt.
Chi phí gas (thực thi) được xác định bởi các công cụ khai thác (nút chạy mã) của mạng. Vẫn còn rất nhiều điều để tìm hiểu về gas và cách thực hiện. Nhưng những điều trên đáng để ghi nhớ.
tiêu đề phụ
Hợp đồng thông minh hoạt động như thế nào?
myObjectReference.myFunction(parameters);
Khi một hợp đồng thông minh được triển khai vào mạng Ethereum, bất kỳ ai cũng có thể gọi các chức năng của hợp đồng thông minh. Mặc dù chức năng này có thể ngăn mọi người gọi nó vì lý do bảo mật, nhưng bạn có thể tự do thử nghiệm.
myVariable = myObject.myFunction(parameters);
Giả sử có một đối tượng kiểu MyObject. Đối tượng này có một chức năng được gọi là myFunction. Để gọi nó, chỉ cần tham chiếu đến thể hiện của đối tượng, gọi hàm nào và gọi với tham số nào.
như thế này:
Gọi một hợp đồng thông minh về mặt khái niệm là giống nhau. Sự khác biệt duy nhất là bạn phải đưa tất cả thông tin về cuộc gọi vào một giao dịch, ký tên và gửi đến mạng để thực hiện.
Giả sử bạn muốn gọi hàm myFunction, chứa một số tham số trong hợp đồng thông minh "0x0123456". Có bốn bước để gọi một hợp đồng thông minh:
Bây giờ, khi một giao dịch được đưa vào một khối trong chuỗi khối, thay đổi trạng thái đó được ghi lại trên toàn mạng.
tiêu đề phụ
máy tính thế giới
Nhưng hãy nhớ rằng: mặc dù các hợp đồng thông minh đã hoàn thiện Turing và về mặt lý thuyết có thể làm bất cứ điều gì, nhưng chúng không phù hợp lắm cho công việc tính toán nặng nhọc.

Hợp đồng yêu cầu tính toán càng nhiều thì càng tốn kém để thực hiện. Hợp đồng càng phức tạp thì càng có nhiều khả năng có lỗ hổng bảo mật. Và các lỗ hổng bảo mật trong hợp đồng thông minh rất khó xử lý — xét cho cùng thì chuỗi khối là bất biến.
tiêu đề phụ
Ví dụ: Mã thông báo
chữ
Quay lại vấn đề chính, tôi muốn giải thích cách thức hoạt động của các mã thông báo.
Hầu hết các mã thông báo này được tạo trên Ethereum và khái niệm này rất đơn giản (nó hoạt động tốt, nhưng đơn giản đến mức gần như ngu ngốc).
Làm cách nào để bạn viết một hệ thống tiền tệ đơn giản bằng Javascript hoặc ngôn ngữ lập trình khác?Bạn có thể làm tất cả trong một tệp. Những gì bạn thực sự cần phải đăng nhập là:
1. Tổng cung
2. Tài khoản

3. Số dư trong tài khoản
4. Dòng vốn

Với ánh xạ đơn giản giữa người dùng và số dư, bạn có thể nhận được câu trả lời cho 123:

Bản đồ chỉ ánh xạ một tài khoản thành một khoản tiền.
Sử dụng hàm tạo, bạn có thể đặt nguồn cung cấp ban đầu trong tài khoản của riêng mình (hoặc trải rộng nó trên bất kỳ số lượng tài khoản nào)

Việc chuyển tiền được thực hiện thông qua các chức năng đơn giản trừ từ một tài khoản và thêm vào một tài khoản khác.


