if type(arg) in (int, long): return 'i' if type(arg) == list: return 'a' else: return 's' def safe_eval(thing): try: return eval(thing) except: return thing if __name__ == '__main__': c = contracts[sys.argv[1]] func = sys.argv[2] args = map(safe_eval, sys.argv[3:]) sig = reduce(lambda a, b: a + get_sym(b), args, '') data = abi_data(func, sig, args) rpc = GethRPC() coinbase = rpc.eth_coinbase()['result'] result = rpc.eth_sendTransaction(sender=coinbase, gas=hex(3000000), to=c, data=data) rpc.eth_getTransactionByHash(result['result']) rpc.eth_call('pending', sender=coinbase, gas=hex(3000000), to=c, data=data)
'transferShares' : '0x78da82256f5775df22eee51096d27666772b592d', } def get_sym(arg): if type(arg) in (int, long): return 'i' if type(arg) == list: return 'a' else: return 's' def safe_eval(thing): try: return eval(thing) except: return thing if __name__ == '__main__': c = contracts[sys.argv[1]] func = sys.argv[2] args = map(safe_eval, sys.argv[3:]) sig = reduce(lambda a, b: a+get_sym(b), args, '') data = abi_data(func, sig, args) rpc = GethRPC() coinbase = rpc.eth_coinbase()['result'] result = rpc.eth_sendTransaction( sender=coinbase, gas=hex(3000000), to=c, data=data) rpc.eth_getTransactionByHash(result['result']) rpc.eth_call('pending', sender=coinbase, gas=hex(3000000), to=c, data=data)
def get_sig(args): '''Creates the corresponding serpent signature for the given list of objects.''' return reduce(lambda a, b: a+get_sym(b), args, '') def confirmed_send(**kwds): txhash = RPC.eth_sendTransaction(**kwds)['result'] tries = 0 while tries < MAXTRIES: time.sleep(BLOCKTIME) result = RPC.eth_getTransactionByHash(txhash) if result['result'] == None: return confirmed_send(**kwds) if result['result']['blockHash'] != None: break tries += 1 return tries < MAXTRIES if __name__ == '__main__': contract_name = sys.argv[1] contract_addr = json.loads(DB.Get(contract_name))['address'] args = get_args() sig = get_sig(args) funcname = sys.argv[2] abi = abi_data(funcname, sig, args) if '--call' in sys.argv: RPC.eth_call(sender=COINBASE, to=contract_addr, data=abi, gas=GAS) if '--sendtx' in sys.argv: result = confirmed_send(sender=COINBASE, to=contract_addr, data=abi, gas=GAS) if not result: raise ValueError('transaction failed!')