我查阅了很多payable()函数的示例,但我一个都没看懂,其中他们还谈论到了payable()函数中的修饰符。我的问题是:

payable()函数究竟能做什么呢?

这个函数传递参数吗?

原文地址

3 人回答 0

3 个回答
投票数
最旧发布
最近发布

回答发布于 2018-09-10 15:04:46

首先,payable是可添加到函数上的修饰符。你最可能误解的一个案例如下所示:

function () public payable {}  

payable()是不可能作为一个函数名的,因为它是一个被保留的关键字。除了现有功能外,你可能会这么使用payable

function deposit() payable {};
function register(address sender) payable {};

其次,Payable允许函数在被调用时接收以太币,如文档中所述。 从Solidity 0.4.x开始强制要求必须包含Payable关键字。 如果你尝试使用call发送ether,如下所示:

token.foo.call.value("ETH_TO_BE_SENT")("ADDITIONAL_DATA")

对于没有payable修饰符的函数,该交易将被拒绝。

通常,有一种匿名函数可以接受以太币并被发送到一个合约中——我们称为fallback函数:

function () payable {}; 

但是,你可能拥有多个用于执行不同任务的payable函数,例如在合约中注册存款:

function deposit() payable {
  deposits[msg.sender] += msg.value;
}; 
||
||

回答发布于 2018-09-10 15:04:45

当有人将资金转移到你的合约时,带有payable修饰符的函数会自动执行。 以下是一个payable函数的示例。

contract token {    
  function () payable {
    create(msg.sender);
  }
  function create(address _beneficiary) payable{
    uint256 amount = msg.value;
    /// your logic
  }
}
||
||

回答发布于 2018-09-10 15:04:44

每一个带有payable修饰符的函数都可以接收资金。 但是,如果资金被发送到你合约中不具备payable修饰符的函数,那该怎么办? 为此,定义了fallback payable function(回退支付函数),无论如何都可以接受到被发送到合约中的资金 这就是为什么在许多合约中可以看到一些没有函数名并带有payable修饰符的函数。 注意——这是一个fallback payable function(回退支付函数)。 但是payable不是函数名,函数是匿名的,它的功能是修饰符。

function *noname* () payable { }
||
||

回答发布于 2018-09-10 15:04:44

每一个带有payable修饰符的函数都可以接收资金。 但是,如果资金被发送到你合约中不具备payable修饰符的函数,那该怎么办? 为此,定义了fallback payable function(回退支付函数),无论如何都可以接受到被发送到合约中的资金 这就是为什么在许多合约中可以看到一些没有函数名并带有payable修饰符的函数。 注意——这是一个fallback payable function(回退支付函数)。 但是payable不是函数名,函数是匿名的,它的功能是修饰符。

function *noname* () payable { }
||
||

回答发布于 2018-09-10 15:04:45

当有人将资金转移到你的合约时,带有payable修饰符的函数会自动执行。 以下是一个payable函数的示例。

contract token {    
  function () payable {
    create(msg.sender);
  }
  function create(address _beneficiary) payable{
    uint256 amount = msg.value;
    /// your logic
  }
}
||
||

回答发布于 2018-09-10 15:04:46

首先,payable是可添加到函数上的修饰符。你最可能误解的一个案例如下所示:

function () public payable {}  

payable()是不可能作为一个函数名的,因为它是一个被保留的关键字。除了现有功能外,你可能会这么使用payable

function deposit() payable {};
function register(address sender) payable {};

其次,Payable允许函数在被调用时接收以太币,如文档中所述。 从Solidity 0.4.x开始强制要求必须包含Payable关键字。 如果你尝试使用call发送ether,如下所示:

token.foo.call.value("ETH_TO_BE_SENT")("ADDITIONAL_DATA")

对于没有payable修饰符的函数,该交易将被拒绝。

通常,有一种匿名函数可以接受以太币并被发送到一个合约中——我们称为fallback函数:

function () payable {}; 

但是,你可能拥有多个用于执行不同任务的payable函数,例如在合约中注册存款:

function deposit() payable {
  deposits[msg.sender] += msg.value;
}; 
||
||

回答发布于 2018-09-10 15:04:46

首先,payable是可添加到函数上的修饰符。你最可能误解的一个案例如下所示:

function () public payable {}  

payable()是不可能作为一个函数名的,因为它是一个被保留的关键字。除了现有功能外,你可能会这么使用payable

function deposit() payable {};
function register(address sender) payable {};

其次,Payable允许函数在被调用时接收以太币,如文档中所述。 从Solidity 0.4.x开始强制要求必须包含Payable关键字。 如果你尝试使用call发送ether,如下所示:

token.foo.call.value("ETH_TO_BE_SENT")("ADDITIONAL_DATA")

对于没有payable修饰符的函数,该交易将被拒绝。

通常,有一种匿名函数可以接受以太币并被发送到一个合约中——我们称为fallback函数:

function () payable {}; 

但是,你可能拥有多个用于执行不同任务的payable函数,例如在合约中注册存款:

function deposit() payable {
  deposits[msg.sender] += msg.value;
}; 
||
||

回答发布于 2018-09-10 15:04:45

当有人将资金转移到你的合约时,带有payable修饰符的函数会自动执行。 以下是一个payable函数的示例。

contract token {    
  function () payable {
    create(msg.sender);
  }
  function create(address _beneficiary) payable{
    uint256 amount = msg.value;
    /// your logic
  }
}
||
||

回答发布于 2018-09-10 15:04:44

每一个带有payable修饰符的函数都可以接收资金。 但是,如果资金被发送到你合约中不具备payable修饰符的函数,那该怎么办? 为此,定义了fallback payable function(回退支付函数),无论如何都可以接受到被发送到合约中的资金 这就是为什么在许多合约中可以看到一些没有函数名并带有payable修饰符的函数。 注意——这是一个fallback payable function(回退支付函数)。 但是payable不是函数名,函数是匿名的,它的功能是修饰符。

function *noname* () payable { }
||
||