diff --git a/cic/data/token_template_v0.json b/cic/data/token_template_v0.json index 91ae41e..06afef1 100644 --- a/cic/data/token_template_v0.json +++ b/cic/data/token_template_v0.json @@ -3,6 +3,6 @@ "symbol": "", "precision": 0, "code": null, + "supply": 0, "extra": {} } - diff --git a/cic/ext/eth/__init__.py b/cic/ext/eth/__init__.py index 1797aec..43815a5 100644 --- a/cic/ext/eth/__init__.py +++ b/cic/ext/eth/__init__.py @@ -25,6 +25,7 @@ from hexathon import add_0x from eth_token_index import TokenUniqueSymbolIndex from eth_address_declarator import Declarator from eth_address_declarator.declarator import AddressDeclarator +from giftable_erc20_token import GiftableToken # local imports from cic.ext.eth.rpc import parse_adapter @@ -155,10 +156,22 @@ class CICEth(Extension): if r == None: r = code - - writer.write('token_address', self.token_address.encode('utf-8')) writer.write('token', r.encode('utf-8')) + writer.write('token_address', self.token_address.encode('utf-8')) self.add_outputs('token', r.encode('utf-8')) + + if self.token_details['supply'] > 0: + c = GiftableToken(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle, gas_oracle=self.fee_oracle) + o = c.mint_to(self.token_address, self.resources['token']['key_account'], self.resources['token']['key_account'], self.token_details['supply']) + r = None + if self.rpc != None: + r = self.rpc.do(o[1]) + self.rpc.wait(r) + elif self.signer != None: + r = o[1] + else: + r = o + writer.write('token_supply', r.encode('utf-8')) return r diff --git a/cic/extension.py b/cic/extension.py index 7e8e36d..80e2186 100644 --- a/cic/extension.py +++ b/cic/extension.py @@ -23,15 +23,16 @@ class Extension: # TODO: apply / prepare token can be factored out def apply_token(self, token): - return self.prepare_token(token.name, token.symbol, token.precision, token.code) + return self.prepare_token(token.name, token.symbol, token.precision, token.code, token.supply) - def prepare_token(self, name, symbol, precision, code, extra=[], extra_types=[], positions=None): + def prepare_token(self, name, symbol, precision, code, supply, extra=[], extra_types=[], positions=None): self.token_details = { 'name': name, 'symbol': symbol, 'precision': precision, 'code': code, + 'supply': supply, 'extra': extra, 'extra_types': extra_types, 'positions': positions, diff --git a/cic/token.py b/cic/token.py index 6b0901b..9e2f996 100644 --- a/cic/token.py +++ b/cic/token.py @@ -33,6 +33,7 @@ class Token(Data): self.symbol = o['symbol'] self.precision = o['precision'] self.code = o['code'] + self.supply = o['supply'] self.extra_args = o['extra'] self.inited = True @@ -51,6 +52,7 @@ class Token(Data): o['symbol'] = self.symbol o['precision'] = self.precision o['code'] = self.code + o['supply'] = self.supply f = open(self.token_path, 'w') json.dump(o, f)