Skip to content

Commit

Permalink
feat(eth-multisig-v4): add opeth wallet contract
Browse files Browse the repository at this point in the history
  • Loading branch information
gianchandania committed Oct 27, 2023
1 parent 56cf31c commit 7f50b9c
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 0 deletions.
57 changes: 57 additions & 0 deletions contracts/coins/OpethWalletSimple.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
// SPDX-License-Identifier: Apache-2.0
pragma solidity 0.8.20;
import '../Forwarder.sol';
import '../ERC20Interface.sol';
import '../WalletSimple.sol';

/**
*
* WalletSimple
* ============
*
* Basic multi-signer wallet designed for use in a co-signing environment where 2 signatures are required to move funds.
* Typically used in a 2-of-3 signing configuration. Uses ecrecover to allow for 2 signatures in a single transaction.
*
* The first signature is created on the operation hash (see Data Formats) and passed to sendMultiSig/sendMultiSigToken
* The signer is determined by verifyMultiSig().
*
* The second signature is created by the submitter of the transaction and determined by msg.signer.
*
* Data Formats
* ============
*
* The signature is created with ethereumjs-util.ecsign(operationHash).
* Like the eth_sign RPC call, it packs the values as a 65-byte array of [r, s, v].
* Unlike eth_sign, the message is not prefixed.
*
* The operationHash the result of keccak256(prefix, toAddress, value, data, expireTime).
* For ether transactions, `prefix` is "OPETH".
* For token transaction, `prefix` is "OPETH-ERC20" and `data` is the tokenContractAddress.
*
*
*/
contract OpethWalletSimple is WalletSimple {
/**
* Get the network identifier that signers must sign over
* This provides protection signatures being replayed on other chains
*/
function getNetworkId() internal override pure returns (string memory) {
return 'OPETH';
}

/**
* Get the network identifier that signers must sign over for token transfers
* This provides protection signatures being replayed on other chains
*/
function getTokenNetworkId() internal override pure returns (string memory) {
return 'OPETH-ERC20';
}

/**
* Get the network identifier that signers must sign over for batch transfers
* This provides protection signatures being replayed on other chains
*/
function getBatchNetworkId() internal override pure returns (string memory) {
return 'OPETH-Batch';
}
}
8 changes: 8 additions & 0 deletions test/walletSimple.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ const EtcWalletSimple = artifacts.require('./EtcWalletSimple.sol');
const CeloWalletSimple = artifacts.require('./CeloWalletSimple.sol');
const PolygonWalletSimple = artifacts.require('./PolygonWalletSimple.sol');
const ArbethWalletSimple = artifacts.require('./ArbethWalletSimple.sol');
const OpethWalletSimple = artifacts.require('./OpethWalletSimple.sol');
const Fail = artifacts.require('./Fail.sol');
const GasGuzzler = artifacts.require('./GasGuzzler.sol');
const GasHeavy = artifacts.require('./GasHeavy.sol');
Expand Down Expand Up @@ -87,6 +88,13 @@ const coins = [
nativeBatchPrefix: 'ARBETH-Batch',
tokenPrefix: 'ARBETH-ERC20',
WalletSimple: ArbethWalletSimple
},
{
name: 'Opeth',
nativePrefix: 'OPETH',
nativeBatchPrefix: 'OPETH-Batch',
tokenPrefix: 'OPETH-ERC20',
WalletSimple: OpethWalletSimple
}
];

Expand Down

0 comments on commit 7f50b9c

Please sign in to comment.