Solidity - Chức năng dự phòng
Chức năng dự phòng là một chức năng đặc biệt có sẵn cho một hợp đồng. Nó có các tính năng sau:
Nó được gọi khi một hàm không tồn tại được gọi trên hợp đồng.
Nó được yêu cầu phải được đánh dấu bên ngoài.
Nó không có tên.
Nó không có đối số
Nó không thể trả lại bất kỳ điều gì.
Nó có thể được xác định một trong mỗi hợp đồng.
Nếu không được đánh dấu là phải trả, nó sẽ ném ra ngoại lệ nếu hợp đồng nhận được ether thuần túy mà không có dữ liệu.
Ví dụ sau đây cho thấy khái niệm về hàm dự phòng cho mỗi hợp đồng.
Thí dụ
pragma solidity ^0.5.0;
contract Test {
uint public x ;
function() external { x = 1; }
}
contract Sink {
function() external payable { }
}
contract Caller {
function callTest(Test test) public returns (bool) {
(bool success,) = address(test).call(abi.encodeWithSignature("nonExistingFunction()"));
require(success);
// test.x is now 1
address payable testPayable = address(uint160(address(test)));
// Sending ether to Test contract,
// the transfer will fail, i.e. this returns false here.
return (testPayable.send(2 ether));
}
function callSink(Sink sink) public returns (bool) {
address payable sinkPayable = address(sink);
return (sinkPayable.send(2 ether));
}
}