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