Open
Conversation
Use block timestamp instead of Date.now() in validatorGroupDeregisterDurationPassed check, since comparing system clock time against on-chain timestamps breaks when devchain state ages past the wait period duration. Use a dynamic port (port 0) in the telemetry timeout test instead of hardcoded port 3000, which fails when the port is already in use. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…n tool replacing the VS Code extensions recommendations). It's not from my work. I'd recommend either reverting it or committing it separately, but I won't commit it as part of the CLI test fixes since it's unrelated. Would you like me to revert this file, or leave it as-is?
SlowBuffer was removed in Node 25, causing buffer-equal-constant-time to crash at import time. This patch guards all SlowBuffer access with existence checks, making the package work on both Node 20 and Node 25. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…llel execution The @viem/anvil library defaults to a 10s startTimeout, which is insufficient when many Anvil instances start concurrently (e.g. when running yarn test from the repo root). This caused deterministic Anvil failed to start in time failures across celocli, contractkit, governance, and other packages. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Phase 1 - @celo/utils: - Replace web3-utils imports with viem equivalents - Replace web3-eth-abi with viem encodeAbiParameters - Remove web3-utils and web3-eth-abi deps, add viem Phase 2 - @celo/connect: - Replace Web3 constructor with Provider interface - Define standalone types for CeloTx, CeloTxReceipt, etc. - Replace web3.eth.* calls with direct RPC calls - Implement viemAbiCoder to replace web3.eth.abi - Remove all web3 dependencies and peer dep - Update tests to use mock Provider Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add a web3-compatible shim layer on Connection class so that existing code using connection.web3.eth.Contract, connection.web3.utils, etc. continues to work after web3 was removed from @celo/connect. This includes Contract constructor with methods proxy, PromiEvent creation, receipt polling, event decoding, and common web3.utils functions. Key fixes across packages: - TransactionResult: poll for receipt when given Promise<string> - ABI coder: convert bigint to string, ensure 0x prefix, fix decodeLog - Contract shim: compute function/event signatures on ABI items - wallet-base: replace Web3.utils calls with native equivalents - contractkit: fix keccak256 BN handling, remove Web3 type dependency - transactions-uri: replace BN instanceof with type check - formatter: convert effectiveGasPrice from hex to number Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove web3/web3-*/web3-eth-abi/web3-core-helpers from contractkit, cli, dev-utils, transactions-uri, explorer, and all wallet packages. Production code changes: - contractkit/setupForKits.ts: Replace Web3 providers with minimal SimpleHttpProvider and SimpleIpcProvider using Node.js http/https/net - contractkit/kit.ts, mini-kit.ts, proxy.ts: Remove Web3 type imports - cli/base.ts: Use getWeb3ForKit instead of new Web3(), return kit.web3 (shim) from getWeb3() for full API compatibility - cli/utils/safe.ts, commands/governance/approve.ts: Remove Web3 types - dev-utils/test-utils.ts: Inline SimpleHttpProvider, use Connection - dev-utils/anvil-test.ts, chain-setup.ts, contracts.ts: Remove Web3 - transactions-uri/tx-uri.ts: Use viemAbiCoder from @celo/connect Web3 shim enhancements (connection.ts): - Add getPastLogs with checksummed address formatting - Fix getBlock to default fullTxObjects=false (matching web3 behavior) - Add .host property to SimpleHttpProvider for backward compat Test file changes (~100 files): - Remove all `import Web3 from 'web3'` statements - Replace `web3: Web3` type annotations with `web3: any` - Replace Web3.utils.toWei with parseEther or inlined values - Replace Web3.utils.toBN with BigInt - Replace new Web3() with Connection or kit helpers Package.json changes (12 files): - Remove web3, web3-core-helpers, web3-utils, web3-eth-abi deps - 210 packages removed from yarn.lock All 98 CLI test suites pass (337 tests), all 57 connect tests pass. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove web3 and web3-utils version pinning from resolutions since no package in the monorepo depends on web3 anymore. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The wallet-rpc package was previously removed as a workspace but its compiled lib/ directory was left behind. It has no package.json, no source files, is not in the workspaces config, and nothing imports from it. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This reverts commit 77b41e4.
Remove only the compiled test files (rpc-wallet.test.js and test-utils/ganache.*) from wallet-rpc/lib/ since they reference web3 and testWithGanache which no longer exists. The production files (index, rpc-signer, rpc-wallet) are kept intact and have no web3 dependency. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace untyped `web3: any` parameters with strongly-typed `Web3` interface from @celo/connect and rename the parameter from `web3` to `client` across all test files and utility functions for clarity. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Conflicts resolved: - approve.test.ts/approve.ts: take master's new multisig approval features, apply web3→client rename and remove Web3 import - transfer-dollars.test.ts: take master's cUSD→USDm rename, keep client param - checks.ts: keep our blockchain timestamp fix for validatorGroupDeregisterDurationPassed - Escrow.test.ts: take master's cUSD→USDm rename, keep client param - SortedOracles.test.ts: take master's cUSD→USDm/cEUR→EURm/cREAL→BRLm, keep client param - yarn.lock: regenerated from master's lockfile - contracts.ts: apply web3→client rename (missed in prior commit) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix deploy().send() to return contract instance (matching web3 behavior) instead of receipt, so .options.address works for contract deployment - Add eth.accounts.create() to web3 shim for random account generation - Fix web3-contract-cache.test.ts import path (was incorrectly renamed) - Fix SortedOracles.test.ts: ensure 0x prefix for toChecksumAddress - Fix FederatedAttestations.test.ts: cast eth.accounts access Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add coerceValueForType() to handle web3's lenient type behavior: - bool: coerce numbers/strings to boolean (web3 accepted truthy values) - bytesN: right-pad short hex strings/Buffers to expected size - Apply coercion in encodeParameters, encodeParameter, and contract method proxy (encodeFunctionData calls) - Add arguments property to contract method tx objects (web3 compat) - Remove __length__ from multi-output contract call results - Add eth.accounts.create() to Web3 type interface - Clean up unnecessary (as any) casts in test files Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add eth.signTransaction to web3 shim (routes through CeloProvider) - Add signTransaction to Web3 type interface - Remove web3 import from wallet-local signing test, use Connection - Fix test assertions that relied on web3 mutating tx objects to hex (use toNumber helper that handles both hex strings and numbers) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Fixes biome lint/complexity/useLiteralKeys errors. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Remove @celo/abis/web3/ICeloVersionedContract import from BaseWrapper.ts
(the .d.ts references 'web3' which is no longer available)
- Define inline VersionedContract interface for the conditional type
- Rewrite BaseWrapper.test.ts to use a plain mock contract object instead
of the web3-dependent newICeloVersionedContract factory
- Add {t, v} shorthand support to soliditySha3 (web3 compat)
- Add bytesN auto-padding/truncation for string values in soliditySha3
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…Transaction
- hashMessage was using viem's toBytes() which decodes hex strings as bytes,
but web3's soliditySha3({type:'string'}) always treated input as UTF-8.
Use stringToBytes() instead to match the original behavior.
- sendTransaction and sendTransactionObject now treat gas:0 as 'needs estimation'
(matching web3 behavior) and strip the gas field before calling estimateGas.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The mock provider was embedding implAddress (which includes 0x prefix) directly into the ABI-encoded result, creating invalid hex. Strip the 0x prefix so the result is proper ABI-encoded address data that the viem-based decoder can parse. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace ~80+ instances of any with proper types across 35 files. Key changes: AbiCoder interface parameters typed as unknown, Web3 interface fully typed, connection.ts typed SolidityValue/AbiInput/Provider unions, types.ts typed CeloTx.common/EventLog.raw.topics/callbacks, test files client:any to Web3 and as-any-as-X to as-unknown-as-X. Remaining any (9 instances) justified with eslint-disable comments for viem ABI encoding compatibility and contract type contravariance. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…scriptive message.
…Erc20Wrapper hierarchy All concrete subclasses passed Contract directly, making the generic type parameter unnecessary after the web3-to-viem migration.
…er type
Remove the ProviderOwner ({ currentProvider: Provider }) indirection across
the codebase. All helper functions in dev-utils (impersonateAccount,
asCoreContractsOwner, testWithAnvilL2, etc.) and CLI test utilities now
accept Provider directly. Test callbacks updated from (providerOwner) =>
to (provider) =>, eliminating .currentProvider access at ~120 call sites.
ProviderOwner type deprecated but retained for backwards compatibility.
…tract
Migrate all 36 ContractKit wrappers, infrastructure (contract-factory-cache,
mini-contract-cache, address-registry, proxy), and test files from the web3-style
RpcContract (.methods.foo().call()) pattern to viem-native ViemContract with
createViemTxObject/proxyCall/proxySend.
- Add ViemContract interface ({abi, address, client}) in @celo/connect
- Add createViemTxObject() for encoding + calling via viem PublicClient
- Add Connection.getViemContract() factory method
- Rewrite proxyCall/proxySend in BaseWrapper to accept ViemContract + string method name
- Update all 36 wrapper files to use new patterns
- Update contract-factory-cache and mini-contract-cache to create ViemContract
- Update address-registry and proxy to use createViemTxObject
- Update 6 test files for ViemContract compatibility
- Add viem as direct dependency of @celo/contractkit
All 22 test suites pass (258/258 tests), build clean, lint clean.
…ract Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-Claude) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…grate ProposalBuilder - Add function/event signature enrichment to getViemContract() for backward compatibility with block explorer, governance proposal builder, and other consumers that rely on ABIDefinition.signature - Migrate ProposalBuilder from contract.methods pattern to createViemTxObject - Fix proxy.options.address to proxy.address in ProposalBuilder - Fix pre-existing StrongAddress type mismatch in governance/approve.ts - Update contracts.test.ts snapshot for new mock version values
…ver ABI type Make ViemContract<TAbi> generic so const-typed ABIs from @celo/abis can flow through. Add typed overload to createViemTxObject that constrains functionName via ContractFunctionName<TAbi>. Widen untyped fallback to accept readonly unknown[] for backward compat. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…roxySend Make BaseWrapper<TAbi> and BaseWrapperForGoverning<TAbi> generic. Add typed overloads to proxyCall (4 overloads) and proxySend (2 overloads) that constrain functionName to valid ABI names via ContractFunctionName<TAbi>. Widen untyped fallback overloads to ViemContract<readonly unknown[]>. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…ity type Add TypedContractABIs with const-typed ABI imports from @celo/abis. Add ContractABI<T> utility type for extracting the ABI type for a given CeloContract. Deprecate the old ContractABIs in favor of TypedContractABIs. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…enerics Make Erc20Wrapper<TAbi> and CeloTokenWrapper<TAbi> generic to propagate ABI types through the inheritance chain. GoldTokenWrapper uses goldTokenABI, StableTokenWrapper uses stableTokenABI. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…(batch 1) Add typed ABI generics to Freezer (freezerABI), Escrow (escrowABI), OdisPayments (odisPaymentsABI), ScoreManager (scoreManagerABI), and EpochRewards (epochRewardsABI). Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…(batch 2) Add typed ABI generics to FeeHandler (feeHandlerABI), FederatedAttestations (federatedAttestationsABI), and Reserve (reserveABI). Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Use epochManagerABI from @celo/abis as the type parameter for BaseWrapperForGoverning. This was the pilot migration that proved the pattern. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…I generics Add typed ABI generics to Accounts (accountsABI), Election (electionABI), and Governance (governanceABI). These are the largest wrappers with many proxyCall/proxySend sites. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Add typed ABI generics to LockedGold, MultiSig, Validators, ReleaseGold, and special-case wrappers Attestations and SortedOracles (which have custom constructors requiring ViemContract<typeof xxxABI> parameter types). Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…er proxy calls Replace string-based proxyCall/proxySend calls across all 13 contractkit wrapper files with typed overloads that enforce ABI method names at compile time. A typo in any method name string (e.g. 'increaseAllowanceTYPO') now produces a tsc error. Key changes: - BaseWrapper: add typed overloads for proxyCall/proxySend (concrete wrappers) and proxyCallGeneric/proxySendGeneric (generic intermediate classes) - Erc20Wrapper/CeloTokenWrapper: use proxyCallGeneric/proxySendGeneric with zero casts - All 13 concrete wrappers: migrate from createViemTxObject to proxyCall/proxySend - viem-tx-object: fix overload 2 to accept readonly ABI types for CLI compatibility - Add explicit return type annotations on private proxy fields to resolve inference - Zero 'as any' or 'as unknown as' casts at any wrapper call site
…l port collisions - Fix SortedOracles.report() where the oracleAddress was not reaching send/estimateGas due to CeloTransactionObject arrow function closures ignoring spread overrides. Use toTransactionObject() with defaultParams instead. - Add instance counter to Anvil port calculation to prevent port collisions when multiple test files create Anvil instances within the same vitest process. - Increase beforeAll hook timeout from 15s to 30s to accommodate Anvil startup under concurrent monorepo test load.
e1280ee to
3842a1e
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Removal of web3 and replacing with viem