11import {
2- providers ,
2+ getDefaultProvider ,
3+ BrowserProvider ,
4+ EventLog ,
5+ type Eip1193Provider ,
6+ type ContractTransactionResponse ,
7+ type ContractTransactionReceipt ,
38 type Signer ,
49 type Overrides ,
5- type ContractTransaction ,
6- type ContractReceipt ,
710} from "ethers" ;
811import { type TransactionReceipt } from "../validator/receipt.js" ;
912import { type SignerConfig } from "./config.js" ;
1013
11- type ExternalProvider = providers . ExternalProvider ;
12- const { getDefaultProvider, Web3Provider } = providers ;
13-
1414// eslint-disable-next-line @typescript-eslint/no-namespace
1515declare module globalThis {
1616 // eslint-disable-next-line no-var
17- var ethereum : ExternalProvider | undefined ;
17+ var ethereum : Eip1193Provider | undefined ;
1818}
1919
2020/**
@@ -29,11 +29,13 @@ export async function getOverrides({
2929 const opts : Overrides = { } ;
3030 const network = await signer . provider ?. getNetwork ( ) ;
3131 /* c8 ignore next 7 */
32- if ( network ?. chainId === 137 ) {
33- const feeData = await signer . getFeeData ( ) ;
34- if ( feeData . gasPrice != null ) {
32+ if ( network ?. chainId === BigInt ( " 137" ) ) {
33+ const feeData = await signer . provider ?. getFeeData ( ) ;
34+ if ( feeData ? .gasPrice != null ) {
3535 opts . gasPrice =
36- Math . floor ( feeData . gasPrice . toNumber ( ) * 1.1 ) ?? undefined ;
36+ // NOTE: There's no guarantee `feeData.gasPrice` is a JS safe integer which means
37+ // this might not be accurate, but it's just an estimate so this is probably ok
38+ Math . floor ( Number ( feeData . gasPrice ) * 1.1 ) ?? undefined ;
3739 }
3840 }
3941 return opts ;
@@ -44,20 +46,28 @@ export type RegistryReceipt = Required<
4446> ;
4547
4648export async function getContractReceipt (
47- tx : ContractTransaction
49+ tx : ContractTransactionResponse
4850) : Promise < RegistryReceipt > {
4951 const receipt = await tx . wait ( ) ;
52+
53+ if ( receipt == null ) {
54+ throw new Error ( `could not get receipt for transaction: ${ tx } ` ) ;
55+ }
56+
5057 /* c8 ignore next */
51- const events = receipt . events ?? [ ] ;
52- const transactionHash = receipt . transactionHash ;
58+ const logs = receipt . logs ?? [ ] ;
59+ const transactionHash = receipt . hash ;
5360 const blockNumber = receipt . blockNumber ;
54- const chainId = tx . chainId ;
61+ // NOTE: chainId is always a JS safe integer
62+ const chainId = Number ( tx . chainId ) ;
5563 let tableId : string = "" ;
56- for ( const event of events ) {
57- switch ( event . event ) {
64+ for ( const log of logs ) {
65+ if ( ! ( log instanceof EventLog ) ) continue ;
66+
67+ switch ( log . eventName ) {
5868 case "CreateTable" :
5969 case "RunSQL" :
60- tableId = event . args ?. tableId . toString ( ) ;
70+ tableId = log . args ?. tableId . toString ( ) ;
6171 break ;
6272 default :
6373 // Could be a Transfer or other
@@ -76,7 +86,7 @@ export async function getContractReceipt(
7686 * @returns A promise that resolves to a valid web3 provider/signer
7787 * @throws If no global ethereum object is available.
7888 */
79- export async function getSigner ( external ?: ExternalProvider ) : Promise < Signer > {
89+ export async function getSigner ( external ?: Eip1193Provider ) : Promise < Signer > {
8090 const provider = external ?? globalThis . ethereum ;
8191 if ( provider == null ) {
8292 throw new Error ( "provider error: missing global ethereum provider" ) ;
@@ -87,14 +97,14 @@ export async function getSigner(external?: ExternalProvider): Promise<Signer> {
8797 ) ;
8898 }
8999 await provider . request ( { method : "eth_requestAccounts" } ) ;
90- const web3Provider = new Web3Provider ( provider ) ;
100+ const web3Provider = new BrowserProvider ( provider ) ;
91101 return web3Provider . getSigner ( ) ;
92102}
93103
94104export {
95- Signer ,
96105 getDefaultProvider ,
97- type ExternalProvider ,
98- type ContractTransaction ,
99- type ContractReceipt ,
106+ type Signer ,
107+ type ContractTransactionResponse ,
108+ type ContractTransactionReceipt ,
109+ type Eip1193Provider ,
100110} ;
0 commit comments