我已将我的 ERC20 代币合约部署到 Rospten 网络上,当我查看 Etherscan 时,我看不到我的账户出现在持有人列表中。这是为什么 ?
0x88BAcDE95d741729aaF399e75ac14dB971f72f30
请指教
我已将我的 ERC20 代币合约部署到 Rospten 网络上,当我查看 Etherscan 时,我看不到我的账户出现在持有人列表中。这是为什么 ?
0x88BAcDE95d741729aaF399e75ac14dB971f72f30
请指教
创建 ERC20 代币时,您需要铸造代币并将它们移动到一个地址或地址列表。
例如,如果您不想对合约中的任何地址进行硬编码,您可以按照本指南将所有代币发送到部署者地址。然后,您可以使用该帐户随意分配您的代币。
如果您想查看初始所有者,则可以通过将其添加到您的 ERC20 构造函数来实现。
contract MyToken is ERC20 {
address public admin;
constructor() ERC20("dust", "P2PM") {
_mint(msg.sender, 1000000 * 10 ** decimals());
admin = msg.sender; // Sets admin address in blockchain
}
}
但是,除非您需要使用此地址,否则无需将其公开。只要交易是使用管理员密钥签署的,您就可以随时将令牌从管理员地址转移到您想要的任何人。
部署 ERC20 合约不会使您的地址成为代币的持有者。
不过,您可以mint
代币到您的帐户,因为您是合约的所有者。
Etherscan 通过观察Transfer
事件来确定代币余额。在您的构造函数中:
constructor()
public
{
totalSupply_ = INITIAL_SUPPLY;
balances[msg.sender] = totalSupply_;
}
您正在分配totalSupply_
tomsg.sender
的余额,但没有发出事件 Etherscan 不知道这一点。
处理代币铸造事件的典型方法是将转移显示为来自0x00
. 将以下行添加到构造函数中,余额应在 Etherescan 和其他区块浏览器上正确显示。
emit Transfer(address(0), msg.sender, totalSupply_);