@instadapp/avocado-base 0.0.0-dev.991c44c → 0.0.0-dev.9c7000a
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 +43 -31
- 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 -55
- package/components/metadata/Swap.vue +45 -53
- package/components/metadata/Transfer.vue +25 -27
- package/contracts/MultisigAgnosticForwarder.ts +1423 -0
- package/contracts/factories/MultisigAgnosticForwarder__factory.ts +2135 -0
- package/contracts/factories/index.ts +1 -0
- package/contracts/index.ts +2 -0
- package/eslint.config.mjs +34 -0
- package/nuxt.config.ts +21 -12
- package/package.json +14 -14
- package/server/utils/index.ts +4 -4
- package/utils/avocado.ts +17 -17
- package/utils/bignumber.ts +47 -36
- package/utils/formatter.ts +55 -61
- package/utils/helper.ts +33 -30
- package/utils/metadata.ts +421 -328
- package/utils/network.ts +517 -232
- package/utils/services.ts +11 -13
- package/utils/utils.d.ts +118 -102
package/utils/metadata.ts
CHANGED
|
@@ -1,229 +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
|
+
})
|
|
216
|
+
|
|
217
|
+
return single ? encodeMultipleActions(data) : data
|
|
218
|
+
}
|
|
176
219
|
|
|
177
|
-
|
|
178
|
-
|
|
220
|
+
export function encodeTransactionBuilderMetadata(actionCount: string, single = true) {
|
|
221
|
+
const encodedData = ethers.utils.defaultAbiCoder.encode(
|
|
222
|
+
actionMetadataTypes['tx-builder'],
|
|
223
|
+
[actionCount],
|
|
224
|
+
)
|
|
179
225
|
|
|
180
|
-
export const encodeTransactionBuilderMetadata = (single = true) => {
|
|
181
226
|
const data = encodeMetadata({
|
|
182
|
-
type: MetadataEnums[
|
|
183
|
-
encodedData
|
|
184
|
-
})
|
|
227
|
+
type: MetadataEnums['tx-builder'],
|
|
228
|
+
encodedData,
|
|
229
|
+
})
|
|
185
230
|
|
|
186
|
-
return single ? encodeMultipleActions(data) : data
|
|
187
|
-
}
|
|
231
|
+
return single ? encodeMultipleActions(data) : data
|
|
232
|
+
}
|
|
188
233
|
|
|
189
|
-
export
|
|
190
|
-
params: SignMetadataProps,
|
|
191
|
-
single = true
|
|
192
|
-
) => {
|
|
234
|
+
export function encodeWCSignMetadata(params: SignMetadataProps, single = true) {
|
|
193
235
|
const encodedData = ethers.utils.defaultAbiCoder.encode(
|
|
194
|
-
actionMetadataTypes
|
|
195
|
-
[params.token, params.spender, params.amount, params.expiration]
|
|
196
|
-
)
|
|
236
|
+
actionMetadataTypes.permit2,
|
|
237
|
+
[params.token, params.spender, params.amount, params.expiration],
|
|
238
|
+
)
|
|
197
239
|
|
|
198
240
|
const data = encodeMetadata({
|
|
199
241
|
type: MetadataEnums.permit2,
|
|
200
242
|
encodedData,
|
|
201
|
-
})
|
|
243
|
+
})
|
|
202
244
|
|
|
203
|
-
return single ? encodeMultipleActions(data) : data
|
|
204
|
-
}
|
|
245
|
+
return single ? encodeMultipleActions(data) : data
|
|
246
|
+
}
|
|
205
247
|
|
|
206
|
-
export
|
|
207
|
-
params: UpgradeMetadataProps,
|
|
208
|
-
single = true
|
|
209
|
-
) => {
|
|
248
|
+
export function encodeUpgradeMetadata(params: UpgradeMetadataProps, single = true) {
|
|
210
249
|
const encodedData = ethers.utils.defaultAbiCoder.encode(
|
|
211
250
|
actionMetadataTypes.upgrade,
|
|
212
|
-
[params.version, params.walletImpl]
|
|
213
|
-
)
|
|
251
|
+
[params.version, params.walletImpl],
|
|
252
|
+
)
|
|
214
253
|
|
|
215
254
|
const data = encodeMetadata({
|
|
216
255
|
type: MetadataEnums.upgrade,
|
|
217
256
|
encodedData,
|
|
218
|
-
})
|
|
257
|
+
})
|
|
219
258
|
|
|
220
|
-
return single ? encodeMultipleActions(data) : data
|
|
221
|
-
}
|
|
259
|
+
return single ? encodeMultipleActions(data) : data
|
|
260
|
+
}
|
|
222
261
|
|
|
223
|
-
export
|
|
224
|
-
params: SwapMetadataProps,
|
|
225
|
-
single = true
|
|
226
|
-
) => {
|
|
262
|
+
export function encodeSwapMetadata(params: SwapMetadataProps, single = true) {
|
|
227
263
|
const encodedData = ethers.utils.defaultAbiCoder.encode(
|
|
228
264
|
actionMetadataTypes.swap,
|
|
229
265
|
[
|
|
@@ -233,205 +269,227 @@ export const encodeSwapMetadata = (
|
|
|
233
269
|
params.buyAmount,
|
|
234
270
|
params.receiver,
|
|
235
271
|
params.protocol,
|
|
236
|
-
]
|
|
237
|
-
)
|
|
272
|
+
],
|
|
273
|
+
)
|
|
238
274
|
|
|
239
275
|
const data = encodeMetadata({
|
|
240
276
|
type: MetadataEnums.swap,
|
|
241
277
|
encodedData,
|
|
242
|
-
})
|
|
278
|
+
})
|
|
243
279
|
|
|
244
|
-
return single ? encodeMultipleActions(data) : data
|
|
245
|
-
}
|
|
280
|
+
return single ? encodeMultipleActions(data) : data
|
|
281
|
+
}
|
|
246
282
|
|
|
247
|
-
export
|
|
248
|
-
params: TopupMetadataProps,
|
|
249
|
-
single = true
|
|
250
|
-
) => {
|
|
283
|
+
export function encodeTopupMetadata(params: TopupMetadataProps, single = true) {
|
|
251
284
|
const encodedData = ethers.utils.defaultAbiCoder.encode(
|
|
252
|
-
actionMetadataTypes[
|
|
253
|
-
[params.amount, params.token, params.onBehalf]
|
|
254
|
-
)
|
|
285
|
+
actionMetadataTypes['gas-topup'],
|
|
286
|
+
[params.amount, params.token, params.onBehalf],
|
|
287
|
+
)
|
|
255
288
|
|
|
256
289
|
const data = encodeMetadata({
|
|
257
|
-
type: MetadataEnums[
|
|
290
|
+
type: MetadataEnums['gas-topup'],
|
|
258
291
|
encodedData,
|
|
259
|
-
})
|
|
260
|
-
|
|
261
|
-
return single ? encodeMultipleActions(data) : data
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
export
|
|
265
|
-
params:
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
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
|
+
)
|
|
280
326
|
|
|
281
327
|
const data = encodeMetadata({
|
|
282
|
-
type
|
|
328
|
+
type,
|
|
283
329
|
encodedData,
|
|
284
|
-
})
|
|
330
|
+
})
|
|
285
331
|
|
|
286
|
-
return single ? encodeMultipleActions(data) : data
|
|
287
|
-
}
|
|
332
|
+
return single ? encodeMultipleActions(data) : data
|
|
333
|
+
}
|
|
288
334
|
|
|
289
|
-
export
|
|
290
|
-
threshold: string | number,
|
|
291
|
-
single = true
|
|
292
|
-
) => {
|
|
335
|
+
export function encodeChangeThresholdMetadata(threshold: string | number, single = true) {
|
|
293
336
|
const encodedData = ethers.utils.defaultAbiCoder.encode(
|
|
294
|
-
actionMetadataTypes[
|
|
295
|
-
[toBN(threshold).toNumber()]
|
|
296
|
-
)
|
|
337
|
+
actionMetadataTypes['change-threshold'],
|
|
338
|
+
[toBN(threshold).toNumber()],
|
|
339
|
+
)
|
|
297
340
|
|
|
298
341
|
const data = encodeMetadata({
|
|
299
|
-
type: MetadataEnums[
|
|
342
|
+
type: MetadataEnums['change-threshold'],
|
|
300
343
|
encodedData,
|
|
301
|
-
})
|
|
344
|
+
})
|
|
302
345
|
|
|
303
|
-
return single ? encodeMultipleActions(data) : data
|
|
304
|
-
}
|
|
346
|
+
return single ? encodeMultipleActions(data) : data
|
|
347
|
+
}
|
|
305
348
|
|
|
306
|
-
export
|
|
307
|
-
addresses: string[],
|
|
308
|
-
single = true
|
|
309
|
-
) => {
|
|
349
|
+
export function encodeRemoveSignersMetadata(addresses: string[], single = true) {
|
|
310
350
|
const encodedData = ethers.utils.defaultAbiCoder.encode(
|
|
311
|
-
actionMetadataTypes[
|
|
312
|
-
[addresses]
|
|
313
|
-
)
|
|
351
|
+
actionMetadataTypes['remove-signers'],
|
|
352
|
+
[addresses],
|
|
353
|
+
)
|
|
314
354
|
|
|
315
355
|
const data = encodeMetadata({
|
|
316
|
-
type: MetadataEnums[
|
|
356
|
+
type: MetadataEnums['remove-signers'],
|
|
317
357
|
encodedData,
|
|
318
|
-
})
|
|
358
|
+
})
|
|
319
359
|
|
|
320
|
-
return single ? encodeMultipleActions(data) : data
|
|
321
|
-
}
|
|
360
|
+
return single ? encodeMultipleActions(data) : data
|
|
361
|
+
}
|
|
322
362
|
|
|
323
|
-
export
|
|
324
|
-
protocol: string,
|
|
325
|
-
valueInUsd: string,
|
|
326
|
-
single = true
|
|
327
|
-
) => {
|
|
363
|
+
export function encodeImportMetadata(protocol: string, valueInUsd: string, single = true) {
|
|
328
364
|
const encodedData = ethers.utils.defaultAbiCoder.encode(
|
|
329
|
-
actionMetadataTypes
|
|
330
|
-
[protocol, valueInUsd]
|
|
331
|
-
)
|
|
365
|
+
actionMetadataTypes.import,
|
|
366
|
+
[protocol, valueInUsd],
|
|
367
|
+
)
|
|
332
368
|
|
|
333
369
|
const data = encodeMetadata({
|
|
334
|
-
type: MetadataEnums
|
|
370
|
+
type: MetadataEnums.import,
|
|
335
371
|
encodedData,
|
|
336
|
-
})
|
|
372
|
+
})
|
|
337
373
|
|
|
338
|
-
return single ? encodeMultipleActions(data) : data
|
|
339
|
-
}
|
|
374
|
+
return single ? encodeMultipleActions(data) : data
|
|
375
|
+
}
|
|
340
376
|
|
|
341
|
-
export
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
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) {
|
|
345
387
|
const encodedData = ethers.utils.defaultAbiCoder.encode(
|
|
346
|
-
actionMetadataTypes[
|
|
347
|
-
[addresses]
|
|
348
|
-
)
|
|
388
|
+
actionMetadataTypes['add-signers'],
|
|
389
|
+
[addresses],
|
|
390
|
+
)
|
|
349
391
|
|
|
350
392
|
const data = encodeMetadata({
|
|
351
|
-
type: MetadataEnums[
|
|
393
|
+
type: MetadataEnums['add-signers'],
|
|
352
394
|
encodedData,
|
|
353
|
-
})
|
|
395
|
+
})
|
|
354
396
|
|
|
355
|
-
return single ? encodeMultipleActions(data) : data
|
|
356
|
-
}
|
|
397
|
+
return single ? encodeMultipleActions(data) : data
|
|
398
|
+
}
|
|
357
399
|
|
|
358
|
-
export
|
|
359
|
-
return ethers.utils.defaultAbiCoder.encode(multiMetadataTypes, [actionData])
|
|
360
|
-
}
|
|
400
|
+
export function encodeMultipleActions(...actionData: string[]) {
|
|
401
|
+
return ethers.utils.defaultAbiCoder.encode(multiMetadataTypes, [actionData])
|
|
402
|
+
}
|
|
361
403
|
|
|
362
|
-
export
|
|
404
|
+
export function decodeData(data: string) {
|
|
363
405
|
try {
|
|
364
|
-
const metadata = getMetadataFromData(data) ||
|
|
406
|
+
const metadata = getMetadataFromData(data) || '0x'
|
|
365
407
|
|
|
366
|
-
return parseMetadata(metadata)
|
|
367
|
-
}
|
|
408
|
+
return parseMetadata(metadata)
|
|
409
|
+
}
|
|
410
|
+
catch {
|
|
368
411
|
// console.log(e);
|
|
369
|
-
return null
|
|
412
|
+
return null
|
|
370
413
|
}
|
|
371
|
-
}
|
|
414
|
+
}
|
|
372
415
|
|
|
373
|
-
export
|
|
416
|
+
export function decodeMetadata(metadata: string) {
|
|
374
417
|
try {
|
|
375
|
-
return parseMetadata(metadata)
|
|
376
|
-
} catch (e) {
|
|
377
|
-
return null;
|
|
418
|
+
return parseMetadata(metadata)
|
|
378
419
|
}
|
|
379
|
-
|
|
420
|
+
catch {
|
|
421
|
+
return null
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
const iface = Forwarder__factory.createInterface()
|
|
426
|
+
const ifaceMultisig = MultisigForwarder__factory.createInterface()
|
|
427
|
+
const ifaceAgnostic = MultisigAgnosticForwarder__factory.createInterface()
|
|
428
|
+
|
|
429
|
+
function getMetadataFromData(data: string) {
|
|
430
|
+
let metadata = '0x'
|
|
380
431
|
|
|
381
|
-
|
|
382
|
-
const
|
|
432
|
+
if (data.startsWith('0xc5e15557')) {
|
|
433
|
+
const executeData = ifaceAgnostic.decodeFunctionData('executeChainAgnosticV1', data)
|
|
383
434
|
|
|
384
|
-
const
|
|
385
|
-
let metadata = "0x";
|
|
435
|
+
const metadata = executeData?.params_?.params?.metadata
|
|
386
436
|
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
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
|
|
393
444
|
}
|
|
394
|
-
|
|
395
|
-
|
|
445
|
+
else {
|
|
446
|
+
metadata = executeData.metadata_
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
else if (data.startsWith('0x14f80a8d')) {
|
|
450
|
+
const executeDataV2 = iface.decodeFunctionData('executeV2', data)
|
|
396
451
|
if (
|
|
397
|
-
executeDataV2.params_.metadata ===
|
|
398
|
-
!executeDataV2.params_.metadata
|
|
452
|
+
executeDataV2.params_.metadata === '0x'
|
|
453
|
+
|| !executeDataV2.params_.metadata
|
|
399
454
|
) {
|
|
400
|
-
return null
|
|
401
|
-
} else {
|
|
402
|
-
metadata = executeDataV2.params_.metadata;
|
|
455
|
+
return null
|
|
403
456
|
}
|
|
404
|
-
|
|
457
|
+
else {
|
|
458
|
+
metadata = executeDataV2.params_.metadata
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
else {
|
|
405
462
|
const executeDataMultisig = ifaceMultisig.decodeFunctionData(
|
|
406
|
-
|
|
407
|
-
data
|
|
408
|
-
)
|
|
463
|
+
'executeV1',
|
|
464
|
+
data,
|
|
465
|
+
)
|
|
409
466
|
if (
|
|
410
|
-
executeDataMultisig.params_.metadata ===
|
|
411
|
-
!executeDataMultisig.params_.metadata
|
|
467
|
+
executeDataMultisig.params_.metadata === '0x'
|
|
468
|
+
|| !executeDataMultisig.params_.metadata
|
|
412
469
|
) {
|
|
413
|
-
return null
|
|
414
|
-
}
|
|
415
|
-
|
|
470
|
+
return null
|
|
471
|
+
}
|
|
472
|
+
else {
|
|
473
|
+
metadata = executeDataMultisig.params_.metadata
|
|
416
474
|
}
|
|
417
475
|
}
|
|
418
476
|
|
|
419
|
-
return metadata
|
|
420
|
-
}
|
|
477
|
+
return metadata
|
|
478
|
+
}
|
|
421
479
|
|
|
422
480
|
const typesPayload: IPayload = {
|
|
423
|
-
import: (data, type) => ({
|
|
481
|
+
'import': (data, type) => ({
|
|
424
482
|
type,
|
|
425
|
-
protocol: utils.parseBytes32String(data.protocol ||
|
|
483
|
+
protocol: utils.parseBytes32String(data.protocol || ''),
|
|
426
484
|
valueInUsd: toBN(data.valueInUsd).toFixed(),
|
|
427
485
|
}),
|
|
428
|
-
transfer: (data, type) => ({
|
|
486
|
+
'transfer': (data, type) => ({
|
|
429
487
|
type,
|
|
430
488
|
token: data.token,
|
|
431
489
|
amount: toBN(data.amount).toFixed(),
|
|
432
490
|
receiver: data.receiver,
|
|
433
491
|
}),
|
|
434
|
-
bridge: (data, type) => ({
|
|
492
|
+
'bridge': (data, type) => ({
|
|
435
493
|
type,
|
|
436
494
|
amount: toBN(data.amount).toFixed(),
|
|
437
495
|
receiver: data.receiver,
|
|
@@ -440,45 +498,56 @@ const typesPayload: IPayload = {
|
|
|
440
498
|
toChainId: data.toChainId ? data.toChainId.toString() : null,
|
|
441
499
|
bridgeFee: toBN(data.bridgeFee).toFixed(),
|
|
442
500
|
}),
|
|
443
|
-
|
|
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) => ({
|
|
444
512
|
type,
|
|
445
513
|
buyAmount: toBN(data.buyAmount).toFixed(),
|
|
446
514
|
sellAmount: toBN(data.sellAmount).toFixed(),
|
|
447
515
|
buyToken: data.buyToken,
|
|
448
516
|
sellToken: data.sellToken,
|
|
449
517
|
receiver: data.receiver,
|
|
450
|
-
protocol: utils.parseBytes32String(data.protocol ||
|
|
518
|
+
protocol: utils.parseBytes32String(data.protocol || ''),
|
|
451
519
|
}),
|
|
452
|
-
upgrade: (data, type) => ({
|
|
520
|
+
'upgrade': (data, type) => ({
|
|
453
521
|
type,
|
|
454
|
-
version: utils.parseBytes32String(data.version ||
|
|
522
|
+
version: utils.parseBytes32String(data.version || ''),
|
|
455
523
|
walletImpl: data.walletImpl,
|
|
456
524
|
}),
|
|
457
|
-
|
|
525
|
+
'gas-topup': (data, type) => ({
|
|
458
526
|
type,
|
|
459
527
|
amount: toBN(data.amount).toFixed(),
|
|
460
528
|
token: data.token,
|
|
461
529
|
onBehalf: data.onBehalf,
|
|
462
530
|
}),
|
|
463
|
-
dapp: (data, type) => ({
|
|
531
|
+
'dapp': (data, type) => ({
|
|
464
532
|
type,
|
|
465
533
|
name: data.name,
|
|
466
534
|
url: data.url,
|
|
467
535
|
}),
|
|
468
|
-
deploy: (data, type) => ({
|
|
536
|
+
'deploy': (data, type) => ({
|
|
469
537
|
type,
|
|
470
538
|
}),
|
|
471
|
-
|
|
539
|
+
'tx-builder': (data, type) => ({
|
|
472
540
|
type,
|
|
541
|
+
actionCount: utils.parseBytes32String(data.actionCount || ''),
|
|
473
542
|
}),
|
|
474
|
-
permit2: (data, type) => ({
|
|
543
|
+
'permit2': (data, type) => ({
|
|
475
544
|
type,
|
|
476
545
|
token: data.token,
|
|
477
546
|
spender: data.spender,
|
|
478
547
|
amount: toBN(data.amount).toFixed(),
|
|
479
548
|
expiration: data.expiration,
|
|
480
549
|
}),
|
|
481
|
-
|
|
550
|
+
'cross-transfer': (data, type) => ({
|
|
482
551
|
type,
|
|
483
552
|
fromToken: data.fromToken,
|
|
484
553
|
toToken: data.toToken,
|
|
@@ -486,68 +555,88 @@ const typesPayload: IPayload = {
|
|
|
486
555
|
amount: toBN(data.amount).toFixed(),
|
|
487
556
|
receiver: data.receiver,
|
|
488
557
|
}),
|
|
489
|
-
|
|
490
|
-
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',
|
|
491
569
|
address: data.address,
|
|
492
570
|
chainId: data.chainId ? data.chainId.toString() : null,
|
|
493
571
|
remove: data.remove,
|
|
494
572
|
}),
|
|
495
|
-
|
|
573
|
+
'instadapp-pro': (data, type) => ({
|
|
496
574
|
type,
|
|
497
575
|
castDetails: data.castDetails,
|
|
498
576
|
}),
|
|
499
|
-
rejection: (data, type) => ({
|
|
577
|
+
'rejection': (data, type) => ({
|
|
500
578
|
type,
|
|
501
579
|
id: data.id,
|
|
502
580
|
}),
|
|
503
|
-
|
|
581
|
+
'add-signers': (data, type) => ({
|
|
504
582
|
type,
|
|
505
583
|
addresses: data.signers,
|
|
506
584
|
}),
|
|
507
|
-
|
|
585
|
+
'remove-signers': (data, type) => ({
|
|
508
586
|
type,
|
|
509
587
|
addresses: data.signers,
|
|
510
588
|
}),
|
|
511
|
-
|
|
589
|
+
'change-threshold': (data, type) => ({
|
|
512
590
|
type,
|
|
513
591
|
count: data.count,
|
|
514
592
|
}),
|
|
515
|
-
|
|
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
|
+
}
|
|
516
603
|
|
|
517
|
-
|
|
518
|
-
const metadataArr = []
|
|
604
|
+
function parseMetadata(metadata: string) {
|
|
605
|
+
const metadataArr = []
|
|
519
606
|
|
|
520
|
-
const [decodedMultiMetadata = []]
|
|
521
|
-
(ethers.utils.defaultAbiCoder.decode(
|
|
607
|
+
const [decodedMultiMetadata = []]
|
|
608
|
+
= (ethers.utils.defaultAbiCoder.decode(
|
|
522
609
|
multiMetadataTypes,
|
|
523
|
-
metadata
|
|
524
|
-
) as string[]) || []
|
|
610
|
+
metadata,
|
|
611
|
+
) as string[]) || []
|
|
525
612
|
|
|
526
|
-
for (
|
|
613
|
+
for (const metadata of decodedMultiMetadata) {
|
|
527
614
|
const decodedMetadata = ethers.utils.defaultAbiCoder.decode(
|
|
528
615
|
metadataTypes,
|
|
529
|
-
metadata
|
|
530
|
-
)
|
|
616
|
+
metadata,
|
|
617
|
+
)
|
|
531
618
|
|
|
532
619
|
const type = ethers.utils.parseBytes32String(
|
|
533
|
-
decodedMetadata.type
|
|
534
|
-
) as keyof typeof actionMetadataTypes
|
|
620
|
+
decodedMetadata.type,
|
|
621
|
+
) as keyof typeof actionMetadataTypes
|
|
535
622
|
|
|
536
|
-
const decodedData =
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
623
|
+
const decodedData = decodedMetadata?.data === '0x'
|
|
624
|
+
? ''
|
|
625
|
+
: ethers.utils.defaultAbiCoder.decode(
|
|
626
|
+
actionMetadataTypes[type],
|
|
627
|
+
decodedMetadata.data,
|
|
628
|
+
)
|
|
540
629
|
|
|
541
|
-
const payloadFunc = typesPayload[type]
|
|
630
|
+
const payloadFunc = typesPayload[type]
|
|
542
631
|
|
|
543
632
|
if (payloadFunc) {
|
|
544
|
-
const payload = payloadFunc(decodedData, type)
|
|
545
|
-
metadataArr.push(payload)
|
|
633
|
+
const payload = payloadFunc(decodedData, type)
|
|
634
|
+
metadataArr.push(payload)
|
|
546
635
|
}
|
|
547
636
|
}
|
|
548
637
|
|
|
549
|
-
return metadataArr
|
|
550
|
-
}
|
|
638
|
+
return metadataArr
|
|
639
|
+
}
|
|
551
640
|
|
|
552
641
|
/**
|
|
553
642
|
* Replaces hyphens with spaces and capitalizes the first letter of each word in a sentence.
|
|
@@ -555,10 +644,14 @@ const parseMetadata = (metadata: string) => {
|
|
|
555
644
|
*
|
|
556
645
|
* @returns {string} - The modified sentence with hyphens replaced with spaces and the first letter of each word capitalized.
|
|
557
646
|
*/
|
|
558
|
-
export
|
|
647
|
+
export function formatTxType(txType: string) {
|
|
648
|
+
if (txType === 'mass') {
|
|
649
|
+
return 'Chain Agnostic Payments'
|
|
650
|
+
}
|
|
651
|
+
|
|
559
652
|
const finalSentence = txType
|
|
560
|
-
.replace(
|
|
561
|
-
.replace(/(^\w
|
|
653
|
+
.replace('-', ' ')
|
|
654
|
+
.replace(/(^\w)|(\s+\w)/g, letter => letter.toUpperCase())
|
|
562
655
|
|
|
563
|
-
return finalSentence
|
|
564
|
-
}
|
|
656
|
+
return finalSentence
|
|
657
|
+
}
|