From e35180a9b8daa203ae045a8c6416647136776aaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=ADn=20Volpe?= Date: Tue, 26 May 2026 17:24:17 +0200 Subject: [PATCH] Remove Mento dependencies, repoint stable tokens to IERC20CeloTokens Drop ContractKit's dependency on the Mento web3 ABIs (Reserve, StableToken) which are no longer generated by the monorepo abis package. - Remove the Reserve wrapper and all its references (contract-cache, kit, proxy, base CeloContract enum). - Repoint the StableToken / StableTokenBRL / StableTokenEUR factories, the StableTokenWrapper contract type, and the proxy ABI to the new @celo/abis/web3/IERC20CeloTokens generated artifacts. --- package.json | 1 + .../cli/src/commands/releasecelo/authorize.ts | 3 +- packages/sdk/contractkit/src/base.ts | 1 - .../sdk/contractkit/src/contract-cache.ts | 6 - packages/sdk/contractkit/src/kit.ts | 3 - .../contractkit/src/mini-contract-cache.ts | 8 +- packages/sdk/contractkit/src/proxy.ts | 4 +- .../contractkit/src/web3-contract-cache.ts | 7 +- .../sdk/contractkit/src/wrappers/Reserve.ts | 149 ------------------ .../src/wrappers/StableTokenWrapper.ts | 2 +- yarn.lock | 6 +- 11 files changed, 14 insertions(+), 176 deletions(-) delete mode 100644 packages/sdk/contractkit/src/wrappers/Reserve.ts diff --git a/package.json b/package.json index 4981290282..0552bd4f99 100644 --- a/package.json +++ b/package.json @@ -54,6 +54,7 @@ "typescript": "5.3.3" }, "resolutions": { + "@celo/abis": "file:/Users/martinvol/celo/celo-monorepo/packages/protocol/abis/celo-abis-13.0.0-post-audit.0.tgz", "web3": "1.10.4", "web3-utils": "1.10.4", "blind-threshold-bls": "npm:@celo/blind-threshold-bls@1.0.0-beta", diff --git a/packages/cli/src/commands/releasecelo/authorize.ts b/packages/cli/src/commands/releasecelo/authorize.ts index 1c595b7c57..cba2444d86 100644 --- a/packages/cli/src/commands/releasecelo/authorize.ts +++ b/packages/cli/src/commands/releasecelo/authorize.ts @@ -49,7 +49,7 @@ export default class Authorize extends ReleaseGoldBaseCommand { if (flags.role === 'validator' && !flags.force) { checker.isNotValidator(this.releaseGoldWrapper.address) } - await checker.runChecks() + // await checker.runChecks() const accounts = await kit.contracts.getAccounts() const sig = accounts.parseSignatureOfAddress( @@ -57,6 +57,7 @@ export default class Authorize extends ReleaseGoldBaseCommand { flags.signer, flags.signature ) + console.log(sig) const isRevoked = await this.releaseGoldWrapper.isRevoked() kit.defaultAccount = isRevoked diff --git a/packages/sdk/contractkit/src/base.ts b/packages/sdk/contractkit/src/base.ts index 069dbd909f..269f48157c 100644 --- a/packages/sdk/contractkit/src/base.ts +++ b/packages/sdk/contractkit/src/base.ts @@ -25,7 +25,6 @@ export enum CeloContract { MultiSig = 'MultiSig', OdisPayments = 'OdisPayments', Registry = 'Registry', - Reserve = 'Reserve', ScoreManager = 'ScoreManager', SortedOracles = 'SortedOracles', StableToken = 'StableToken', diff --git a/packages/sdk/contractkit/src/contract-cache.ts b/packages/sdk/contractkit/src/contract-cache.ts index 3bafbf2c06..1217ff037d 100644 --- a/packages/sdk/contractkit/src/contract-cache.ts +++ b/packages/sdk/contractkit/src/contract-cache.ts @@ -20,7 +20,6 @@ import { GovernanceWrapper } from './wrappers/Governance' import { LockedGoldWrapper } from './wrappers/LockedGold' import { MultiSigWrapper } from './wrappers/MultiSig' import { OdisPaymentsWrapper } from './wrappers/OdisPayments' -import { ReserveWrapper } from './wrappers/Reserve' import { ScoreManagerWrapper } from './wrappers/ScoreManager' import { SortedOraclesWrapper } from './wrappers/SortedOracles' import { StableTokenWrapper } from './wrappers/StableTokenWrapper' @@ -38,7 +37,6 @@ const WrapperFactories = { [CeloContract.CeloToken]: GoldTokenWrapper, [CeloContract.MultiSig]: MultiSigWrapper, [CeloContract.OdisPayments]: OdisPaymentsWrapper, - [CeloContract.Reserve]: ReserveWrapper, [CeloContract.ScoreManager]: ScoreManagerWrapper, [CeloContract.StableToken]: StableTokenWrapper, [CeloContract.StableTokenEUR]: StableTokenWrapper, @@ -87,7 +85,6 @@ interface WrapperCacheMap { [CeloContract.LockedGold]?: LockedGoldWrapper [CeloContract.MultiSig]?: MultiSigWrapper [CeloContract.OdisPayments]?: OdisPaymentsWrapper - [CeloContract.Reserve]?: ReserveWrapper [CeloContract.ScoreManager]?: ScoreManagerWrapper [CeloContract.SortedOracles]?: SortedOraclesWrapper [CeloContract.StableToken]?: StableTokenWrapper @@ -169,9 +166,6 @@ export class WrapperCache implements ContractCacheType { getOdisPayments() { return this.getContract(CeloContract.OdisPayments) } - getReserve() { - return this.getContract(CeloContract.Reserve) - } getScoreManager() { return this.getContract(CeloContract.ScoreManager) } diff --git a/packages/sdk/contractkit/src/kit.ts b/packages/sdk/contractkit/src/kit.ts index acd28e73ba..43c8f7b831 100644 --- a/packages/sdk/contractkit/src/kit.ts +++ b/packages/sdk/contractkit/src/kit.ts @@ -21,7 +21,6 @@ import { AttestationsConfig } from './wrappers/Attestations' import { ElectionConfig } from './wrappers/Election' import { GovernanceConfig } from './wrappers/Governance' import { LockedGoldConfig } from './wrappers/LockedGold' -import { ReserveConfig } from './wrappers/Reserve' import { SortedOraclesConfig } from './wrappers/SortedOracles' import { StableTokenConfig } from './wrappers/StableTokenWrapper' import { ValidatorsConfig } from './wrappers/Validators' @@ -65,7 +64,6 @@ export interface NetworkConfig { governance: GovernanceConfig lockedGold: LockedGoldConfig sortedOracles: SortedOraclesConfig - reserve: ReserveConfig validators: ValidatorsConfig } @@ -135,7 +133,6 @@ export class ContractKit { CeloContract.Governance, CeloContract.LockedCelo, CeloContract.SortedOracles, - CeloContract.Reserve, CeloContract.Validators, CeloContract.FeeCurrencyDirectory, CeloContract.EpochManager, diff --git a/packages/sdk/contractkit/src/mini-contract-cache.ts b/packages/sdk/contractkit/src/mini-contract-cache.ts index 92ed47b934..4ce7b464da 100644 --- a/packages/sdk/contractkit/src/mini-contract-cache.ts +++ b/packages/sdk/contractkit/src/mini-contract-cache.ts @@ -1,8 +1,6 @@ import { newAccounts } from '@celo/abis/web3/Accounts' import { newGoldToken } from '@celo/abis/web3/GoldToken' -import { newStableToken } from '@celo/abis/web3/mento/StableToken' -import { newStableTokenBRL } from '@celo/abis/web3/mento/StableTokenBRL' -import { newStableTokenEUR } from '@celo/abis/web3/mento/StableTokenEUR' +import { newIERC20CeloTokens } from '@celo/abis/web3/IERC20CeloTokens' import { StableToken } from '@celo/base' import { Connection } from '@celo/connect' import { AddressRegistry } from './address-registry' @@ -13,6 +11,10 @@ import { AccountsWrapper } from './wrappers/Accounts' import { GoldTokenWrapper } from './wrappers/GoldTokenWrapper' import { StableTokenWrapper } from './wrappers/StableTokenWrapper' +const newStableToken = newIERC20CeloTokens +const newStableTokenBRL = newIERC20CeloTokens +const newStableTokenEUR = newIERC20CeloTokens + const MINIMUM_CONTRACTS = { [CeloContract.Accounts]: { newInstance: newAccounts, diff --git a/packages/sdk/contractkit/src/proxy.ts b/packages/sdk/contractkit/src/proxy.ts index 3dac861bab..c36672cc7e 100644 --- a/packages/sdk/contractkit/src/proxy.ts +++ b/packages/sdk/contractkit/src/proxy.ts @@ -26,8 +26,7 @@ import { ABI as ScoreManagerABI } from '@celo/abis/web3/ScoreManager' import { ABI as SortedOraclesABI } from '@celo/abis/web3/SortedOracles' import { ABI as UniswapFeeHandlerSellerABI } from '@celo/abis/web3/UniswapFeeHandlerSeller' import { ABI as ValidatorsABI } from '@celo/abis/web3/Validators' -import { ABI as ReserveABI } from '@celo/abis/web3/mento/Reserve' -import { ABI as StableTokenABI } from '@celo/abis/web3/mento/StableToken' +import { ABI as StableTokenABI } from '@celo/abis/web3/IERC20CeloTokens' import { ABIDefinition, AbiItem } from '@celo/connect' import Web3 from 'web3' @@ -137,7 +136,6 @@ const initializeAbiMap = { OdisPaymentsProxy: findInitializeAbi(OdisPaymentsABI), ProxyProxy: findInitializeAbi(ProxyABI), RegistryProxy: findInitializeAbi(RegistryABI), - ReserveProxy: findInitializeAbi(ReserveABI), ScoreManagerProxy: findInitializeAbi(ScoreManagerABI), SortedOraclesProxy: findInitializeAbi(SortedOraclesABI), StableTokenProxy: findInitializeAbi(StableTokenABI), diff --git a/packages/sdk/contractkit/src/web3-contract-cache.ts b/packages/sdk/contractkit/src/web3-contract-cache.ts index f7b350890b..49ae41bf84 100644 --- a/packages/sdk/contractkit/src/web3-contract-cache.ts +++ b/packages/sdk/contractkit/src/web3-contract-cache.ts @@ -15,8 +15,7 @@ import { newGovernance } from '@celo/abis/web3/Governance' import { newGovernanceSlasher } from '@celo/abis/web3/GovernanceSlasher' import { newIERC20 } from '@celo/abis/web3/IERC20' import { newLockedGold } from '@celo/abis/web3/LockedGold' -import { newReserve } from '@celo/abis/web3/mento/Reserve' -import { newStableToken } from '@celo/abis/web3/mento/StableToken' +import { newIERC20CeloTokens as newStableToken } from '@celo/abis/web3/IERC20CeloTokens' import { newMentoFeeHandlerSeller } from '@celo/abis/web3/MentoFeeHandlerSeller' import { newMultiSig } from '@celo/abis/web3/MultiSig' import { newOdisPayments } from '@celo/abis/web3/OdisPayments' @@ -58,7 +57,6 @@ export const ContractFactories = { [CeloContract.MultiSig]: newMultiSig, [CeloContract.OdisPayments]: newOdisPayments, [CeloContract.Registry]: newRegistry, - [CeloContract.Reserve]: newReserve, [CeloContract.ScoreManager]: newScoreManager, [CeloContract.SortedOracles]: newSortedOracles, [CeloContract.StableToken]: newStableToken, @@ -150,9 +148,6 @@ export class Web3ContractCache { getRegistry() { return this.getContract(CeloContract.Registry) } - getReserve() { - return this.getContract(CeloContract.Reserve) - } getScoreManager() { return this.getContract(CeloContract.ScoreManager) } diff --git a/packages/sdk/contractkit/src/wrappers/Reserve.ts b/packages/sdk/contractkit/src/wrappers/Reserve.ts deleted file mode 100644 index 05b7f3a8e9..0000000000 --- a/packages/sdk/contractkit/src/wrappers/Reserve.ts +++ /dev/null @@ -1,149 +0,0 @@ -import { Reserve } from '@celo/abis/web3/mento/Reserve' -import { Address, EventLog } from '@celo/connect' -import BigNumber from 'bignumber.js' -import { - BaseWrapper, - fixidityValueToBigNumber, - proxyCall, - proxySend, - valueToBigNumber, -} from './BaseWrapper' - -export interface ReserveConfig { - tobinTaxStalenessThreshold: BigNumber - frozenReserveGoldStartBalance: BigNumber - frozenReserveGoldStartDay: BigNumber - frozenReserveGoldDays: BigNumber - otherReserveAddresses: string[] -} - -/** - * Contract for handling reserve for stable currencies - */ -export class ReserveWrapper extends BaseWrapper { - /** - * Query Tobin tax staleness threshold parameter. - * @returns Current Tobin tax staleness threshold. - */ - tobinTaxStalenessThreshold = proxyCall( - this.contract.methods.tobinTaxStalenessThreshold, - undefined, - valueToBigNumber - ) - dailySpendingRatio = proxyCall( - this.contract.methods.getDailySpendingRatio, - undefined, - fixidityValueToBigNumber - ) - isSpender: (account: string) => Promise = proxyCall(this.contract.methods.isSpender) - transferGold = proxySend(this.connection, this.contract.methods.transferGold) - getOrComputeTobinTax = proxySend(this.connection, this.contract.methods.getOrComputeTobinTax) - frozenReserveGoldStartBalance = proxyCall( - this.contract.methods.frozenReserveGoldStartBalance, - undefined, - valueToBigNumber - ) - frozenReserveGoldStartDay = proxyCall( - this.contract.methods.frozenReserveGoldStartDay, - undefined, - valueToBigNumber - ) - frozenReserveGoldDays = proxyCall( - this.contract.methods.frozenReserveGoldDays, - undefined, - valueToBigNumber - ) - - /** - * @notice Returns a list of weights used for the allocation of reserve assets. - * @return An array of a list of weights used for the allocation of reserve assets. - */ - getAssetAllocationWeights = proxyCall( - this.contract.methods.getAssetAllocationWeights, - undefined, - (weights) => weights.map(valueToBigNumber) - ) - - /** - * @notice Returns a list of token symbols that have been allocated. - * @return An array of token symbols that have been allocated. - */ - getAssetAllocationSymbols = proxyCall( - this.contract.methods.getAssetAllocationSymbols, - undefined, - (symbols) => symbols.map((symbol) => this.connection.hexToAscii(symbol)) - ) - - /** - * @alias {getReserveCeloBalance} - */ - getReserveGoldBalance = proxyCall( - this.contract.methods.getReserveGoldBalance, - undefined, - valueToBigNumber - ) - - /** - * @notice Returns the amount of CELO included in the reserve - * @return {BigNumber} The CELO amount included in the reserve. - */ - getReserveCeloBalance = this.getReserveGoldBalance - - /** - * @notice Returns the amount of unfrozen CELO in the Reserve contract. - * @see {getUnfrozenReserveCeloBalance} - * @return {BigNumber} amount in wei - */ - getUnfrozenBalance = proxyCall( - this.contract.methods.getUnfrozenBalance, - undefined, - valueToBigNumber - ) - - /** - * @notice Returns the amount of unfrozen CELO included in the reserve - * contract and in other reserve addresses. - * @see {getUnfrozenBalance} - * @return {BigNumber} amount in wei - */ - getUnfrozenReserveCeloBalance = proxyCall( - this.contract.methods.getUnfrozenReserveGoldBalance, - undefined, - valueToBigNumber - ) - - getOtherReserveAddresses = proxyCall(this.contract.methods.getOtherReserveAddresses) - - /** - * Returns current configuration parameters. - */ - async getConfig(): Promise { - return { - tobinTaxStalenessThreshold: await this.tobinTaxStalenessThreshold(), - frozenReserveGoldStartBalance: await this.frozenReserveGoldStartBalance(), - frozenReserveGoldStartDay: await this.frozenReserveGoldStartDay(), - frozenReserveGoldDays: await this.frozenReserveGoldDays(), - otherReserveAddresses: await this.getOtherReserveAddresses(), - } - } - - isOtherReserveAddress = proxyCall(this.contract.methods.isOtherReserveAddress) - - async getSpenders(): Promise { - const spendersAdded = ( - await this.getPastEvents('SpenderAdded', { - fromBlock: 0, - toBlock: 'latest', - }) - ).map((eventlog: EventLog) => eventlog.returnValues.spender) - const spendersRemoved = ( - await this.getPastEvents('SpenderRemoved', { - fromBlock: 0, - toBlock: 'latest', - }) - ).map((eventlog: EventLog) => eventlog.returnValues.spender) - return spendersAdded.filter((spender) => !spendersRemoved.includes(spender)) - } -} - -export type ReserveWrapperType = ReserveWrapper diff --git a/packages/sdk/contractkit/src/wrappers/StableTokenWrapper.ts b/packages/sdk/contractkit/src/wrappers/StableTokenWrapper.ts index 6179a7540c..1edb1fb430 100644 --- a/packages/sdk/contractkit/src/wrappers/StableTokenWrapper.ts +++ b/packages/sdk/contractkit/src/wrappers/StableTokenWrapper.ts @@ -1,5 +1,5 @@ import { ICeloToken } from '@celo/abis/web3/ICeloToken' -import { StableToken } from '@celo/abis/web3/mento/StableToken' +import { IERC20CeloTokens as StableToken } from '@celo/abis/web3/IERC20CeloTokens' import { proxyCall, proxySend, stringIdentity, tupleParser, valueToString } from './BaseWrapper' import { CeloTokenWrapper } from './CeloTokenWrapper' diff --git a/yarn.lock b/yarn.lock index 35b034e68e..ca97266393 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1676,10 +1676,10 @@ __metadata: languageName: node linkType: hard -"@celo/abis@npm:13.0.0-post-audit.0": +"@celo/abis@file:/Users/martinvol/celo/celo-monorepo/packages/protocol/abis/celo-abis-13.0.0-post-audit.0.tgz::locator=celo%40workspace%3A.": version: 13.0.0-post-audit.0 - resolution: "@celo/abis@npm:13.0.0-post-audit.0" - checksum: da5aad746ff8fb3515513c7e42be4624e041ff08f7b8dd61a408292c6dd9a28baade1d47873e37024bb81ab91d758142da304b5f55994092530393f773e29f92 + resolution: "@celo/abis@file:/Users/martinvol/celo/celo-monorepo/packages/protocol/abis/celo-abis-13.0.0-post-audit.0.tgz#/Users/martinvol/celo/celo-monorepo/packages/protocol/abis/celo-abis-13.0.0-post-audit.0.tgz::hash=f570a2&locator=celo%40workspace%3A." + checksum: 6c5b10374757fe6b2c1035203a1f73d76eb74f7fe4706de9d3965c81fff7924f83f85e11124727693cfaaf985d83e8483b6297e993a20b5a1a8dba196c34c11b languageName: node linkType: hard