Beispiel #1
0
    def __init__(self,
                 backend=None,
                 validator=None,
                 normalizer=None,
                 auto_mine_transactions=True,
                 fork_blocks=None):
        if backend is None:
            backend = get_chain_backend()

        if validator is None:
            validator = get_validator()

        if normalizer is None:
            normalizer = get_normalizer_backend()

        self.backend = backend
        self.validator = validator
        self.normalizer = normalizer

        self.auto_mine_transactions = auto_mine_transactions

        if fork_blocks is None:
            fork_blocks = get_default_fork_blocks(self.get_supported_forks())

        unsupported_forks = set(fork_blocks.keys()).difference(self.get_supported_forks())
        if unsupported_forks:
            raise UnknownFork(
                "The following forks are not supported by the backend you are "
                "using: {0}".format(sorted(unsupported_forks))
            )

        for fork_name, fork_block in fork_blocks.items():
            self.set_fork_block(fork_name, fork_block)

        self._reset_local_state()
Beispiel #2
0
 def set_fork_block(self, fork_name, fork_block):
     if fork_name in SUPPORTED_FORKS:
         if fork_block:
             self.fork_blocks[fork_name] = fork_block
     else:
         raise UnknownFork("Unknown fork name: {0}".format(fork_name))
     self.chain.configure_forks()
Beispiel #3
0
 def get_fork_block(self, fork_name):
     if fork_name in SUPPORTED_FORKS:
         return self.fork_blocks.get(fork_name, 0)
     elif fork_name == FORK_STATE_CLEANUP:
         # TODO: get EIP160 rules implemented in py-evm
         return self.fork_blocks.get(fork_name, 0)
     else:
         raise UnknownFork("Unknown fork name: {0}".format(fork_name))
Beispiel #4
0
 def set_fork_block(self, fork_name, fork_block):
     if fork_name in self.get_supported_forks():
         if fork_block is not None:
             self.fork_config[fork_name] = fork_block
         elif fork_block is None:
             self.fork_config.pop(fork_name, None)
     else:
         raise UnknownFork("Unknown fork name: {0}".format(fork_name))
     self.configure_forks()
Beispiel #5
0
 def set_fork_block(self, fork_name, fork_block):
     if fork_name == FORK_HOMESTEAD:
         self.evm.env.config['HOMESTEAD_FORK_BLKNUM'] = fork_block
     elif fork_name == FORK_DAO:
         self.evm.env.config['DAO_FORK_BLKNUM'] = fork_block
     elif fork_name == FORK_ANTI_DOS:
         self.evm.env.config['ANTI_DOS_FORK_BLKNUM'] = fork_block
     elif fork_name == FORK_STATE_CLEANUP:
         self.evm.env.config['CLEARING_FORK_BLKNUM'] = fork_block
     else:
         raise UnknownFork("Unknown fork name: {0}".format(fork_name))
Beispiel #6
0
 def get_fork_block(self, fork_name):
     if fork_name == FORK_HOMESTEAD:
         return self.evm.chain.env.config['HOMESTEAD_FORK_BLKNUM']
     elif fork_name == FORK_DAO:
         return self.evm.chain.env.config['DAO_FORK_BLKNUM']
     elif fork_name == FORK_ANTI_DOS:
         return self.evm.chain.env.config['ANTI_DOS_FORK_BLKNUM']
     elif fork_name == FORK_STATE_CLEANUP:
         return self.evm.chain.env.config['CLEARING_FORK_BLKNUM']
     else:
         raise UnknownFork("Unknown fork name: {0}".format(fork_name))
Beispiel #7
0
 def set_fork_block(self, fork_name, fork_block=0):
     if fork_name == FORK_HOMESTEAD:
         self.evm.env.config['HOMESTEAD_FORK_BLKNUM'] = fork_block
     elif fork_name == FORK_DAO:
         self.evm.env.config['DAO_FORK_BLKNUM'] = fork_block
     elif fork_name == FORK_SPURIOUS_DRAGON:
         self.evm.env.config['ANTI_DOS_FORK_BLKNUM'] = fork_block
         self.evm.env.config['SPURIOUS_DRAGON_FORK_BLKNUM'] = fork_block
     elif fork_name == FORK_TANGERINE_WHISTLE:
         self.evm.env.config['CLEARING_FORK_BLKNUM'] = fork_block
     else:
         raise UnknownFork("Unknown fork name: {0}".format(fork_name))
     self.fork_blocks[fork_name] = fork_block
Beispiel #8
0
 def set_fork_block(self, fork_name, fork_block):
     if fork_name in SUPPORTED_FORKS:
         if fork_block:
             self.fork_blocks[fork_name] = fork_block
     elif fork_name == FORK_STATE_CLEANUP:
         warnings.warn(UserWarning(
             "Py-EVM does not currently support the SpuriousDragon hard fork."
         ))
         # TODO: get EIP160 rules implemented in py-evm
         self.fork_blocks[fork_name] = fork_block
     else:
         raise UnknownFork("Unknown fork name: {0}".format(fork_name))
     self.chain.configure_forks()
Beispiel #9
0
 def set_fork_block(self, fork_name, fork_block):
     if fork_name == FORK_HOMESTEAD:
         self.evm.chain.env.config['HOMESTEAD_FORK_BLKNUM'] = fork_block
     elif fork_name == FORK_DAO:
         # NOTE: REALLY WEIRD HACK to get the dao_fork_blk to accept block 0
         if not fork_block:
             self.evm.chain.env.config['DAO_FORK_BLKNUM'] = 999999999999999
         else:
             self.evm.chain.env.config['DAO_FORK_BLKNUM'] = fork_block
     elif fork_name == FORK_ANTI_DOS:
         self.evm.chain.env.config['ANTI_DOS_FORK_BLKNUM'] = fork_block
     elif fork_name == FORK_STATE_CLEANUP:
         self.evm.chain.env.config['CLEARING_FORK_BLKNUM'] = fork_block
     else:
         raise UnknownFork("Unknown fork name: {0}".format(fork_name))
Beispiel #10
0
    def set_fork_block(self, fork_name, fork_block=0):
        if fork_name == FORK_HOMESTEAD:
            self.evm.chain.env.config['HOMESTEAD_FORK_BLKNUM'] = fork_block
        elif fork_name == FORK_DAO:
            # NOTE: REALLY WEIRD HACK to get the dao_fork_blk to accept block 0
            if not fork_block:
                self.evm.chain.env.config['DAO_FORK_BLKNUM'] = 999999999999999
            else:
                self.evm.chain.env.config['DAO_FORK_BLKNUM'] = fork_block
        elif fork_name == FORK_SPURIOUS_DRAGON:
            # pyethereum seems to use both of these.
            self.evm.chain.env.config['ANTI_DOS_FORK_BLKNUM'] = fork_block
            self.evm.chain.env.config[
                'SPURIOUS_DRAGON_FORK_BLKNUM'] = fork_block
        elif fork_name == FORK_TANGERINE_WHISTLE:
            self.evm.chain.env.config['CLEARING_FORK_BLKNUM'] = fork_block
        elif fork_name == FORK_BYZANTIUM:
            self.evm.chain.env.config['METROPOLIS_FORK_BLKNUM'] = fork_block
        else:
            raise UnknownFork("Unknown fork name: {0}".format(fork_name))

        self.fork_blocks[fork_name] = fork_block
Beispiel #11
0
 def get_fork_block(self, fork_name):
     if fork_name not in self.get_supported_forks():
         raise UnknownFork("Unknown fork: {0}".format(fork_name))
     return self.backend.get_fork_block(fork_name)
Beispiel #12
0
 def get_fork_block(self, fork_name):
     if fork_name in self.get_supported_forks():
         return self.fork_blocks.get(fork_name)
     else:
         raise UnknownFork("Unknown fork name: {0}".format(fork_name))
Beispiel #13
0
 def get_fork_block(self, fork_name):
     try:
         return self.fork_blocks[fork_name]
     except KeyError:
         raise UnknownFork("Unknown fork: {0}".format(fork_name))