@instadapp/avocado-base 0.2.2 → 0.2.3
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/.vscode/settings.json +64 -65
- package/abi/avoFactoryProxy.json +1 -1
- package/abi/forwarder.json +1 -1
- package/abi/multisigAgnosticForwarder.json +936 -937
- package/abi/multisigForwarder.json +680 -680
- package/app.vue +5 -5
- package/components/ActionLogo.vue +15 -15
- package/components/AuthorityAvatar.vue +8 -6
- package/components/ChainLogo.vue +19 -15
- package/components/CopyClipboard.vue +1 -1
- package/components/metadata/Bridge.vue +22 -23
- package/components/metadata/GasTopup.vue +14 -15
- package/components/metadata/Permit2.vue +12 -13
- package/eslint.config.mjs +14 -0
- package/nuxt.config.ts +4 -0
- package/package.json +5 -5
- package/server/utils/index.ts +4 -4
- package/utils/avocado.ts +17 -17
- package/utils/bignumber.ts +47 -36
- package/utils/formatter.ts +54 -60
- package/utils/helper.ts +33 -30
- package/utils/metadata.ts +366 -403
- package/utils/network.ts +2 -2
- package/utils/services.ts +11 -13
package/utils/metadata.ts
CHANGED
|
@@ -1,292 +1,265 @@
|
|
|
1
|
-
import { ethers, utils } from
|
|
2
|
-
import { Forwarder__factory,
|
|
3
|
-
import { toBN } from
|
|
1
|
+
import { ethers, utils } from 'ethers'
|
|
2
|
+
import { Forwarder__factory, MultisigAgnosticForwarder__factory, MultisigForwarder__factory } from '../contracts'
|
|
3
|
+
import { toBN } from './bignumber'
|
|
4
4
|
|
|
5
5
|
export const MetadataEnums = {
|
|
6
|
-
transfer:
|
|
7
|
-
bridge:
|
|
6
|
+
'transfer': 'transfer',
|
|
7
|
+
'bridge': 'bridge',
|
|
8
8
|
'bridge-v2': 'bridge-v2',
|
|
9
|
-
swap:
|
|
10
|
-
|
|
11
|
-
upgrade:
|
|
12
|
-
dapp:
|
|
13
|
-
deploy:
|
|
14
|
-
permit2:
|
|
15
|
-
|
|
9
|
+
'swap': 'swap',
|
|
10
|
+
'gas-topup': 'gas-topup',
|
|
11
|
+
'upgrade': 'upgrade',
|
|
12
|
+
'dapp': 'dapp',
|
|
13
|
+
'deploy': 'deploy',
|
|
14
|
+
'permit2': 'permit2',
|
|
15
|
+
'cross-transfer': 'cross-transfer',
|
|
16
16
|
'cross-transfer-v2': 'cross-transfer-v2',
|
|
17
|
-
auth:
|
|
18
|
-
rejection:
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
import:
|
|
24
|
-
mass:
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
} as const
|
|
28
|
-
|
|
29
|
-
const multiMetadataTypes = [
|
|
30
|
-
|
|
31
|
-
const metadataTypes = [
|
|
17
|
+
'auth': 'auth',
|
|
18
|
+
'rejection': 'rejection',
|
|
19
|
+
'instadapp-pro': 'instadapp-pro',
|
|
20
|
+
'add-signers': 'add-signers',
|
|
21
|
+
'remove-signers': 'remove-signers',
|
|
22
|
+
'change-threshold': 'change-threshold',
|
|
23
|
+
'import': 'import',
|
|
24
|
+
'mass': 'mass',
|
|
25
|
+
'tx-builder': 'tx-builder',
|
|
26
|
+
'avocado-bridge': 'avocado-bridge',
|
|
27
|
+
} as const
|
|
28
|
+
|
|
29
|
+
const multiMetadataTypes = ['bytes[]']
|
|
30
|
+
|
|
31
|
+
const metadataTypes = ['bytes32 type', 'uint8 version', 'bytes data']
|
|
32
32
|
|
|
33
33
|
const actionMetadataTypes: Record<MetadataTypes, string[]> = {
|
|
34
|
-
transfer: [
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
34
|
+
'transfer': ['address token', 'uint256 amount', 'address receiver'],
|
|
35
|
+
'cross-transfer': [
|
|
36
|
+
'address fromToken',
|
|
37
|
+
'address toToken',
|
|
38
|
+
'uint256 toChainId',
|
|
39
|
+
'uint256 amount',
|
|
40
|
+
'address receiver',
|
|
41
41
|
],
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
42
|
+
'cross-transfer-v2': [
|
|
43
|
+
'address fromToken',
|
|
44
|
+
'address toToken',
|
|
45
|
+
'uint256 toChainId',
|
|
46
|
+
'uint256 amount',
|
|
47
|
+
'address receiver',
|
|
48
|
+
'bytes32 provider',
|
|
49
49
|
],
|
|
50
|
-
bridge: [
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
50
|
+
'bridge': [
|
|
51
|
+
'uint256 amount',
|
|
52
|
+
'address receiver',
|
|
53
|
+
'address fromToken',
|
|
54
|
+
'address toToken',
|
|
55
|
+
'uint256 toChainId',
|
|
56
|
+
'uint256 bridgeFee',
|
|
57
|
+
'address nativeToken',
|
|
58
58
|
],
|
|
59
59
|
'bridge-v2': [
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
60
|
+
'uint256 amount',
|
|
61
|
+
'address receiver',
|
|
62
|
+
'address fromToken',
|
|
63
|
+
'address toToken',
|
|
64
|
+
'uint256 toChainId',
|
|
65
|
+
'uint256 bridgeFee',
|
|
66
|
+
'address nativeToken',
|
|
67
|
+
'bytes32 provider',
|
|
68
68
|
],
|
|
69
|
-
swap: [
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
69
|
+
'swap': [
|
|
70
|
+
'address sellToken',
|
|
71
|
+
'address buyToken',
|
|
72
|
+
'uint256 sellAmount',
|
|
73
|
+
'uint256 buyAmount',
|
|
74
|
+
'address receiver',
|
|
75
|
+
'bytes32 protocol',
|
|
76
76
|
],
|
|
77
|
-
|
|
78
|
-
upgrade: [
|
|
79
|
-
dapp: [
|
|
80
|
-
import: [
|
|
81
|
-
auth: [
|
|
82
|
-
deploy: [],
|
|
83
|
-
|
|
84
|
-
permit2: [
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
77
|
+
'gas-topup': ['uint256 amount', 'address token', 'address onBehalf'],
|
|
78
|
+
'upgrade': ['bytes32 version', 'address walletImpl'],
|
|
79
|
+
'dapp': ['string name', 'string url'],
|
|
80
|
+
'import': ['bytes32 protocol', 'uint256 valueInUsd'],
|
|
81
|
+
'auth': ['address address', 'uint256 chainId', 'bool remove'],
|
|
82
|
+
'deploy': [],
|
|
83
|
+
'tx-builder': ['bytes32 actionCount'],
|
|
84
|
+
'permit2': [
|
|
85
|
+
'address token',
|
|
86
|
+
'address spender',
|
|
87
|
+
'uint160 amount',
|
|
88
|
+
'uint48 expiration',
|
|
89
89
|
],
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
rejection: [
|
|
95
|
-
|
|
96
|
-
mass: [
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
|
|
90
|
+
'instadapp-pro': ['string castDetails'],
|
|
91
|
+
'add-signers': ['address[] signers'],
|
|
92
|
+
'remove-signers': ['address[] signers'],
|
|
93
|
+
'change-threshold': ['uint8 count'],
|
|
94
|
+
'rejection': ['bytes32 id'],
|
|
95
|
+
'avocado-bridge': ['bytes32 id', 'uint256 toChainId'],
|
|
96
|
+
'mass': ['bool isMass'],
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
function encodeMetadata(props: MetadataProps) {
|
|
100
100
|
return ethers.utils.defaultAbiCoder.encode(metadataTypes, [
|
|
101
101
|
ethers.utils.formatBytes32String(props.type),
|
|
102
|
-
props.version ||
|
|
102
|
+
props.version || '1',
|
|
103
103
|
props.encodedData,
|
|
104
|
-
])
|
|
105
|
-
}
|
|
104
|
+
])
|
|
105
|
+
}
|
|
106
106
|
|
|
107
|
-
export
|
|
108
|
-
params: DappMetadataProps,
|
|
109
|
-
single = true
|
|
110
|
-
) => {
|
|
107
|
+
export function encodeDappMetadata(params: DappMetadataProps, single = true) {
|
|
111
108
|
const encodedData = ethers.utils.defaultAbiCoder.encode(
|
|
112
109
|
actionMetadataTypes.dapp,
|
|
113
|
-
[params.name, params.url]
|
|
114
|
-
)
|
|
110
|
+
[params.name, params.url],
|
|
111
|
+
)
|
|
115
112
|
|
|
116
113
|
const data = encodeMetadata({
|
|
117
114
|
type: MetadataEnums.dapp,
|
|
118
115
|
encodedData,
|
|
119
|
-
})
|
|
116
|
+
})
|
|
120
117
|
|
|
121
|
-
return single ? encodeMultipleActions(data) : data
|
|
122
|
-
}
|
|
118
|
+
return single ? encodeMultipleActions(data) : data
|
|
119
|
+
}
|
|
123
120
|
|
|
124
|
-
export
|
|
125
|
-
id: string,
|
|
126
|
-
toChainId: string | number,
|
|
127
|
-
single = true
|
|
128
|
-
) => {
|
|
121
|
+
export function encodeAvocadoBridgeMetadata(id: string, toChainId: string | number, single = true) {
|
|
129
122
|
const encodedData = ethers.utils.defaultAbiCoder.encode(
|
|
130
|
-
actionMetadataTypes[
|
|
131
|
-
[id, toChainId]
|
|
132
|
-
)
|
|
123
|
+
actionMetadataTypes['avocado-bridge'],
|
|
124
|
+
[id, toChainId],
|
|
125
|
+
)
|
|
133
126
|
|
|
134
127
|
const data = encodeMetadata({
|
|
135
|
-
type: MetadataEnums[
|
|
128
|
+
type: MetadataEnums['avocado-bridge'],
|
|
136
129
|
encodedData,
|
|
137
|
-
})
|
|
130
|
+
})
|
|
138
131
|
|
|
139
|
-
return single ? encodeMultipleActions(data) : data
|
|
140
|
-
}
|
|
132
|
+
return single ? encodeMultipleActions(data) : data
|
|
133
|
+
}
|
|
141
134
|
|
|
142
|
-
export
|
|
143
|
-
params: SendMetadataProps,
|
|
144
|
-
single = true
|
|
145
|
-
) => {
|
|
135
|
+
export function encodeTransferMetadata(params: SendMetadataProps, single = true) {
|
|
146
136
|
const encodedData = ethers.utils.defaultAbiCoder.encode(
|
|
147
137
|
actionMetadataTypes.transfer,
|
|
148
|
-
[params.token, params.amount, params.receiver]
|
|
149
|
-
)
|
|
138
|
+
[params.token, params.amount, params.receiver],
|
|
139
|
+
)
|
|
150
140
|
|
|
151
141
|
const data = encodeMetadata({
|
|
152
142
|
type: MetadataEnums.transfer,
|
|
153
143
|
encodedData,
|
|
154
|
-
})
|
|
144
|
+
})
|
|
155
145
|
|
|
156
|
-
return single ? encodeMultipleActions(data) : data
|
|
157
|
-
}
|
|
146
|
+
return single ? encodeMultipleActions(data) : data
|
|
147
|
+
}
|
|
158
148
|
|
|
159
|
-
export
|
|
149
|
+
export function encodeRejectionMetadata(id: string, single = true) {
|
|
160
150
|
const encodedData = ethers.utils.defaultAbiCoder.encode(
|
|
161
151
|
actionMetadataTypes.rejection,
|
|
162
|
-
[id]
|
|
163
|
-
)
|
|
152
|
+
[id],
|
|
153
|
+
)
|
|
164
154
|
|
|
165
155
|
const data = encodeMetadata({
|
|
166
156
|
type: MetadataEnums.rejection,
|
|
167
157
|
encodedData,
|
|
168
|
-
})
|
|
169
|
-
|
|
170
|
-
return single ? encodeMultipleActions(data) : data;
|
|
171
|
-
};
|
|
158
|
+
})
|
|
172
159
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
single = true
|
|
176
|
-
) => {
|
|
160
|
+
return single ? encodeMultipleActions(data) : data
|
|
161
|
+
}
|
|
177
162
|
|
|
178
|
-
|
|
163
|
+
export function encodeCrossTransferMetadata(params: CrossSendMetadataProps, single = true) {
|
|
164
|
+
const type = params.provider ? MetadataEnums['cross-transfer-v2'] : MetadataEnums['cross-transfer']
|
|
179
165
|
|
|
180
|
-
const encodedData = params.provider
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
166
|
+
const encodedData = params.provider
|
|
167
|
+
? ethers.utils.defaultAbiCoder.encode(
|
|
168
|
+
actionMetadataTypes[type],
|
|
169
|
+
[
|
|
170
|
+
params.fromToken,
|
|
171
|
+
params.toToken,
|
|
172
|
+
params.toChainId,
|
|
173
|
+
params.amount,
|
|
174
|
+
params.receiver,
|
|
175
|
+
params.provider,
|
|
176
|
+
],
|
|
177
|
+
)
|
|
178
|
+
: ethers.utils.defaultAbiCoder.encode(
|
|
179
|
+
actionMetadataTypes[type],
|
|
180
|
+
[
|
|
181
|
+
params.fromToken,
|
|
182
|
+
params.toToken,
|
|
183
|
+
params.toChainId,
|
|
184
|
+
params.amount,
|
|
185
|
+
params.receiver,
|
|
186
|
+
],
|
|
187
|
+
)
|
|
200
188
|
|
|
201
189
|
const data = encodeMetadata({
|
|
202
190
|
type: MetadataEnums[type],
|
|
203
191
|
encodedData,
|
|
204
|
-
})
|
|
192
|
+
})
|
|
205
193
|
|
|
206
|
-
return single ? encodeMultipleActions(data) : data
|
|
207
|
-
}
|
|
194
|
+
return single ? encodeMultipleActions(data) : data
|
|
195
|
+
}
|
|
208
196
|
|
|
209
|
-
export
|
|
210
|
-
params: AuthMetadataProps,
|
|
211
|
-
single = true
|
|
212
|
-
) => {
|
|
197
|
+
export function encodeAuthMetadata(params: AuthMetadataProps, single = true) {
|
|
213
198
|
const encodedData = ethers.utils.defaultAbiCoder.encode(
|
|
214
|
-
actionMetadataTypes
|
|
215
|
-
[params.address, params.chainId, params.remove]
|
|
216
|
-
)
|
|
199
|
+
actionMetadataTypes.auth,
|
|
200
|
+
[params.address, params.chainId, params.remove],
|
|
201
|
+
)
|
|
217
202
|
|
|
218
203
|
const data = encodeMetadata({
|
|
219
204
|
type: MetadataEnums.auth,
|
|
220
205
|
encodedData,
|
|
221
|
-
})
|
|
206
|
+
})
|
|
222
207
|
|
|
223
|
-
return single ? encodeMultipleActions(data) : data
|
|
224
|
-
}
|
|
208
|
+
return single ? encodeMultipleActions(data) : data
|
|
209
|
+
}
|
|
225
210
|
|
|
226
|
-
export
|
|
211
|
+
export function encodeDeployMetadata(single = true) {
|
|
227
212
|
const data = encodeMetadata({
|
|
228
213
|
type: MetadataEnums.deploy,
|
|
229
|
-
encodedData:
|
|
230
|
-
})
|
|
214
|
+
encodedData: '0x',
|
|
215
|
+
})
|
|
231
216
|
|
|
232
|
-
return single ? encodeMultipleActions(data) : data
|
|
233
|
-
}
|
|
217
|
+
return single ? encodeMultipleActions(data) : data
|
|
218
|
+
}
|
|
234
219
|
|
|
235
|
-
export
|
|
236
|
-
actionCount: string,
|
|
237
|
-
single = true
|
|
238
|
-
) => {
|
|
220
|
+
export function encodeTransactionBuilderMetadata(actionCount: string, single = true) {
|
|
239
221
|
const encodedData = ethers.utils.defaultAbiCoder.encode(
|
|
240
|
-
actionMetadataTypes[
|
|
241
|
-
[actionCount]
|
|
242
|
-
)
|
|
222
|
+
actionMetadataTypes['tx-builder'],
|
|
223
|
+
[actionCount],
|
|
224
|
+
)
|
|
243
225
|
|
|
244
226
|
const data = encodeMetadata({
|
|
245
|
-
type: MetadataEnums[
|
|
227
|
+
type: MetadataEnums['tx-builder'],
|
|
246
228
|
encodedData,
|
|
247
|
-
})
|
|
229
|
+
})
|
|
248
230
|
|
|
249
|
-
return single ? encodeMultipleActions(data) : data
|
|
250
|
-
}
|
|
231
|
+
return single ? encodeMultipleActions(data) : data
|
|
232
|
+
}
|
|
251
233
|
|
|
252
|
-
export
|
|
253
|
-
params: SignMetadataProps,
|
|
254
|
-
single = true
|
|
255
|
-
) => {
|
|
234
|
+
export function encodeWCSignMetadata(params: SignMetadataProps, single = true) {
|
|
256
235
|
const encodedData = ethers.utils.defaultAbiCoder.encode(
|
|
257
|
-
actionMetadataTypes
|
|
258
|
-
[params.token, params.spender, params.amount, params.expiration]
|
|
259
|
-
)
|
|
236
|
+
actionMetadataTypes.permit2,
|
|
237
|
+
[params.token, params.spender, params.amount, params.expiration],
|
|
238
|
+
)
|
|
260
239
|
|
|
261
240
|
const data = encodeMetadata({
|
|
262
241
|
type: MetadataEnums.permit2,
|
|
263
242
|
encodedData,
|
|
264
|
-
})
|
|
243
|
+
})
|
|
265
244
|
|
|
266
|
-
return single ? encodeMultipleActions(data) : data
|
|
267
|
-
}
|
|
245
|
+
return single ? encodeMultipleActions(data) : data
|
|
246
|
+
}
|
|
268
247
|
|
|
269
|
-
export
|
|
270
|
-
params: UpgradeMetadataProps,
|
|
271
|
-
single = true
|
|
272
|
-
) => {
|
|
248
|
+
export function encodeUpgradeMetadata(params: UpgradeMetadataProps, single = true) {
|
|
273
249
|
const encodedData = ethers.utils.defaultAbiCoder.encode(
|
|
274
250
|
actionMetadataTypes.upgrade,
|
|
275
|
-
[params.version, params.walletImpl]
|
|
276
|
-
)
|
|
251
|
+
[params.version, params.walletImpl],
|
|
252
|
+
)
|
|
277
253
|
|
|
278
254
|
const data = encodeMetadata({
|
|
279
255
|
type: MetadataEnums.upgrade,
|
|
280
256
|
encodedData,
|
|
281
|
-
})
|
|
257
|
+
})
|
|
282
258
|
|
|
283
|
-
return single ? encodeMultipleActions(data) : data
|
|
284
|
-
}
|
|
259
|
+
return single ? encodeMultipleActions(data) : data
|
|
260
|
+
}
|
|
285
261
|
|
|
286
|
-
export
|
|
287
|
-
params: SwapMetadataProps,
|
|
288
|
-
single = true
|
|
289
|
-
) => {
|
|
262
|
+
export function encodeSwapMetadata(params: SwapMetadataProps, single = true) {
|
|
290
263
|
const encodedData = ethers.utils.defaultAbiCoder.encode(
|
|
291
264
|
actionMetadataTypes.swap,
|
|
292
265
|
[
|
|
@@ -296,239 +269,227 @@ export const encodeSwapMetadata = (
|
|
|
296
269
|
params.buyAmount,
|
|
297
270
|
params.receiver,
|
|
298
271
|
params.protocol,
|
|
299
|
-
]
|
|
300
|
-
)
|
|
272
|
+
],
|
|
273
|
+
)
|
|
301
274
|
|
|
302
275
|
const data = encodeMetadata({
|
|
303
276
|
type: MetadataEnums.swap,
|
|
304
277
|
encodedData,
|
|
305
|
-
})
|
|
278
|
+
})
|
|
306
279
|
|
|
307
|
-
return single ? encodeMultipleActions(data) : data
|
|
308
|
-
}
|
|
280
|
+
return single ? encodeMultipleActions(data) : data
|
|
281
|
+
}
|
|
309
282
|
|
|
310
|
-
export
|
|
311
|
-
params: TopupMetadataProps,
|
|
312
|
-
single = true
|
|
313
|
-
) => {
|
|
283
|
+
export function encodeTopupMetadata(params: TopupMetadataProps, single = true) {
|
|
314
284
|
const encodedData = ethers.utils.defaultAbiCoder.encode(
|
|
315
|
-
actionMetadataTypes[
|
|
316
|
-
[params.amount, params.token, params.onBehalf]
|
|
317
|
-
)
|
|
285
|
+
actionMetadataTypes['gas-topup'],
|
|
286
|
+
[params.amount, params.token, params.onBehalf],
|
|
287
|
+
)
|
|
318
288
|
|
|
319
289
|
const data = encodeMetadata({
|
|
320
|
-
type: MetadataEnums[
|
|
290
|
+
type: MetadataEnums['gas-topup'],
|
|
321
291
|
encodedData,
|
|
322
|
-
})
|
|
292
|
+
})
|
|
323
293
|
|
|
324
|
-
return single ? encodeMultipleActions(data) : data
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
export const encodeBridgeMetadata = (
|
|
328
|
-
params: BridgeMetadataProps,
|
|
329
|
-
single = true
|
|
330
|
-
) => {
|
|
331
|
-
const type = params.version === '2' ? MetadataEnums["bridge-v2"] : MetadataEnums.bridge
|
|
294
|
+
return single ? encodeMultipleActions(data) : data
|
|
295
|
+
}
|
|
332
296
|
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
297
|
+
export function encodeBridgeMetadata(params: BridgeMetadataProps, single = true) {
|
|
298
|
+
const type = params.version === '2' ? MetadataEnums['bridge-v2'] : MetadataEnums.bridge
|
|
299
|
+
|
|
300
|
+
const encodedData = params.version === '2'
|
|
301
|
+
? ethers.utils.defaultAbiCoder.encode(
|
|
302
|
+
actionMetadataTypes['bridge-v2'],
|
|
303
|
+
[
|
|
304
|
+
params.amount,
|
|
305
|
+
params.receiver,
|
|
306
|
+
params.fromToken,
|
|
307
|
+
params.toToken,
|
|
308
|
+
params.toChainId,
|
|
309
|
+
params.bridgeFee,
|
|
310
|
+
params.nativeToken,
|
|
311
|
+
params.provider,
|
|
312
|
+
],
|
|
313
|
+
)
|
|
314
|
+
: ethers.utils.defaultAbiCoder.encode(
|
|
315
|
+
actionMetadataTypes.bridge,
|
|
316
|
+
[
|
|
317
|
+
params.amount,
|
|
318
|
+
params.receiver,
|
|
319
|
+
params.fromToken,
|
|
320
|
+
params.toToken,
|
|
321
|
+
params.toChainId,
|
|
322
|
+
params.bridgeFee,
|
|
323
|
+
params.nativeToken,
|
|
324
|
+
],
|
|
325
|
+
)
|
|
357
326
|
|
|
358
327
|
const data = encodeMetadata({
|
|
359
328
|
type,
|
|
360
329
|
encodedData,
|
|
361
|
-
})
|
|
330
|
+
})
|
|
362
331
|
|
|
363
|
-
return single ? encodeMultipleActions(data) : data
|
|
364
|
-
}
|
|
332
|
+
return single ? encodeMultipleActions(data) : data
|
|
333
|
+
}
|
|
365
334
|
|
|
366
|
-
export
|
|
367
|
-
threshold: string | number,
|
|
368
|
-
single = true
|
|
369
|
-
) => {
|
|
335
|
+
export function encodeChangeThresholdMetadata(threshold: string | number, single = true) {
|
|
370
336
|
const encodedData = ethers.utils.defaultAbiCoder.encode(
|
|
371
|
-
actionMetadataTypes[
|
|
372
|
-
[toBN(threshold).toNumber()]
|
|
373
|
-
)
|
|
337
|
+
actionMetadataTypes['change-threshold'],
|
|
338
|
+
[toBN(threshold).toNumber()],
|
|
339
|
+
)
|
|
374
340
|
|
|
375
341
|
const data = encodeMetadata({
|
|
376
|
-
type: MetadataEnums[
|
|
342
|
+
type: MetadataEnums['change-threshold'],
|
|
377
343
|
encodedData,
|
|
378
|
-
})
|
|
344
|
+
})
|
|
379
345
|
|
|
380
|
-
return single ? encodeMultipleActions(data) : data
|
|
381
|
-
}
|
|
346
|
+
return single ? encodeMultipleActions(data) : data
|
|
347
|
+
}
|
|
382
348
|
|
|
383
|
-
export
|
|
384
|
-
addresses: string[],
|
|
385
|
-
single = true
|
|
386
|
-
) => {
|
|
349
|
+
export function encodeRemoveSignersMetadata(addresses: string[], single = true) {
|
|
387
350
|
const encodedData = ethers.utils.defaultAbiCoder.encode(
|
|
388
|
-
actionMetadataTypes[
|
|
389
|
-
[addresses]
|
|
390
|
-
)
|
|
351
|
+
actionMetadataTypes['remove-signers'],
|
|
352
|
+
[addresses],
|
|
353
|
+
)
|
|
391
354
|
|
|
392
355
|
const data = encodeMetadata({
|
|
393
|
-
type: MetadataEnums[
|
|
356
|
+
type: MetadataEnums['remove-signers'],
|
|
394
357
|
encodedData,
|
|
395
|
-
})
|
|
358
|
+
})
|
|
396
359
|
|
|
397
|
-
return single ? encodeMultipleActions(data) : data
|
|
398
|
-
}
|
|
360
|
+
return single ? encodeMultipleActions(data) : data
|
|
361
|
+
}
|
|
399
362
|
|
|
400
|
-
export
|
|
401
|
-
protocol: string,
|
|
402
|
-
valueInUsd: string,
|
|
403
|
-
single = true
|
|
404
|
-
) => {
|
|
363
|
+
export function encodeImportMetadata(protocol: string, valueInUsd: string, single = true) {
|
|
405
364
|
const encodedData = ethers.utils.defaultAbiCoder.encode(
|
|
406
|
-
actionMetadataTypes
|
|
407
|
-
[protocol, valueInUsd]
|
|
408
|
-
)
|
|
365
|
+
actionMetadataTypes.import,
|
|
366
|
+
[protocol, valueInUsd],
|
|
367
|
+
)
|
|
409
368
|
|
|
410
369
|
const data = encodeMetadata({
|
|
411
|
-
type: MetadataEnums
|
|
370
|
+
type: MetadataEnums.import,
|
|
412
371
|
encodedData,
|
|
413
|
-
})
|
|
372
|
+
})
|
|
414
373
|
|
|
415
|
-
return single ? encodeMultipleActions(data) : data
|
|
416
|
-
}
|
|
374
|
+
return single ? encodeMultipleActions(data) : data
|
|
375
|
+
}
|
|
417
376
|
|
|
418
|
-
export
|
|
377
|
+
export function encodeMassMetadata(single = true) {
|
|
419
378
|
const data = encodeMetadata({
|
|
420
379
|
type: MetadataEnums.mass,
|
|
421
380
|
encodedData: '0x',
|
|
422
|
-
})
|
|
381
|
+
})
|
|
423
382
|
|
|
424
|
-
return single ? encodeMultipleActions(data) : data
|
|
383
|
+
return single ? encodeMultipleActions(data) : data
|
|
425
384
|
}
|
|
426
385
|
|
|
427
|
-
export
|
|
428
|
-
addresses: string[],
|
|
429
|
-
single = true
|
|
430
|
-
) => {
|
|
386
|
+
export function encodeAddSignersMetadata(addresses: string[], single = true) {
|
|
431
387
|
const encodedData = ethers.utils.defaultAbiCoder.encode(
|
|
432
|
-
actionMetadataTypes[
|
|
433
|
-
[addresses]
|
|
434
|
-
)
|
|
388
|
+
actionMetadataTypes['add-signers'],
|
|
389
|
+
[addresses],
|
|
390
|
+
)
|
|
435
391
|
|
|
436
392
|
const data = encodeMetadata({
|
|
437
|
-
type: MetadataEnums[
|
|
393
|
+
type: MetadataEnums['add-signers'],
|
|
438
394
|
encodedData,
|
|
439
|
-
})
|
|
395
|
+
})
|
|
440
396
|
|
|
441
|
-
return single ? encodeMultipleActions(data) : data
|
|
442
|
-
}
|
|
397
|
+
return single ? encodeMultipleActions(data) : data
|
|
398
|
+
}
|
|
443
399
|
|
|
444
|
-
export
|
|
445
|
-
return ethers.utils.defaultAbiCoder.encode(multiMetadataTypes, [actionData])
|
|
446
|
-
}
|
|
400
|
+
export function encodeMultipleActions(...actionData: string[]) {
|
|
401
|
+
return ethers.utils.defaultAbiCoder.encode(multiMetadataTypes, [actionData])
|
|
402
|
+
}
|
|
447
403
|
|
|
448
|
-
export
|
|
404
|
+
export function decodeData(data: string) {
|
|
449
405
|
try {
|
|
450
|
-
const metadata = getMetadataFromData(data) ||
|
|
406
|
+
const metadata = getMetadataFromData(data) || '0x'
|
|
451
407
|
|
|
452
|
-
return parseMetadata(metadata)
|
|
453
|
-
}
|
|
408
|
+
return parseMetadata(metadata)
|
|
409
|
+
}
|
|
410
|
+
catch {
|
|
454
411
|
// console.log(e);
|
|
455
|
-
return null
|
|
412
|
+
return null
|
|
456
413
|
}
|
|
457
|
-
}
|
|
414
|
+
}
|
|
458
415
|
|
|
459
|
-
export
|
|
416
|
+
export function decodeMetadata(metadata: string) {
|
|
460
417
|
try {
|
|
461
|
-
return parseMetadata(metadata)
|
|
462
|
-
} catch (e) {
|
|
463
|
-
return null;
|
|
418
|
+
return parseMetadata(metadata)
|
|
464
419
|
}
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
const ifaceAgnostic = MultisigAgnosticForwarder__factory.createInterface();
|
|
470
|
-
|
|
471
|
-
const getMetadataFromData = (data: string) => {
|
|
472
|
-
let metadata = "0x";
|
|
420
|
+
catch {
|
|
421
|
+
return null
|
|
422
|
+
}
|
|
423
|
+
}
|
|
473
424
|
|
|
474
|
-
|
|
425
|
+
const iface = Forwarder__factory.createInterface()
|
|
426
|
+
const ifaceMultisig = MultisigForwarder__factory.createInterface()
|
|
427
|
+
const ifaceAgnostic = MultisigAgnosticForwarder__factory.createInterface()
|
|
475
428
|
|
|
476
|
-
|
|
429
|
+
function getMetadataFromData(data: string) {
|
|
430
|
+
let metadata = '0x'
|
|
477
431
|
|
|
432
|
+
if (data.startsWith('0xc5e15557')) {
|
|
433
|
+
const executeData = ifaceAgnostic.decodeFunctionData('executeChainAgnosticV1', data)
|
|
478
434
|
|
|
479
435
|
const metadata = executeData?.params_?.params?.metadata
|
|
480
436
|
|
|
481
437
|
return metadata === '0x' || !metadata ? null : metadata
|
|
482
438
|
}
|
|
483
439
|
|
|
484
|
-
else if (data.startsWith(
|
|
485
|
-
const executeData = iface.decodeFunctionData(
|
|
486
|
-
if (executeData.metadata_ ===
|
|
487
|
-
return null
|
|
488
|
-
}
|
|
489
|
-
|
|
440
|
+
else if (data.startsWith('0x18e7f485')) {
|
|
441
|
+
const executeData = iface.decodeFunctionData('execute', data)
|
|
442
|
+
if (executeData.metadata_ === '0x' || !executeData.metadata_) {
|
|
443
|
+
return null
|
|
444
|
+
}
|
|
445
|
+
else {
|
|
446
|
+
metadata = executeData.metadata_
|
|
490
447
|
}
|
|
491
|
-
}
|
|
492
|
-
|
|
448
|
+
}
|
|
449
|
+
else if (data.startsWith('0x14f80a8d')) {
|
|
450
|
+
const executeDataV2 = iface.decodeFunctionData('executeV2', data)
|
|
493
451
|
if (
|
|
494
|
-
executeDataV2.params_.metadata ===
|
|
495
|
-
!executeDataV2.params_.metadata
|
|
452
|
+
executeDataV2.params_.metadata === '0x'
|
|
453
|
+
|| !executeDataV2.params_.metadata
|
|
496
454
|
) {
|
|
497
|
-
return null
|
|
498
|
-
}
|
|
499
|
-
|
|
455
|
+
return null
|
|
456
|
+
}
|
|
457
|
+
else {
|
|
458
|
+
metadata = executeDataV2.params_.metadata
|
|
500
459
|
}
|
|
501
|
-
}
|
|
460
|
+
}
|
|
461
|
+
else {
|
|
502
462
|
const executeDataMultisig = ifaceMultisig.decodeFunctionData(
|
|
503
|
-
|
|
504
|
-
data
|
|
505
|
-
)
|
|
463
|
+
'executeV1',
|
|
464
|
+
data,
|
|
465
|
+
)
|
|
506
466
|
if (
|
|
507
|
-
executeDataMultisig.params_.metadata ===
|
|
508
|
-
!executeDataMultisig.params_.metadata
|
|
467
|
+
executeDataMultisig.params_.metadata === '0x'
|
|
468
|
+
|| !executeDataMultisig.params_.metadata
|
|
509
469
|
) {
|
|
510
|
-
return null
|
|
511
|
-
}
|
|
512
|
-
|
|
470
|
+
return null
|
|
471
|
+
}
|
|
472
|
+
else {
|
|
473
|
+
metadata = executeDataMultisig.params_.metadata
|
|
513
474
|
}
|
|
514
475
|
}
|
|
515
476
|
|
|
516
|
-
return metadata
|
|
517
|
-
}
|
|
477
|
+
return metadata
|
|
478
|
+
}
|
|
518
479
|
|
|
519
480
|
const typesPayload: IPayload = {
|
|
520
|
-
import: (data, type) => ({
|
|
481
|
+
'import': (data, type) => ({
|
|
521
482
|
type,
|
|
522
|
-
protocol: utils.parseBytes32String(data.protocol ||
|
|
483
|
+
protocol: utils.parseBytes32String(data.protocol || ''),
|
|
523
484
|
valueInUsd: toBN(data.valueInUsd).toFixed(),
|
|
524
485
|
}),
|
|
525
|
-
transfer: (data, type) => ({
|
|
486
|
+
'transfer': (data, type) => ({
|
|
526
487
|
type,
|
|
527
488
|
token: data.token,
|
|
528
489
|
amount: toBN(data.amount).toFixed(),
|
|
529
490
|
receiver: data.receiver,
|
|
530
491
|
}),
|
|
531
|
-
bridge: (data, type) => ({
|
|
492
|
+
'bridge': (data, type) => ({
|
|
532
493
|
type,
|
|
533
494
|
amount: toBN(data.amount).toFixed(),
|
|
534
495
|
receiver: data.receiver,
|
|
@@ -537,7 +498,7 @@ const typesPayload: IPayload = {
|
|
|
537
498
|
toChainId: data.toChainId ? data.toChainId.toString() : null,
|
|
538
499
|
bridgeFee: toBN(data.bridgeFee).toFixed(),
|
|
539
500
|
}),
|
|
540
|
-
'bridge-v2':
|
|
501
|
+
'bridge-v2': data => ({
|
|
541
502
|
type: 'bridge',
|
|
542
503
|
amount: toBN(data.amount).toFixed(),
|
|
543
504
|
receiver: data.receiver,
|
|
@@ -545,48 +506,48 @@ const typesPayload: IPayload = {
|
|
|
545
506
|
fromToken: data.fromToken,
|
|
546
507
|
toChainId: data.toChainId ? data.toChainId.toString() : null,
|
|
547
508
|
bridgeFee: toBN(data.bridgeFee).toFixed(),
|
|
548
|
-
provider: utils.parseBytes32String(data.provider ||
|
|
509
|
+
provider: utils.parseBytes32String(data.provider || ''),
|
|
549
510
|
}),
|
|
550
|
-
swap: (data, type) => ({
|
|
511
|
+
'swap': (data, type) => ({
|
|
551
512
|
type,
|
|
552
513
|
buyAmount: toBN(data.buyAmount).toFixed(),
|
|
553
514
|
sellAmount: toBN(data.sellAmount).toFixed(),
|
|
554
515
|
buyToken: data.buyToken,
|
|
555
516
|
sellToken: data.sellToken,
|
|
556
517
|
receiver: data.receiver,
|
|
557
|
-
protocol: utils.parseBytes32String(data.protocol ||
|
|
518
|
+
protocol: utils.parseBytes32String(data.protocol || ''),
|
|
558
519
|
}),
|
|
559
|
-
upgrade: (data, type) => ({
|
|
520
|
+
'upgrade': (data, type) => ({
|
|
560
521
|
type,
|
|
561
|
-
version: utils.parseBytes32String(data.version ||
|
|
522
|
+
version: utils.parseBytes32String(data.version || ''),
|
|
562
523
|
walletImpl: data.walletImpl,
|
|
563
524
|
}),
|
|
564
|
-
|
|
525
|
+
'gas-topup': (data, type) => ({
|
|
565
526
|
type,
|
|
566
527
|
amount: toBN(data.amount).toFixed(),
|
|
567
528
|
token: data.token,
|
|
568
529
|
onBehalf: data.onBehalf,
|
|
569
530
|
}),
|
|
570
|
-
dapp: (data, type) => ({
|
|
531
|
+
'dapp': (data, type) => ({
|
|
571
532
|
type,
|
|
572
533
|
name: data.name,
|
|
573
534
|
url: data.url,
|
|
574
535
|
}),
|
|
575
|
-
deploy: (data, type) => ({
|
|
536
|
+
'deploy': (data, type) => ({
|
|
576
537
|
type,
|
|
577
538
|
}),
|
|
578
|
-
|
|
539
|
+
'tx-builder': (data, type) => ({
|
|
579
540
|
type,
|
|
580
|
-
actionCount: utils.parseBytes32String(data.actionCount ||
|
|
541
|
+
actionCount: utils.parseBytes32String(data.actionCount || ''),
|
|
581
542
|
}),
|
|
582
|
-
permit2: (data, type) => ({
|
|
543
|
+
'permit2': (data, type) => ({
|
|
583
544
|
type,
|
|
584
545
|
token: data.token,
|
|
585
546
|
spender: data.spender,
|
|
586
547
|
amount: toBN(data.amount).toFixed(),
|
|
587
548
|
expiration: data.expiration,
|
|
588
549
|
}),
|
|
589
|
-
|
|
550
|
+
'cross-transfer': (data, type) => ({
|
|
590
551
|
type,
|
|
591
552
|
fromToken: data.fromToken,
|
|
592
553
|
toToken: data.toToken,
|
|
@@ -594,86 +555,88 @@ const typesPayload: IPayload = {
|
|
|
594
555
|
amount: toBN(data.amount).toFixed(),
|
|
595
556
|
receiver: data.receiver,
|
|
596
557
|
}),
|
|
597
|
-
|
|
558
|
+
'cross-transfer-v2': data => ({
|
|
598
559
|
type: 'cross-transfer',
|
|
599
560
|
fromToken: data.fromToken,
|
|
600
561
|
toToken: data.toToken,
|
|
601
562
|
toChainId: data.toChainId ? data.toChainId.toString() : null,
|
|
602
563
|
amount: toBN(data.amount).toFixed(),
|
|
603
564
|
receiver: data.receiver,
|
|
604
|
-
provider: utils.parseBytes32String(data.provider ||
|
|
565
|
+
provider: utils.parseBytes32String(data.provider || ''),
|
|
605
566
|
}),
|
|
606
|
-
auth:
|
|
607
|
-
type: data.remove ?
|
|
567
|
+
'auth': data => ({
|
|
568
|
+
type: data.remove ? 'remove-authority' : 'add-authority',
|
|
608
569
|
address: data.address,
|
|
609
570
|
chainId: data.chainId ? data.chainId.toString() : null,
|
|
610
571
|
remove: data.remove,
|
|
611
572
|
}),
|
|
612
|
-
|
|
573
|
+
'instadapp-pro': (data, type) => ({
|
|
613
574
|
type,
|
|
614
575
|
castDetails: data.castDetails,
|
|
615
576
|
}),
|
|
616
|
-
rejection: (data, type) => ({
|
|
577
|
+
'rejection': (data, type) => ({
|
|
617
578
|
type,
|
|
618
579
|
id: data.id,
|
|
619
580
|
}),
|
|
620
|
-
|
|
581
|
+
'add-signers': (data, type) => ({
|
|
621
582
|
type,
|
|
622
583
|
addresses: data.signers,
|
|
623
584
|
}),
|
|
624
|
-
|
|
585
|
+
'remove-signers': (data, type) => ({
|
|
625
586
|
type,
|
|
626
587
|
addresses: data.signers,
|
|
627
588
|
}),
|
|
628
|
-
|
|
589
|
+
'change-threshold': (data, type) => ({
|
|
629
590
|
type,
|
|
630
591
|
count: data.count,
|
|
631
592
|
}),
|
|
632
|
-
|
|
593
|
+
'avocado-bridge': (data, type) => ({
|
|
633
594
|
type,
|
|
634
595
|
id: data.id,
|
|
635
596
|
toChainId: data.toChainId ? data.toChainId.toString() : null,
|
|
636
597
|
}),
|
|
637
|
-
mass: (data, type) => ({
|
|
598
|
+
'mass': (data, type) => ({
|
|
638
599
|
type,
|
|
639
600
|
data,
|
|
640
601
|
}),
|
|
641
|
-
}
|
|
602
|
+
}
|
|
642
603
|
|
|
643
|
-
|
|
644
|
-
const metadataArr = []
|
|
604
|
+
function parseMetadata(metadata: string) {
|
|
605
|
+
const metadataArr = []
|
|
645
606
|
|
|
646
|
-
const [decodedMultiMetadata = []]
|
|
647
|
-
(ethers.utils.defaultAbiCoder.decode(
|
|
607
|
+
const [decodedMultiMetadata = []]
|
|
608
|
+
= (ethers.utils.defaultAbiCoder.decode(
|
|
648
609
|
multiMetadataTypes,
|
|
649
|
-
metadata
|
|
650
|
-
) as string[]) || []
|
|
610
|
+
metadata,
|
|
611
|
+
) as string[]) || []
|
|
651
612
|
|
|
652
|
-
for (
|
|
613
|
+
for (const metadata of decodedMultiMetadata) {
|
|
653
614
|
const decodedMetadata = ethers.utils.defaultAbiCoder.decode(
|
|
654
615
|
metadataTypes,
|
|
655
|
-
metadata
|
|
656
|
-
)
|
|
616
|
+
metadata,
|
|
617
|
+
)
|
|
657
618
|
|
|
658
619
|
const type = ethers.utils.parseBytes32String(
|
|
659
|
-
decodedMetadata.type
|
|
660
|
-
) as keyof typeof actionMetadataTypes
|
|
620
|
+
decodedMetadata.type,
|
|
621
|
+
) as keyof typeof actionMetadataTypes
|
|
661
622
|
|
|
662
|
-
const decodedData = decodedMetadata?.data === '0x'
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
623
|
+
const decodedData = decodedMetadata?.data === '0x'
|
|
624
|
+
? ''
|
|
625
|
+
: ethers.utils.defaultAbiCoder.decode(
|
|
626
|
+
actionMetadataTypes[type],
|
|
627
|
+
decodedMetadata.data,
|
|
628
|
+
)
|
|
666
629
|
|
|
667
|
-
const payloadFunc = typesPayload[type]
|
|
630
|
+
const payloadFunc = typesPayload[type]
|
|
668
631
|
|
|
669
632
|
if (payloadFunc) {
|
|
670
|
-
const payload = payloadFunc(decodedData, type)
|
|
671
|
-
metadataArr.push(payload)
|
|
633
|
+
const payload = payloadFunc(decodedData, type)
|
|
634
|
+
metadataArr.push(payload)
|
|
672
635
|
}
|
|
673
636
|
}
|
|
674
637
|
|
|
675
|
-
return metadataArr
|
|
676
|
-
}
|
|
638
|
+
return metadataArr
|
|
639
|
+
}
|
|
677
640
|
|
|
678
641
|
/**
|
|
679
642
|
* Replaces hyphens with spaces and capitalizes the first letter of each word in a sentence.
|
|
@@ -681,14 +644,14 @@ const parseMetadata = (metadata: string) => {
|
|
|
681
644
|
*
|
|
682
645
|
* @returns {string} - The modified sentence with hyphens replaced with spaces and the first letter of each word capitalized.
|
|
683
646
|
*/
|
|
684
|
-
export
|
|
685
|
-
if(txType === 'mass') {
|
|
686
|
-
return
|
|
647
|
+
export function formatTxType(txType: string) {
|
|
648
|
+
if (txType === 'mass') {
|
|
649
|
+
return 'Chain Agnostic Payments'
|
|
687
650
|
}
|
|
688
651
|
|
|
689
652
|
const finalSentence = txType
|
|
690
|
-
.replace(
|
|
691
|
-
.replace(/(^\w
|
|
653
|
+
.replace('-', ' ')
|
|
654
|
+
.replace(/(^\w)|(\s+\w)/g, letter => letter.toUpperCase())
|
|
692
655
|
|
|
693
|
-
return finalSentence
|
|
694
|
-
}
|
|
656
|
+
return finalSentence
|
|
657
|
+
}
|