Skip to content
This repository has been archived by the owner on Aug 29, 2023. It is now read-only.

Commit

Permalink
Add multisig actor (#56)
Browse files Browse the repository at this point in the history
* add method nums
* add base testing suite files
* add CI
* add commands to makefile
* add solidity code for actor
  • Loading branch information
emmanuelm41 authored Dec 8, 2022
1 parent 637f4f2 commit c967242
Show file tree
Hide file tree
Showing 9 changed files with 3,776 additions and 1 deletion.
47 changes: 47 additions & 0 deletions .github/workflows/main.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -397,6 +397,53 @@ jobs:
~/.cargo/registry/cache/
~/.cargo/git/db/
key: ${{ runner.os }}-cargo-${{ hashFiles('./testing/account/Cargo.lock') }}
multisig-integration:
name: "Multisig API: integration tests"
timeout-minutes: 20
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Install node
uses: actions/setup-node@v2
with:
node-version: '16.16.0'
- name: Install yarn
run: npm install -g yarn
- name: Install latest stable
uses: actions-rs/toolchain@v1
with:
toolchain: nightly
override: true
- name: Install dependencies
run: |
yarn install
make install_solc_linux
- name: Restore crates
uses: actions/cache@v3
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
key: ${{ runner.os }}-cargo-${{ hashFiles('./testing/multisig/Cargo.lock') }}
- name: Build contracts
run: make
- name: Run tests on init
run: |
cd testing/multisig
rustup target add wasm32-unknown-unknown
RUST_BACKTRACE=1 cargo r
- name: Save crates
uses: actions/cache@v3
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
key: ${{ runner.os }}-cargo-${{ hashFiles('./testing/multisig/Cargo.lock') }}



Expand Down
6 changes: 5 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ build_api:
./bin/solc solidity-cborutils=${PWD}/node_modules/solidity-cborutils/ @openzeppelin=${PWD}/node_modules/@openzeppelin/ @ensdomains=${PWD}/node_modules/@ensdomains/ contracts/v0.8/DataCapAPI.sol --output-dir ./build/v0.8 --overwrite --bin --hashes --opcodes --abi
./bin/solc solidity-cborutils=${PWD}/node_modules/solidity-cborutils/ @openzeppelin=${PWD}/node_modules/@openzeppelin/ @ensdomains=${PWD}/node_modules/@ensdomains/ contracts/v0.8/InitAPI.sol --output-dir ./build/v0.8 --overwrite --bin --hashes --opcodes --abi
./bin/solc solidity-cborutils=${PWD}/node_modules/solidity-cborutils/ @openzeppelin=${PWD}/node_modules/@openzeppelin/ @ensdomains=${PWD}/node_modules/@ensdomains/ contracts/v0.8/AccountAPI.sol --output-dir ./build/v0.8 --overwrite --bin --hashes --opcodes --abi
./bin/solc solidity-cborutils=${PWD}/node_modules/solidity-cborutils/ @openzeppelin=${PWD}/node_modules/@openzeppelin/ @ensdomains=${PWD}/node_modules/@ensdomains/ contracts/v0.8/MultisigAPI.sol --output-dir ./build/v0.8 --overwrite --bin --hashes --opcodes --abi

deploy_simple_coin:
cd hardhat && yarn hardhat deploy --tags SimpleCoin
Expand All @@ -32,7 +33,7 @@ test_miner_cbor_serialization:
test_market_cbor_serialization:
cd hardhat && yarn hardhat withdraw_balance --providerorclient 0xaaaa12 --tokenamount 12222 --contractaddress $(CONTRACT_ADDRESS)

test_integration: test_miner_integration test_market_integration test_power_integration test_verifreg_integration test_datacap_integration test_account_integration
test_integration: test_miner_integration test_market_integration test_power_integration test_verifreg_integration test_datacap_integration test_account_integration test_multisig_integration

test_miner_integration: build
cd testing/miner && cargo r
Expand All @@ -55,6 +56,9 @@ test_init_integration: build
test_account_integration: build
cd testing/account && cargo r

test_multisig_integration: build
cd testing/multisig && cargo r

get_method_nums:
cd script && cargo r

Expand Down
131 changes: 131 additions & 0 deletions contracts/v0.8/MultisigAPI.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
/*******************************************************************************
* (c) 2022 Zondax AG
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
********************************************************************************/
//
// DRAFT!! THIS CODE HAS NOT BEEN AUDITED - USE ONLY FOR PROTOTYPING
//
pragma solidity >=0.4.25 <=0.8.15;

import "./types/MultisigTypes.sol";
import "./cbor/MultisigCbor.sol";
import "./types/CommonTypes.sol";
import "./utils/Misc.sol";
import "./utils/Actor.sol";

/// @title This contract is a proxy to the Multisig actor. Calling one of its methods will result in a cross-actor call being performed.
/// @author Zondax AG
contract MultisigAPI {
using BytesCBOR for bytes;
using ProposeCBOR for MultisigTypes.ProposeParams;
using ProposeCBOR for MultisigTypes.ProposeReturn;
using TxnIDCBOR for MultisigTypes.TxnIDParams;
using ApproveCBOR for MultisigTypes.ApproveReturn;
using AddSignerCBOR for MultisigTypes.AddSignerParams;
using RemoveSignerCBOR for MultisigTypes.RemoveSignerParams;
using SwapSignerCBOR for MultisigTypes.SwapSignerParams;
using ChangeNumApprovalsThresholdCBOR for MultisigTypes.ChangeNumApprovalsThresholdParams;
using LockBalanceCBOR for MultisigTypes.LockBalanceParams;

/// @notice FIXME
function propose(bytes memory target, MultisigTypes.ProposeParams memory params) public returns (MultisigTypes.ProposeReturn memory) {
bytes memory raw_request = params.serialize();

bytes memory raw_response = Actor.call(MultisigTypes.ProposeMethodNum, target, raw_request);

bytes memory result = Actor.readRespData(raw_response);

MultisigTypes.ProposeReturn memory response;
response.deserialize(result);

return response;
}

/// @notice FIXME
function approve(bytes memory target, MultisigTypes.TxnIDParams memory params) public returns (MultisigTypes.ApproveReturn memory) {
bytes memory raw_request = params.serialize();

bytes memory raw_response = Actor.call(MultisigTypes.ApproveMethodNum, target, raw_request);

bytes memory result = Actor.readRespData(raw_response);

MultisigTypes.ApproveReturn memory response;
response.deserialize(result);

return response;
}

/// @notice FIXME
function cancel(bytes memory target, MultisigTypes.TxnIDParams memory params) public {
bytes memory raw_request = params.serialize();

bytes memory raw_response = Actor.call(MultisigTypes.CancelMethodNum, target, raw_request);

bytes memory result = Actor.readRespData(raw_response);
}

/// @notice FIXME
function add_signer(bytes memory target, MultisigTypes.AddSignerParams memory params) public {
bytes memory raw_request = params.serialize();

bytes memory raw_response = Actor.call(MultisigTypes.AddSignerMethodNum, target, raw_request);

bytes memory result = Actor.readRespData(raw_response);
}

/// @notice FIXME
function remove_signer(bytes memory target, MultisigTypes.RemoveSignerParams memory params) public {
bytes memory raw_request = params.serialize();

bytes memory raw_response = Actor.call(MultisigTypes.RemoveSignerMethodNum, target, raw_request);

bytes memory result = Actor.readRespData(raw_response);
}

/// @notice FIXME
function swap_signer(bytes memory target, MultisigTypes.SwapSignerParams memory params) public {
bytes memory raw_request = params.serialize();

bytes memory raw_response = Actor.call(MultisigTypes.SwapSignerMethodNum, target, raw_request);

bytes memory result = Actor.readRespData(raw_response);
}

/// @notice FIXME
function swap_signer(bytes memory target, MultisigTypes.ChangeNumApprovalsThresholdParams memory params) public {
bytes memory raw_request = params.serialize();

bytes memory raw_response = Actor.call(MultisigTypes.ChangeNumApprovalsThresholdMethodNum, target, raw_request);

bytes memory result = Actor.readRespData(raw_response);
}

/// @notice FIXME
function lock_balance(bytes memory target, MultisigTypes.LockBalanceParams memory params) public {
bytes memory raw_request = params.serialize();

bytes memory raw_response = Actor.call(MultisigTypes.LockBalanceMethodNum, target, raw_request);

bytes memory result = Actor.readRespData(raw_response);
}

/// @notice FIXME
function universal_receiver_hook(bytes memory target, bytes memory params) public {
bytes memory raw_request = params.serializeBytes();

bytes memory raw_response = Actor.call(MultisigTypes.UniversalReceiverHookMethodNum, target, raw_request);

bytes memory result = Actor.readRespData(raw_response);
}
}
Loading

0 comments on commit c967242

Please sign in to comment.