From b87d0c532c2e99c0c8dd508b76d6e61f571f86cd Mon Sep 17 00:00:00 2001 From: llunaCreixent Date: Thu, 1 Dec 2022 20:18:41 +0100 Subject: [PATCH 1/2] Revert v3.1.1.and v3.1.2: remove multisend --- .env.example | 1 - README.md | 1 - src/common/constants.js | 1 - src/common/getContracts.js | 16 +----------- src/common/multiSend.js | 19 -------------- src/index.js | 4 --- src/safe.js | 51 +++++++++++++------------------------- src/utils.js | 7 ++---- test/common.test.js | 2 -- test/helpers/core.js | 1 - test/safe.test.js | 11 ++++---- test/token.test.js | 1 - 12 files changed, 26 insertions(+), 89 deletions(-) delete mode 100644 src/common/multiSend.js diff --git a/.env.example b/.env.example index 6eefddde..73dbec74 100644 --- a/.env.example +++ b/.env.example @@ -14,7 +14,6 @@ HUB_ADDRESS=0xCfEB869F69431e42cdB54A4F4f105C19C080A601 PROXY_FACTORY_ADDRESS=0x9b1f7F645351AF3631a656421eD2e40f2802E6c0 SAFE_ADDRESS=0x2612Af3A521c2df9EAF28422Ca335b04AdF3ac66 SAFE_DEFAULT_CALLBACK_HANDLER=0x67B5656d60a809915323Bf2C40A8bEF15A152e3e -MULTISEND_CALLONLY_ADDRESS=0x0290FB167208Af455bB137780163b7B7a9a10C16 # Smart contract addresses of the Base CRC version PROXY_FACTORY_ADDRESS_CRC=0xD833215cBcc3f914bD1C9ece3EE7BF8B14f841bb diff --git a/README.md b/README.md index a2b1f757..a08d9183 100644 --- a/README.md +++ b/README.md @@ -96,7 +96,6 @@ const core = new CirclesCore(web3, { relayServiceEndpoint: 'http://relay.circles.local', subgraphName: 'circlesubi/circles-subgraph', fallbackHandlerAddress: '0x67B5656d60a809915323Bf2C40A8bEF15A152e3e', - multiSendCallOnlyAddress: '0x0290FB167208Af455bB137780163b7B7a9a10C16' }); // Create existing account from private key which owns a Safe diff --git a/src/common/constants.js b/src/common/constants.js index eda2c71c..877055c7 100644 --- a/src/common/constants.js +++ b/src/common/constants.js @@ -1,6 +1,5 @@ // Gnosis Safe operation types export const CALL_OP = 0; -export const DELEGATE_OP = 1; // Gnosis Safe owner threshold export const SAFE_THRESHOLD = 1; diff --git a/src/common/getContracts.js b/src/common/getContracts.js index 3c1d3401..4147a45c 100644 --- a/src/common/getContracts.js +++ b/src/common/getContracts.js @@ -1,7 +1,6 @@ import GnosisSafeContract from '@gnosis.pm/safe-contracts/build/artifacts/contracts/GnosisSafeL2.sol/GnosisSafeL2.json'; import GnosisSafeCRCVersionContract from '@circles/safe-contracts/build/contracts/GnosisSafe.json'; import HubContract from '@circles/circles-contracts/build/contracts/Hub.json'; -import MultiSendCallOnlyContract from '@gnosis.pm/safe-contracts/build/artifacts/contracts/libraries/MultiSendCallOnly.sol/MultiSendCallOnly.json'; import ProxyFactoryContract from '@gnosis.pm/safe-contracts/build/artifacts/contracts/proxies/GnosisSafeProxyFactory.sol/GnosisSafeProxyFactory.json'; import TokenContract from '@circles/circles-contracts/build/contracts/Token.json'; @@ -73,12 +72,7 @@ export function getTokenContract(web3, address) { * @return {Object} - contract instances */ export default function getContracts(web3, options) { - const { - safeMasterAddress, - proxyFactoryAddress, - hubAddress, - multiSendCallOnlyAddress, - } = options; + const { safeMasterAddress, proxyFactoryAddress, hubAddress } = options; // Gnosis master Safe copy const safeMaster = getSafeContract(web3, safeMasterAddress); @@ -93,16 +87,8 @@ export default function getContracts(web3, options) { // Circles Hub const hub = getContract(web3, HubContract.abi, hubAddress); - // Multisend Call Only contract - const multiSendCallOnly = getContract( - web3, - MultiSendCallOnlyContract.abi, - multiSendCallOnlyAddress, - ); - return { hub, - multiSendCallOnly, proxyFactory, safeMaster, }; diff --git a/src/common/multiSend.js b/src/common/multiSend.js deleted file mode 100644 index c8890068..00000000 --- a/src/common/multiSend.js +++ /dev/null @@ -1,19 +0,0 @@ -export default function encodeMultiSendCall(web3, txs, multiSend) { - const joinedTxs = txs - .map((tx) => - [ - web3.eth.abi.encodeParameter('uint8', 0).slice(-2), - web3.eth.abi.encodeParameter('address', tx.to).slice(-40), - // if you pass wei as number, it will overflow - web3.eth.abi.encodeParameter('uint256', tx.value.toString()).slice(-64), - web3.eth.abi - .encodeParameter('uint256', web3.utils.hexToBytes(tx.data).length) - .slice(-64), - tx.data.replace(/^0x/, ''), - ].join(''), - ) - .join(''); - - const joinedTxsHex = `0x${joinedTxs}`; - return multiSend.methods.multiSend(joinedTxsHex).encodeABI(); -} diff --git a/src/index.js b/src/index.js index c00088be..77f0ccc2 100644 --- a/src/index.js +++ b/src/index.js @@ -29,7 +29,6 @@ export default class CirclesCore { * @param {string} options.fallbackHandlerAddress - address of the fallback handler of the Safe contract * @param {string} options.graphNodeEndpoint - URL of the graph node * @param {string} options.hubAddress - address of deployed Circles Hub contract - * @param {string} options.multiSendCallOnlyAddress - address of deployed Gnosis MultiSendCallOnly contract * @param {string} options.proxyFactoryAddress - address of deployed Gnosis ProxyFactory contract * @param {string} options.relayServiceEndpoint - URL of the Relayer server * @param {string} options.safeMasterAddress - address of deployed Gnosis Safe master copy contract @@ -49,9 +48,6 @@ export default class CirclesCore { hubAddress: { type: web3.utils.checkAddressChecksum, }, - multiSendCallOnlyAddress: { - type: web3.utils.checkAddressChecksum, - }, proxyFactoryAddress: { type: web3.utils.checkAddressChecksum, }, diff --git a/src/safe.js b/src/safe.js index bb7c2c7b..be656e04 100644 --- a/src/safe.js +++ b/src/safe.js @@ -1,5 +1,4 @@ import { - DELEGATE_OP, SAFE_LAST_VERSION, SAFE_THRESHOLD, SENTINEL_ADDRESS, @@ -11,7 +10,6 @@ import { getSafeContract, getSafeCRCVersionContract, } from '~/common/getContracts'; -import encodeMultiSendCall from '~/common/multiSend'; /** * Helper method to receive a list of all Gnosis Safe owners. @@ -129,7 +127,7 @@ export default function createSafeModule( globalOptions, ) { const { fallbackHandlerAddress } = globalOptions; - const { safeMaster, multiSendCallOnly } = contracts; + const { safeMaster } = contracts; return { /** * Predict Safe address. @@ -518,7 +516,8 @@ export default function createSafeModule( }); const safeVersion = await getVersion(web3, options.safeAddress); - let txHash; + let txHashChangeMasterCopy; + let txHashFallbackHandler; if (safeVersion != SAFE_LAST_VERSION) { // References: @@ -536,44 +535,28 @@ export default function createSafeModule( const updateSafeTxData = safeInstance.methods .changeMasterCopy(safeMaster.options.address) .encodeABI(); - // Then we setup the fallbackHandler - const fallbackHandlerTxData = safeInstance.methods - .setFallbackHandler(fallbackHandlerAddress) - .encodeABI(); - - const txs = [ - { - to: options.safeAddress, - value: '0', - data: updateSafeTxData, - }, - { - to: options.safeAddress, - value: '0', - data: fallbackHandlerTxData, - }, - ]; - - const multiSendCallTxData = encodeMultiSendCall( - web3, - txs, - multiSendCallOnly, - ); - - txHash = await utils.executeTokenSafeTx(account, { + txHashChangeMasterCopy = await utils.executeTokenSafeTx(account, { safeAddress: options.safeAddress, - to: multiSendCallOnly.options.address, - txData: multiSendCallTxData, + to: options.safeAddress, + txData: updateSafeTxData, isCRCVersion: true, - operation: DELEGATE_OP, }); - if (!txHash) { + if (!txHashChangeMasterCopy) { throw new CoreError( `Safe with version ${safeVersion} failed to change the Master Copy`, ); } + // Then we setup the fallbackHandler + const fallbackHandlerTxData = safeInstance.methods + .setFallbackHandler(fallbackHandlerAddress) + .encodeABI(); + txHashFallbackHandler = await utils.executeTokenSafeTx(account, { + safeAddress: options.safeAddress, + to: options.safeAddress, + txData: fallbackHandlerTxData, + }); } - return txHash; + return { txHashChangeMasterCopy, txHashFallbackHandler }; }, }; } diff --git a/src/utils.js b/src/utils.js index b3edea45..39e6e3df 100644 --- a/src/utils.js +++ b/src/utils.js @@ -744,13 +744,10 @@ export default function createUtilsModule(web3, contracts, globalOptions) { type: 'boolean', default: false, }, - operation: { - type: 'number', - default: CALL_OP, - }, }); - const { txData, safeAddress, to, isCRCVersion, operation } = options; + const { txData, safeAddress, to, isCRCVersion } = options; + const operation = CALL_OP; const refundReceiver = ZERO_ADDRESS; const value = 0; diff --git a/test/common.test.js b/test/common.test.js index 501d273a..f38d1268 100644 --- a/test/common.test.js +++ b/test/common.test.js @@ -175,7 +175,6 @@ describe('Common', () => { beforeEach(() => { contracts = getContracts(web3, { hubAddress: ZERO_ADDRESS, - multiSendCallOnlyAddress: ZERO_ADDRESS, proxyFactoryAddress: ZERO_ADDRESS, safeMasterAddress: ZERO_ADDRESS, }); @@ -184,7 +183,6 @@ describe('Common', () => { it('should give us access to contracts', () => { expect(contracts.safeMaster.methods).toBeDefined(); expect(contracts.hub.methods).toBeDefined(); - expect(contracts.multiSendCallOnly.methods).toBeDefined(); expect(contracts.proxyFactory.methods).toBeDefined(); }); diff --git a/test/helpers/core.js b/test/helpers/core.js index 6e910bc9..67c3474c 100644 --- a/test/helpers/core.js +++ b/test/helpers/core.js @@ -8,7 +8,6 @@ export default function createCore() { fallbackHandlerAddress: process.env.SAFE_DEFAULT_CALLBACK_HANDLER, graphNodeEndpoint: process.env.GRAPH_NODE_ENDPOINT, hubAddress: process.env.HUB_ADDRESS, - multiSendCallOnlyAddress: process.env.MULTISEND_CALLONLY_ADDRESS, proxyFactoryAddress: process.env.PROXY_FACTORY_ADDRESS, relayServiceEndpoint: process.env.RELAY_SERVICE_ENDPOINT, safeMasterAddress: process.env.SAFE_ADDRESS, diff --git a/test/safe.test.js b/test/safe.test.js index 3a70e455..53e676af 100644 --- a/test/safe.test.js +++ b/test/safe.test.js @@ -258,7 +258,6 @@ describe('Safe', () => { const hubAddress = core.options.hubAddress; contracts = await getContracts(web3, { hubAddress: hubAddress, - multiSendCallOnlyAddress: ZERO_ADDRESS, proxyFactoryAddress: ZERO_ADDRESS, safeMasterAddress: ZERO_ADDRESS, }); @@ -292,11 +291,13 @@ describe('Safe', () => { }); it('I should get the last version when update the Safe version of a deployed Safe', async () => { - const txHash = await core.safe.updateToLastVersion(ownerCRCVersion, { - safeAddress: CRCVersionSafeAddress, - }); + const { txHashChangeMasterCopy, txHashFallbackHandler } = + await core.safe.updateToLastVersion(ownerCRCVersion, { + safeAddress: CRCVersionSafeAddress, + }); - expect(web3.utils.isHexStrict(txHash)).toBe(true); + expect(web3.utils.isHexStrict(txHashChangeMasterCopy)).toBe(true); + expect(web3.utils.isHexStrict(txHashFallbackHandler)).toBe(true); const version = await core.safe.getVersion(ownerCRCVersion, { safeAddress: CRCVersionSafeAddress, diff --git a/test/token.test.js b/test/token.test.js index ac0069bc..3fd49655 100644 --- a/test/token.test.js +++ b/test/token.test.js @@ -89,7 +89,6 @@ describe('Token', () => { hubAddress = core.options.hubAddress; contracts = await getContracts(web3, { hubAddress: hubAddress, - multiSendCallOnlyAddress: ZERO_ADDRESS, proxyFactoryAddress: ZERO_ADDRESS, safeMasterAddress: ZERO_ADDRESS, }); From b78f3464186fcb0f62ab0d75244ef2087a03f002 Mon Sep 17 00:00:00 2001 From: llunaCreixent Date: Fri, 2 Dec 2022 08:28:15 +0100 Subject: [PATCH 2/2] Update GH Actions dependencies --- .github/workflows/deploy.yml | 4 ++-- .github/workflows/tests.yml | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 99c1e3ab..927a5d98 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -11,10 +11,10 @@ jobs: runs-on: ubuntu-latest steps: - name: Git checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Setup Node - uses: actions/setup-node@v2 + uses: actions/setup-node@v3 with: node-version: '14' diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 91a3c67c..ade1d727 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -17,7 +17,7 @@ jobs: sudo echo "127.0.1.1 relay.circles.local" | sudo tee -a /etc/hosts - name: Check out circles-core repository code - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: path: circles-core @@ -28,15 +28,15 @@ jobs: - name: Read node version from .nvmrc working-directory: circles-core id: nvmrc - run: echo ::set-output name=NODE_VERSION::$(cat .nvmrc) + run: echo "NODE_VERSION=$(cat .nvmrc)" >> $GITHUB_OUTPUT - name: Setup node - uses: actions/setup-node@v2 + uses: actions/setup-node@v3 with: node-version: '${{ steps.nvmrc.outputs.NODE_VERSION }}' - name: Cache Node.js modules - uses: actions/cache@v2 + uses: actions/cache@v3 with: # npm cache files are stored in `~/.npm` on Linux/macOS. path: ~/.npm @@ -46,7 +46,7 @@ jobs: ${{ runner.OS }}- - name: Get circles-docker repository and copy configs - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: repository: CirclesUBI/circles-docker.git ref: main