Add supply cap

This commit is contained in:
lash
2023-02-10 15:58:31 +00:00
parent 3353733405
commit e6eef48808
8 changed files with 96 additions and 61 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -77,16 +77,8 @@ class DemurrageToken(ERC20, SealedContract, ExpiryContract):
__abi = {}
__bytecode = {}
valid_modes = [
'MultiNocap',
'SingleNocap',
'MultiCap',
'SingleCap',
]
def constructor(self, sender_address, settings, cap=0, tx_format=TxFormat.JSONRPC):
if int(cap) < 0:
raise ValueError('cap must be 0 or positive integer')
def constructor(self, sender_address, settings, tx_format=TxFormat.JSONRPC):
code = DemurrageToken.bytecode()
enc = ABIContractEncoder()
enc.string(settings.name)
@@ -95,8 +87,6 @@ class DemurrageToken(ERC20, SealedContract, ExpiryContract):
enc.uint256(settings.demurrage_level)
enc.uint256(settings.period_minutes)
enc.address(settings.sink_address)
if cap > 0:
enc.uint256(cap)
code += enc.get()
tx = self.template(sender_address, None, use_nonce=True)
tx = self.set_code(tx, code)
@@ -109,23 +99,7 @@ class DemurrageToken(ERC20, SealedContract, ExpiryContract):
@staticmethod
def __to_contract_name(multi, cap):
name = 'DemurrageToken'
if multi:
name += 'Multi'
else:
name += 'Single'
if cap:
name += 'Cap'
else:
name += 'Nocap'
logg.debug('bytecode name {}'.format(name))
return name
@staticmethod
def abi(multi=True, cap=False):
#name = DemurrageToken.__to_contract_name(multi, cap)
def abi(multi=True):
name = 'DemurrageTokenSingleNocap'
if DemurrageToken.__abi.get(name) == None:
f = open(os.path.join(data_dir, name + '.json'), 'r')
@@ -135,8 +109,7 @@ class DemurrageToken(ERC20, SealedContract, ExpiryContract):
@staticmethod
def bytecode(multi=True, cap=False):
#name = DemurrageToken.__to_contract_name(multi, cap)
def bytecode(multi=True):
name = 'DemurrageTokenSingleNocap'
if DemurrageToken.__bytecode.get(name) == None:
f = open(os.path.join(data_dir, name + '.bin'), 'r')
@@ -185,6 +158,17 @@ class DemurrageToken(ERC20, SealedContract, ExpiryContract):
return tx
def set_max_supply(self, contract_address, sender_address, cap, tx_format=TxFormat.JSONRPC):
enc = ABIContractEncoder()
enc.method('setMaxSupply')
enc.typ(ABIContractType.UINT256)
enc.uint256(cap)
data = enc.get()
tx = self.template(sender_address, contract_address, use_nonce=True)
tx = self.set_code(tx, data)
tx = self.finalize(tx, tx_format)
return tx
def remove_minter(self, contract_address, sender_address, address, tx_format=TxFormat.JSONRPC):
enc = ABIContractEncoder()
enc.method('removeMinter')
@@ -503,8 +487,8 @@ class DemurrageToken(ERC20, SealedContract, ExpiryContract):
return self.call_noarg('demurrageTimestamp', contract_address, sender_address=sender_address)
def supply_cap(self, contract_address, sender_address=ZERO_ADDRESS):
return self.call_noarg('supplyCap', contract_address, sender_address=sender_address)
def max_supply(self, contract_address, sender_address=ZERO_ADDRESS):
return self.call_noarg('maxSupply', contract_address, sender_address=sender_address)
# def grow_by(self, contract_address, value, period, sender_address=ZERO_ADDRESS, id_generator=None):

View File

@@ -34,7 +34,7 @@ PERIOD = 43200
class TestTokenDeploy:
"""tax level is ppm, 1000000 = 100%"""
def __init__(self, rpc, token_symbol='FOO', token_name='Foo Token', sink_address=ZERO_ADDRESS, supply=10**12, tax_level=TAX_LEVEL, period=PERIOD):
def __init__(self, rpc, token_symbol='FOO', token_name='Foo Token', sink_address=ZERO_ADDRESS, tax_level=TAX_LEVEL, period=PERIOD):
self.tax_level = tax_level
self.period_seconds = period * 60
@@ -60,14 +60,11 @@ class TestTokenDeploy:
except TypeError:
self.start_time = int(r['timestamp'])
self.default_supply = supply
self.default_supply_cap = 0
def deploy(self, rpc, deployer_address, interface, supply_cap=0):
tx_hash = None
o = None
(tx_hash, o) = interface.constructor(deployer_address, self.settings, cap=0)
(tx_hash, o) = interface.constructor(deployer_address, self.settings)
r = rpc.do(o)
o = receipt(tx_hash)
@@ -93,8 +90,8 @@ class TestDemurrage(EthTesterCase):
except AttributeError as e:
pass
self.deployer = TestTokenDeploy(self.rpc, period=period, sink_address=self.accounts[9])
self.default_supply = self.deployer.default_supply
self.default_supply_cap = self.deployer.default_supply_cap
self.default_supply = 0
self.default_supply_cap = 0
self.start_block = None
self.address = None
self.start_time = None
@@ -148,3 +145,6 @@ class TestDemurrageDefault(TestDemurrage):
c = DemurrageToken(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
self.deploy(c)
self.default_supply = 10**12
self.default_supply_cap = self.default_supply