Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/filecoin-station/voyager-impact-evaluator

Voyager impact evaluator smart contract (implements Meridian)
https://github.com/filecoin-station/voyager-impact-evaluator

Last synced: 1 day ago
JSON representation

Voyager impact evaluator smart contract (implements Meridian)

Awesome Lists containing this project

README

        

# voyager-impact-evaluator

Inherits from https://github.com/Meridian-IE/impact-evaluator, with added
Voyager-specific ACL and configuration.

## Roles

### `.MEASURE_ROLE()`

## Development

This repo requires Rust and Cargo, which can be installed from
[here](https://doc.rust-lang.org/book/ch01-01-installation.html)

##### Install Foundry

We recommend you install it from source:

```bash
git clone https://github.com/foundry-rs/foundry
cd foundry
git checkout 9a4bb7f5
# install cast + forge
cargo install --path ./cli --profile local --bins --locked --force
# install anvil
cargo install --path ./anvil --profile local --locked --force
```

##### Clone Repo and Install

```bash
git clone https://github.com/filecoin-station/voyager-impact-evaluator.git
cd voyager-impact-evaluator
git submodule update --init --recursive
forge test
```

##### Local Development

To iterate quickly, the `anvil` network can be used to develop locally. Note
that Anvil strictly uses Etheruem addressing and does not include Filecoin
pre-compiles.

First run `anvil`:

```bash
anvil
```

The output will provide a list of private keys and addresses that can be used.
Anvil's default mnemonic is:
`test test test test test test test test test test test junk`

To deploy the contract on Anvil, run:

```bash
forge create --rpc-url http://127.0.0.1:8545 --mnemonic "test test test test test test test test test test test junk" src/Voyager.sol:Voyager --constructor-args 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266
```

## Deployment

Contracts can be deployed using the `forge cli` or using a rust deployment
script that leverages contract bindings.

### Forge CLI

This deployment method requires manual insertion of a private key and is not
recommended for production use cases.

NOTE: Deployment using forge CLI often errors out on Filecoin networks even
though the transaction goes through (Foundry is configured for EVM's block time,
not FVM's). Use a block explorer to find the address of the contract.

Make sure the following env vars are defined as follows:

```bash
export RPC_URL="..."
export ADMIN_ADDRESS="..."
export MNEMONIC_PATH="{path to mnemonic secret file}"
```

To deploy using a private key, run:

```bash
forge create --rpc-url $RPC_URL --private-key src/Voyager.sol:Voyager --constructor-args $ADMIN_ADDRESS
```

To deploy using a local mnemonic secret, run:

```bash
forge create --rpc-url $RPC_URL --mnemonic $MNEMONIC_PATH src/Voyager.sol:Voyager --constructor-args $ADMIN_ADDRESS
```

### Deployment Rust Script

The deployment relies on contract bindings generated in the `/contract-bindings`
directory. If you make changes to the contracts, run:

```bash
rm -rf contract-bindings
forge bind --crate-name contract-bindings -b ./contract-bindings
```

This will create new bindings with the modified contracts.

Deployment can then proceed either with a locally stored mnemonic or a connected
ethereum ledger wallet. To use with a mnemonic, create a `secrets/mnemonic` file
in the root directory.

To deploy, run:

```bash
(cd contract-utils && cargo run)
```

## Tests

#### Integration Tests

Integration tests run on the filecoin calibration net and require a wallet with
test FIL to pay for gas fees on the calibration net. Test FIL is free and can be
obtained using the [faucet](https://faucet.calibration.fildev.network/).

Before running integration tests, these env vars are required:

```bash
export TEST_RPC_URL=https://api.calibration.node.glif.io/rpc/v1
export TEST_MNEMONIC={insert wallet mnemonic here}
export TEST_CONTRACT_ADDRESS={this can be an empty string}
```

To run tests, run:

```bash
cd contract-utils
cargo test -- --nocapture --test-threads 1
```