From b1b1413ca052f3eb26c5076f90ffdf48c5ae3666 Mon Sep 17 00:00:00 2001 From: Akash Gianchandani Date: Tue, 26 Dec 2023 10:56:01 +0530 Subject: [PATCH] chore(contracts): update readme WIN-506 --- README.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/README.md b/README.md index b2e57f9..1b58c4d 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,7 @@ Multi-sig contract suitable for use as a 2-of-3 multisig wallet. The core functionality of the wallet is implemented in the [WalletSimple](contracts/WalletSimple.sol) contract. It is initialized with 3 signer addresses, two of which must participate in order to execute a transaction from the wallet. Auxillary contracts called [Forwarders](contracts/Forwarder.sol) can be deployed with a WalletSimple contract initialized as its "parent". Any funds that the forwarder receives will be sent on back to the parent wallet. This enables omnibus-style wallets to create many addresses that are all controlled by the same wallet. +New forwarder contracts (contracts/ForwarderV4.sol) can be deployed and initialized with a parent address and fee address. Parent address will be the single sig base address of the wallet. Fee address will be the gas tank address of the wallet. Both parent address and fee address will be allowed to call methods of the contract, but any funds that the forwarder receives will be sent on back to the parent wallet. This enables omnibus-style wallets to create many addresses that are all controlled by the same wallet. Features of the [wallet contract](contracts/WalletSimple.sol): @@ -22,6 +23,13 @@ Features of the [forwarder contract](contracts/Forwarder.sol) 2. Automatically flushes any ETH received to the parent address. 3. Able to flush ERC20 tokens received to the parent address through a separate transaction (flushForwarderTokens). +Features of the updated [forwarder contract](contracts/ForwarderV4.sol) + +1. Deployed with a permanent parent address and a fee address. +2. Both parent address and fee address can invoke the methods of the contract. +3. Automatically flushes any ETH received to the parent address. +4. Able to flush ERC20 tokens received to the parent address through a separate transaction (flushTokens). + Note that this suite of contracts is an upgraded version of [eth-multisig-v2](https://github.com/bitgo/eth-multisig-v2). The main changes that were made are as follows: - Wallets and forwarders are deployed as proxy instances to a single implementation, to save on deployment fees. - Wallets and forwarders are deployed using CREATE2 to allow addresses to be generated on demand, but only deployed upon first use. @@ -48,6 +56,13 @@ To deploy forwarders, follow these steps: 3. Call the `createForwarder` function on the factory deployed in step 2. Provide the parent address, and some "salt" which will be used to determine the forwarder's address via [CREATE2](https://eips.ethereum.org/EIPS/eip-1014). 4. Check for the `ForwarderCreated` event from the above transaction. This will include your newly generated forwarder address +**ForwardersV4** +To deploy forwarders, follow these steps: +1. Deploy a forwarder contract ([contracts/ForwarderV4.sol](contracts/Forwarder.sol)) with any address. Take note of the contract's address. +2. Deploy a ForwarderFactory contract ([contracts/ForwarderFactoryV4.sol](contracts/ForwarderFactoryV4.sol)) with any address. Use the address of the contract deployed in step 1 as the `_implementationAddress` parameter. +3. Call the `createForwarder` function on the factory deployed in step 2. Provide the parent address, fee address and some "salt" which will be used to determine the forwarder's address via [CREATE2](https://eips.ethereum.org/EIPS/eip-1014). +4. Check for the `ForwarderCreated` event from the above transaction. This will include your newly generated forwarder address + ## Contracts Brief descriptions of the various contracts provided in this repository. @@ -72,6 +87,14 @@ Factory to create forwarder. Deploys a small proxy which utilizes the implementa Transfer batcher. Takes a list of recipients and amounts, and distributes ETH to them in a single transaction. +[**ForwarderV4**](contracts/ForwarderV4.sol) + +Forwarder function. Initializes with a parent and a fee address. It will forward any ETH that it receives to the parent address. Also has a function to forward ERC20 tokens. This function can be invoked using the parent address or the fee address. + +[**ForwarderFactoryV4**](contracts/ForwarderFactoryV4.sol) + +Factory to create updated forwarder (contracts/ForwarderV4.sol). Deploys a small proxy which utilizes the implementation of a single forwarder contract. + ## Installation NodeJS 16 is required.