Published on

solidityでetherを受け取るcontractの書き方

Authors
  • avatar
    Name
    ssu
    Twitter

スマートコントラクト(solidity)でether(ETH)を受け取るコントラクトの書き方を紹介します。 実はとても簡単で、recievefallbackを定義してあげるだけで送ることができます。

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?