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