- Published on
solidityでetherを受け取るcontractの書き方
スマートコントラクト(solidity)でether(ETH)を受け取るコントラクトの書き方を紹介します。
実はとても簡単で、recieve
とfallback
を定義してあげるだけで送ることができます。
contract Sample { receive() external payable { } fallback() external payable { } function getBalance() public view returns (uint) { return address(this).balance; } }
receive()
はfunctionなしで定義して、msg.data
が空の時に呼ばれます。
fallback()
はmsg.data
があるときやreceive()
がないときに呼ばれます。
この二つを定義してあげれば、etherを受け取ることができるようになります。 これらがないとetherを送るときに下記のようなエラーが出ます。
Error: Transaction reverted: function selector was not recognized and there's no fallback nor receive function
また、etherを送るときは、たとえば、hardhatなら下記のようにして送ることができます。
const [owner] = await ethers.getSigners(); const transactionHash = await owner.sendTransaction({ to: "contract address", value: ethers.utils.parseEther("1.0"), // Sends exactly 1.0 ether });
What is the receive keyword in solidity?
Sending Ether (transfer, send, call)
How can I test sending Ether to a contract with a payable
receive function?