Elixir implementation of Ethereum's Blockchain. This includes functionality to build and verify a chain of Ethereum blocks that may be advertised from any peer. We complete the resultant state of the blocktree and form a canonical blockchain based on difficulty.
Exthereum's blocks are specified in a variety of sections throughout the yellow paper, but it's best to start looking under Section 4.4.
Installation
mix deps.get
mix compile
If available in Hex, the package can be installed
by adding blockchain
to your list of dependencies in mix.exs
:
def deps do
[{:blockchain, "~> 0.1.6"}]
end
Documentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/blockchain.
Debugging
To debug a given run of the blockchain, you can set breakpoints on contract addresses by setting the BREAKPOINT
environment variable and specifying a contract address to break on. E.g.
BREAKPOINT=bc1ffc1620da1468624a596cb841d35e6b2f1fb6 iex -S mix
...
00:04:18.739 [warn] Debugger has been enabled. Set breakpoint #1 on contract address 0xbc1ffc1620da1468624a596cb841d35e6b2f1fb6.
...
-- Breakpoint #1 triggered with conditions contract address 0xbc1ffc1620da1468624a596cb841d35e6b2f1fb6 (start) --
gas: 277888 | pc: 0 | memory: 0 | words: 0 | # stack: 0
----> [ 0] push2
[ 1] 0
[ 2] 4
[ 3] dup1
[ 4] push2
[ 5] 0
[ 6] 14
[ 7] push1
[ 8] 0
[ 9] codecopy
Enter a debug command or type `h` for help.
>>
Contributing
- Fork it!
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request
Author
Geoffrey Hayes (@hayesgm) Ayrat Badykov (@ayrat555) Mason Fischer (@masonforest)
License
Exthereum's Blockchain is released under the MIT License. See the LICENSE file for further details.