ERC20 Token 在没有所有者的情况下成功部署

ERC20 Token successfully deploy without owner

我已经将我的 ERC20 代币合约部署到 Rospten 网络上,当我检查 Etherscan 时,我看不到我的账户出现在持有者列表中。这是为什么?

0x88BAcDE95d741729aaF399e75ac14dB971f72f30

请指教

ERC20 Token source code

部署 ERC20 合约不会使您的地址成为令牌的持有者。

你可以 mint 令牌到你的帐户,因为你是合同的所有者。

Etherscan 通过观察 Transfer 事件来确定代币余额。在你的构造函数中:

constructor()
    public
{
    totalSupply_ = INITIAL_SUPPLY;
    balances[msg.sender] = totalSupply_;
}

您正在将 totalSupply_ 分配给 msg.sender 的余额,但没有发出事件 Etherscan 不知道这一点。

处理代币铸造事件的典型方法是将转账显示为源自 0x00。将以下行添加到构造函数中,余额将在 Etherescan 和其他区块浏览器上正确显示。

emit Transfer(address(0), msg.sender, totalSupply_);

创建 ERC20 令牌时,您需要铸造令牌并将它们移动到一个地址或地址列表。

如果您不想在合约中硬编码任何地址,您可以将所有代币发送到部署者地址,例如 this guide。然后,您可以使用该帐户随心所欲地分发您的代币。

如果您想查看初始所有者,则可以通过将其添加到您的 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
    }
}

不过,除非你需要使用这个地址,否则没有必要public。只要交易是用管理员的密钥签名的,你就可以随时将代币从管理员地址转移到任何你想要的人。