From 2feb4686bc8b1d12791fd2220a0869ccc07e22b3 Mon Sep 17 00:00:00 2001 From: leovs09 Date: Sun, 21 Jul 2024 04:06:10 +0200 Subject: [PATCH] fix safe transaction proposal nonce --- .../contracts/hardhat/deployment/addresses/index.ts | 3 +++ .../hardhat/deployment/deployApeLendingStrategy.ts | 6 +++--- packages/contracts/hardhat/deployment/deployVFT.ts | 4 ++-- packages/upgradeable/package.json | 2 +- packages/upgradeable/src/plugins/SafeAdapter.ts | 10 +++++++++- 5 files changed, 18 insertions(+), 7 deletions(-) diff --git a/packages/contracts/hardhat/deployment/addresses/index.ts b/packages/contracts/hardhat/deployment/addresses/index.ts index a0db6b2d..65fae840 100644 --- a/packages/contracts/hardhat/deployment/addresses/index.ts +++ b/packages/contracts/hardhat/deployment/addresses/index.ts @@ -9,6 +9,9 @@ import { EonianHealthCheck } from './EonianHealthCheck' import { EonianTreasury } from './EonianTreasury' import { Chainlink } from './Chainlink' +/** Allow to execute attach transactions without deployments */ +export const forceAttachTransactions = () => process.env.FORCE_ATTACH_TRANSACTIONS === 'true' + export enum Addresses { APESWAP = 'APESWAP', CHAINLINK = 'CHAINLINK', diff --git a/packages/contracts/hardhat/deployment/deployApeLendingStrategy.ts b/packages/contracts/hardhat/deployment/deployApeLendingStrategy.ts index 252f6578..96f3ae66 100644 --- a/packages/contracts/hardhat/deployment/deployApeLendingStrategy.ts +++ b/packages/contracts/hardhat/deployment/deployApeLendingStrategy.ts @@ -2,8 +2,8 @@ import type { HardhatRuntimeEnvironment } from 'hardhat/types' import { TokenSymbol, needUseSafe, sendTxWithRetry } from '@eonian/upgradeable' import { type ApeLendingStrategy } from '../../typechain-types' import { type DeployResult, DeployStatus } from '@eonian/upgradeable' -import { Addresses } from './addresses' -import { BaseContract, Contract } from 'ethers' +import { Addresses, forceAttachTransactions } from './addresses' +import { BaseContract } from 'ethers' const contractName = 'ApeLendingStrategy' @@ -24,7 +24,7 @@ export default async function deployApeLendingStrategy(token: TokenSymbol, hre: const deployResult = await hre.deploy(contractName, token, initializeArguments) - if (deployResult.status === DeployStatus.DEPLOYED) { + if (deployResult.status === DeployStatus.DEPLOYED || forceAttachTransactions()) { await attachToVault(deployResult.proxyAddress, token, addresses.vault, hre) } diff --git a/packages/contracts/hardhat/deployment/deployVFT.ts b/packages/contracts/hardhat/deployment/deployVFT.ts index aec8ac20..cedf0618 100644 --- a/packages/contracts/hardhat/deployment/deployVFT.ts +++ b/packages/contracts/hardhat/deployment/deployVFT.ts @@ -1,7 +1,7 @@ import type { HardhatRuntimeEnvironment } from 'hardhat/types' import { type DeployResult, type TokenSymbol, DeployStatus, sendTxWithRetry, needUseSafe } from '@eonian/upgradeable' import type { VaultFounderToken } from '../../typechain-types' -import { Addresses } from './addresses' +import { Addresses, forceAttachTransactions } from './addresses' import { BaseContract } from 'ethers' const contractName = 'VaultFounderToken' @@ -18,7 +18,7 @@ export default async function deployVFT(token: TokenSymbol, hre: HardhatRuntimeE ] const deployResult = await hre.deploy(contractName, token, initializeArguments) - if (deployResult.status === DeployStatus.DEPLOYED) { + if (deployResult.status === DeployStatus.DEPLOYED || forceAttachTransactions()) { await attachToVault(deployResult.proxyAddress, token, addresses.vault, hre) } diff --git a/packages/upgradeable/package.json b/packages/upgradeable/package.json index 28a7da7a..e517580e 100644 --- a/packages/upgradeable/package.json +++ b/packages/upgradeable/package.json @@ -1,6 +1,6 @@ { "name": "@eonian/upgradeable", - "version": "0.2.0", + "version": "0.2.1", "license": "MIT", "engines": { "node": ">=20.0.0" diff --git a/packages/upgradeable/src/plugins/SafeAdapter.ts b/packages/upgradeable/src/plugins/SafeAdapter.ts index 9190c5a3..9d613218 100644 --- a/packages/upgradeable/src/plugins/SafeAdapter.ts +++ b/packages/upgradeable/src/plugins/SafeAdapter.ts @@ -47,12 +47,20 @@ export class SafeAdapter extends WithLogger { const {signerAddress, wallet} = await this.getSafeWallet(signer) this.log(`Retrived Safe wallet with address ${await wallet.getAddress()} and signer: "${signerAddress}"`) + const nextNonce = await this.api.getNextNonce(this.walletAddress) + this.log(`Will propose new transaction with nonce ${nextNonce}`) + const tx = await wallet.createTransaction({ transactions: [{ to: address, value: '0', data: txData - }] + }], + options: { + // by default api proposes transactions without checking for transaction in the queue + // as a result all transactions will have same nonce and only one can be executed + nonce: nextNonce + } }) // Deterministic hash based on transaction parameters