Gần đây tôi đã học lại solidity, củng cố các chi tiết và viết “Solidity Minimalist Primer” cho người mới bắt đầu sử dụng (những người lập trình có thể tìm thấy một hướng dẫn khác), cập nhật 1-3 lần một tuần.
Tất cả các mã và hướng dẫn là mã nguồn mở tại github: github .com / AmazingAng / WTFSolidity
Các nhà phát triển viết các hợp đồng thông minh để gọi các hợp đồng khác, cho phép các chương trình trên mạng Ethereum được sử dụng lại, do đó xây dựng một hệ sinh thái phát triển mạnh. Nhiều dự án web3 dựa vào việc viện dẫn các hợp đồng khác, chẳng hạn như canh tác năng suất. Trong bài nói chuyện này, chúng tôi sẽ chỉ cho bạn cách gọi hàm của hợp đồng đích khi mã hợp đồng (hoặc giao diện) và địa chỉ được biết.
Hãy bắt đầu bằng cách viết một hợp đồng đơn giản, OtherContract, để gọi nó.
Hợp đồng này chứa biến trạng thái x, nhật ký sự kiện được kích hoạt khi nhận được ETH và ba hàm:
getBalance(): Trả về số dư ETH của hợp đồng.
setX(): hàm phải trả bên ngoài, có thể đặt giá trị của x và gửi ETH đến hợp đồng.
getX(): Đọc giá trị của x.
Chúng ta có thể tạo một tham chiếu đến hợp đồng bằng cách sử dụng địa chỉ của hợp đồng và mã hợp đồng (hoặc giao diện): _Name(_Address), trong đó _Name là tên hợp đồng và _Address là địa chỉ hợp đồng. Sau đó gọi hàm của nó với một tham chiếu đến hợp đồng: _Name(_Address).f(), trong đó f() là hàm được gọi.
Dưới đây là 4 ví dụ về việc gọi hợp đồng:
Chúng ta có thể truyền địa chỉ hợp đồng đích vào hàm, tạo tham chiếu đến hợp đồng đích và sau đó gọi hàm đích. Ví dụ: chúng ta viết một hàm callSetX trong hợp đồng mới, truyền vào địa chỉ hợp đồng OtherContract đã triển khai _Address và tham số x:
Chúng ta có thể chuyển trực tiếp tham chiếu hợp đồng trong hàm và chỉ cần thay đổi loại địa chỉ của tham số trên thành tên hợp đồng đích, tốt hơn OtherContract. Ví dụ sau đây triển khai hàm getX() gọi hợp đồng đích.
Chúng ta có thể tạo một biến hợp đồng và sau đó sử dụng nó để gọi hàm objective. Trong ví dụ sau, chúng ta lưu trữ một tham chiếu đến hợp đồng OtherContract cho biến oc:
Nếu hàm của hợp đồng đích phải trả, thì chúng ta có thể chuyển tiền vào hợp đồng bằng cách gọi nó: _Name(_Address).f{value: _Value}(), trong đó _Name là tên hợp đồng, _Address là địa chỉ hợp đồng, f là tên của hàm khách quan và _Value là số lượng ETH sẽ được chuyển (tính bằng wei).
Hàm setX của hợp đồng OtherContract phải trả và trong ví dụ sau, chúng ta chuyển tiền đến và đi từ hợp đồng đích bằng cách gọi setX.
Sau khi chuyển, chúng ta có thể quan sát sự thay đổi số dư ETH của hợp đồng mục tiêu thông qua sự kiện Log và hàm getBalance().
Trong bài nói chuyện này, chúng tôi sẽ chỉ cho bạn cách tạo tham chiếu đến hợp đồng thông qua mã hợp đồng mục tiêu (hoặc giao diện) và địa chỉ, để gọi các chức năng của hợp đồng đích.