From 011b106b40ca091b9a6ed56204e5378d17ec6461 Mon Sep 17 00:00:00 2001 From: Christos Otarola Date: Thu, 20 Oct 2022 07:09:27 -0400 Subject: [PATCH 1/3] feat: script for removing tokens --- package.json | 1 + scripts/removeTokens | 110 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100755 scripts/removeTokens diff --git a/package.json b/package.json index 20db8c34..2f02640e 100644 --- a/package.json +++ b/package.json @@ -62,6 +62,7 @@ "lint:sol": "solhint -f unix \"contracts/**/*.sol\" --max-warnings 0", "allowTokens": "./scripts/allowTokens", "allowedTokens": "./scripts/allowedTokens", + "removeTokens": "./scripts/removeTokens", "prettier:fix": "npx prettier --write --ignore-unknown .", "prettier": "npx prettier --check .", "test:truffle": "truffle test --network regtest", diff --git a/scripts/removeTokens b/scripts/removeTokens new file mode 100755 index 00000000..7b9ec2df --- /dev/null +++ b/scripts/removeTokens @@ -0,0 +1,110 @@ +#!/bin/bash + +TOKEN_ADDRESSES=$1 +NETWORK_NAME=$2 + +if [ "${TOKEN_ADDRESSES}" == "" ]; then + echo "You need to specify at least one token address." + exit 1 +fi + +if [ "${NETWORK_NAME}" == "" ]; then + NETWORK_NAME="regtest" +fi + +cat > removeTokens.js << EOF + +async function getRevertReason(txHash) { + const tx = await web3.eth.getTransaction(txHash); + const txBlockNumber = tx.blockNumber; + try { + delete tx['hash']; + delete tx['blockHash']; + delete tx['blockNumber']; + delete tx['transactionIndex']; + delete tx['v']; + delete tx['r']; + delete tx['s']; + let result = await web3.eth.call(tx, txBlockNumber); + result = result.startsWith('0x') ? result : '0x' + result; + if (result && result.substr(138)) { + return web3.utils.toAscii(result.substr(138)); + } else { + return 'Cannot get reason - No return value'; + } + } catch (reason) { + return reason; + } +} + +module.exports = async function( ) { + const truffleConfig = require('./truffle'); + const contractAddresses = require('./contract-addresses.json'); + + const networkConfiguration = truffleConfig.networks["${NETWORK_NAME}"]; + const networkId = networkConfiguration.network_id; + + const smartWalletDeployVerifierAbi = require("./build/contracts/DeployVerifier.json").abi; + const customSmartWalletDeployVerifierAbi = require("./build/contracts/CustomSmartWalletDeployVerifier.json").abi; + const relayVerifierAbi = require("./build/contracts/RelayVerifier.json").abi; + + const smartWalletDeployVerifier = await new web3.eth.Contract(smartWalletDeployVerifierAbi, contractAddresses[networkId].smartWalletDeployVerifier); + const smartWalletRelayVerifier = await new web3.eth.Contract(relayVerifierAbi, contractAddresses[networkId].smartWalletRelayVerifier); + const customSmartWalletDeployVerifier = await new web3.eth.Contract(customSmartWalletDeployVerifierAbi, contractAddresses[networkId].customSmartWalletDeployVerifier); + const customSmartWalletRelayVerifier = await new web3.eth.Contract(relayVerifierAbi, contractAddresses[networkId].customSmartWalletRelayVerifier); + + const tokenAddresses = '${TOKEN_ADDRESSES}'.split(','); + + const accounts = await web3.eth.getAccounts(); + + try { + for (let tokenAddress of tokenAddresses) { + try { + const acceptedTokens = await smartWalletDeployVerifier.methods.getAcceptedTokens().send({from: accounts[0]}); + const index = acceptedTokens.indexOf(tokenAddress); + await smartWalletDeployVerifier.methods.removeToken(tokenAddress, index).send({from: accounts[0]}); + } catch (error) { + const reason = error.hasOwnProperty('receipt') ? await getRevertReason(error.receipt.transactionHash) : error; + console.error("Error removing token with address " + tokenAddress + " from allowed tokens on smart wallet deploy verifier", reason); + throw error; + } + try { + const acceptedTokens = await smartWalletRelayVerifier.methods.getAcceptedTokens().send({from: accounts[0]}); + const index = acceptedTokens.indexOf(tokenAddress); + await smartWalletRelayVerifier.methods.removeToken(tokenAddress, index).send({from: accounts[0]}); + } catch (error) { + const reason = error.hasOwnProperty('receipt') ? await getRevertReason(error.receipt.transactionHash) : error; + console.error("Error removing token with address " + tokenAddress + " from allowed tokens on smart wallet relay verifier", reason); + throw error; + } + try { + const acceptedTokens = await customSmartWalletDeployVerifier.methods.getAcceptedTokens().send({from: accounts[0]}); + const index = acceptedTokens.indexOf(tokenAddress); + await customSmartWalletDeployVerifier.methods.removeToken(tokenAddress, index).send({from: accounts[0]}); + } catch (error) { + const reason = error.hasOwnProperty('receipt') ? await getRevertReason(error.receipt.transactionHash) : error; + console.error("Error removing token with address " + tokenAddress + " from allowed tokens on custom smart deploy verifier", reason); + throw error; + } + try { + const acceptedTokens = await customSmartWalletRelayVerifier.methods.getAcceptedTokens().send({from: accounts[0]}); + const index = acceptedTokens.indexOf(tokenAddress); + await customSmartWalletRelayVerifier.methods.removeToken(tokenAddress, index).send({from: accounts[0]}); + } catch (error) { + const reason = error.hasOwnProperty('receipt') ? await getRevertReason(error.receipt.transactionHash) : error; + console.error("Error removing token with address " + tokenAddress + " from allowed tokens on custom smart wallet relay verifier", reason); + throw error; + } + } + } catch (error) { + console.error(error); + console.error("Failed to remove tokens"); + return; + } + console.log("Tokens removed successfully!"); +} +EOF + +truffle exec --network ${NETWORK_NAME} removeTokens.js + +rm allowTokens.js From f214aa1d80f454660ae822c29f325d01f6c45a6b Mon Sep 17 00:00:00 2001 From: Christos Otarola Date: Thu, 20 Oct 2022 11:00:02 -0400 Subject: [PATCH 2/3] fix: call for view function getAcceptedTokens --- scripts/removeTokens | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/removeTokens b/scripts/removeTokens index 7b9ec2df..3a95e3c5 100755 --- a/scripts/removeTokens +++ b/scripts/removeTokens @@ -60,7 +60,7 @@ module.exports = async function( ) { try { for (let tokenAddress of tokenAddresses) { try { - const acceptedTokens = await smartWalletDeployVerifier.methods.getAcceptedTokens().send({from: accounts[0]}); + const acceptedTokens = await smartWalletDeployVerifier.methods.getAcceptedTokens().call({from: accounts[0]}); const index = acceptedTokens.indexOf(tokenAddress); await smartWalletDeployVerifier.methods.removeToken(tokenAddress, index).send({from: accounts[0]}); } catch (error) { @@ -69,7 +69,7 @@ module.exports = async function( ) { throw error; } try { - const acceptedTokens = await smartWalletRelayVerifier.methods.getAcceptedTokens().send({from: accounts[0]}); + const acceptedTokens = await smartWalletRelayVerifier.methods.getAcceptedTokens().call({from: accounts[0]}); const index = acceptedTokens.indexOf(tokenAddress); await smartWalletRelayVerifier.methods.removeToken(tokenAddress, index).send({from: accounts[0]}); } catch (error) { @@ -78,7 +78,7 @@ module.exports = async function( ) { throw error; } try { - const acceptedTokens = await customSmartWalletDeployVerifier.methods.getAcceptedTokens().send({from: accounts[0]}); + const acceptedTokens = await customSmartWalletDeployVerifier.methods.getAcceptedTokens().call({from: accounts[0]}); const index = acceptedTokens.indexOf(tokenAddress); await customSmartWalletDeployVerifier.methods.removeToken(tokenAddress, index).send({from: accounts[0]}); } catch (error) { @@ -87,7 +87,7 @@ module.exports = async function( ) { throw error; } try { - const acceptedTokens = await customSmartWalletRelayVerifier.methods.getAcceptedTokens().send({from: accounts[0]}); + const acceptedTokens = await customSmartWalletRelayVerifier.methods.getAcceptedTokens().call({from: accounts[0]}); const index = acceptedTokens.indexOf(tokenAddress); await customSmartWalletRelayVerifier.methods.removeToken(tokenAddress, index).send({from: accounts[0]}); } catch (error) { From f986c7b7b3f02e54c8b67c62a59cba7c085373c2 Mon Sep 17 00:00:00 2001 From: Antonio Morrone Date: Fri, 21 Oct 2022 09:57:07 +0200 Subject: [PATCH 3/3] fix: in the 'removeTokens' script, delete 'removeTokens.js' instead of 'allowTokens.js' --- scripts/removeTokens | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/removeTokens b/scripts/removeTokens index 3a95e3c5..44c6f79c 100755 --- a/scripts/removeTokens +++ b/scripts/removeTokens @@ -107,4 +107,4 @@ EOF truffle exec --network ${NETWORK_NAME} removeTokens.js -rm allowTokens.js +rm removeTokens.js