035.Solidity入门——22 payable

payable 关键字用于声明一个函数或合约可以接收代币的转账,当 payable 关键字用于函数声明时,该函数可以被调用者附带一定数量的代币,从而执行一些特殊的操作。

示例代码:


contract MyContract {
    
    // 定义一个 payable 函数,接收转账
    function myPayableFunction() public payable {
        // 在函数体内进行一些操作,例如修改数据等
    }
    
    // 定义一个函数,将代币转账到指定的地址
    function sendEther(address payable _to) public payable {
        // 检查合约余额是否充足,以及传入的 _to 地址是否有效
        require(address(this).balance >= msg.value && _to != address(0));
        // 将代币转账到指定地址
        _to.transfer(msg.value);
    }
}

注:

myPayableFunction: 声明时使用了 payable 关键字,表示该函数可以接收代币的转账。函数体内的操作可以根据实际需要进行修改。

sendEther: 函数中 address payable类型来表示可接收代币的地址。 require 语句来确保合约余额充足且传入的 _to 地址有效,满足条件后使用 transfer 函数将代币转账到指定地址。

使用 payable 函数会影响合约的 gas 费用。当外部账户调用 payable 函数时,需要支付 gas 费用来执行该函数。如果没有足够的 gas 费用,函数将无法执行。合约内部不能直接发送代币到普通地址(不具备接收代币能力的地址),否则将导致转账失败并消耗 gas 费用。如果需要将代币发送到普通地址,可以使用 selfdestruct 函数。

猜你喜欢

转载自blog.csdn.net/qq_35369459/article/details/129103393