理论上来说,编译后的合约是不能被修改的,因为它已经被写入区块链中。如果想要修改某个函数,需要重新编写合约、重新部署并向新地址发送代币。如果只想更改代币初始发行量或名称,可以在合约中重新定义构造函数并重新部署。
下面是一个示例:假设我们要修改代币的名称。原合约代码如下:
pragma solidity ^0.6.0;
contract MyToken {
string public name = "My Token";
string public symbol = "MT";
uint public decimals = 18;
uint public totalSupply = 1000000000000000000000000;
mapping(address => uint) public balanceOf;
constructor() public {
balanceOf[msg.sender] = totalSupply;
}
}
要修改名称,只需将构造函数中的名称改为新名称即可:
constructor() public {
balanceOf[msg.sender] = totalSupply;
name = "New Token Name";
}
然后需要重新编译、部署并向新地址发送代币。注意,如果之前已经有人持有了旧合约地址中的代币,他们的代币并不会自动转移到新合约地址中。