BTC
$96,000
5.73%
ETH
$3,521.91
3.97%
HTX
$0.{5}2273
5.23%
SOL
$198.17
3.05%
BNB
$710
3.05%
lang
简体中文
繁體中文
English
Tiếng Việt
한국어
日本語
ภาษาไทย
Türkçe
Trang chủ
AI AI
Tin nhanh
Bài viết
Sự kiện
BlockBeats Pro
Thêm
Thông tin tài chính
Chuyên đề
Hệ sinh thái chuỗi khối
Mục nhập
Podcast
Data
OPRR
Partnered With:

Giới thiệu đơn giản về Solidity|Bài 20: Gửi ETH, chuyển và gọi

Đọc bài viết này mất 9 phút
Bài viết này giới thiệu ba phương pháp gửi ETH một cách vững chắc: chuyển, gửi và gọi.
Tiêu đề gốc: " Giới thiệu tối giản về Solidity: 20. Gửi chuyển ETH, gửi và gọi 》
Tác giả gốc: 0xAA   


Gần đây tôi đang học lại sự vững chắc, củng cố các chi tiết và viết một "Sự tối giản vững chắc ""Bắt đầu" dành cho người mới học (chuyên gia lập trình có thể tìm bài hướng dẫn khác), với 1-3 bài giảng được cập nhật mỗi tuần.


Tất cả các mã và hướng dẫn đều là nguồn mở trên github: github.com/AmazingAng/WTFSolidity


Solidity Có ba phương thức để gửi ETH đến các hợp đồng khác, đó là: transfer(), send() và call(), trong đó khuyến khích sử dụng call().


Nhận hợp đồng ETH


Trước tiên, chúng tôi triển khai hợp đồng ETH NhậnETH. Có một sự kiện Đăng nhập vào hợp đồng Nhận ETH, ghi lại số ETH nhận được và lượng gas còn lại. Ngoài ra còn có hai hàm, một là get(), được kích hoạt khi nhận ETH và gửi sự kiện Nhật ký; hàm còn lại là getBalance() truy vấn số dư ETH của hợp đồng.



Sau khi triển khai hợp đồng, hãy chạy Hàm getBalance() bạn có thể thấy số dư ETH của hợp đồng hiện tại là 0.


Gửi hợp đồng ETH


Chúng tôi sẽ triển khai ba phương pháp để gửi ETH đến hợp đồng NhậnETH. Đầu tiên, triển khai hàm tạo và nhận() số tiền phải trả trong hợp đồng gửi ETH SendETH, để chúng ta có thể chuyển tiền vào hợp đồng trong và sau khi triển khai.



chuyển 


- Việc sử dụng là chuyển khoản (gửi số lượng ETH).


- Giới hạn gas của transfer() là 2300, tức là đủ cho Chuyển khoản, nhưng chức năng dự phòng() hoặc nhận() trong hợp đồng của bên kia không thể thực hiện logic quá phức tạp.


- transfer() Nếu quá trình truyền không thành công, nó sẽ tự động hoàn nguyên (trả lại giao dịch cuộn).

Mẫu mã, lưu ý rằng _to trong tham số điền địa chỉ của hợp đồng Nhận ETH và số tiền là số tiền chuyển ETH:



send 


- Cách sử dụng là send (send số lượng ETH).


- Giới hạn gas của send() là 2300, tức là đủ cho Chuyển khoản, nhưng chức năng dự phòng() hoặc nhận() trong hợp đồng của bên kia không thể thực hiện logic quá phức tạp.


- send() sẽ không hoàn nguyên nếu quá trình truyền không thành công.


- Giá trị trả về của send() là bool, đại diện cho việc chuyển giao Thành công hay thất bại đều cần có thêm mã để xử lý.


Mẫu mã:



gọi 


- Cách sử dụng là call{value: số lượng ETH đã gửi}("").


- call() không có giới hạn gas và có thể hỗ trợ cái còn lại hàm dự phòng hợp đồng () hoặc hàm get() của bên để triển khai logic phức tạp.


- call() Nếu quá trình chuyển không thành công, nó sẽ không được thực hiện quay trở lại.


- Giá trị trả về của call() là (bool, data ) , trong đó bool thể hiện sự thành công hay thất bại của quá trình chuyển, yêu cầu mã bổ sung để xử lý.


Mẫu mã:



Chạy ba phương pháp và bạn có thể thấy rằng tất cả chúng đều có thể thành công. Gửi ETH đến hợp đồng NhậnETH.


Tóm tắt


Trong bài giảng này, chúng tôi giới thiệu ba phương thức gửi ETH của Solidity: transfer , gửi và gọi.


cuộc gọi không có giới hạn gas, là phương thức linh hoạt nhất và được khuyên dùng nhiều nhất; chuyển khoản có giới hạn 2300 gas, nhưng nếu truyền không thành công, giao dịch sẽ sẽ được tự động hoàn nguyên, đây là lựa chọn tốt thứ hai; Có giới hạn 2300 gas cho việc gửi và giao dịch sẽ không tự động được hoàn nguyên nếu gửi không thành công nên hầu như không có ai sử dụng.   


Liên kết gốc


Chào mừng bạn tham gia cộng đồng chính thức của BlockBeats:

Nhóm Telegram đăng ký: https://t.me/theblockbeats

Nhóm Telegram thảo luận: https://t.me/BlockBeats_App

Tài khoản Twitter chính thức: https://twitter.com/BlockBeatsAsia

举报 Báo lỗi/Báo cáo
Chọn thư viện
Thêm mới thư viện
Hủy
Hoàn thành
Thêm mới thư viện
Chỉ mình tôi có thể nhìn thấy
Công khai
Lưu
Báo lỗi/Báo cáo
Gửi