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