/yeeroot

Official implementation of the YeeCo Root Chain (Layer 1)

Primary LanguageRustGNU General Public License v3.0GPL-3.0

yeeroot

standard-readme compliant

Official implementation of the YeeCo Root Chain (Layer 1)

YeeCo is a permissionless, secure, high performance and scalable public blockchain platform powered by full sharding technology on PoW consensus.

📣 YeeCo Mainnet launched! (2020-08-10)

Latest release

  • v1.3.0 ⚠️ mandatory release (2020-11-04)
  • v1.2.0 ⚠️ mandatory release (2020-10-23)
  • v1.1.1 ⚠️ Hard fork release (2020-10-01)

Table of Contents

Description

Yeeco takes advantage of the 4 key mechanisms as follows:

  1. PoW (permissionless and secure)
  2. Full sharding (high performance and scalable)
  3. Multi-mining (resist 1% attack)
  4. CRFG (conditional reward finality gadget, introduce absolute finality on PoW to support lock-free cross shard transactions)

Install

Requirements

  1. Rust
    curl https://sh.rustup.rs -sSf | sh
  2. Openssl
  3. Rust nightly
    rustup toolchain add nightly
  4. rust nightly wasm
    rustup target add wasm32-unknown-unknown
    rustup target add wasm32-unknown-unknown --toolchain nightly
  5. wasm-gc
    cargo install wasm-gc
  6. Rust components: clippy rls docs src rustfmt
    rustup component list # list all the components installed
    rustup component add <name> # install component

Building

$ cd <project_base_dir>/runtime/wasm
$ sh build.sh
$ cd <project_base_dir>
$ cargo build

Usage

Start

  1. Start bootnodes router.

    $ ./yee bootnodes-router --dev-params

    Bootnodes router provides the bootnodes for each shard.

    You can try getting the bootnodes by the following RPC:

    $ curl -X POST --data '{"jsonrpc":"2.0","method":"bootnodes","params":[],"id":1}' localhost:50001 -H 'Content-Type: application/json'
  2. Start the nodes of the 4 shards

    $ ./yee --dev --dev-params --shard-num=0 --base-path=/tmp/yee/shard_0
    $ ./yee --dev --dev-params --shard-num=1 --base-path=/tmp/yee/shard_1
    $ ./yee --dev --dev-params --shard-num=2 --base-path=/tmp/yee/shard_2
    $ ./yee --dev --dev-params --shard-num=3 --base-path=/tmp/yee/shard_3

    Since we start the node without --mine, it will not mine new blocks.

  3. Start switch

    $ ./yee switch --dev-params --mine

    Switch provides proxy rpc of all the 4 shards. You can get the balance of a certain address of any shard by the following RPC:

    $ curl -X POST --data '{"jsonrpc":"2.0","method":"state_getBalance","params":["tyee15c2cc2uj34w5jkfzxe4dndpnngprxe4nytaj9axmzf63ur4f8awq806lv6"],"id":1}' localhost:10033 -H 'Content-Type: application/json'

    Switch can also work as a multi-miner. Since we start the switch with --mine, it will mine on the 4 shards.

Accounts

Test accounts:

Address                                                            Shard num    Private key
tyee1jfakj2rvqym79lmxcmjkraep6tn296deyspd9mkh467u4xgqt3cqkv6lyl    0            0xa8666e483fd6c26dbb6deeec5afae765561ecc94df432f02920fc5d9cd4ae206ead577e5bc11215d4735cee89218e22f2d950a2a4667745ea1b5ea8b26bba5d6
tyee15zphhp8wmtupkf3j8uz5y6eeamkmknfgs6rj0hsyt6m8ntpvndvsmz3h3w    1            0x40e17c894e03256ea7cb671d79bcc88276c3fd6e6a05e9c0a9546c228d1f4955d8f18e85255020c97764251977b77f3b9e18f4d6de7b62522ab29a49cede669f
tyee14t6jxhs885azsd9v4t75cre9t4crv6a89q2vg8472u3tvwm3f94qgr9w77    2            0x708084bc9da56d9d1b201f50830269887ff2ef74e619c6af6ba7cf506068326f7cc9c4d646c531e83507928114ff9ef66350c62dfda3a7c5d2f0d9e0c37e7750
tyee12n2pjuwa5hukpnxjt49q5fal7m5h2ddtxxlju0yepzxty2e2fads5g57yd    3            0xa079ef650520662d08f270c4bc088f0c61abd0224f58243f6d1e6827c3ab234a7a1a0a3b89bbb02f2b10e357fd2a5ddb5050bc528c875a6990874f9dc6496772

Revert

you can revert the chain to certain number by revert

$ ./yee revert --shard-num=0 --base-path=/tmp/yee/shard_0 --target="{\"0\":1024, \"1\": 1024, \"2\": 1024, \"3\": 1024}"

Roadmap

  1. [Done] PoC-1: Tetris consensus demo (2019-02)

    tetris_demo

  2. [Done] PoC-2: Transfer feature based on Tetris (2019-05)

    gyee

  3. [Done] PoC-3: PoW consensus, static sharding (2019-07)

    Release notes

  4. [Done] PoC-4: Multi-mining, cross-shard transactions (2019-09)

    Release notes

  5. [Done] PoC-5: Dynamic sharding (2019-11)

    Release notes

  6. [Done] PoC-6: Cross chain (interoperate with branch chain) (2019-12)

    Release notes

  7. [Done] PoC-7: Smart contract (on branch chain) (2020-02-14)

    Release notes

  8. [Done] Testnet (2020-03)

    Release notes

  9. [Done] Mainnet (2020-Q3)

    Release notes

Contributing

Feel free to dive in! Open an issue.

Contributors

License

GPL