def mk_instance_address(self, native_contract, sender, nonce): assert native_contract.address.startswith( self.native_contract_address_prefix) addr = '\0' * 4 addr += processblock.mk_contract_address(sender, nonce)[:12] addr += native_contract.address[-4:] return addr
def create_spread(creator_contract): # will create a Spread contract print print 'creating spread contract' tx = client.send_transaction(sender, to=creator_contract, startgas=300000) print 'res', tx spread_contract = mk_contract_address(creator_contract.decode('hex'), nonce=0) return spread_contract.encode('hex')
def create_spread(creator_contract): # will create a Spread contract print print 'creating spread contract' tx = client.send_transaction(sender, to=creator_contract, startgas=300000) print 'res', tx spread_contract = mk_contract_address(creator_contract.decode('hex'), nonce=0) return spread_contract.encode('hex')
def sendTransaction(self, data): """ extend spec to support v,r,s signed transactions """ if not isinstance(data, dict): raise BadRequestError('Transaction must be an object') def get_data_default(key, decoder, default=None): if key in data: return decoder(data[key]) return default to = get_data_default('to', address_decoder, b'') gas_key = 'gas' if 'gas' in data else 'startgas' startgas = get_data_default(gas_key, quantity_decoder, default_startgas) gasprice_key = 'gasPrice' if 'gasPrice' in data else 'gasprice' gasprice = get_data_default(gasprice_key, quantity_decoder, default_gasprice) value = get_data_default('value', quantity_decoder, 0) data_ = get_data_default('data', data_decoder, b'') v = signed = get_data_default('v', quantity_decoder, 0) r = get_data_default('r', quantity_decoder, 0) s = get_data_default('s', quantity_decoder, 0) nonce = get_data_default('nonce', quantity_decoder, None) sender = get_data_default('from', address_decoder, self.app.services.accounts.coinbase) assert len(sender) == 20 # create transaction if signed: assert nonce is not None, 'signed but no nonce provided' assert v and r and s else: nonce = self.app.services.chain.chain.head_candidate.get_nonce(sender) tx = Transaction(nonce, gasprice, startgas, to, value, data_, v, r, s) tx._sender = None print tx.log_dict() if not signed: assert sender in self.app.services.accounts, 'no account for sender' self.app.services.accounts.sign_tx(sender, tx) self.app.services.chain.add_transaction(tx, origin=None) log.debug('decoded tx', tx=tx.log_dict()) if to == b'': # create return address_encoder(processblock.mk_contract_address(tx.sender, nonce)) else: return data_encoder(tx.hash)
def sendTransaction(self, data): """ extend spec to support v,r,s signed transactions """ if not isinstance(data, dict): raise BadRequestError('Transaction must be an object') def get_data_default(key, decoder, default=None): if key in data: return decoder(data[key]) return default to = get_data_default('to', address_decoder, b'') startgas = get_data_default('gas', quantity_decoder, default_startgas) gasprice = get_data_default('gasPrice', quantity_decoder, default_gasprice) value = get_data_default('value', quantity_decoder, 0) data_ = get_data_default('data', data_decoder, b'') v = signed = get_data_default('v', quantity_decoder, 0) r = get_data_default('r', quantity_decoder, 0) s = get_data_default('s', quantity_decoder, 0) nonce = get_data_default('nonce', quantity_decoder, None) sender = get_data_default('from', address_decoder, self.app.services.accounts.coinbase) # create transaction if signed: assert nonce is not None, 'signed but no nonce provided' assert v and r and s else: nonce = self.app.services.chain.chain.head_candidate.get_nonce( sender) tx = Transaction(nonce, gasprice, startgas, to, value, data_, v, r, s) if not signed: assert sender in self.app.services.accounts, 'no account for sender' self.app.services.accounts.sign_tx(sender, tx) self.app.services.chain.add_transaction(tx, origin=None) log.debug('decoded tx', tx=tx.to_dict()) if to == b'': # create return address_encoder( processblock.mk_contract_address(tx.sender, nonce)) else: return data_encoder(tx.hash)
def mk_instance_address(self, native_contract, sender, nonce): assert native_contract.address.startswith(self.native_contract_address_prefix) addr = '\0' * 4 addr += processblock.mk_contract_address(sender, nonce)[:12] addr += native_contract.address[-4:] return addr
def creates(self): "returns the address of a contract created by this tx" if self.to == '': return mk_contract_address(self.sender, self.nonce)
def creates(self): "returns the address of a contract created by this tx" if self.to == '': return mk_contract_address(self.sender, self.nonce)