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