Memulai dengan Soliditas|Pelajaran 21: Memohon Kontrak Lain

律动

Baru-baru ini saya mempelajari kembali soliditas, mengkonsolidasikan detailnya, dan menulis “Solidity Minimalist Primer” untuk digunakan pemula (orang pemrograman dapat menemukan tutorial lain), diperbarui 1-3 kali seminggu.

Semua kode dan tutorial adalah open source di github:github.com/AmazingAng/WTFSolidity

Panggil kontrak yang dikerahkan

Pengembang menulis kontrak pintar untuk meminta kontrak lain, yang memungkinkan program di jaringan Ethereum digunakan kembali, sehingga membangun ekosistem yang berkembang. Banyak proyek web3 mengandalkan penerapan kontrak lain, seperti yield farming. Dalam pembicaraan ini, kami akan menunjukkan kepada Anda bagaimana memanggil fungsi kontrak target ketika kode kontrak (atau antarmuka) dan alamat diketahui.

Target kontrak

Mari kita mulai dengan menulis kontrak sederhana, OtherContract, untuk menyebutnya.

Kontrak ini berisi variabel status x, log peristiwa yang dipicu saat ETH diterima, dan tiga fungsi:

getBalance(): Mengembalikan saldo ETH kontrak.

setX(): fungsi hutang eksternal, yang dapat mengatur nilai x dan mengirim ETH ke kontrak.

getX(): Membaca nilai x.

Panggil kontrak OtherContract

Kita dapat membuat referensi ke kontrak menggunakan alamat kontrak dan kode kontrak (atau antarmuka): _Name(_Address), di mana _Name adalah nama kontrak dan _Address adalah alamat kontrak. Kemudian panggil fungsinya dengan mengacu pada kontrak: _Name(_Address).f(), di mana f() adalah fungsi yang akan dipanggil.

Berikut adalah 4 contoh memohon kontrak:

1. Berikan alamat kontrak

Kita dapat meneruskan alamat kontrak target ke dalam fungsi, menghasilkan referensi ke kontrak target, dan kemudian memanggil fungsi target. Misalnya, kita menulis fungsi callSetX dalam kontrak baru, meneruskan alamat kontrak OtherContract yang disebarkan _Address dan parameter setX x:

2. Meneruskan variabel kontrak

Kita dapat langsung meneruskan referensi kontrak dalam fungsi, dan hanya perlu mengubah jenis alamat parameter di atas ke nama kontrak target, yang lebih baik daripada OtherContract. Contoh berikut mengimplementasikan fungsi getX() yang memanggil kontrak target.

3. Membuat variabel kontrak

Kita dapat membuat variabel kontrak dan kemudian menggunakannya untuk memanggil fungsi objektif. Dalam contoh berikut, kami menyimpan referensi ke kontrak OtherContract untuk variabel oc:

4. Hubungi kontrak dan kirim ETH

Jika fungsi kontrak target dibayarkan, maka kita dapat mentransfer uang ke kontrak dengan menyebutnya: _Name(_Address).f{value: _Value}(), di mana _Name adalah nama kontrak, _Address adalah alamat kontrak, f adalah nama fungsi objektif, dan _Value adalah jumlah ETH yang akan ditransfer (dalam wei).

Fungsi setX dari kontrak OtherContract harus dibayarkan, dan dalam contoh berikut, kami mentransfer uang ke dan dari kontrak target dengan memanggil setX.

Setelah transfer, kita dapat mengamati perubahan saldo ETH dari kontrak target melalui peristiwa Log dan fungsi getBalance().

Ringkasan

Dalam pembicaraan ini, kami akan menunjukkan kepada Anda cara membuat referensi ke kontrak melalui kode kontrak target (atau antarmuka) dan alamat, sehingga dapat memanggil fungsi kontrak target.

Penafian: Informasi di halaman ini dapat berasal dari pihak ketiga dan tidak mewakili pandangan atau opini Gate. Konten yang ditampilkan hanya untuk tujuan referensi dan bukan merupakan nasihat keuangan, investasi, atau hukum. Gate tidak menjamin keakuratan maupun kelengkapan informasi dan tidak bertanggung jawab atas kerugian apa pun yang timbul akibat penggunaan informasi ini. Investasi aset virtual memiliki risiko tinggi dan rentan terhadap volatilitas harga yang signifikan. Anda dapat kehilangan seluruh modal yang diinvestasikan. Harap pahami sepenuhnya risiko yang terkait dan buat keputusan secara bijak berdasarkan kondisi keuangan serta toleransi risiko Anda sendiri. Untuk detail lebih lanjut, silakan merujuk ke Penafian.
Komentar
0/400
Tidak ada komentar