예제 #1
0
 def get_block(self, index):
     block = Block.deserialize(self.root.get(World.HEADER_PREFIX +
                                             struct.pack('>L', index)),
                               header_only=True)
     prefix = World.BLOCK_TRANSACTION_PREFIX + struct.pack('>L', index)
     txs = list(self.root.iterator(prefix=prefix, include_key=False))
     block.transactions = [
         Transaction.deserialize(self.root.get(tx)) for tx in txs
     ]
     return block
예제 #2
0
파일: node.py 프로젝트: n1rna/pydaten
 async def transactions(self, request):
     if request.method == 'GET':
         return web.json_response(data=[tx.json() for tx in self.blockchain.transactions])
     elif request.method == 'POST':
         try:
             tx = Transaction.deserialize(await request.content.read())
             self.blockchain.is_valid_transaction(tx)
             self.transaction_queue.put(tx)
             return web.json_response(data = {'ok' : True})
         except (CommonException, BlockchainException) as e:
             return web.json_response(data = {'ok' : False, 'error': str(e)})
예제 #3
0
 def _clear_block(self, wb, index):
     wb.delete(World.HEADER_PREFIX + struct.pack('>L', index))
     prefix = World.BLOCK_TRANSACTION_PREFIX + struct.pack('>L', index)
     balance = {}
     for tx in self.root.iterator(prefix=prefix, include_value=False):
         transact = Transaction.deserialize(self.root.get(
             self.root.get(tx)))
         addr = transact.address()
         self._clear_transaction(wb, addr)
         src = self.resolve(transact.source)
         dst = self.resolve(transact.destination)
         if src not in balance:
             balance[src] = 0
         if dst not in balance:
             balance[dst] = 0
         balance[src] += (transact.fee + transact.amount)
         balance[dst] -= transact.amount
         wb.delete(tx)
     for raw, bal in balance.items():
         if raw != config.NOWHERE_NAME:
             self._set_balance(wb, raw, self.get_balance(raw) + bal)
예제 #4
0
 def get_transaction(self, name_address):
     k = self.root.get(World.SHORTCUT_PREFIX + _tx_key(name_address))
     return Transaction.deserialize(self.root.get(k))
예제 #5
0
 def children(self, name_address):
     prefix = World.TRANSACTION_PREFIX + _tx_key(name_address) + b'|'
     result = []
     for k, v in self.root.iterator(prefix=prefix):
         result.append(Transaction.deserialize(v))
     return result