Skip to content

Commit c30c3ea

Browse files
Add feeTokens endpoint to relayer (#885)
1 parent 1571538 commit c30c3ea

File tree

8 files changed

+815
-619
lines changed

8 files changed

+815
-619
lines changed

packages/services/relayer/src/rpc-relayer/relayer.gen.ts

Lines changed: 754 additions & 615 deletions
Large diffs are not rendered by default.

packages/wallet/core/src/relayer/relayer.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ export interface Relayer {
6363

6464
isAvailable(wallet: Address.Address, chainId: number): Promise<boolean>
6565

66+
feeTokens(): Promise<{ isFeeRequired: boolean; tokens?: FeeToken[]; paymentAddress?: Address.Address }>
67+
6668
feeOptions(
6769
wallet: Address.Address,
6870
chainId: number,

packages/wallet/core/src/relayer/standard/eip6963.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { EIP1193ProviderAdapter, LocalRelayer } from './local.js'
33
import { FeeOption, FeeQuote, OperationStatus, Relayer } from '../relayer.js'
44
import { Address, Hex } from 'ox'
55
import { Payload } from '@0xsequence/wallet-primitives'
6-
import { IntentPrecondition } from './rpc/relayer.gen.js'
6+
import { FeeToken, IntentPrecondition } from './rpc/relayer.gen.js'
77

88
export class EIP6963Relayer implements Relayer {
99
public readonly kind: 'relayer' = 'relayer'
@@ -23,6 +23,10 @@ export class EIP6963Relayer implements Relayer {
2323
return this.relayer.isAvailable(wallet, chainId)
2424
}
2525

26+
feeTokens(): Promise<{ isFeeRequired: boolean; tokens?: FeeToken[]; paymentAddress?: Address.Address }> {
27+
return this.relayer.feeTokens()
28+
}
29+
2630
feeOptions(
2731
wallet: Address.Address,
2832
chainId: number,

packages/wallet/core/src/relayer/standard/local.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Constants, Payload } from '@0xsequence/wallet-primitives'
22
import { EIP1193Provider } from 'mipd'
33
import { AbiFunction, Address, Bytes, Hex, TransactionReceipt } from 'ox'
44
import { FeeOption, FeeQuote, OperationStatus, Relayer } from '../relayer.js'
5-
import { IntentPrecondition } from './rpc/relayer.gen.js'
5+
import { FeeToken, IntentPrecondition } from './rpc/relayer.gen.js'
66
import { decodePrecondition } from '../../preconditions/index.js'
77
import {
88
erc20BalanceOf,
@@ -47,6 +47,12 @@ export class LocalRelayer implements Relayer {
4747
return new LocalRelayer(new EIP1193ProviderAdapter(provider))
4848
}
4949

50+
feeTokens(): Promise<{ isFeeRequired: boolean; tokens?: FeeToken[]; paymentAddress?: Address.Address }> {
51+
return Promise.resolve({
52+
isFeeRequired: false,
53+
})
54+
}
55+
5056
feeOptions(
5157
wallet: Address.Address,
5258
chainId: number,

packages/wallet/core/src/relayer/standard/pk-relayer.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { Payload, Precondition } from '@0xsequence/wallet-primitives'
22
import { Address, Hex, Provider, Secp256k1, TransactionEnvelopeEip1559, TransactionReceipt } from 'ox'
33
import { LocalRelayer } from './local.js'
44
import { FeeOption, FeeQuote, OperationStatus, Relayer } from '../relayer.js'
5+
import { FeeToken } from './rpc/relayer.gen.js'
56

67
export class PkRelayer implements Relayer {
78
public readonly kind: 'relayer' = 'relayer'
@@ -106,6 +107,10 @@ export class PkRelayer implements Relayer {
106107
return providerChainId === chainId
107108
}
108109

110+
feeTokens(): Promise<{ isFeeRequired: boolean; tokens?: FeeToken[]; paymentAddress?: Address.Address }> {
111+
return this.relayer.feeTokens()
112+
}
113+
109114
feeOptions(
110115
wallet: Address.Address,
111116
chainId: number,

packages/wallet/core/src/relayer/standard/rpc/index.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,27 @@ export class RpcRelayer implements Relayer {
109109
return Promise.resolve(this.chainId === chainId)
110110
}
111111

112+
async feeTokens(): Promise<{ isFeeRequired: boolean; tokens?: RpcFeeToken[]; paymentAddress?: Address.Address }> {
113+
try {
114+
const { isFeeRequired, tokens, paymentAddress } = await this.client.feeTokens()
115+
if (isFeeRequired) {
116+
Address.assert(paymentAddress)
117+
return {
118+
isFeeRequired,
119+
tokens,
120+
paymentAddress,
121+
}
122+
}
123+
// Not required
124+
return {
125+
isFeeRequired,
126+
}
127+
} catch (e) {
128+
console.warn('RpcRelayer.feeTokens failed:', e)
129+
return { isFeeRequired: false }
130+
}
131+
}
132+
112133
async feeOptions(
113134
wallet: Address.Address,
114135
chainId: number,

packages/wallet/core/src/relayer/standard/rpc/relayer.gen.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* eslint-disable */
2-
// sequence-relayer v0.4.1 62fe2b49d57c4a0d3960ac1176d48ecfffc7af5a
2+
// sequence-relayer v0.4.1 93ac61641d0351211680e2092673726b5c4f1848
33
// --
44
// Code generated by [email protected] with typescript generator. DO NOT EDIT.
55
//
@@ -16,7 +16,7 @@ export const WebRPCVersion = 'v1'
1616
export const WebRPCSchemaVersion = 'v0.4.1'
1717

1818
// Schema hash generated from your RIDL schema
19-
export const WebRPCSchemaHash = '62fe2b49d57c4a0d3960ac1176d48ecfffc7af5a'
19+
export const WebRPCSchemaHash = '93ac61641d0351211680e2092673726b5c4f1848'
2020

2121
type WebrpcGenVersions = {
2222
webrpcGenVersion: string
@@ -557,6 +557,7 @@ export interface FeeTokensArgs {}
557557
export interface FeeTokensReturn {
558558
isFeeRequired: boolean
559559
tokens: Array<FeeToken>
560+
paymentAddress: string
560561
}
561562
export interface FeeOptionsArgs {
562563
wallet: string
@@ -950,6 +951,7 @@ export class Relayer implements Relayer {
950951
return {
951952
isFeeRequired: <boolean>_data.isFeeRequired,
952953
tokens: <Array<FeeToken>>_data.tokens,
954+
paymentAddress: <string>_data.paymentAddress,
953955
}
954956
})
955957
},

packages/wallet/core/src/relayer/standard/sequence.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { ETHTxnStatus, IntentPrecondition, Relayer as Service } from '@0xsequenc
22
import { Payload } from '@0xsequence/wallet-primitives'
33
import { AbiFunction, Address, Bytes, Hex } from 'ox'
44
import { FeeOption, FeeQuote, OperationStatus, Relayer } from '../relayer.js'
5+
import { FeeToken } from './rpc/relayer.gen.js'
56

67
export class SequenceRelayer implements Relayer {
78
public readonly kind: 'relayer' = 'relayer'
@@ -18,6 +19,22 @@ export class SequenceRelayer implements Relayer {
1819
return true
1920
}
2021

22+
async feeTokens(): Promise<{ isFeeRequired: boolean; tokens?: FeeToken[]; paymentAddress?: Address.Address }> {
23+
const { isFeeRequired, tokens, paymentAddress } = await this.service.feeTokens()
24+
if (isFeeRequired) {
25+
Address.assert(paymentAddress)
26+
return {
27+
isFeeRequired,
28+
tokens,
29+
paymentAddress,
30+
}
31+
}
32+
// Not required
33+
return {
34+
isFeeRequired,
35+
}
36+
}
37+
2138
async feeOptions(
2239
wallet: Address.Address,
2340
_chainId: number,

0 commit comments

Comments
 (0)