EVM compatible chain with NPoS/PoC consensus

Overview

Reef Chain

Reef chain is written in Rust. A basic familiarity with Rust tooling is required.

To learn more about Reef chain, please refer to Documentation.

Clone

To clone the repo with its submodules run:

git clone --recursive https://github.com/reef-defi/reef-chain

Install

You can install the latest compiler and the toolchain with:

make init

Start a development node

The make run command will launch a temporary node and its state will be discarded after you terminate the process.

make run

To run the temporary node with ethereum compatibility enabled run:

make eth

Run a persistent single-node chain

Use the following command to build the node without launching it:

make build

This command will start the single-node development chain with persistent state:

./target/release/reef-node --dev

Purge the development chain's state:

./target/release/reef-node purge-chain --dev

Start the development chain with detailed logging:

RUST_LOG=debug RUST_BACKTRACE=1 ./target/release/reef-node -lruntime=debug --dev

Run tests

make test

Run in debugger

make debug

Embedded docs

Once the project has been built, the following command can be used to explore all parameters and subcommands:

./target/release/reef-node -h

Release builds

To list all available release builds run:

git tag

To create a corresponding production build, first checkout the tag:

git checkout testnet-1

Then run this command to install appropriate compiler version and produce a binary.

make release
Comments
  • Makefile: Misc improvements

    Makefile: Misc improvements

    Firstly, I would like to propose that we don't change the default toolchain in the make release command. It is an unexpected behaviour with no information about this side effect. For now, I left TODO to fix it later. However, if you know how to use a specific toolchain for cargo build, then we could do it within this PR.

    Secondly, in my opinion release target should not delete whole target project. It will be a common scenario that developers use debug targets which would be completely removed if one would run release target. I personally would be rather unhappy to wait another half an hour again to compile everything once again.

    Thirdly, we should use the built-in dependencies functionality rather than exec targets as commands (i.e. syntax: target: dependency).

    opened by mwarzynski 7
  • Makefile: Don't use `--release` for non release targets

    Makefile: Don't use `--release` for non release targets

    Usage of --release in non release targets unnecessarily increases the time to build.

    --release                    Build artifacts in release mode, with optimizations
    

    We don't need optimizations in our local builds, do we?

    opened by mwarzynski 7
  • Won't compile

    Won't compile "unexpected concrete region in borrowck: ReStatic"

    I followed the Quick Starter guide and had to make a break at make run since the compile step failed with:

    RUST_BACKTRACE=1 cargo run --manifest-path node/Cargo.toml --features with-ethereum-compatibility  -- --dev --tmp
       Compiling reef-runtime v3.0.0 (/home/xeroc/projects/Reef/reef-chain/runtime)
       Compiling sc-network-gossip v0.9.0
       Compiling sc-informant v0.9.0
       Compiling sc-offchain v3.0.0
       Compiling sc-finality-grandpa v0.9.0
       Compiling sc-chain-spec v3.0.0
       Compiling sc-finality-grandpa-rpc v0.9.0
    error: failed to run custom build command for `reef-runtime v3.0.0 (/home/xeroc/projects/Reef/reef-chain/runtime)`
    
    Caused by:
      process didn't exit successfully: `/home/xeroc/projects/Reef/reef-chain/target/debug/build/reef-runtime-f6756568918a6705/build-script-build` (exit status: 1)
      --- stdout
      Information that should be included in a bug report.
      Executing build command: "rustup" "run" "nightly" "cargo" "-Zfeatures=build_dep" "rustc" "--target=wasm32-unknown-unknown" "--manifest-path=/home/xeroc/projects/Reef/reef-chain/target/debug/wbuild/reef-runtime/Cargo.toml" "--color=always" "--release"
      Using rustc version: rustc 1.56.0-nightly (b70888601 2021-07-28)
    
    
      --- stderr
      warning: flag `-Z features` has been stabilized in the 1.51 release, and is no longer necessary
        The new feature resolver is now available by specifying `resolver = "2"` in Cargo.toml.
        See https://doc.rust-lang.org/nightly/cargo/reference/features.html#feature-resolver-version-2 for more information.
    
         Compiling evm v0.26.0
         Compiling frame-system v3.0.0
         Compiling orml-utilities v0.4.1-dev (/home/xeroc/projects/Reef/reef-chain/orml/utilities)
         Compiling orml-traits v0.4.1-dev (/home/xeroc/projects/Reef/reef-chain/orml/traits)
         Compiling reef-primitives v0.7.3 (/home/xeroc/projects/Reef/reef-chain/primitives)
         Compiling module-evm-rpc-runtime-api v0.1.0 (/home/xeroc/projects/Reef/reef-chain/modules/evm/rpc/runtime_api)
         Compiling pallet-timestamp v3.0.0
         Compiling pallet-balances v3.0.0
         Compiling pallet-authorship v3.0.0
         Compiling pallet-transaction-payment v3.0.0
         Compiling pallet-proxy v3.0.0
         Compiling pallet-scheduler v3.0.0
         Compiling pallet-collective v3.0.0
         Compiling pallet-indices v3.0.0
         Compiling frame-executive v3.0.0
         Compiling pallet-identity v3.0.0
         Compiling pallet-randomness-collective-flip v3.0.0
      error: internal compiler error: unexpected concrete region in borrowck: ReStatic
         --> /home/xeroc/.cargo/registry/src/github.com-1ecc6299db9ec823/evm-0.26.0/src/executor/stack/state.rs:496:2
          |
      496 | /     pub fn deconstruct(
      497 | |         self
      498 | |     ) -> (impl IntoIterator<Item=Apply<impl IntoIterator<Item=(H256, H256)>>>,
      499 | |            impl IntoIterator<Item=Log>)
      500 | |     {
      501 | |         self.substate.deconstruct(self.backend)
      502 | |     }
          | |_____^
          |
          = note: delayed at compiler/rustc_mir/src/borrow_check/region_infer/opaque_types.rs:87:44
    
      thread 'rustc' panicked at 'no errors encountered even though `delay_span_bug` issued', compiler/rustc_errors/src/lib.rs:1050:13
      stack backtrace:
         0: rust_begin_unwind
                   at /rustc/b70888601af92f6cdc0364abab3446e418b91d36/library/std/src/panicking.rs:515:5
         1: std::panicking::begin_panic_fmt
                   at /rustc/b70888601af92f6cdc0364abab3446e418b91d36/library/std/src/panicking.rs:457:5
         2: rustc_errors::HandlerInner::flush_delayed
         3: <rustc_errors::HandlerInner as core::ops::drop::Drop>::drop
         4: core::ptr::drop_in_place<rustc_session::parse::ParseSess>
         5: <alloc::rc::Rc<T> as core::ops::drop::Drop>::drop
         6: core::ptr::drop_in_place<rustc_interface::interface::Compiler>
         7: rustc_span::with_source_map
         8: rustc_interface::interface::create_compiler_and_run
         9: scoped_tls::ScopedKey<T>::set
      note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
    
      error: internal compiler error: unexpected panic
    
      note: the compiler unexpectedly panicked. this is a bug.
    
      note: we would appreciate a bug report: https://github.com/rust-lang/rust/issues/new?labels=C-bug%2C+I-ICE%2C+T-compiler&template=ice.md
    
      note: rustc 1.56.0-nightly (b70888601 2021-07-28) running on x86_64-unknown-linux-gnu
    
      note: compiler flags: -C opt-level=3 -C panic=abort -C linker-plugin-lto -C link-arg=--export-table -C link-arg=--import-memory -C link-arg=--export=__heap_base --crate-type lib
    
      note: some of the compiler flags provided by cargo are hidden
    
      query stack during panic:
      end of query stack
         Compiling pallet-sudo v3.0.0
      error: could not compile `evm`
      warning: build failed, waiting for other jobs to finish...
      error: build failed
    warning: build failed, waiting for other jobs to finish...
    error: build failed
    make: *** [Makefile:53: run] Error 101
    

    I am running on a more-or-less recent Archlinux. Is my rustc too new?

    opened by xeroc 6
  • Add `make clippy` job to GitHub Actions

    Add `make clippy` job to GitHub Actions

    Additionally, I enabled treating clippy warnings as errors, so that CI will fail if something is wrong. Of course, I had to fix the source code, so that CI will pass and we don't merge anything that doesn't build to master.

    Please, do a proper review of my PR as I had to introduce more changes at some parts of the code (more than I would like to). All of them were because of a failing make clippy run (clippy complained). (Feel free to double check by reverting my changes and running make clippy on your own.)

    Moreover, we could tweak the clippy target. I am not sure if treating all warnings as errors is the way to go. For instance, I would say that 1 * REEF looks fine, but I didn't exclude it because it is already in the 'standard' set of warnings.

    opened by mwarzynski 6
  • standardise storage cost per byte

    standardise storage cost per byte

    This PR standardises the cost of storage (per byte) across the different pallets that charge for storage usage in the reef runtime. This includes transactions, evm and multisig. The cost per byte has been standardised at 10 mREEF.

    closes: #62

    opened by frisitano 5
  • Fix warnings

    Fix warnings

    First of all, please let me know if I should have done anything differently. I couldn't find rules for making contributions.

    Why?

    I recently tried to compile the reef-node on my local machine and noticed there are lots of warnings. Most of them were related to trivial stuff like: unused imports, invalid const names, or unused variables. I would love to see this project maintain high quality of code, where one of the requirements is no compilation warnings.

    For a starter, I've voluntarily cleaned up the code myself.

    What?

    My main objective with this PR is to reduce the warnings to the absolute possible minimum.

    If there was a dead/unused code related to warnings, I've decided to remove it rather than leave it commented out. In principle, the less code, the better readability. If there will be a need to use the removed code in the future, we will always can use the version control system to get it back.


    Ideally there should be no warnings whatsoever. However, for now, there still are a few left to fix for make test.

    First comes from another repository, so we would have to fix it in our dependency. https://github.com/open-web3-stack/open-runtime-module-library/blob/266768bb90918aab25723ac70ddd93310b378cee/currencies/src/mock.rs#L65

    warning: unused variable: `currency_id`
      --> orml/currencies/src/mock.rs:65:28
       |
    65 |     pub ExistentialDeposits: |currency_id: CurrencyId| -> Balance {
       |                               ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_currency_id`
       |
       = note: `#[warn(unused_variables)]` on by default
    

    Unfortunately, I use Rust for only a few days and I don't know how to fix the second one.

    warning: panic message is not a string literal
       --> runtime/src/lib.rs:339:1
        |
    339 | / pallet_staking_reward_curve::build! {
    340 | |     // 4.5% min, 27.5% max, 50% ideal stake
    341 | |     const REWARD_CURVE: PiecewiseLinear<'static> = curve!(
    342 | |         min_inflation: 0_045_000,
    ...   |
    348 | |     );
    349 | | }
        | |_^
        |
        = note: `#[warn(non_fmt_panic)]` on by default
        = note: this is no longer accepted in Rust 2021
        = note: the panic!() macro supports formatting, so there's no need for the format!() macro here
        = note: this warning originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
    

    There is no panic usage in this block of the code that compiler complains about. Feel free to leave a suggestion what's wrong here (and how to fix it).

    What's next?

    I would like to propose using GitHub Actions to ensure code quality in the future PRs. It would be helpful not only as a quality check, but more importantly we would know if this project builds correctly (and if tests pass).

    opened by mwarzynski 5
  • Unable to interact with smart contract

    Unable to interact with smart contract

    I'm trying to complete the integration with Reef on our dapp, currently testing a contract in the Reef Testenet but I kept getting Error: call revert exception.

    image

    So far I'm able to connect to Polkadot{.js} and successfully get the account address, provider and signer. I can instantiate the contract with ethers without errors but as soon as I call contract's methods I get errors.

    The contract deployment can be found at https://testnet.reefscan.com/block/?blockNumber=889100.

    I paste here the dapp contract addresses and ABI:

    export let ETHBOX = {
        ADDRESSES: {
            ETHEREUM: "0x501AC1D6103fB2643f2cB93985baAac6f81d1Bc9",
            ETHEREUM_TESTNET: "0xAAa491Cf3cA23D59a77eB56Ab487169F4B49e4e2",
            BINANCE: "0x98F8E39032B4dBEC2235B68Bd7CC2505D3793161",
            BINANCE_TESTNET: "0xF559344bF9A51bF778fB0Ff38cc690bAF7E61081",
            MATIC: "0xbD1E729074A14348c78E39b56992f54f0b5d37Ec",
            MATIC_TESTNET: "0x6c1cd6434B5Ee4A75605981387cBb3cdDc5596d0",
            REEF_TESTNET: "0x33bead687546ba417c170c0523155b2dcf45106b"
        },
        ABI: [{"inputs":[{"internalType":"uint256","name":"_boxIndex","type":"uint256"}],"name":"cancelBox","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_boxIndex","type":"uint256"}],"name":"cancelBoxWithPrivacy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_boxIndex","type":"uint256"},{"internalType":"bytes32","name":"_passHash","type":"bytes32"}],"name":"clearBox","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_boxIndex","type":"uint256"},{"internalType":"bytes32","name":"_passHash","type":"bytes32"}],"name":"clearBoxWithPrivacy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"contract ERC20Interface","name":"_sendToken","type":"address"},{"internalType":"uint256","name":"_sendValue","type":"uint256"},{"internalType":"contract ERC20Interface","name":"_requestToken","type":"address"},{"internalType":"uint256","name":"_requestValue","type":"uint256"},{"internalType":"bytes32","name":"_passHashHash","type":"bytes32"}],"name":"createBox","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_recipientHash","type":"bytes32"},{"internalType":"contract ERC20Interface","name":"_sendToken","type":"address"},{"internalType":"uint256","name":"_sendValue","type":"uint256"},{"internalType":"bytes32","name":"_passHashHash","type":"bytes32"}],"name":"createBoxWithPrivacy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"refundAllBoxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setStopDeposits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"uint256","name":"_boxIndex","type":"uint256"}],"name":"getBox","outputs":[{"components":[{"internalType":"address payable","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"bytes32","name":"passHashHash","type":"bytes32"},{"internalType":"contract ERC20Interface","name":"sendToken","type":"address"},{"internalType":"uint256","name":"sendValue","type":"uint256"},{"internalType":"contract ERC20Interface","name":"requestToken","type":"address"},{"internalType":"uint256","name":"requestValue","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bool","name":"taken","type":"bool"}],"internalType":"struct ethbox.Box","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBoxesAll","outputs":[{"components":[{"internalType":"address payable","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"bytes32","name":"passHashHash","type":"bytes32"},{"internalType":"contract ERC20Interface","name":"sendToken","type":"address"},{"internalType":"uint256","name":"sendValue","type":"uint256"},{"internalType":"contract ERC20Interface","name":"requestToken","type":"address"},{"internalType":"uint256","name":"requestValue","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bool","name":"taken","type":"bool"}],"internalType":"struct ethbox.Box[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBoxesAllWithPrivacy","outputs":[{"components":[{"internalType":"bytes32","name":"senderHash","type":"bytes32"},{"internalType":"bytes32","name":"recipientHash","type":"bytes32"},{"internalType":"bytes32","name":"passHashHash","type":"bytes32"},{"internalType":"contract ERC20Interface","name":"sendToken","type":"address"},{"internalType":"uint256","name":"sendValue","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bool","name":"taken","type":"bool"}],"internalType":"struct ethbox.BoxWithPrivacy[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBoxesIncoming","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBoxesIncomingWithPrivacy","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBoxesOutgoing","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBoxesOutgoingWithPrivacy","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_boxIndex","type":"uint256"}],"name":"getBoxWithPrivacy","outputs":[{"components":[{"internalType":"bytes32","name":"senderHash","type":"bytes32"},{"internalType":"bytes32","name":"recipientHash","type":"bytes32"},{"internalType":"bytes32","name":"passHashHash","type":"bytes32"},{"internalType":"contract ERC20Interface","name":"sendToken","type":"address"},{"internalType":"uint256","name":"sendValue","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bool","name":"taken","type":"bool"}],"internalType":"struct ethbox.BoxWithPrivacy","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumBoxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumBoxesWithPrivacy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
    };
    

    I paste some code below, let me know if there's something I'm missing:

    let connection = await this.web3Modal.connect();
    
    // When user has tapped on Reef, initialize things differently
    if (connection.custom && /reef/.test(connection.custom)) {
    
        this.isReef$.next(true);
    
        // Either "reeftestnet" or "reefmainnet"
        this.reefCustomProviderName = connection.custom;
    
        this.loadingIndicatorServ.on();
    
        let WS_URL = this.isReefTestnet() ?
            "wss://rpc-testnet.reefscan.com/ws" :
            "wss://rpc.reefscan.com/ws";
    
        // Return an array of all the injected sources
        // (this needs to be called first)
        const allInjected = await web3Enable('ethbox dapp');
        console.log("All injected", allInjected);
    
        let signer;
        if (allInjected[0] && allInjected[0].signer) {
            signer = allInjected[0].signer;
        }
    
        // Return an array of { address, meta: { name, source } }
        // (meta.source contains the name of the extension)
        const allAccounts = await web3Accounts();
        console.log("All accounts", allAccounts);
    
        if (allAccounts[0] && allAccounts[0].address) {
            this.selectedAccount$.next(allAccounts[0].address);
        }
    
        if (!this.selectedAccount$.getValue()) {
            this.loadingIndicatorServ.off();
            return;
        }
    
        this.provider = new Provider({
            provider: new WsProvider(WS_URL)
        });
        console.log("Provider", this.provider);
    
        await this.provider.api.isReady;
    
        this.signer = new Signer(
            this.provider,
            this.selectedAccount$.getValue(),
            signer
        );
        console.log("Signer", this.signer);
    
        this.loadingIndicatorServ.off();
    }
    
    [...]
    
    // The following code sets contracts depending on the current chain
    switch(chainId) {
        case 13939: // Reef
            if (this.isReefTestnet()) {
                this.ethboxAddress = ETHBOX.ADDRESSES.REEF_TESTNET;
            } else {
                this.hardReset();
                this.loadingIndicatorServ.off();
                return;
            }
            break;
        case 1:     // Ethereum Mainnet
            this.isEthereumMainnet$.next(true);
            this.ethboxAddress = ETHBOX.ADDRESSES.ETHEREUM;
            this.stakingAddress = STAKING.ADDRESSES.ETHEREUM;
            break;
        case 4:     // Ethereum Testnet
            this.ethboxAddress = ETHBOX.ADDRESSES.ETHEREUM_TESTNET; 
            this.tokenDispenserAddress = TOKEN_DISPENSER.ADDRESSES.ETHEREUM_TESTNET;
            break;
        [...other chains here...]
    
    if (this.ethboxAddress) {
        this.ethboxContract = new ethers.Contract(
            this.ethboxAddress,
            ETHBOX.ABI,
            this.signer
        );
    }
    

    This exact code works flawlessly on every chain except Reef. Maybe something went wrong during the contract deployment?

    Thanks, Fredo

    bug 
    opened by 4skinSkywalker 4
  • Grafana Dashboard

    Grafana Dashboard

    First of all, congratulations for successfully launching the Reef Chain mainnet! :rocket:

    Mainnet is a network of the nodes and there are many people running their own nodes. In fact, maintenance of such a node is not so easy and requires substantial technical knowledge. Apart from the knowledge, it also requires constant monitoring and keeping the nodes up and running. In turn, to have monitoring in place, there must be in place a mechanism for gathering metrics (and alerting). Thankfully, Substrate already provides the Prometheus metrics out of the box.


    Grafana is a software commonly used to visualize Prometheus metrics. I would like to propose creating a ready to use Grafana Dashboard which would use all exposed Prometheus metrics.

    For a starter, I took the Polkadot one and modified it appropriately for what Reef Node exposes. Here is my Reef Node Grafana Dashboard.

    Note: it doesn't include the underlying machine resources utilization (CPU, memory, network), because Reef Node doesn't expose them in the Prometheus metrics.

    What do you think? Would you change the proposed Grafana Dashboard in any way? Any suggestions?

    opened by mwarzynski 4
  • Add Dockerfile

    Add Dockerfile

    Add a basic Dockerfile that should simplify node deployment. Doing this will be as simple as running:

    # docker run reef-node --chain mainnet [...]
    

    Build is split into two stages in order to minimize final image size.

    opened by chivay 4
  • revert evm pallet name from Evm back to EVM

    revert evm pallet name from Evm back to EVM

    This PR addresses #43 in which a contract was created at a seemingly already used address. The issue is caused due to the fact that storage uses the pallet name to compute storage key hashes. Hence when the pallet name was changed from EVM to Evm the runtime computed different storage keys for the EVM pallet, in essence creating completely new storage entries. This PR reverts the pallet name from Evm back to EVM as it was originally. This will recover the EVM state prior to the v6 upgrade at block 1077077. Any EVM state changes between 1077077 and when this runtime is deployed to testnet will be lost.

    As part of this PR the runtime has been bumped to v7.

    opened by frisitano 3
  • integrate substrate-api-sidecar

    integrate substrate-api-sidecar

    Hello, developers, do you have any plans to integrate reef into https://github.com/paritytech/substrate-api-sidecar? At present, exchanges are all tokens that integrate the substrate chain through substrate-api-sidecar

    opened by vae520283995 3
Releases(v10)
Owner
Reef Finance
Cross-chain DeFi operating system
Reef Finance
Minimalistic EVM-compatible chain indexer.

EVM Indexer Minimalistic EVM-compatible blockchain indexer written in rust. This repository contains a program to index helpful information from any E

LlamaFolio 11 Dec 15, 2022
Fiddi is a command line tool that does the boring and complex process of checking and processing/watching transactions on EVM compatible Blockchain.

Fiddi is a command line tool that does the boring and complex process of checking and processing/watching transactions on EVM compatible Blockchain.

Ahmad Abdullahi Adamu 7 Jan 9, 2023
Selendra is a multichains interoperable nominated Proof-of-Stake network for developing and running Substrate-based and EVM compatible blockchain applications.

Selendra An interoperable nominated Proof-of-Stake network for developing and running Substrate-based and EVM compatible blockchain applications. Read

Selendra 16 Nov 29, 2022
A framework for developing EVM-compatible chains

rt-evm A compact development framework for creating EVM-compatible runtimes/chains. Usage Check the example for details. Projects referenced trie, MPT

Rust Util Collections 4 Mar 15, 2023
A high-performance, highly compatible EVM Inscriptions Indexer

Insdexer A high-performance, highly compatible EVM Inscriptions Indexer by Rust. An accessible and complete version of the documentation is available

null 105 Mar 17, 2024
Implementation of Proof of Existence consensus using Substrate Framework, Frame, Pallets, RUST

Substrate Node Template A fresh FRAME-based Substrate node, ready for hacking ?? Getting Started Follow the steps below to get started with the Node T

Vijayendra Gaur 1 Jun 8, 2022
An implementation of the paper "Honey Badger of BFT Protocols" in Rust. This is a modular library of consensus.

Honey Badger Byzantine Fault Tolerant (BFT) consensus algorithm Welcome to a Rust library of the Honey Badger Byzantine Fault Tolerant (BFT) consensus

null 335 Dec 25, 2022
Substrate Consensus Handoff

Substrate Consensus Handoff Ethereum will soon migrate from Proof of Work to Proof of Stake. Preparing this miagration has taken years of planning to

Joshy Orndorff 1 Feb 18, 2022
🚣‍♀️ <1kloc, well-documented Raft consensus algorithm implementation

miniraft A <1kloc, well-documented Raft consensus algorithm implementation This crate is a minimal implementation of the Raft consensus protocol with

Jacky Zhao 25 Dec 1, 2022
Consensus layer peer-to-peer connection setup

Consensus Layer P2P This project is a basic setup for a consensus layer peer-to-peer connection, as specified in the consensus layer specifications of

Brechy 11 Dec 31, 2022
A framework for creating PoC's for Solana Smart Contracts in a painless and intuitive way

Solana PoC Framework DISCLAIMER: any illegal usage of this framework is heavily discouraged. Most projects on Solana offer a more than generous bug bo

Neodyme 165 Dec 18, 2022
A PoC backbone for NFT Marketplaces on NEAR Protocol

NFT Market Reference Implementation A PoC backbone for NFT Marketplaces on NEAR Protocol. Reference Changelog Changelog Progress: basic purchase of NF

null 9 May 26, 2022
WIP, POC of node js driver for pulsar backed by rust

WIP not ready at all, POC for node js rurt based pulsar driver pulsar-node-rust-client This project was bootstrapped by create-neon. Installing pulsar

Clever Cloud 6 Aug 10, 2022
OXiDE - A PoC packer written in Rust

OXiDE is a PoC Rust packer. It doesn't do much other than compress the target binary, but if you read the code, you'll find that extending it to do more (e.g., obfuscation, anti-reversing) is very possible!

frank2 44 Nov 30, 2022
Simple PoC to issue JSON Web Tokens (JWTs) with a canister on the Internet Computer.

JWT Issuer Proof of Concept Overview Simple PoC to issue JSON Web Tokens (JWTs) with a canister on the Internet Computer. It allows the issuance of tw

Dominic Wörner 7 Oct 13, 2022
Quick poc of the rsync wire protocol in Rust. Supports delta transfer.

Rsync wire protocol in Rust This is a quick poc of the rsync wire protocol in Rust. It supports delta transfer. The code is really a mess right now, a

LightQuantum 4 Feb 18, 2023
Wangan Midnight MaxiTune 3DX+ Loader PoC

Required Packages Arch Linux nvidia-cg-toolkit mangohud lib32-glibc lib32-gcc-libs lib32-libx11 lib32-libxcb lib32-libpulse lib32-alsa-lib lib32-libxa

BroGamer 14 Mar 4, 2024
A temporary repo for ETH connector to be used by EVM

ETH connector for Rainbow bridge Definitions bridgedETH - NEP-141 fungible-token representation of ETH inside Near. nETH - native ETH inside Near EVM.

Project Aurora 36 Jul 26, 2022
DFIP 2111-B: VOC: Ethereum Virtual Machine (EVM) Support

DeFiCh/metachain is a codename research & development for DFIP 2111-B: VOC: Ethereum Virtual Machine (EVM) Support . Proposed as a DFIP on Nov 2021; D

DeFiChain 19 Dec 6, 2022