@@ -31,41 +31,51 @@ export const chainConfig = {
3131 format : Formatters . formatTransactionRequest ,
3232 } ) ,
3333 } ,
34- async prepareTransactionRequest ( r ) {
35- const request = r as Transaction . TransactionRequest & {
36- account ?: Account | undefined
37- chain ?:
38- | ( Chain & { feeToken ?: TokenId . TokenIdOrAddress | undefined } )
39- | undefined
40- }
34+ prepareTransactionRequest : [
35+ async ( r , { phase } ) => {
36+ const request = r as Transaction . TransactionRequest & {
37+ account ?: Account | undefined
38+ chain ?:
39+ | ( Chain & { feeToken ?: TokenId . TokenIdOrAddress | undefined } )
40+ | undefined
41+ }
42+
43+ if ( phase === 'afterFillParameters' ) {
44+ // TODO: remove once `eth_fillTransaction` supports nonce keys.
45+ if ( typeof request . nonceKey === 'bigint' && request . nonceKey > 0n )
46+ request . gas = ( request . gas ?? 0n ) + 30_000n
47+ return request as unknown as typeof r
48+ }
4149
42- request . nonceKey = ( ( ) => {
43- if ( typeof request . nonceKey !== 'undefined' ) return request . nonceKey
50+ request . nonceKey = ( ( ) => {
51+ if ( typeof request . nonceKey !== 'undefined' ) return request . nonceKey
4452
45- const address = request . account ?. address ?? request . from
46- if ( ! address ) return undefined
47- if ( ! request . chain ) return undefined
48- const nonceKey = NonceKeyStore . getNonceKey ( NonceKeyStore . store , {
49- address,
50- chainId : request . chain . id ,
51- } )
53+ const address = request . account ?. address ?? request . from
54+ if ( ! address ) return undefined
55+ if ( ! request . chain ) return undefined
56+ const nonceKey = NonceKeyStore . getNonceKey ( NonceKeyStore . store , {
57+ address,
58+ chainId : request . chain . id ,
59+ } )
5260
53- if ( nonceKey === 0n ) return undefined
54- return nonceKey
55- } ) ( )
61+ if ( nonceKey === 0n ) return undefined
62+ return nonceKey
63+ } ) ( )
5664
57- request . nonce = ( ( ) => {
58- if ( typeof request . nonce === 'number' ) return request . nonce
59- // TODO: remove this line once `eth_fillTransaction` supports nonce keys.
60- if ( request . nonceKey ) return 0
61- return undefined
62- } ) ( )
65+ request . nonce = ( ( ) => {
66+ if ( typeof request . nonce === 'number' ) return request . nonce
67+ // TODO: remove this line once `eth_fillTransaction` supports nonce keys.
68+ if ( request . nonceKey ) return 0
69+ return undefined
70+ } ) ( )
6371
64- if ( ! request . feeToken && request . chain ?. feeToken )
65- request . feeToken = request . chain . feeToken
72+ if ( ! request . feeToken && request . chain ?. feeToken )
73+ request . feeToken = request . chain . feeToken
6674
67- return request as unknown as typeof r
68- } ,
75+ return request as unknown as typeof r
76+ } ,
77+ { runAt : [ 'beforeFillTransaction' , 'afterFillParameters' ] } ,
78+ ] ,
6979 serializers : {
7080 // TODO: casting to satisfy viem – viem v3 to have more flexible serializer type.
7181 transaction : ( ( transaction , signature ) =>
0 commit comments