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