As we have seen in the previous blog (Ethereum token with adjustable monetary policy), there might be a good idea to design a token with adjustable monetary supply, in a way that there is actually at least two token balances an M0 basic monetary supply and an M1 that is a dynamic multiplication of the basic monetary supply. The following code demonstrates a minimal implementation of such a token. For the first run as a simple sketch, without having some necessary elements for a live system, like Transfer event, safe match functions or token information fields
contract SimpleMonetaryToken {
mapping(address => uint256) m0Balances;
uint256 public monetaryMultiplicator = 110;
uint initialSupply = 10000;
uint initialSupply = 10000;
function SimpleMonetaryToken(){
m0Balances[msg.sender] = initialSupply;
}
function transfer(address _to, uint256 _m1Value) public returns
(bool) {
uint256 _m0Value = (_m1Value * 100) / monetaryMultiplicator;
require(_to != address(0));
require(_m0Value <= m0Balances[msg.sender]);
m0Balances[msg.sender] = m0Balances[msg.sender] - _m0Value;
m0Balances[_to] = m0Balances[_to] + _m0Value;
return true;
}
function balanceOf(address _owner) public view returns (uint256
balance) {
return (m0Balances[_owner] * monetaryMultiplicator) / 100;
}
}
Certainly, the structure should be further tested regarding the possible hackings or attacks. As an example division represents actually a rounding, so it might produces some inconsistencies or possible hackings. On the other hand, due to multiplications with 100, the overflow can be a critical issue.