【发布时间】:2022-08-14 07:59:54
【问题描述】:
在文档中,solidity 有这个硬币示例,我阅读了文档,但我无法理解两者的区别和目的是什么? mint 和 send 函数在做什么? send 函数很有意义,但 mint 函数令人困惑。 “向一个地址发送一定数量的新创建币,只能由合约创建者调用”是什么意思
标签: blockchain ethereum solidity smartcontracts remix
在文档中,solidity 有这个硬币示例,我阅读了文档,但我无法理解两者的区别和目的是什么? mint 和 send 函数在做什么? send 函数很有意义,但 mint 函数令人困惑。 “向一个地址发送一定数量的新创建币,只能由合约创建者调用”是什么意思
标签: blockchain ethereum solidity smartcontracts remix
部署硬币合约时,只要您创建一些东西,就没有什么可以使用的。创建硬币的过程称为铸币。
将一定数量的新创建的硬币发送到一个地址 铸币通常被认为是从某处发送硬币。这可能听起来令人困惑,但可以这样想:
如果您想要定期转账:地址(Alice)发送到地址(Bob)
如果你有一个方法要做:address(Nothing) to address(Contract Creator),现在你可以创建硬币了。
只能由合约创建者调用
这是有道理的,因为铸币是凭空创造价值的,而这份合约只允许创造者。
【讨论】:
如果您查看mint 函数,它有这个require 语句:
require(msg.sender==minter)
所以只有“铸币者”可以这样称呼。 “铸币者账户”将创建代币并将代币分发给其他账户或出售代币。所以合约所有者创建者和财务管理员是分开的。在部署合约时设置minter:
// you declare the state variable first
address public _minter;
// you assign a value during the construction of the contract
constructor(address minter_){
_minter=minter_;
}
在面向对象编程中,constructor 在您创建类的实例时被调用。在 Solidity 中,我们在部署合约时创建了一个合约实例。当我们部署合约时,我们必须传递这个参数。如果你在 remix 上部署,你会得到这个:
您必须在框中输入铸币者地址。
send 函数被定义为公共的,所以任何人都可以调用它。在上面的例子中,它只是用来向接收者账户发送一些硬币。
【讨论】: