一个使用智能合约对外部账户进行转账的例子

950 阅读2分钟
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;

/**
 一个使用智能合约对外部账户进行转账的例子
 */
contract TransferDemo {
    function transfer() public payable {
        address payable externalAccount=payable(0xa20c11bf902CeC591998131274a8B931Af490AE4);
        externalAccount.transfer(msg.value);
    }
}

这是一个 Solidity 智能合约示例,演示如何将以太币从经由合约转账到一个外部账户。TransferDemo 是一个合约名,transfer 是合约中的一个函数名,该函数是公开的(public)并且是有偿的(payable),这意味着可以从外部调用该函数,并且可以向其发送以太币。在函数内部,声明了一个外部账户地址(这是一个0x开头,拼接一个20字节16进制而成的字符串),并初始化为 0xa20c11bf902CeC591998131274a8B931Af490AE4。关键字 payable 表示该地址可以接收以太币。最后,调用外部账户的 transfer 函数,将发送到合约的以太币金额转入这个外部账户。

如果转账失败,合约会抛出异常并将以太币退回给发送方(不退gas费)。

另外,转账金额msg.value由发起转账的外部账户指定,这个例子中是10000000Gwei,换算成ETH就是0.01ETH,不过solidity不支持小数,所以你要转0.01ETH就只能写成10000000Gwei image.png

总结一下:

  1. 所有涉及转账的操作,函数名必须定义为payable
  2. 账户/地址(这是一个0x开头,拼接一个20字节16进制而成的字符串)内置了一系列的函数,可以进行查询余额,转账等操作。

扩展: 除了使用transfer转账,你还知道那些转账方式?它们有什么不同?