Fantom Status
By Andre Cronje
Snapshot
Fantom has completed it’s consensus implementation of both lachesis and txflow. Both are currently available and ready for usage via github.
Lachesis and txflow have been integrated into Cosmos SDK
A non Fantom related entity Zar Network has been building on top of Fantom SDK.
Fantom is a technology provider that will gladly support third parties in developing tools and building products that leverage lachesis consensus.
You can launch lachesis today and build your own blockchain solution.
Here are the instructions to build and run;
If you are a web3 dev and simply want to play around with smart contracts and EVM support using lachesis consensus, you can use one of the following nodes
To access the web3.js console, use one of the servers:
- lachesis attach http://3.15.138.107:4000
- lachesis attach http://18.189.195.64:4001
- lachesis attach http://18.191.96.173:4002
- lachesis attach http://18.222.120.223:4003
Regarding transaction latency:
The nodes are configured to emit 1 event per minute if there’s no txs to post or confirm, and they’ll try to emit 1 event per second (if gas power is too low to emit this much events, then the behavior is more complex) if there’s at least one transaction to post/confirm. It means that if you don’t send any transactions, then the block rate is ~2–3 minutes, but when you send at least 1 tx — the next block will be after 2–3 seconds.
Personal comments;
Fantom is a consensus provider, much like RAFT is to the traditional distributed world
The goal has been and will be to focus on building the best decentralized consensus available. Not to be the best blockchain available. A blockchain is part of the product, consensus is one of the modules, just like you have modular EVM support, or NFT, or Issuance. You choose the modules for your network and deploy the one you prefer to work with, that is why Fantom has spent additional hours to integrate Lachesis into go-ethereum and cosmos-sdk.
Zar Network
Zar Network has shared the following status update, please note Zar Network is an independent entity not related to Fantom, Fantom has been working closely with Zar to help them understand and advance the technology stack
Blockchain
https://github.com/zar-network/zar-network
Zar-network is the chain implementation. The key value here is from the issue module
Documentation on how to use the issue module available here;
https://github.com/zar-network/zar-network/blob/master/docs/cli/zarcli/issue/README.md
Install instructions available here;
https://github.com/zar-network/zar-network/blob/master/docs/deploy-testnet.md
The zar chain runs ontop of cosmos sdk
https://github.com/cosmos/cosmos-sdk
Which has been modified to use txflow and lachesis
https://github.com/Fantom-foundation/go-txflow
https://github.com/Fantom-foundation/go-lachesis
Core features of this chain;
~50k+ Transactions per second, (Personal comment, this is not part of an official audit and is the current internal environment numbers, do not quote this as literature, since there are not standardized tests for TPS), once completed the following standardized tools will be used and then the results will be released;
https://github.com/raid-7/tun-example
https://github.com/salamantos/bombarding-tool
The above tools were part of the CryptoBazar hackathon and specific tasks requested by Fantom to create standardized blockchain tests.)
Transaction Responsiveness
Transaction Finality
Core features of zar-network
Issue
Mint
Mint to
Burn
Burn from
Freeze transfer in
Freeze transfer out
Freeze transfers
Approve allowance for
Increase allowance for
Decrease allowance for
The testnet is currently running on the following endpoints;
http://34.244.179.123:1317/node_info (zar-chain-panda)
http://34.244.179.123:26657/status (consensus — lachesis)
Available endpoints for consensus are listed here
Available endpoints for zar-chain-panda are described here;
http://34.244.179.123:1317/swagger-ui/
Javascript / NodeJS SDK code is available with examples;
https://github.com/zar-network/javascript-sdk
https://github.com/zar-network/javascript-sdk/blob/master/__tests__/client.test.js
It has also been published on NPM
https://www.npmjs.com/package/@zar-network/javascript-sdk
Stack as follows;
Web UI (not disclosed)-> API (not disclosed)-> http://34.244.179.123:1317 -> http://34.244.179.123:26657
Web UI (React / NodeJS) interacts with EB API (NodeJS / PostgreSQL)
EB API uses javascript-sdk (NPM)
javascript-sdk wraps calls to zar-network (Golang RPC)
zar-network uses ABCI to interact with consensus (Golang TxFlow and Lachesis)
Fantom core product features update and roadmap
Go-Lachesis
- Scope2 (Consensus + communication layer + EVM): Complete
- Scope3(Staking rewards distributions + ecosystem tools): End of December.
- Implementation differs in a few ways to “StairDag” paper, as discussed with Andre.
- Modifications by Quan to be consistent with “StairDag” paper: November / December.
Rust Implementation
- EVM Rust implementation by Augustin completed as of writing.
- All other modules / parts of the stack are completed (pending some error handling by Ayreh and Alex Jones). This includes TCP, and full-cli. Last piece of work in Consensus.
- Consensus preliminary formal specification by Vlad on Maxim’s consensus work to be completed.
- https://github.com/Fantom-foundation/libconsensus-dag
- Discussed with Sam FIP-2 staking proposal
Internal View
Lachesis — Scope 1
Fast Gossip Protocol
Fork Rules
Summary of Algorithms
Lachesis-rs:
- Added useful traits in
libvm-rs
: https://github.com/Fantom-foundation/librevm-rs/commit/6b957a4735d1011ff9a603ea817a36a3159d9171 - Fixed a blocking issue with
libvm-rs
: https://github.com/Fantom-foundation/librevm-rs/commit/61b6c580c378ddc20de29a45eb52139dff9b8313 - Refactored
full-cli-rs
with futures, split the main module into several modules to expose self-contained components: https://github.com/Fantom-foundation/full-cli-rs/commit/f5915719c2071bd1c345711540e61db0c2b6c1bd - Continuing to work on
libnode-membership
, on the gossip graph builder module. - [WIP] Definition and implementation of
libcommon-rs
:
https://github.com/Fantom-foundation/libcommon-rs/commit/c32839e
https://github.com/Fantom-foundation/libcommon-rs/commit/f590c3d
https://github.com/Fantom-foundation/libcommon-rs/commit/d951c48
https://github.com/Fantom-foundation/libcommon-rs/commit/9e5ce6e
https://github.com/Fantom-foundation/libcommon-rs/commit/114b2fb
https://github.com/Fantom-foundation/libcommon-rs/commit/9a8c322d
https://github.com/Fantom-foundation/libcommon-rs/commit/ba9878e
https://github.com/Fantom-foundation/libcommon-rs/commit/74b78d2
https://github.com/Fantom-foundation/libcommon-rs/commit/2253536
https://github.com/Fantom-foundation/libcommon-rs/commit/4650cf7 - [WIP] Definition of
libtransport
an common test:
https://github.com/Fantom-foundation/libtransport/commit/e705444
https://github.com/Fantom-foundation/libtransport/commit/436b2db
https://github.com/Fantom-foundation/libtransport/commit/aa91c39
https://github.com/Fantom-foundation/libtransport/commit/3778c0b
https://github.com/Fantom-foundation/libtransport/commit/0138a77
https://github.com/Fantom-foundation/libtransport/commit/9a65241
https://github.com/Fantom-foundation/libtransport/commit/e1dc8f1
https://github.com/Fantom-foundation/libtransport/commit/731bde6
https://github.com/Fantom-foundation/libtransport/commit/d6f7989
https://github.com/Fantom-foundation/libtransport/commit/c69c4ab
https://github.com/Fantom-foundation/libtransport/commit/9570788
https://github.com/Fantom-foundation/libtransport/commit/1c1a034
https://github.com/Fantom-foundation/libtransport/commit/b399fe8
https://github.com/Fantom-foundation/libtransport/commit/51d3ef4
https://github.com/Fantom-foundation/libtransport/commit/621c4af
https://github.com/Fantom-foundation/libtransport/commit/792849a
https://github.com/Fantom-foundation/libtransport/commit/0ea211a
https://github.com/Fantom-foundation/libtransport/commit/82edc81
https://github.com/Fantom-foundation/libtransport/commit/8e03673
https://github.com/Fantom-foundation/libtransport/commit/5bba6da
https://github.com/Fantom-foundation/libtransport/commit/f9df604
https://github.com/Fantom-foundation/libtransport/commit/0b84f1c - Implementing
libtransport-tcp
:
https://github.com/Fantom-foundation/libtransport-tcp/commit/caa65e4
https://github.com/Fantom-foundation/libtransport-tcp/commit/4b1f1af
https://github.com/Fantom-foundation/libtransport-tcp/commit/c359f98
https://github.com/Fantom-foundation/libtransport-tcp/commit/6d5042b
https://github.com/Fantom-foundation/libtransport-tcp/commit/c81d8fd
https://github.com/Fantom-foundation/libtransport-tcp/commit/65efaba
https://github.com/Fantom-foundation/libtransport-tcp/commit/bd43640
https://github.com/Fantom-foundation/libtransport-tcp/commit/57b6f67 - [WIP] Definition of
libhash
:
https://github.com/Fantom-foundation/libhash/commit/4a761d7
https://github.com/Fantom-foundation/libhash/commit/e33729e
https://github.com/Fantom-foundation/libhash/commit/7f600bd - Implementation of
libhash-sha3
:
https://github.com/Fantom-foundation/libhash-sha3/commit/29313cbv - [WIP] Implemented serde for
prost
prost, to enable switching between protocol buffers, bincode, and other formats, transparently:
https://github.com/Fantom-foundation/prost/commit/dd39d9e9fc13f0bbde397ce0bc22bec6eed7fbb6
Closing remarks
Fantom will continue to focus on Lachesis consensus, while we are happy with the current results, there is much room for improvement and we are constantly advancing the consensus. For that reason we encourage people to run and host their own blockchains which Fantom will support in any capacity they can.