Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ target
.vscode
.idea
pkg/
cache
out
broadcast
.env
all-chain.json

bins/revme/temp_folder
bins/revme/tests
Expand All @@ -25,4 +30,4 @@ rustc-ice-*
/index.html

# Fixtures
/test-fixtures
/test-fixtures
9 changes: 9 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
[submodule "solidity/supra_contracts/lib/openzeppelin-contracts"]
path = solidity/supra_contracts/lib/openzeppelin-contracts
url = https://github.com/OpenZeppelin/openzeppelin-contracts
[submodule "solidity/supra_contracts/lib/openzeppelin-contracts-upgradeable"]
path = solidity/supra_contracts/lib/openzeppelin-contracts-upgradeable
url = https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable
[submodule "solidity/supra_contracts/lib/forge-std"]
path = solidity/supra_contracts/lib/forge-std
url = https://github.com/foundry-rs/forge-std
73 changes: 73 additions & 0 deletions solidity/supra_contracts/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
## Supra EVM Automation Registry

**This repository includes Supra EVM Automation Registry contract and related contracts.**

Foundry consists of:

- **Forge**: Ethereum testing framework (like Truffle, Hardhat and DappTools).
- **Cast**: Swiss army knife for interacting with EVM smart contracts, sending transactions and getting chain data.
- **Anvil**: Local Ethereum node, akin to Ganache, Hardhat Network.
- **Chisel**: Fast, utilitarian, and verbose solidity REPL.

## Documentation

https://book.getfoundry.sh/

## Usage

### Install dependencies

```
forge install OpenZeppelin/openzeppelin-contracts
forge install OpenZeppelin/openzeppelin-contracts-upgradeable
```

### Build

```shell
$ forge build
```

### Test

```shell
$ forge test
```

### Format

```shell
$ forge fmt
```

### Gas Snapshots

```shell
$ forge snapshot
```

### Anvil

```shell
$ anvil
```

### Deploy

```shell
$ forge script script/Counter.s.sol:CounterScript --rpc-url <your_rpc_url> --private-key <your_private_key>
```

### Cast

```shell
$ cast <subcommand>
```

### Help

```shell
$ forge --help
$ anvil --help
$ cast --help
```
20 changes: 20 additions & 0 deletions solidity/supra_contracts/foundry.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"lib/forge-std": {
"tag": {
"name": "v1.12.0",
"rev": "7117c90c8cf6c68e5acce4f09a6b24715cea4de6"
}
},
"lib/openzeppelin-contracts": {
"tag": {
"name": "v5.5.0",
"rev": "fcbae5394ae8ad52d8e580a3477db99814b9d565"
}
},
"lib/openzeppelin-contracts-upgradeable": {
"tag": {
"name": "v5.5.0",
"rev": "aa677e9d28ed78fc427ec47ba2baef2030c58e7c"
}
}
}
8 changes: 8 additions & 0 deletions solidity/supra_contracts/foundry.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[profile.default]
src = "src"
out = "out"
libs = ["lib"]
via_ir = true
optimizer = true

# See more config options https://github.com/foundry-rs/foundry/blob/master/crates/config/README.md#all-options
1 change: 1 addition & 0 deletions solidity/supra_contracts/lib/forge-std
Submodule forge-std added at 27ba11
1 change: 1 addition & 0 deletions solidity/supra_contracts/lib/openzeppelin-contracts
Submodule openzeppelin-contracts added at 353f56
51 changes: 51 additions & 0 deletions solidity/supra_contracts/script/DeployMultisig.s.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.27;

import {Script, console} from "forge-std/Script.sol";
import {MultiSignatureWallet} from "../src/MultiSignatureWallet.sol";
import {MultisigBeacon} from "../src/MultisigBeacon.sol";
import {BeaconProxy} from "../lib/openzeppelin-contracts/contracts/proxy/beacon/BeaconProxy.sol";

contract DeployMultisig is Script {
address[] owners;
uint256 numConfirmations;
address beaconOwner;

function setUp() public {
owners = vm.envAddress("OWNERS", ",");
numConfirmations = vm.envUint("NUM_CONFIRMATIONS");
beaconOwner = vm.envAddress("BEACON_OWNER");
}

function run() public {
vm.startBroadcast();

// ---------------------------------
// Deploy multisig implementation
// ---------------------------------
MultiSignatureWallet multisigImpl = new MultiSignatureWallet();
console.log("Multisig implementation deployed at: ", address(multisigImpl));

// -------------------------------------------
// Deploy beacon pointing to implementation
// -------------------------------------------
MultisigBeacon beacon = new MultisigBeacon(address(multisigImpl), beaconOwner);
console.log("Beacon deployed at: ", address(beacon));
console.log("Beacon owner: ", beacon.owner());

// ----------------------
// Deploy multisig proxy
// ----------------------
console.log("Number of confirmations: ", numConfirmations);
console.log("Adding following owners: ");
for (uint i = 0; i < owners.length; i++) {
console.logAddress(owners[i]);
}

bytes memory initData = abi.encodeCall(MultiSignatureWallet.initialize, (owners, numConfirmations));
BeaconProxy multisigProxy = new BeaconProxy(address(beacon), initData);
console.log("Multisig Proxy deployed at: ", address(multisigProxy));

vm.stopBroadcast();
}
}
Loading