refactor(contractkit): migrate to viem-native contract interaction [2/8]#767
refactor(contractkit): migrate to viem-native contract interaction [2/8]#767pahor167 wants to merge 1 commit intopahor/viem-A-connect-utilsfrom
Conversation
- Migrate BaseWrapper from proxySend/proxyCall to contract.write/contract.read - Add strongly-typed generic ABIs to BaseWrapper and all 36 wrappers (~110 any eliminated) - Replace web3-contract-cache.ts with contract-factory-cache.ts - Delete PromiEventStub.ts - Remove web3 dependency from kit.ts and mini-kit.ts - Replace CeloTransactionObject with direct tx hash + waitForTransactionReceipt
|
There was a problem hiding this comment.
π‘ Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 2d1623cf9a
βΉοΈ 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".
| if (url.endsWith('.ipc')) { | ||
| try { | ||
| const net = require('net') | ||
| web3 = new Web3(new Web3.providers.IpcProvider(url, net)) | ||
| } catch (e) { | ||
| console.error('.ipc only works in environments with native net module') | ||
| } | ||
| web3 = new Web3(url) | ||
| } else if (url.toLowerCase().startsWith('http')) { | ||
| web3 = new Web3(new Web3.providers.HttpProvider(url, options)) | ||
| return new SimpleIpcProvider(url, net) | ||
| } else { | ||
| web3 = new Web3(url) | ||
| return new SimpleHttpProvider(url, options) |
There was a problem hiding this comment.
Preserve websocket provider support in getProviderForKit
getProviderForKit now routes every non-.ipc URL through SimpleHttpProvider, so ws:///wss:// RPC endpoints are treated as HTTP and break at runtime. The previous implementation delegated non-HTTP URLs to new Web3(url), which supported websocket providers; this change removes that path and will fail for deployments configured with websocket-only nodes.
Useful? React with πΒ / π.
| address: this.contract.address, | ||
| event: eventAbi as any, | ||
| fromBlock, | ||
| toBlock, | ||
| }) |
There was a problem hiding this comment.
Forward event filters when querying past logs
getPastEvents no longer passes options.filter (or other indexed-arg constraints) into getLogs, so callers that rely on filtered event queries will now receive unfiltered logs. That changes behavior from the previous contract.getPastEvents(event, options) path and can return incorrect results and much larger log sets for the same query.
Useful? React with πΒ / π.
| } catch { | ||
| // Event decoding may fail for proxy contracts; return empty gracefully | ||
| return [] |
There was a problem hiding this comment.
Surface getPastEvents failures instead of returning empty logs
The blanket catch converts any RPC/decode failure into [], which makes node outages, malformed responses, and decode bugs look identical to βno events found.β This silently corrupts downstream logic that uses event history for state derivation, because failures are no longer observable to callers.
Useful? React with πΒ / π.
Stack
Changes
BaseWrapperfromproxySend/proxyCalltocontract.write/contract.readanyeliminated)web3-contract-cache.tswithcontract-factory-cache.tsPromiEventStub.tskit.tsandmini-kit.tsCeloTransactionObjectwith direct tx hash +waitForTransactionReceiptPart of the web3 β viem migration. No CI requirement on this PR.
PR-Codex overview
This PR focuses on refactoring the
contractkitpackage to replaceweb3dependencies with a new connection model. It improves type safety, updates method calls, and enhances transaction handling, aligning with the new architecture.Detailed summary
web3dependency and related files.SolidityValueand other types.newKitFromWeb3tonewKitFromProvider.viemClientfor receipt waiting.