Bài viết
Chia sẻ kiến thức của bạn.
Làm rõ về hoàn tiền gas và so sánh giữa “yêu cầu” và “hoàn lại” trong hợp đồng thông minh
Chào mọi người,
Tôi đang cố gắng hiểu sâu hơn về các điều kiện nhất định trong phát triển hợp đồng thông minh và tôi có một câu hỏi về một kịch bản cụ thể.
Giả sử có một điều kiện “yêu cầu” trong hợp đồng thông minh phải được đáp ứng. Nếu điều kiện này không thành công, hợp đồng cần hoàn lại tất cả các thay đổi được thực hiện và hoàn lại bất kỳ khí nào được sử dụng trong giao dịch. Câu hỏi của tôi là, quá trình hoàn trả khí hoạt động như thế nào khi xét đến việc khí luôn được tiêu thụ trong quá trình tính toán?
Ngoài ra, tôi đã nghe nói về điều kiện “đảo ngược” nhưng sẽ đánh giá cao một số cách làm rõ về sự khác biệt của nó với “yêu cầu” trong phát triển hợp đồng thông minh.
- Smart Contract
- Solidity
Câu trả lời
1require
Có 3 chức năng để xác nhận trong Solidity:revert
,assert
, và.
Yêu cầu
- Được sử dụng khi bắt đầu một chức năng
- Xác thực chống lại đầu vào bất hợp pháp
- Xác minh các điều kiện trạng thái trước khi thực hiện
- Hoàn tiền xăng còn sót lại
Ví dụ:
require(msg.sender == owner, "Only. owner can execute this action");
Đổi
- Giống với yêu cầu
- Hữu ích cho các cổng luồng logic phức tạp hơn (tức là các khối if-then phức tạp)
- Hoàn tiền xăng còn sót lại
Ví dụ:
revert("Something funky has occured");
Khẳng giả
- Được sử dụng ở cuối một chức năng
- Xác nhận một cái gì đó không thể
- Quan trọng đối với các công cụ phân tích mã tĩnh
- Không hoàn lại lượng khí còn sót lại
Ví dụ:
assert(num >= 0);
Lưu ý rằng require
và revert
chỉ hoàn lại lượng khí còn lại. Bất kỳ khí nào được sử dụng trước tuyên bố đó sẽ được tiêu thụ. Cả hai chức năng này đều sử dụng cùng một opcode REVERT dưới mui xe.
assert
khác vì nó không hoàn lại bất kỳ khí đốt nào và sử dụng tất cả khí có sẵn cho giao dịch. Nó dự kiến sẽ được sử dụng ít thường xuyên hơn và nên được sử dụng để kiểm tra các điều kiện bất thường và không dự kiến xảy ra.
Bạn có biết câu trả lời không?
Hãy đăng nhập và chia sẻ nó.
Solidity is an object-oriented, high-level language for implementing smart contracts. It is a curly-bracket language designed to target the Ethereum Virtual Machine (EVM).
- My ERC721 contract successfully deploys, but I can't verify the contract's source code with hardhat21
- Solidity và ethers.js Tính toán các địa chỉ khác nhau từ cùng một chữ ký21
- không thể hiểu các vị trí là gì (uint256)22
- Làm thế nào để đảo ngược keccak256 trong độ rắn22
- Làm rõ về hoàn tiền gas và so sánh giữa “yêu cầu” và “hoàn lại” trong hợp đồng thông minh21