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