- Merge
Blockchain::Tree
intoBlockchain
- Remove
Blockchain::Array
- Fix a bug in which a node with --local option, wasn't broadcasting the mined blocks
- Don't log blockchain when reading from the network or filesystem
- Add
Blockchain#verbose
property
- Make
/blocks/
endpoint handle index range and array - Download 1000 blocks at a time when syncing with the network
- Add
{Blockchain, Network, Node}#blocks_at
- Add
Blockchain::Tree
implementation replacing the array implementation
- Relay network blocks If they haven't been seen before
- Fix bugs in
Storage::File
andStorage::Network
- Update CLI options' descriptions
- Add
Storage::Network.check_sync_status
- Add
Storage::Network.find_mutual_block
- Fix hex overflow bug in Difficulty.multiply which resulted in higher difficulty while It was trying to reduce the difficulty
- Fix Storage::Network bug which caused broadcasting existing block
- Add experimental
bench/
directory for benchmarking
- Broadcast blocks to network if the local blockchain has higher index
- Remove the node from the network when it is closed
- Fix a bug which caused some validations to be skipped if the chain is being reseted
- Improve miner so that as soon as a new block is added by network, It moves on to the next index.
- Add
Block.calculate_hash
,{Network, Node}#last_block
- Rename
{Network, Node}#download_block
to{Network, Node}#block_at
- Fix critical blockchain bug which prevented resetting the chain
- Make miner skip the mined block if another block is already added to chain with the same index
- Use different colors for logs
- Adjust difficulty every 60 blocks
- Much more accurate difficulty calculation
- Change websocket messages to have different types. Currently Block or IP information can be sent through the socket.
- Add
/nodes
endpoint that returns the known nodes' ips
- Connect to
Network::TESTNET_SEED_HOST
by default - Explore the network continuously for new public nodes and connect
- Traverse blockchain backwards from the seed node if there is a hash mismatch
- Delete the block file if it's not added to the blockchain
- Broadcast our block to the network if the received block is not preferred
- Add CLI options
--seed-ip=IP
--host-ip=IP
--port=PORT
--local-net
--mine
--web
--version
--help
- Add
Blockchain::BlockNotAdded
exceptions - Add
CLI::Options
modules - Add initial documentation
- Add
/blocks
websocket endpoint - Remove
/connect
and/relay
endpoints - Adjust difficulty using bits
- Store blockchain in
.block/
folder - Use websocket for broadcasting solved blocks
- Add
Cli
,Difficulty
,Emitter
,Miner
,Node
,Storage
,Web
modules - Use proper shard folder structure
Initial zincir implementation in Crystal