@0xsequence/relayer 3.0.0-beta.8 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +2 -2
- package/.turbo/turbo-lint.log +4 -0
- package/.turbo/turbo-typecheck.log +4 -0
- package/CHANGELOG.md +134 -0
- package/dist/preconditions/codec.d.ts.map +1 -1
- package/dist/preconditions/codec.js +55 -45
- package/dist/relayer/relayer.d.ts +2 -2
- package/dist/relayer/relayer.d.ts.map +1 -1
- package/dist/relayer/relayer.js +3 -1
- package/dist/relayer/rpc-relayer/index.d.ts +3 -3
- package/dist/relayer/rpc-relayer/index.d.ts.map +1 -1
- package/dist/relayer/rpc-relayer/index.js +26 -25
- package/dist/relayer/standard/eip6963.d.ts +2 -2
- package/dist/relayer/standard/eip6963.d.ts.map +1 -1
- package/dist/relayer/standard/eip6963.js +3 -3
- package/dist/relayer/standard/local.d.ts +2 -3
- package/dist/relayer/standard/local.d.ts.map +1 -1
- package/dist/relayer/standard/local.js +14 -30
- package/dist/relayer/standard/pk-relayer.d.ts +3 -3
- package/dist/relayer/standard/pk-relayer.d.ts.map +1 -1
- package/dist/relayer/standard/pk-relayer.js +3 -3
- package/dist/relayer/standard/sequence.d.ts +3 -3
- package/dist/relayer/standard/sequence.d.ts.map +1 -1
- package/dist/relayer/standard/sequence.js +2 -3
- package/eslint.config.js +4 -0
- package/package.json +9 -7
- package/src/preconditions/codec.ts +63 -39
- package/src/relayer/relayer.ts +4 -1
- package/src/relayer/rpc-relayer/index.ts +50 -33
- package/src/relayer/standard/eip6963.ts +4 -3
- package/src/relayer/standard/local.ts +37 -44
- package/src/relayer/standard/pk-relayer.ts +4 -3
- package/src/relayer/standard/sequence.ts +3 -3
- package/test/preconditions/codec.test.ts +11 -11
- package/test/preconditions/preconditions.test.ts +97 -138
- package/test/preconditions/selectors.test.ts +76 -254
- package/test/preconditions/types.test.ts +6 -6
- package/test/relayer/relayer.test.ts +4 -4
package/.turbo/turbo-build.log
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,139 @@
|
|
|
1
1
|
# @0xsequence/relayer
|
|
2
2
|
|
|
3
|
+
## 3.0.0
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- f68be62: ethauth support
|
|
8
|
+
- 49d8a2f: New chains, minor fixes
|
|
9
|
+
- 3411232: Beta release with dapp connector fixes
|
|
10
|
+
- 23cb9e9: New chains, relayer rpc fix
|
|
11
|
+
- f5f6a7a: dapp-client updates
|
|
12
|
+
- e7de3b1: Fix signer 404 error, minor fixes
|
|
13
|
+
- 493836f: multicall3 optimization
|
|
14
|
+
- 30e1f1a: 3.0.0 beta
|
|
15
|
+
- d5017e8: Beta release for v3
|
|
16
|
+
- 24a5fab: Final RC before 3.0.0
|
|
17
|
+
- e5e1a03: Apple auth fixes
|
|
18
|
+
- 0b63113: Apple auth fix
|
|
19
|
+
- a89134a: Userdata service updates
|
|
20
|
+
- 7c6c811: 3.0.0-beta.3 with fixes
|
|
21
|
+
- 3.0.0 release
|
|
22
|
+
- 98ce38b: 3.0.0-beta.2 with identity instrument updates
|
|
23
|
+
- 747e6b5: Relayer fee options fix
|
|
24
|
+
- 40c19ff: dapp client updates for EOA login
|
|
25
|
+
- 6d5de25: 3.0.0-beta.1
|
|
26
|
+
- 934acd1: RC5 upgrade
|
|
27
|
+
- Updated dependencies [f68be62]
|
|
28
|
+
- Updated dependencies [49d8a2f]
|
|
29
|
+
- Updated dependencies [3411232]
|
|
30
|
+
- Updated dependencies [23cb9e9]
|
|
31
|
+
- Updated dependencies [f5f6a7a]
|
|
32
|
+
- Updated dependencies [e7de3b1]
|
|
33
|
+
- Updated dependencies [493836f]
|
|
34
|
+
- Updated dependencies [30e1f1a]
|
|
35
|
+
- Updated dependencies [d5017e8]
|
|
36
|
+
- Updated dependencies [24a5fab]
|
|
37
|
+
- Updated dependencies [e5e1a03]
|
|
38
|
+
- Updated dependencies [0b63113]
|
|
39
|
+
- Updated dependencies [a89134a]
|
|
40
|
+
- Updated dependencies [7c6c811]
|
|
41
|
+
- Updated dependencies
|
|
42
|
+
- Updated dependencies [98ce38b]
|
|
43
|
+
- Updated dependencies [747e6b5]
|
|
44
|
+
- Updated dependencies [40c19ff]
|
|
45
|
+
- Updated dependencies [6d5de25]
|
|
46
|
+
- Updated dependencies [934acd1]
|
|
47
|
+
- @0xsequence/wallet-primitives@3.0.0
|
|
48
|
+
|
|
49
|
+
## 3.0.0-beta.19
|
|
50
|
+
|
|
51
|
+
### Patch Changes
|
|
52
|
+
|
|
53
|
+
- Final RC before 3.0.0
|
|
54
|
+
- Updated dependencies
|
|
55
|
+
- @0xsequence/wallet-primitives@3.0.0-beta.19
|
|
56
|
+
|
|
57
|
+
## 3.0.0-beta.18
|
|
58
|
+
|
|
59
|
+
### Patch Changes
|
|
60
|
+
|
|
61
|
+
- multicall3 optimization
|
|
62
|
+
- Updated dependencies
|
|
63
|
+
- @0xsequence/wallet-primitives@3.0.0-beta.18
|
|
64
|
+
|
|
65
|
+
## 3.0.0-beta.17
|
|
66
|
+
|
|
67
|
+
### Patch Changes
|
|
68
|
+
|
|
69
|
+
- New chains, relayer rpc fix
|
|
70
|
+
- Updated dependencies
|
|
71
|
+
- @0xsequence/wallet-primitives@3.0.0-beta.17
|
|
72
|
+
|
|
73
|
+
## 3.0.0-beta.16
|
|
74
|
+
|
|
75
|
+
### Patch Changes
|
|
76
|
+
|
|
77
|
+
- ethauth support
|
|
78
|
+
- Updated dependencies
|
|
79
|
+
- @0xsequence/wallet-primitives@3.0.0-beta.16
|
|
80
|
+
|
|
81
|
+
## 3.0.0-beta.15
|
|
82
|
+
|
|
83
|
+
### Patch Changes
|
|
84
|
+
|
|
85
|
+
- New chains, minor fixes
|
|
86
|
+
- Updated dependencies
|
|
87
|
+
- @0xsequence/wallet-primitives@3.0.0-beta.15
|
|
88
|
+
|
|
89
|
+
## 3.0.0-beta.14
|
|
90
|
+
|
|
91
|
+
### Patch Changes
|
|
92
|
+
|
|
93
|
+
- Relayer fee options fix
|
|
94
|
+
- Updated dependencies
|
|
95
|
+
- @0xsequence/wallet-primitives@3.0.0-beta.14
|
|
96
|
+
|
|
97
|
+
## 3.0.0-beta.13
|
|
98
|
+
|
|
99
|
+
### Patch Changes
|
|
100
|
+
|
|
101
|
+
- Userdata service updates
|
|
102
|
+
- Updated dependencies
|
|
103
|
+
- @0xsequence/wallet-primitives@3.0.0-beta.13
|
|
104
|
+
|
|
105
|
+
## 3.0.0-beta.12
|
|
106
|
+
|
|
107
|
+
### Patch Changes
|
|
108
|
+
|
|
109
|
+
- Beta release with dapp connector fixes
|
|
110
|
+
- Updated dependencies
|
|
111
|
+
- @0xsequence/wallet-primitives@3.0.0-beta.12
|
|
112
|
+
|
|
113
|
+
## 3.0.0-beta.11
|
|
114
|
+
|
|
115
|
+
### Patch Changes
|
|
116
|
+
|
|
117
|
+
- 3.0.0 beta
|
|
118
|
+
- Updated dependencies
|
|
119
|
+
- @0xsequence/wallet-primitives@3.0.0-beta.11
|
|
120
|
+
|
|
121
|
+
## 3.0.0-beta.10
|
|
122
|
+
|
|
123
|
+
### Patch Changes
|
|
124
|
+
|
|
125
|
+
- dapp-client updates
|
|
126
|
+
- Updated dependencies
|
|
127
|
+
- @0xsequence/wallet-primitives@3.0.0-beta.10
|
|
128
|
+
|
|
129
|
+
## 3.0.0-beta.9
|
|
130
|
+
|
|
131
|
+
### Patch Changes
|
|
132
|
+
|
|
133
|
+
- dapp client updates for EOA login
|
|
134
|
+
- Updated dependencies
|
|
135
|
+
- @0xsequence/wallet-primitives@3.0.0-beta.9
|
|
136
|
+
|
|
3
137
|
## 3.0.0-beta.8
|
|
4
138
|
|
|
5
139
|
### Patch Changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../src/preconditions/codec.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EAQb,MAAM,YAAY,CAAA;AAEnB,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,uBAAuB,EAAE,GAAG,YAAY,EAAE,CAW5F;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,uBAAuB,GAAG,YAAY,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../src/preconditions/codec.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EAQb,MAAM,YAAY,CAAA;AAEnB,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,uBAAuB,EAAE,GAAG,YAAY,EAAE,CAW5F;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,uBAAuB,GAAG,YAAY,GAAG,SAAS,CAyFvF;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CAyF1D"}
|
|
@@ -14,6 +14,10 @@ export function decodePrecondition(p) {
|
|
|
14
14
|
if (!p) {
|
|
15
15
|
return undefined;
|
|
16
16
|
}
|
|
17
|
+
if (typeof p.minAmount !== 'bigint') {
|
|
18
|
+
console.warn(`Failed to decode precondition: minAmount must be a bigint`);
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
17
21
|
let precondition;
|
|
18
22
|
try {
|
|
19
23
|
switch (p.type) {
|
|
@@ -54,72 +58,78 @@ export function decodePrecondition(p) {
|
|
|
54
58
|
}
|
|
55
59
|
}
|
|
56
60
|
export function encodePrecondition(p) {
|
|
57
|
-
const data = {};
|
|
58
61
|
switch (p.type()) {
|
|
59
62
|
case 'native-balance': {
|
|
60
63
|
const native = p;
|
|
61
|
-
data
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
64
|
+
const data = {
|
|
65
|
+
address: native.address.toString(),
|
|
66
|
+
...(native.min !== undefined && { min: native.min.toString() }),
|
|
67
|
+
...(native.max !== undefined && { max: native.max.toString() }),
|
|
68
|
+
};
|
|
69
|
+
return JSON.stringify(data);
|
|
67
70
|
}
|
|
68
71
|
case 'erc20-balance': {
|
|
69
72
|
const erc20 = p;
|
|
70
|
-
data
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
73
|
+
const data = {
|
|
74
|
+
address: erc20.address.toString(),
|
|
75
|
+
token: erc20.token.toString(),
|
|
76
|
+
...(erc20.min !== undefined && { min: erc20.min.toString() }),
|
|
77
|
+
...(erc20.max !== undefined && { max: erc20.max.toString() }),
|
|
78
|
+
};
|
|
79
|
+
return JSON.stringify(data);
|
|
77
80
|
}
|
|
78
81
|
case 'erc20-approval': {
|
|
79
82
|
const erc20 = p;
|
|
80
|
-
data
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
83
|
+
const data = {
|
|
84
|
+
address: erc20.address.toString(),
|
|
85
|
+
token: erc20.token.toString(),
|
|
86
|
+
operator: erc20.operator.toString(),
|
|
87
|
+
min: erc20.min.toString(),
|
|
88
|
+
};
|
|
89
|
+
return JSON.stringify(data);
|
|
85
90
|
}
|
|
86
91
|
case 'erc721-ownership': {
|
|
87
92
|
const erc721 = p;
|
|
88
|
-
data
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
93
|
+
const data = {
|
|
94
|
+
address: erc721.address.toString(),
|
|
95
|
+
token: erc721.token.toString(),
|
|
96
|
+
tokenId: erc721.tokenId.toString(),
|
|
97
|
+
...(erc721.owned !== undefined && { owned: erc721.owned }),
|
|
98
|
+
};
|
|
99
|
+
return JSON.stringify(data);
|
|
94
100
|
}
|
|
95
101
|
case 'erc721-approval': {
|
|
96
102
|
const erc721 = p;
|
|
97
|
-
data
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
103
|
+
const data = {
|
|
104
|
+
address: erc721.address.toString(),
|
|
105
|
+
token: erc721.token.toString(),
|
|
106
|
+
tokenId: erc721.tokenId.toString(),
|
|
107
|
+
operator: erc721.operator.toString(),
|
|
108
|
+
};
|
|
109
|
+
return JSON.stringify(data);
|
|
102
110
|
}
|
|
103
111
|
case 'erc1155-balance': {
|
|
104
112
|
const erc1155 = p;
|
|
105
|
-
data
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
+
const data = {
|
|
114
|
+
address: erc1155.address.toString(),
|
|
115
|
+
token: erc1155.token.toString(),
|
|
116
|
+
tokenId: erc1155.tokenId.toString(),
|
|
117
|
+
...(erc1155.min !== undefined && { min: erc1155.min.toString() }),
|
|
118
|
+
...(erc1155.max !== undefined && { max: erc1155.max.toString() }),
|
|
119
|
+
};
|
|
120
|
+
return JSON.stringify(data);
|
|
113
121
|
}
|
|
114
122
|
case 'erc1155-approval': {
|
|
115
123
|
const erc1155 = p;
|
|
116
|
-
data
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
124
|
+
const data = {
|
|
125
|
+
address: erc1155.address.toString(),
|
|
126
|
+
token: erc1155.token.toString(),
|
|
127
|
+
tokenId: erc1155.tokenId.toString(),
|
|
128
|
+
operator: erc1155.operator.toString(),
|
|
129
|
+
min: erc1155.min.toString(),
|
|
130
|
+
};
|
|
131
|
+
return JSON.stringify(data);
|
|
122
132
|
}
|
|
123
133
|
}
|
|
124
|
-
return JSON.stringify(
|
|
134
|
+
return JSON.stringify({});
|
|
125
135
|
}
|
|
@@ -12,7 +12,7 @@ export interface Relayer {
|
|
|
12
12
|
tokens?: FeeToken[];
|
|
13
13
|
paymentAddress?: Address.Address;
|
|
14
14
|
}>;
|
|
15
|
-
feeOptions(wallet: Address.Address, chainId: number, calls: Payload.Call[]): Promise<{
|
|
15
|
+
feeOptions(wallet: Address.Address, chainId: number, to: Address.Address, calls: Payload.Call[]): Promise<{
|
|
16
16
|
options: FeeOption[];
|
|
17
17
|
quote?: FeeQuote;
|
|
18
18
|
}>;
|
|
@@ -22,5 +22,5 @@ export interface Relayer {
|
|
|
22
22
|
status(opHash: Hex.Hex, chainId: number): Promise<OperationStatus>;
|
|
23
23
|
checkPrecondition(precondition: Precondition.Precondition): Promise<boolean>;
|
|
24
24
|
}
|
|
25
|
-
export declare function isRelayer(relayer:
|
|
25
|
+
export declare function isRelayer(relayer: unknown): relayer is Relayer;
|
|
26
26
|
//# sourceMappingURL=relayer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relayer.d.ts","sourceRoot":"","sources":["../../src/relayer/relayer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,IAAI,CAAA;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AACvD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACjE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAErE,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,SAAS,CAAA;IAEf,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IAEV,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAEvE,SAAS,IAAI,OAAO,CAAC;QAAE,aAAa,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAC,OAAO,CAAA;KAAE,CAAC,CAAA;IAEvG,UAAU,CACR,MAAM,EAAE,OAAO,CAAC,OAAO,EACvB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,GACpB,OAAO,CAAC;QAAE,OAAO,EAAE,SAAS,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,QAAQ,CAAA;KAAE,CAAC,CAAA;IAEtD,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAA;KAAE,CAAC,CAAA;IAE1G,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;IAElE,iBAAiB,CAAC,YAAY,EAAE,YAAY,CAAC,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CAC7E;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"relayer.d.ts","sourceRoot":"","sources":["../../src/relayer/relayer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,IAAI,CAAA;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AACvD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACjE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAErE,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,SAAS,CAAA;IAEf,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IAEV,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAEvE,SAAS,IAAI,OAAO,CAAC;QAAE,aAAa,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAC,OAAO,CAAA;KAAE,CAAC,CAAA;IAEvG,UAAU,CACR,MAAM,EAAE,OAAO,CAAC,OAAO,EACvB,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,OAAO,CAAC,OAAO,EACnB,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,GACpB,OAAO,CAAC;QAAE,OAAO,EAAE,SAAS,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,QAAQ,CAAA;KAAE,CAAC,CAAA;IAEtD,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAA;KAAE,CAAC,CAAA;IAE1G,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;IAElE,iBAAiB,CAAC,YAAY,EAAE,YAAY,CAAC,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CAC7E;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,OAAO,CAU9D"}
|
package/dist/relayer/relayer.js
CHANGED
|
@@ -6,7 +6,7 @@ import { Chain } from 'viem';
|
|
|
6
6
|
export type Fetch = (input: RequestInfo, init?: RequestInit) => Promise<Response>;
|
|
7
7
|
export declare const getChain: (chainId: number) => Chain;
|
|
8
8
|
export declare class RpcRelayer implements Relayer {
|
|
9
|
-
readonly kind
|
|
9
|
+
readonly kind = "relayer";
|
|
10
10
|
readonly type = "rpc";
|
|
11
11
|
readonly id: string;
|
|
12
12
|
readonly chainId: number;
|
|
@@ -21,7 +21,7 @@ export declare class RpcRelayer implements Relayer {
|
|
|
21
21
|
tokens?: RpcFeeToken[];
|
|
22
22
|
paymentAddress?: Address.Address;
|
|
23
23
|
}>;
|
|
24
|
-
feeOptions(wallet: Address.Address, chainId: number, calls: Payload.Call[]): Promise<{
|
|
24
|
+
feeOptions(wallet: Address.Address, chainId: number, to: Address.Address, calls: Payload.Call[]): Promise<{
|
|
25
25
|
options: FeeOption[];
|
|
26
26
|
quote?: FeeQuote;
|
|
27
27
|
}>;
|
|
@@ -31,7 +31,7 @@ export declare class RpcRelayer implements Relayer {
|
|
|
31
31
|
relay(to: Address.Address, data: Hex.Hex, chainId: number, quote?: FeeQuote, preconditions?: TransactionPrecondition[]): Promise<{
|
|
32
32
|
opHash: Hex.Hex;
|
|
33
33
|
}>;
|
|
34
|
-
status(opHash: Hex.Hex,
|
|
34
|
+
status(opHash: Hex.Hex, _chainId: number): Promise<OperationStatus>;
|
|
35
35
|
checkPrecondition(precondition: TransactionPrecondition): Promise<boolean>;
|
|
36
36
|
private mapRpcFeeTokenToAddress;
|
|
37
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/relayer/rpc-relayer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,QAAQ,IAAI,WAAW,EACvB,uBAAuB,EAExB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,OAAO,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/relayer/rpc-relayer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,QAAQ,IAAI,WAAW,EACvB,uBAAuB,EAExB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,OAAO,EAAE,GAAG,EAAe,MAAM,IAAI,CAAA;AAC9C,OAAO,EAAa,OAAO,EAAW,MAAM,+BAA+B,CAAA;AAC3E,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAmB3E,OAAO,EAA0C,KAAK,EAAE,MAAM,MAAM,CAAA;AAGpE,MAAM,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;AAuCjF,eAAO,MAAM,QAAQ,GAAI,SAAS,MAAM,KAAG,KAgB1C,CAAA;AAED,qBAAa,UAAW,YAAW,OAAO;IACxC,SAAgB,IAAI,aAAY;IAChC,SAAgB,IAAI,SAAQ;IAC5B,SAAgB,EAAE,EAAE,MAAM,CAAA;IAC1B,SAAgB,OAAO,EAAE,MAAM,CAAA;IAC/B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,KAAK,CAAO;IACpB,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAQ;gBAE9B,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,gBAAgB,CAAC,EAAE,MAAM;IAqB3G,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIlE,SAAS,IAAI,OAAO,CAAC;QAAE,aAAa,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAC,OAAO,CAAA;KAAE,CAAC;IAqB1G,UAAU,CACd,MAAM,EAAE,OAAO,CAAC,OAAO,EACvB,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,OAAO,CAAC,OAAO,EACnB,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,GACpB,OAAO,CAAC;QAAE,OAAO,EAAE,SAAS,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,QAAQ,CAAA;KAAE,CAAC;IAsChD,WAAW,CACf,aAAa,EAAE,OAAO,CAAC,OAAO,EAC9B,EAAE,EAAE,OAAO,CAAC,OAAO,EACnB,IAAI,EAAE,GAAG,CAAC,GAAG,EACb,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,QAAQ,EAChB,aAAa,CAAC,EAAE,uBAAuB,EAAE,GACxC,OAAO,CAAC;QAAE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAA;KAAE,CAAC;IAyBzB,KAAK,CACT,EAAE,EAAE,OAAO,CAAC,OAAO,EACnB,IAAI,EAAE,GAAG,CAAC,GAAG,EACb,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,QAAQ,EAChB,aAAa,CAAC,EAAE,uBAAuB,EAAE,GACxC,OAAO,CAAC;QAAE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAA;KAAE,CAAC;IAyBzB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IA2CnE,iBAAiB,CAAC,YAAY,EAAE,uBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC;IAoKhF,OAAO,CAAC,uBAAuB;CAMhC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Relayer as GenRelayer, FeeTokenType, ETHTxnStatus, } from './relayer.gen.js';
|
|
2
|
-
import { Address, Hex,
|
|
2
|
+
import { Address, Hex, AbiFunction } from 'ox';
|
|
3
3
|
import { Constants, Payload, Network } from '@0xsequence/wallet-primitives';
|
|
4
|
-
import { decodePrecondition } from '../../preconditions/index.js';
|
|
4
|
+
import { decodePrecondition, } from '../../preconditions/index.js';
|
|
5
5
|
import { erc20BalanceOf, erc20Allowance, erc721OwnerOf, erc721GetApproved, erc1155BalanceOf, erc1155IsApprovedForAll, } from '../standard/abi.js';
|
|
6
6
|
import { createPublicClient, http } from 'viem';
|
|
7
7
|
import * as chains from 'viem/chains';
|
|
@@ -30,12 +30,11 @@ const networkToChain = (network) => {
|
|
|
30
30
|
},
|
|
31
31
|
}
|
|
32
32
|
: undefined,
|
|
33
|
-
contracts: network.
|
|
34
|
-
? {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}
|
|
33
|
+
contracts: network.contracts
|
|
34
|
+
? Object.entries(network.contracts).reduce((acc, [name, address]) => {
|
|
35
|
+
acc[name] = { address };
|
|
36
|
+
return acc;
|
|
37
|
+
}, {})
|
|
39
38
|
: undefined,
|
|
40
39
|
};
|
|
41
40
|
};
|
|
@@ -46,7 +45,7 @@ export const getChain = (chainId) => {
|
|
|
46
45
|
return networkToChain(sequenceNetwork);
|
|
47
46
|
}
|
|
48
47
|
// Fall back to viem's built-in chains
|
|
49
|
-
const viemChain = Object.values(chains).find((c) => typeof c === 'object' && 'id' in c && c.id === chainId);
|
|
48
|
+
const viemChain = Object.values(chains).find((c) => typeof c === 'object' && c !== null && 'id' in c && c.id === chainId);
|
|
50
49
|
if (viemChain) {
|
|
51
50
|
return viemChain;
|
|
52
51
|
}
|
|
@@ -103,14 +102,19 @@ export class RpcRelayer {
|
|
|
103
102
|
return { isFeeRequired: false };
|
|
104
103
|
}
|
|
105
104
|
}
|
|
106
|
-
async feeOptions(wallet, chainId, calls) {
|
|
105
|
+
async feeOptions(wallet, chainId, to, calls) {
|
|
106
|
+
// IMPORTANT:
|
|
107
|
+
// The relayer FeeOptions endpoint simulates `eth_call(to, data)`.
|
|
108
|
+
// wallet-webapp-v3 requests FeeOptions with `to = wallet` and `data = Payload.encode(calls, self=wallet)`.
|
|
109
|
+
// This works for undeployed wallets and avoids guest-module simulation pitfalls.
|
|
107
110
|
const callsStruct = { type: 'call', space: 0n, nonce: 0n, calls: calls };
|
|
108
|
-
const
|
|
111
|
+
const feeOptionsTo = wallet;
|
|
112
|
+
const data = Payload.encode(callsStruct, wallet);
|
|
109
113
|
try {
|
|
110
114
|
const result = await this.client.feeOptions({
|
|
111
|
-
wallet
|
|
112
|
-
to:
|
|
113
|
-
data:
|
|
115
|
+
wallet,
|
|
116
|
+
to: feeOptionsTo,
|
|
117
|
+
data: Hex.fromBytes(data),
|
|
114
118
|
}, { ...(this.projectAccessKey ? { 'X-Access-Key': this.projectAccessKey } : undefined) });
|
|
115
119
|
const quote = result.quote ? { _tag: 'FeeQuote', _quote: result.quote } : undefined;
|
|
116
120
|
const options = result.options.map((option) => ({
|
|
@@ -165,7 +169,7 @@ export class RpcRelayer {
|
|
|
165
169
|
}
|
|
166
170
|
return { opHash: `0x${result.txnHash}` };
|
|
167
171
|
}
|
|
168
|
-
async status(opHash,
|
|
172
|
+
async status(opHash, _chainId) {
|
|
169
173
|
try {
|
|
170
174
|
const cleanedOpHash = opHash.startsWith('0x') ? opHash.substring(2) : opHash;
|
|
171
175
|
const result = await this.client.getMetaTxnReceipt({ metaTxID: cleanedOpHash });
|
|
@@ -214,7 +218,7 @@ export class RpcRelayer {
|
|
|
214
218
|
case 'native-balance': {
|
|
215
219
|
const native = decoded;
|
|
216
220
|
try {
|
|
217
|
-
const balance = await this.provider.getBalance({ address: native.address
|
|
221
|
+
const balance = await this.provider.getBalance({ address: native.address });
|
|
218
222
|
const minWei = native.min !== undefined ? BigInt(native.min) : undefined;
|
|
219
223
|
const maxWei = native.max !== undefined ? BigInt(native.max) : undefined;
|
|
220
224
|
if (minWei !== undefined && maxWei !== undefined) {
|
|
@@ -238,7 +242,7 @@ export class RpcRelayer {
|
|
|
238
242
|
case 'erc20-balance': {
|
|
239
243
|
const erc20 = decoded;
|
|
240
244
|
try {
|
|
241
|
-
const data = AbiFunction.encodeData(erc20BalanceOf, [erc20.address
|
|
245
|
+
const data = AbiFunction.encodeData(erc20BalanceOf, [erc20.address]);
|
|
242
246
|
const result = await this.provider.call({
|
|
243
247
|
to: erc20.token.toString(),
|
|
244
248
|
data: data,
|
|
@@ -266,7 +270,7 @@ export class RpcRelayer {
|
|
|
266
270
|
case 'erc20-approval': {
|
|
267
271
|
const erc20 = decoded;
|
|
268
272
|
try {
|
|
269
|
-
const data = AbiFunction.encodeData(erc20Allowance, [erc20.address
|
|
273
|
+
const data = AbiFunction.encodeData(erc20Allowance, [erc20.address, erc20.operator]);
|
|
270
274
|
const result = await this.provider.call({
|
|
271
275
|
to: erc20.token.toString(),
|
|
272
276
|
data: data,
|
|
@@ -285,7 +289,7 @@ export class RpcRelayer {
|
|
|
285
289
|
try {
|
|
286
290
|
const data = AbiFunction.encodeData(erc721OwnerOf, [erc721.tokenId]);
|
|
287
291
|
const result = await this.provider.call({
|
|
288
|
-
to: erc721.token
|
|
292
|
+
to: erc721.token,
|
|
289
293
|
data: data,
|
|
290
294
|
});
|
|
291
295
|
const resultHex = result.toString();
|
|
@@ -319,7 +323,7 @@ export class RpcRelayer {
|
|
|
319
323
|
case 'erc1155-balance': {
|
|
320
324
|
const erc1155 = decoded;
|
|
321
325
|
try {
|
|
322
|
-
const data = AbiFunction.encodeData(erc1155BalanceOf, [erc1155.address
|
|
326
|
+
const data = AbiFunction.encodeData(erc1155BalanceOf, [erc1155.address, erc1155.tokenId]);
|
|
323
327
|
const result = await this.provider.call({
|
|
324
328
|
to: erc1155.token.toString(),
|
|
325
329
|
data: data,
|
|
@@ -347,12 +351,9 @@ export class RpcRelayer {
|
|
|
347
351
|
case 'erc1155-approval': {
|
|
348
352
|
const erc1155 = decoded;
|
|
349
353
|
try {
|
|
350
|
-
const data = AbiFunction.encodeData(erc1155IsApprovedForAll, [
|
|
351
|
-
erc1155.address.toString(),
|
|
352
|
-
erc1155.operator.toString(),
|
|
353
|
-
]);
|
|
354
|
+
const data = AbiFunction.encodeData(erc1155IsApprovedForAll, [erc1155.address, erc1155.operator]);
|
|
354
355
|
const result = await this.provider.call({
|
|
355
|
-
to: erc1155.token
|
|
356
|
+
to: erc1155.token,
|
|
356
357
|
data: data,
|
|
357
358
|
});
|
|
358
359
|
return BigInt(result.toString()) === 1n;
|
|
@@ -4,7 +4,7 @@ import { Address, Hex } from 'ox';
|
|
|
4
4
|
import { Payload } from '@0xsequence/wallet-primitives';
|
|
5
5
|
import { FeeToken, TransactionPrecondition } from '../rpc-relayer/relayer.gen.js';
|
|
6
6
|
export declare class EIP6963Relayer implements Relayer {
|
|
7
|
-
readonly kind
|
|
7
|
+
readonly kind = "relayer";
|
|
8
8
|
readonly type = "eip6963";
|
|
9
9
|
readonly id: string;
|
|
10
10
|
readonly info: EIP6963ProviderInfo;
|
|
@@ -16,7 +16,7 @@ export declare class EIP6963Relayer implements Relayer {
|
|
|
16
16
|
tokens?: FeeToken[];
|
|
17
17
|
paymentAddress?: Address.Address;
|
|
18
18
|
}>;
|
|
19
|
-
feeOptions(wallet: Address.Address, chainId: number, calls: Payload.Call[]): Promise<{
|
|
19
|
+
feeOptions(wallet: Address.Address, chainId: number, to: Address.Address, calls: Payload.Call[]): Promise<{
|
|
20
20
|
options: FeeOption[];
|
|
21
21
|
quote?: FeeQuote;
|
|
22
22
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eip6963.d.ts","sourceRoot":"","sources":["../../../src/relayer/standard/eip6963.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,MAAM,CAAA;AAE9E,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC3E,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,IAAI,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAA;AAEjF,qBAAa,cAAe,YAAW,OAAO;IAC5C,SAAgB,IAAI,
|
|
1
|
+
{"version":3,"file":"eip6963.d.ts","sourceRoot":"","sources":["../../../src/relayer/standard/eip6963.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,MAAM,CAAA;AAE9E,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC3E,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,IAAI,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAA;AAEjF,qBAAa,cAAe,YAAW,OAAO;IAC5C,SAAgB,IAAI,aAAY;IAChC,SAAgB,IAAI,aAAY;IAChC,SAAgB,EAAE,EAAE,MAAM,CAAA;IAC1B,SAAgB,IAAI,EAAE,mBAAmB,CAAA;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;gBAE1B,MAAM,EAAE,qBAAqB;IAOzC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIvE,SAAS,IAAI,OAAO,CAAC;QAAE,aAAa,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAC,OAAO,CAAA;KAAE,CAAC;IAIvG,UAAU,CACR,MAAM,EAAE,OAAO,CAAC,OAAO,EACvB,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,OAAO,CAAC,OAAO,EACnB,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,GACpB,OAAO,CAAC;QAAE,OAAO,EAAE,SAAS,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,QAAQ,CAAA;KAAE,CAAC;IAIhD,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAA;KAAE,CAAC;IAI5G,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAI5D,iBAAiB,CAAC,YAAY,EAAE,uBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC;CAGjF;AAKD,wBAAgB,eAAe,yBAK9B;AAID,wBAAgB,WAAW,IAAI,cAAc,EAAE,CAW9C"}
|
|
@@ -17,8 +17,8 @@ export class EIP6963Relayer {
|
|
|
17
17
|
feeTokens() {
|
|
18
18
|
return this.relayer.feeTokens();
|
|
19
19
|
}
|
|
20
|
-
feeOptions(wallet, chainId, calls) {
|
|
21
|
-
return this.relayer.feeOptions(wallet, chainId, calls);
|
|
20
|
+
feeOptions(wallet, chainId, to, calls) {
|
|
21
|
+
return this.relayer.feeOptions(wallet, chainId, to, calls);
|
|
22
22
|
}
|
|
23
23
|
async relay(to, data, chainId, _) {
|
|
24
24
|
return this.relayer.relay(to, data, chainId);
|
|
@@ -38,7 +38,7 @@ export function getEIP6963Store() {
|
|
|
38
38
|
}
|
|
39
39
|
return store;
|
|
40
40
|
}
|
|
41
|
-
|
|
41
|
+
const relayers = new Map();
|
|
42
42
|
export function getRelayers() {
|
|
43
43
|
const store = getEIP6963Store();
|
|
44
44
|
const providers = store.getProviders();
|
|
@@ -18,7 +18,7 @@ export interface GenericProvider {
|
|
|
18
18
|
}
|
|
19
19
|
export declare class LocalRelayer implements Relayer {
|
|
20
20
|
readonly provider: GenericProvider;
|
|
21
|
-
readonly kind
|
|
21
|
+
readonly kind = "relayer";
|
|
22
22
|
readonly type = "local";
|
|
23
23
|
readonly id = "local";
|
|
24
24
|
constructor(provider: GenericProvider);
|
|
@@ -30,11 +30,10 @@ export declare class LocalRelayer implements Relayer {
|
|
|
30
30
|
tokens?: FeeToken[];
|
|
31
31
|
paymentAddress?: Address.Address;
|
|
32
32
|
}>;
|
|
33
|
-
feeOptions(
|
|
33
|
+
feeOptions(_wallet: Address.Address, _chainId: number, _to: Address.Address, _calls: Payload.Call[]): Promise<{
|
|
34
34
|
options: FeeOption[];
|
|
35
35
|
quote?: FeeQuote;
|
|
36
36
|
}>;
|
|
37
|
-
private decodeCalls;
|
|
38
37
|
relay(to: Address.Address, data: Hex.Hex, chainId: number, quote?: FeeQuote, preconditions?: TransactionPrecondition[], checkInterval?: number): Promise<{
|
|
39
38
|
opHash: Hex.Hex;
|
|
40
39
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../../src/relayer/standard/local.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../../src/relayer/standard/local.ts"],"names":[],"mappings":"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"}
|