Exemplo n.º 1
0
def test_block_fromjson():
    sender, recipient = Key(), Key()
    trx = Transaction(sender.address, sender.public_key, recipient.address,
                      'Hello world')
    trx.sign(sender.private_key)
    block = Node.mine_block(0, 0, [trx])
    block2 = Block.from_json(block.json())
    assert block.index == block2.index
Exemplo n.º 2
0
 def post(self):
     #: find the longest chain
     max_height, target_peer = 0, None
     for peer in peers:
         res = requests.get(peer + "/chain/height/")
         height = int(res.json()['data'])
         if height > max_height:
             max_height, target_peer = height, peer
     #: fetch the blocks from target peer
     if max_height > node.chain.height:
         logging.info('found longer chain %d. replace mine %d', max_height,
                      node.chain.height)
         res = requests.get(target_peer + '/block/')
         block_docs = res.json()['data']
         node.chain.blocks = [Block.from_json(doc) for doc in block_docs]
     self.write(ok())
Exemplo n.º 3
0
    def get_block(self, number: int) -> Block:
        """
		Gets a block by its block height
		:param number: The block height of the block to get
		:return: The list of transactions in the block, returns None if number is past chainhead
		"""
        block = self.make_json_rpc_call(Blockchain.GET_BLOCK_METHOD,
                                        [hex(number), True])
        if "transactions" not in block:
            logging.error(
                f'Invalid block at height {number} from {self.endpoint}: {block}'
            )
        result_block = Block.from_json(block)
        # Inject transaction receipt data for contract calls and deployments
        for transaction in result_block.get_transactions():
            if transaction.is_contract_call(
            ) or transaction.is_contract_deployment():
                transaction.insert_tx_receipt_data(
                    self.get_transaction_receipt(transaction.get_txid()))
        return result_block
Exemplo n.º 4
0
    def message(self, pubnub, message_object):

        if message_object.channel == 'BLOCK':
            sender_addr = message_object.message["sender_address"]
            if sender_addr != self.keychain.address:
                print(
                    f'\nBlock empfangen von Node: {sender_addr} -> {Block.from_json(message_object.message["block"])}'
                )
                block = Block.from_json(message_object.message["block"])
                new_chain = self.blockchain.chain[:]
                new_chain.append(block)
                try:
                    self.blockchain.replace_chain(Blockchain(new_chain),
                                                  self.entry_pool)
                    self.entry_pool.filter(self.blockchain)
                    print('\nBlockchain ergänzt')
                except Exception as e:
                    print(f'\nFehler bei Ergänzung -> {e}')

        if message_object.channel == 'ENTRY':
            try:
                entry = json_to_entry(message_object.message)
                self.entry_pool.add_entry(entry)
                print(f'\nEintrag empfangen: {entry}')
            except Exception as e:
                print(f'\nFehler beim Empfangen eines Eintrags -> {e}')

        if message_object.channel == 'CHAIN':
            recipient_addr = message_object.message["recipient_address"]
            if recipient_addr == self.keychain.address:
                self.chain_syncher.add_chain(message_object.message["chain"])
                print('\nChain empfangen')

        if message_object.channel == 'SYNC':
            sender_addr = message_object.message["sender_address"]
            if self.keychain.address != sender_addr:
                self.p2p.send_chain(self.blockchain, sender_addr)
                print(f'\nChain gesendet an Node: {sender_addr}')
Exemplo n.º 5
0
 def from_json(chain_json):
     blockchain = Blockchain()
     blockchain.chain =list(
         map(lambda block_json: Block.from_json(block_json), chain_json)
     )
     return blockchain
Exemplo n.º 6
0
 def from_json(cls, json_data):
     chain = []
     for block_data in json_data['chain']:
         chain.append(Block.from_json(block_data))
     return Chain(chain=chain, current_data=json_data['current_data'])