Soliditas Minimalis Primer|Pelajaran 20: Mengirim transfer, kirim, dan panggilan ETH

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

Solidity memiliki tiga cara untuk mengirim ETH ke kontrak lain, yaitu: transfer(), send(), dan call(), di mana call() adalah penggunaan yang dianjurkan.

Terima kontrak ETH

Mari kita mulai dengan menerapkan kontrak untuk menerima ETH, ReceiveETH. Ada log peristiwa dalam kontrak ReceiveETH yang mencatat jumlah ETH yang diterima dan gas yang tersisa. Ada juga dua fungsi, satu adalah receive(), yang dipicu ketika ETH diterima dan mengirim peristiwa log, dan yang lainnya adalah getBalance() untuk menanyakan saldo ETH kontrak.

Setelah menyebarkan kontrak, jalankan fungsi getBalance(), dan Anda dapat melihat bahwa saldo ETH dari kontrak saat ini adalah 0.

Kirim kontrak ETH

Kami akan menerapkan tiga cara untuk mengirim ETH ke kontrak ReceiveETH. Pertama, kami menerapkan konstruktor hutang dan receive() dalam kontrak SendETH yang mengirimkan kontrak ETH, memungkinkan kami mentransfer uang ke kontrak pada dan setelah penerapan.

transfer

  • Penggunaan adalah transfer.

  • transfer() memiliki batas gas 2300, yang cukup untuk transfer, tetapi fungsi fallback() atau receive() dari kontrak lain tidak dapat menerapkan logika yang terlalu rumit.

  • transfer() secara otomatis kembali jika transfer gagal.

Untuk contoh kode, perhatikan _to dalam parameter Masukkan alamat kontrak ReceiveETH, dan jumlahnya adalah jumlah transfer ETH:

kirim

  • Penggunaannya adalah send (jumlah ETH yang dikirim).

  • Batas gas send() adalah 2300, yang cukup untuk transfer, tetapi fungsi fallback() atau receive() dari kontrak lain tidak dapat menerapkan logika yang terlalu rumit.

  • send() tidak akan kembali jika transfer gagal.

  • Nilai pengembalian send() adalah bool, yang berarti transfer berhasil atau gagal, dan memerlukan kode tambahan untuk menanganinya.

Contoh kode:

panggilan

  • Penggunaannya adalah call{value: jumlah ETH yang dikirim}(“”).

  • call() tidak memiliki batas gas dan dapat mendukung fungsi fallback() atau receive() dari kontrak lain untuk mengimplementasikan logika kompleks.

  • call() tidak akan kembali jika transfer gagal.

  • call() mengembalikan (bool, data), di mana bool mewakili transfer yang berhasil atau gagal, yang memerlukan kode tambahan untuk ditangani.

Contoh kode:

Menjalankan ketiga metode tersebut, Anda dapat melihat bahwa semuanya dapat berhasil mengirim ETH ke kontrak ReceiveETH.

Ringkasan

Dalam pembicaraan ini, kami akan memperkenalkan tiga metode soliditas untuk mengirim ETH: transfer, kirim dan panggil.

Call tidak memiliki batas gas, adalah yang paling fleksibel, dan merupakan metode yang paling direkomendasikan, transfer memiliki batas gas 2300, tetapi jika gagal mengirim, itu akan secara otomatis mengembalikan transaksi, yang merupakan pilihan terbaik kedua, dan kirim memiliki batas gas 2300, dan jika gagal mengirim, itu tidak akan secara otomatis mengembalikan transaksi, dan hampir tidak ada yang menggunakannya.

Lihat Asli
Halaman ini mungkin berisi konten pihak ketiga, yang disediakan untuk tujuan informasi saja (bukan pernyataan/jaminan) dan tidak boleh dianggap sebagai dukungan terhadap pandangannya oleh Gate, atau sebagai nasihat keuangan atau profesional. Lihat Penafian untuk detailnya.
  • Hadiah
  • Komentar
  • Posting ulang
  • Bagikan
Komentar
0/400
Tidak ada komentar
  • Sematkan

Perdagangkan Kripto Di Mana Saja Kapan Saja
qrCode
Pindai untuk mengunduh aplikasi Gate
Komunitas
Bahasa Indonesia
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)