Ejemplo n.º 1
0
 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
Ejemplo n.º 2
0
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')
Ejemplo n.º 3
0
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')
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
 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
Ejemplo n.º 7
0
 def creates(self):
     "returns the address of a contract created by this tx"
     if self.to == '':
         return mk_contract_address(self.sender, self.nonce)
Ejemplo n.º 8
0
 def creates(self):
     "returns the address of a contract created by this tx"
     if self.to == '':
         return mk_contract_address(self.sender, self.nonce)