-
Notifications
You must be signed in to change notification settings - Fork 12.4k
Closed
Description
🎉 Description
Wanna introduce you the way of token smart contract upgrading without all holders migration by token owner and keeping all allowances.
- 🐛 This is a bug report.
- 📈 This is a feature request.
📝 Details
This technique supports any Pausable tokens. It requires to pause() old contract and to create a new one with passing the address of old contract into the constructor. Holders will migrate their balances and allowances lazily in the first transaction.
🔢 Code To Reproduce Issue [ Good To Have ]
The source code is available here https://github.com/bitclave/TokenWrapper:
- BasicTokenWrapper
- StandardTokenWrapper
- BurnableTokenWrapper
Example of old token contract:
contract MyToken is StandardToken, PausableToken {
string public constant symbol = "MYT";
string public constant name = "MyToken";
uint8 public constant decimals = 18;
string public constant version = "1.0";
function MyToken() public {
totalSupply_ = 1000000 * 10**decimals;
balances[msg.sender] = totalSupply_;
}
}
Example of adding ERC827 approve(address,uint256,bytes) method (usually this will be done with the inheritance from ERC827Token):
contract MyToken2 is StandardTokenWrapper, PausableToken {
string public constant symbol = "MYT";
string public constant name = "MyToken";
uint8 public constant decimals = 18;
string public constant version = "2.0";
function MyToken2(address _token) public StandardTokenWrapper(_token) {
}
// Modern approve method from ERC827
function approve(address _spender, uint256 _value, bytes _data) public returns(bool) {
require(_spender != address(this));
super.approve(_spender, _value);
require(_spender.call(_data));
return true;
}
}
djdeniro, johnjdailey, carlosjs23 and hayeahdjdeniro
Metadata
Metadata
Assignees
Labels
No labels