/aurora-engine

⚙️ Aurora Engine implements an Ethereum Virtual Machine (EVM) on the NEAR Protocol.

Primary LanguageRust

Aurora Engine

Project license Discord Lints Tests Builds

Aurora Engine implements an Ethereum Virtual Machine (EVM) on the NEAR Protocol. See doc.aurora.dev for additional documentation.

Deployments

Network Contract ID Chain ID Version
Mainnet aurora 1313161554 2.2.0
Testnet aurora 1313161555 2.3.0
Local aurora.test.near 1313161556 2.3.0

Prerequisites

Prerequisites for Building

  • Rust nightly (2021-03-25) with the WebAssembly toolchain
  • GNU Make (3.81+)
rustup install nightly-2021-03-25
rustup target add wasm32-unknown-unknown --toolchain nightly-2021-03-25

Prerequisites for Development

  • Node.js (v14+)

Development

Branches

  • master is the current stable branch. It must be ready, anytime, to deployed on chain at a moment's notice.

  • develop is our bleeding-edge development branch. In general, kindly target all pull requests to this branch.

Building the EVM binary

make release  # produces mainnet-release.wasm (300+ KiB)
make -B mainnet  # produces Mainnet build
make -B testnet  # produces Testnet build

make debug    # produces mainnet-debug.wasm (1+ MiB), which includes symbols
make -B mainnet-debug # produces Mainnet debug build
make -B testnet-debug # produces Testnet debug build

Running unit & integration tests

make check

Deployment

Downloading the latest EVM release

wget https://github.com/aurora-is-near/aurora-engine/releases/download/latest/mainnet-release.wasm

Installing the Aurora CLI tool

npm install -g aurora-is-near/aurora-cli

Deploying the EVM with the CLI

export NEAR_ENV=local
near delete aurora.test.near test.near  # if needed
near create-account aurora.test.near --master-account=test.near --initial-balance 1000000
aurora install --chain 1313161556 --owner test.near mainnet-release.wasm

Deploying the EVM without the CLI

export NEAR_ENV=local
near delete aurora.test.near test.near  # if needed
near create-account aurora.test.near --master-account=test.near --initial-balance 1000000
near deploy --account-id=aurora.test.near --wasm-file=mainnet-release.wasm
aurora initialize --chain 1313161556 --owner test.near

Usage

Examining deployed EVM metadata

aurora get-version
aurora get-owner
aurora get-bridge-prover
aurora get-chain-id

Deploying EVM contract bytecode

aurora deploy-code @contract.bytecode
aurora deploy-code 0x600060005560648060106000396000f360e060020a6000350480638ada066e146028578063d09de08a1460365780632baeceb714604d57005b5060005460005260206000f3005b5060016000540160005560005460005260206000f3005b5060016000540360005560005460005260206000f300

Examining EVM contract state

$ aurora encode-address test.near
0xCBdA96B3F2B8eb962f97AE50C3852CA976740e2B
aurora get-nonce 0xCBdA96B3F2B8eb962f97AE50C3852CA976740e2B
aurora get-balance 0xCBdA96B3F2B8eb962f97AE50C3852CA976740e2B
aurora get-code 0xFc481F4037887e10708552c0D7563Ec6858640d6
aurora get-storage-at 0xFc481F4037887e10708552c0D7563Ec6858640d6 0

Calling an EVM contract read-only

$ aurora encode-address test.near
0xCBdA96B3F2B8eb962f97AE50C3852CA976740e2B
aurora view --sender 0xCBdA96B3F2B8eb962f97AE50C3852CA976740e2B 0xFc481F4037887e10708552c0D7563Ec6858640d6 0x8ada066e  # getCounter()
aurora view --sender 0xCBdA96B3F2B8eb962f97AE50C3852CA976740e2B 0xFc481F4037887e10708552c0D7563Ec6858640d6 0xd09de08a  # increment()
aurora view --sender 0xCBdA96B3F2B8eb962f97AE50C3852CA976740e2B 0xFc481F4037887e10708552c0D7563Ec6858640d6 0x2baeceb7  # decrement()

Calling an EVM contract mutatively

aurora call 0xFc481F4037887e10708552c0D7563Ec6858640d6 0xd09de08a  # increment()
aurora call 0xFc481F4037887e10708552c0D7563Ec6858640d6 0x2baeceb7  # decrement()

Debugging

Inspecting EVM storage state

near state aurora.test.near
aurora dump-storage

License

aurora-engine has multiple licenses:

  • all crates except engine-test has CCO-1.0 license
  • engine-test has GPL-v3 license