Source code for graphenecommon.block

# -*- coding: utf-8 -*-
from .blockchainobject import BlockchainObject
from .exceptions import BlockDoesNotExistsException
from .utils import parse_time
from .instance import AbstractBlockchainInstanceProvider


class Block(BlockchainObject, AbstractBlockchainInstanceProvider):
    """Read a single block from the chain

    :param int block: block number
    :param instance blockchain_instance: instance to use when accesing a RPC
    :param bool lazy: Use lazy loading

    Instances of this class are dictionaries that come with additional
    methods (see below) that allow dealing with a block and it's
    corresponding functions.

    .. code-block:: python

        from block import Block
        block = Block(1)
        print(block)

    .. note:: This class comes with its own caching function to reduce the
              load on the API server. Instances of this class can be
              refreshed with ``Account.refresh()``.

    """

    type_id = "n/a"

    def __init__(self, *args, use_cache=False, **kwargs):
        # We allow to hand over use_cache be default, but here,
        # we want to change the default to *false* so we don't cache every
        # block all the time for eternity
        kwargs["use_cache"] = use_cache
        BlockchainObject.__init__(self, *args, **kwargs)

[docs] def refresh(self): """Even though blocks never change, you freshly obtain its contents from an API with this method """ identifier = self.identifier block = self.blockchain.rpc.get_block(self.identifier) if not block: raise BlockDoesNotExistsException super(Block, self).__init__( block, blockchain_instance=self.blockchain, use_cache=self._use_cache ) # block does not contain an id and thus identifier gets overwritten self.identifier = identifier
[docs] def time(self): """Return a datatime instance for the timestamp of this block""" return parse_time(self["timestamp"])
class BlockHeader(BlockchainObject, AbstractBlockchainInstanceProvider): type_id = "n/a" def __init__(self, *args, use_cache=False, **kwargs): # We allow to hand over use_cache be default, but here, # we want to change the default to *false* so we don't cache every # block all the time for eternity kwargs["use_cache"] = use_cache BlockchainObject.__init__(self, *args, **kwargs)
[docs] def refresh(self): """Even though blocks never change, you freshly obtain its contents from an API with this method """ block = self.blockchain.rpc.get_block_header(self.identifier) if not block: raise BlockDoesNotExistsException super(BlockHeader, self).__init__( block, blockchain_instance=self.blockchain, use_cache=self._use_cache )
[docs] def time(self): """Return a datatime instance for the timestamp of this block""" return parse_time(self["timestamp"])