|
@@ -91,21 +91,39 @@ class TokenCommon(MMGenObject):
|
|
|
async def code(self):
|
|
|
return (await self.rpc.call('eth_getCode','0x'+self.addr))[2:]
|
|
|
|
|
|
- def create_data(self,to_addr,amt,method_sig='transfer(address,uint256)',from_addr=None):
|
|
|
+ def create_data(
|
|
|
+ self,
|
|
|
+ to_addr,
|
|
|
+ amt,
|
|
|
+ method_sig = 'transfer(address,uint256)',
|
|
|
+ from_addr = None):
|
|
|
from_arg = from_addr.rjust(64,'0') if from_addr else ''
|
|
|
to_arg = to_addr.rjust(64,'0')
|
|
|
amt_arg = '{:064x}'.format( int(amt / self.base_unit) )
|
|
|
return self.create_method_id(method_sig) + from_arg + to_arg + amt_arg
|
|
|
|
|
|
- def make_tx_in( self,from_addr,to_addr,amt,start_gas,gasPrice,nonce,
|
|
|
- method_sig='transfer(address,uint256)',from_addr2=None):
|
|
|
- data = self.create_data(to_addr,amt,method_sig=method_sig,from_addr=from_addr2)
|
|
|
- return {'to': bytes.fromhex(self.addr),
|
|
|
- 'startgas': start_gas.toWei(),
|
|
|
- 'gasprice': gasPrice.toWei(),
|
|
|
- 'value': 0,
|
|
|
- 'nonce': nonce,
|
|
|
- 'data': bytes.fromhex(data) }
|
|
|
+ def make_tx_in(
|
|
|
+ self,
|
|
|
+ from_addr,
|
|
|
+ to_addr,
|
|
|
+ amt,
|
|
|
+ start_gas,
|
|
|
+ gasPrice,
|
|
|
+ nonce,
|
|
|
+ method_sig = 'transfer(address,uint256)',
|
|
|
+ from_addr2 = None):
|
|
|
+ data = self.create_data(
|
|
|
+ to_addr,
|
|
|
+ amt,
|
|
|
+ method_sig = method_sig,
|
|
|
+ from_addr = from_addr2)
|
|
|
+ return {
|
|
|
+ 'to': bytes.fromhex(self.addr),
|
|
|
+ 'startgas': start_gas.toWei(),
|
|
|
+ 'gasprice': gasPrice.toWei(),
|
|
|
+ 'value': 0,
|
|
|
+ 'nonce': nonce,
|
|
|
+ 'data': bytes.fromhex(data)}
|
|
|
|
|
|
async def txsign(self,tx_in,key,from_addr,chain_id=None):
|
|
|
|
|
@@ -136,17 +154,27 @@ class TokenCommon(MMGenObject):
|
|
|
async def txsend(self,txhex):
|
|
|
return (await self.rpc.call('eth_sendRawTransaction','0x'+txhex)).replace('0x','',1)
|
|
|
|
|
|
- async def transfer( self,from_addr,to_addr,amt,key,start_gas,gasPrice,
|
|
|
- method_sig='transfer(address,uint256)',
|
|
|
- from_addr2=None,
|
|
|
- return_data=False):
|
|
|
+ async def transfer(
|
|
|
+ self,
|
|
|
+ from_addr,
|
|
|
+ to_addr,
|
|
|
+ amt,
|
|
|
+ key,
|
|
|
+ start_gas,
|
|
|
+ gasPrice,
|
|
|
+ method_sig = 'transfer(address,uint256)',
|
|
|
+ from_addr2=None,
|
|
|
+ return_data=False):
|
|
|
tx_in = self.make_tx_in(
|
|
|
- from_addr,to_addr,amt,
|
|
|
- start_gas,gasPrice,
|
|
|
- nonce = int(await self.rpc.call('eth_getTransactionCount','0x'+from_addr,'pending'),16),
|
|
|
- method_sig = method_sig,
|
|
|
- from_addr2 = from_addr2 )
|
|
|
- (txhex,coin_txid) = await self.txsign(tx_in,key,from_addr)
|
|
|
+ from_addr,
|
|
|
+ to_addr,
|
|
|
+ amt,
|
|
|
+ start_gas,
|
|
|
+ gasPrice,
|
|
|
+ nonce = int(await self.rpc.call('eth_getTransactionCount','0x'+from_addr,'pending'),16),
|
|
|
+ method_sig = method_sig,
|
|
|
+ from_addr2 = from_addr2 )
|
|
|
+ txhex,_ = await self.txsign(tx_in,key,from_addr)
|
|
|
return await self.txsend(txhex)
|
|
|
|
|
|
class Token(TokenCommon):
|