Repository navigation
TODO #1
Copy link
Copy link
Open
Description
Needs
transactions
-
transaction_from_serialized(convert serialized protobuf into transaction struct) -
verify_txin(verifies txin is valid, that it points to an unspent txout)
blocks
-
block_to_proto(convert block struct into proto struct) -
block_to_serialized(convert block struct into serialized) -
block_from_serialized(convert serialized protobuf into block struct) - add mempool (pool of verified TXs waiting to be put into block)
-
compute_merkle_root(computes merkle root) - insert TXs from mempool into currently mined block
-
verify_merkle_root(verifies merkle root) -
verify_block(verify entire block, its txin, merkle root, whole boi)
blockchain
-
insert_block_into_blockchain(serializes block, puts serialized block into blockchain db) - get number of blocks in the database
-
fetch_block_from_db(fetches block struct, deserializing from db using passed in hash) -
get_block_from_tx(fetches block struct from a TX struct) -
get_block_height_for_block(gets the block height to a certain block hash, used for determining best blockchain) -
remove_block_from_db -
undo_block(must go through blocks if new branch is valid, undo old blocks, apply new branch) -
insert_tx_into_index(if block is inserted into chain, add index for those block's txs to point to the block hash) - remove tx from index
- leveldb
transaction index. TX hash as key, value points to block key where TX is located -
get_blocks_since_hashgets future blocks from a given start hash, returns a set size (iterates over all blocks to find start hash, while buffering blocks) - keeps track of unspent transactions and their unspent txouts (UTXOs)
- Block insertion marks unspent UTXOs as spent
api
- protobuf RPC for local client (elevated operations, wallet management, etc.)
- protobuf RPC for node RPC / broadcast
- Switch RPC implementation to GRPC https://github.com/Juniper/grpc-c
- list all dynamic mem allocs // ensure memory hygiene
- ensure proto -> struct bytearray sizes are correct, or bail
- setup CI (need to install dependencies on CI environment)
Conscious decisions:
- no raw append-only block storage like bitcoin, using leveldb as the entire storage of the chain rather than only block headers (slower access, more size, faster to develop)
- no double sha256 for merkle root calculation
Metadata
Metadata
Assignees
Labels
No labels
Activity
andrewvy commentedon Sep 5, 2017
IT'S ALIVE
kinda
empty txless block mining on local (no-net)
andrewvy commentedon Sep 19, 2017