Skip to content

Commit

Permalink
feat: l1 execution (#516)
Browse files Browse the repository at this point in the history
* fix: eth relayer

* refactor: use deserialization for payload

* fix: l1 avatar payload serialization

* fix: enforce timestamp exceed max voting timestamp

* feat: working L1 avatar execution

* chore: mock core contracts and avatar execution for testing

* chore: deps management

* chore: test/ dir with lq exec test

* chore: more deps managment

* chore: hardhat config

* chore: formatting

* chore: L1 Avatar unit forge tests

* chore: deps and cleanup

* chore: temp remove deps.sol

* fix: relayer imports

* chore: foundry deps

* chore: fix typo

* chore: re-add stark sig auth test

* chore: l1 execution revert tests

* chore: l1 execution bash script

* chore: updated deps

* chore: updated to latest safe versions for setup and pull artifacts from submodule

* chore: cleanup test

* chore: updated sol imports

* feat: get strategy type on eth relayer

* chore: fixe remappings

* chore: More test coverage and CI integration

c

* chore: cleanup

* chore: PR fixes

* chore: more coverage and refactor

* chore: checks on space manager during init

* chore: fixed revert string

* chore: update .env.example

* chore: moved safe utils to external sub dir

* chore formatting

* feat: quorum setter and test

* vhore: test invalid space call exec strat

* chore: formatting

* chore: fix revert msg in test

* feat: setters for Starknet Core and Eth Relayer contracts and tests

---------

Co-authored-by: Orlando <[email protected]>
  • Loading branch information
Orland0x and Orlando authored Sep 4, 2023
1 parent 698d4dd commit 05cc4db
Show file tree
Hide file tree
Showing 34 changed files with 8,110 additions and 250 deletions.
8 changes: 7 additions & 1 deletion .env.example
Original file line number Diff line number Diff line change
@@ -1 +1,7 @@
NETWORK_URL=
STARKNET_NETWORK_URL=
ETH_NETWORK_URL=
ADDRESS=
PK=
STARKNET_SIERRA_COMPILE_PATH=
# Needed for Devnet Postman Endpoint to work
OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
73 changes: 61 additions & 12 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
name: SX-Starknet Workflow

env:
STARKNET_SIERRA_COMPILE_PATH: ./cairo/bin/starknet-sierra-compile
OBJC_DISABLE_INITIALIZE_FORK_SAFETY: YES
ADDRESS: "0x347be35996a21f6bf0623e75dbce52baba918ad5ae8d83b6f416045ab22961a"
PK: "0xbdd640fb06671ad11c80317fa3b1799d"

on:
push:
branches:
Expand All @@ -14,28 +20,28 @@ jobs:
name: Forge tests
runs-on: ubuntu-latest
steps:
- name: Step 1 - Check out main branch
- name: Check out main branch
uses: actions/checkout@v3
with:
submodules: recursive

- name: Step 2 - Install Foundry
- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
with:
version: nightly

- name: Step 3 - Check formatting
- name: Check formatting
working-directory: ./ethereum
run: forge fmt --check

- name: Step 4 - Build Solidity contracts
- name: Build Solidity contracts
working-directory: ./ethereum
run: |
forge --version
forge build --sizes
id: build

- name: Step 5 - Run Forge tests
- name: Run Forge tests
working-directory: ./ethereum
run: |
forge test -vvv
Expand All @@ -46,24 +52,67 @@ jobs:
fail-fast: true

name: Cairo tests
runs-on: ubuntu-latest
runs-on: ubuntu-20.04
steps:
- name: Step 1 - Check out main branch
- name: Check out main branch
uses: actions/checkout@v3

- name: Step 2 - Install Scarb
- name: Set up node
uses: actions/setup-node@v3
with:
node-version: 18.16.0

- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"

- name: Cache Yarn dependencies
uses: actions/cache@v3
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
yarn-
- name: Install Yarn dependencies
run: yarn install

- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: 3.9

- name: Install Python dependencies
run: |
sudo apt install -y libgmp3-dev
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Install Cairo
run: curl -L https://github.com/starkware-libs/cairo/releases/download/v2.2.0/release-x86_64-unknown-linux-musl.tar.gz > cairo.tar.gz

- name: Extract Cairo
run: tar -xvf cairo.tar.gz

- name: Install Scarb
uses: software-mansion/setup-scarb@v1
with:
scarb-version: 0.7.0

- name: Step 3 - Check formatting
- name: Check Cairo formatting
working-directory: ./starknet
run: scarb fmt --check

- name: Step 4 - Build Cairo contracts
- name: Build Cairo contracts
working-directory: ./starknet
run: scarb build --verbose

- name: Step 4 - Running Cairo tests
- name: Run Cairo tests
working-directory: ./starknet
run: scarb test --verbose
run: scarb test --verbose

- name: Compile Cairo contracts for Hardhat tests
run: yarn hardhat starknet-build

- name: run Hardhat tests
run: yarn test:l1-execution
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,6 @@
url = https://github.com/safe-global/safe-contracts
[submodule "lib/safe-contracts"]
branch = v1.4.0
[submodule "ethereum/lib/openzeppelin-contracts"]
path = ethereum/lib/openzeppelin-contracts
url = https://github.com/OpenZeppelin/openzeppelin-contracts
160 changes: 160 additions & 0 deletions audited_cairo_libfuncs.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
{
"allowed_libfuncs": [
"alloc_local",
"array_append",
"array_get",
"array_len",
"array_new",
"array_pop_front",
"array_pop_front_consume",
"array_slice",
"array_snapshot_pop_back",
"array_snapshot_pop_front",
"bitwise",
"bool_and_impl",
"bool_not_impl",
"bool_or_impl",
"bool_to_felt252",
"bool_xor_impl",
"branch_align",
"call_contract_syscall",
"class_hash_const",
"class_hash_to_felt252",
"class_hash_try_from_felt252",
"contract_address_const",
"contract_address_to_felt252",
"contract_address_try_from_felt252",
"deploy_syscall",
"disable_ap_tracking",
"downcast",
"drop",
"dup",
"ec_neg",
"ec_point_from_x_nz",
"ec_point_is_zero",
"ec_point_try_new_nz",
"ec_point_unwrap",
"ec_point_zero",
"ec_state_add",
"ec_state_add_mul",
"ec_state_init",
"ec_state_try_finalize_nz",
"emit_event_syscall",
"enable_ap_tracking",
"enum_init",
"enum_match",
"enum_snapshot_match",
"felt252_add",
"felt252_const",
"felt252_dict_entry_finalize",
"felt252_dict_entry_get",
"felt252_dict_new",
"felt252_dict_squash",
"felt252_div",
"felt252_is_zero",
"felt252_mul",
"felt252_sub",
"finalize_locals",
"function_call",
"get_block_hash_syscall",
"get_builtin_costs",
"get_execution_info_syscall",
"hades_permutation",
"into_box",
"jump",
"keccak_syscall",
"library_call_syscall",
"match_nullable",
"null",
"nullable_from_box",
"pedersen",
"rename",
"replace_class_syscall",
"revoke_ap_tracking",
"secp256k1_add_syscall",
"secp256k1_get_xy_syscall",
"secp256k1_get_point_from_x_syscall",
"secp256k1_mul_syscall",
"secp256k1_new_syscall",
"send_message_to_l1_syscall",
"snapshot_take",
"storage_address_from_base",
"storage_address_from_base_and_offset",
"storage_address_to_felt252",
"storage_address_try_from_felt252",
"storage_base_address_const",
"storage_base_address_from_felt252",
"storage_read_syscall",
"storage_write_syscall",
"store_local",
"store_temp",
"struct_construct",
"struct_deconstruct",
"struct_snapshot_deconstruct",
"u256_safe_divmod",
"u256_sqrt",
"u256_is_zero",
"u128_const",
"u128_eq",
"u128_is_zero",
"u128_overflowing_add",
"u128_overflowing_sub",
"u128_safe_divmod",
"u128_sqrt",
"u128_byte_reverse",
"u128_to_felt252",
"u128_guarantee_mul",
"u128_mul_guarantee_verify",
"u128s_from_felt252",
"u16_bitwise",
"u16_const",
"u16_eq",
"u16_is_zero",
"u16_overflowing_add",
"u16_overflowing_sub",
"u16_safe_divmod",
"u16_sqrt",
"u16_to_felt252",
"u16_try_from_felt252",
"u16_wide_mul",
"u32_bitwise",
"u32_const",
"u32_eq",
"u32_is_zero",
"u32_overflowing_add",
"u32_overflowing_sub",
"u32_safe_divmod",
"u32_sqrt",
"u32_to_felt252",
"u32_try_from_felt252",
"u32_wide_mul",
"u512_safe_divmod_by_u256",
"u64_bitwise",
"u64_const",
"u64_eq",
"u64_is_zero",
"u64_overflowing_add",
"u64_overflowing_sub",
"u64_safe_divmod",
"u64_sqrt",
"u64_to_felt252",
"u64_try_from_felt252",
"u64_wide_mul",
"u8_bitwise",
"u8_const",
"u8_eq",
"u8_is_zero",
"u8_overflowing_add",
"u8_overflowing_sub",
"u8_safe_divmod",
"u8_sqrt",
"u8_to_felt252",
"u8_try_from_felt252",
"u8_wide_mul",
"unbox",
"unwrap_non_zero",
"upcast",
"withdraw_gas",
"withdraw_gas_all"
]
}
1 change: 1 addition & 0 deletions ethereum/lib/openzeppelin-contracts
Submodule openzeppelin-contracts added at fd81a9
5 changes: 4 additions & 1 deletion ethereum/remappings.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,5 @@
@gnosis.pm/safe-contracts=lib/safe-contracts
@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts
@gnosis.pm/zodiac/=lib/zodiac/
@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts
@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts
@safe-global/safe-contracts/=lib/safe-contracts/
7 changes: 7 additions & 0 deletions ethereum/src/deps.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
/// SPDX-License-Identifier: MIT

pragma solidity ^0.8.19;

import "@safe-global/safe-contracts/contracts/SafeL2.sol";
import "@safe-global/safe-contracts/contracts/proxies/SafeProxyFactory.sol";
import "@gnosis.pm/zodiac/contracts/factory/ModuleProxyFactory.sol";
Loading

0 comments on commit 05cc4db

Please sign in to comment.