Skip to content

refactor(connect,utils): replace web3 with viem [1/8]#766

Open
pahor167 wants to merge 1 commit intomasterfrom
pahor/viem-A-connect-utils
Open

refactor(connect,utils): replace web3 with viem [1/8]#766
pahor167 wants to merge 1 commit intomasterfrom
pahor/viem-A-connect-utils

Conversation

@pahor167
Copy link
Copy Markdown
Contributor

@pahor167 pahor167 commented Apr 1, 2026

Stack

A β†’ B β†’ C β†’ D1 β†’ D2 β†’ D3 β†’ D4 β†’ D5 (CI)

Changes

  • Delete rpc-caller.ts, celo-transaction-object.ts, tx-result.ts
  • Add contract-types.ts (CeloContract<TAbi>), viem-abi-coder.ts, wallet-adapter.ts
  • Replace web3 ABI types with viem-native equivalents
  • Rewrite connection.ts internals to use viem client
  • Remove BigNumber/bn.js from utils/ β€” native bigint in solidity.ts, signatureUtils.ts, ecies.ts
  • Remove @ethereumjs/* dependencies
  • Patch buffer-equal-constant-time for Node 25 compatibility
  • Drop web3 from yarn.lock

Part of the web3 β†’ viem migration. No CI requirement on this PR.


PR-Codex overview

This PR focuses on refactoring the codebase to improve type safety, remove deprecated features, and transition from web3 to viem for contract interactions. It also enhances logging and adjusts transaction handling for better performance and clarity.

Detailed summary

  • Removed several deprecated files and functions related to web3.
  • Introduced viem for contract interaction, replacing web3 methods.
  • Enhanced type safety across the codebase, eliminating any types.
  • Updated transaction parameters handling to use viem conventions.
  • Improved logging by replacing console.info with debug.
  • Added declarationMap to TypeScript configurations for better debugging.
  • Updated JSON files to reflect changes in transaction handling and dependencies.
  • Refactored tests to align with the new viem implementation and remove web3 dependencies.

The following files were skipped due to too many changes: packages/sdk/connect/src/types.ts, packages/sdk/connect/src/utils/formatter.ts, packages/sdk/utils/src/signatureUtils.ts, packages/sdk/connect/src/celo-provider.ts, specs/standardize-viem-clients.md, packages/sdk/connect/src/connection.ts, yarn.lock

✨ Ask PR-Codex anything about this PR by commenting with /codex {your question}

- Delete rpc-caller.ts, celo-transaction-object.ts, tx-result.ts, promi-event
- Add contract-types.ts (CeloContract<TAbi>), viem-abi-coder.ts, wallet-adapter.ts
- Replace web3 ABI types with viem-native equivalents in abi-types.ts
- Rewrite connection.ts internals to use viem client
- Remove BigNumber/bn.js from utils β€” use native bigint in solidity.ts, signatureUtils.ts, ecies.ts
- Remove @ethereumjs/* dependencies
- Patch buffer-equal-constant-time for Node 25 compatibility
- Drop web3 from yarn.lock
@pahor167 pahor167 requested a review from a team as a code owner April 1, 2026 09:07
@changeset-bot
Copy link
Copy Markdown

changeset-bot bot commented Apr 1, 2026

πŸ¦‹ Changeset detected

Latest commit: 05fceb7

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 15 packages
Name Type
@celo/wallet-ledger Patch
@celo/celocli Major
@celo/connect Major
@celo/contractkit Major
@celo/dev-utils Minor
@celo/explorer Patch
@celo/governance Patch
@celo/transactions-uri Patch
@celo/wallet-base Patch
@celo/wallet-hsm-aws Patch
@celo/wallet-hsm-azure Patch
@celo/wallet-hsm-gcp Patch
@celo/wallet-local Patch
@celo/wallet-remote Patch
@celo/wallet-hsm Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

πŸ’‘ Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 05fceb7606

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with πŸ‘.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".


debugPayload('%O', payload)
request: EIP1193RequestFn = async ({ method, params }) => {
const safeParams: any[] = Array.isArray(params) ? params : params != null ? [params] : []
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Preserve object-form params when forwarding requests

The new request implementation always coerces non-array params into an array ({...} becomes [{...}]), but EIP-1193 allows object-form params and some RPC methods require that exact shape. In those cases (for example wallet-management methods), forwarding through CeloProvider will send malformed params and the upstream provider will reject the call, breaking consumers that call connection.currentProvider.request(...) with object params.

Useful? React with πŸ‘Β / πŸ‘Ž.

Comment on lines +39 to +40
const isOverrides =
lastArg != null && typeof lastArg === 'object' && !Array.isArray(lastArg)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Distinguish tuple args from tx overrides in write proxy

The proxy assumes any last argument that is an object is a transaction overrides object, but viem tuple/struct arguments are also plain objects. For contract write methods whose final ABI argument is a tuple, this path can incorrectly treat that tuple as overrides, injecting/removing fields like account/chain on user data and skipping proper overrides placement, which can cause write calls to fail or send with unintended account handling.

Useful? React with πŸ‘Β / πŸ‘Ž.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant