@atumlabs/mppx-atum-escrow 0.1.1 → 0.2.2
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/CHANGELOG.md +32 -0
- package/README.md +1 -1
- package/dist/chunk-4P34CLTO.js +2587 -0
- package/dist/{chunk-2MWWLU75.js → chunk-IPZJXELQ.js} +1396 -1528
- package/dist/chunk-NEM3HEZW.js +253 -0
- package/dist/client.d.ts +9 -6
- package/dist/client.js +2 -2
- package/dist/index.d.ts +18 -17
- package/dist/index.js +3 -3
- package/dist/internal-DzEGXm14.d.ts +347 -0
- package/dist/server.d.ts +16 -8
- package/dist/server.js +2 -2
- package/package.json +7 -4
- package/dist/chunk-L62WG2VU.js +0 -131
- package/dist/chunk-W6D2D767.js +0 -1410
- package/dist/internal-CjcEyEsm.d.ts +0 -842
|
@@ -1,487 +1,17 @@
|
|
|
1
1
|
import { createRequire as __atumCreateRequire } from 'module'; const require = __atumCreateRequire(import.meta.url);
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
16
|
-
};
|
|
17
|
-
var __commonJS = (cb, mod) => function __require2() {
|
|
18
|
-
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
19
|
-
};
|
|
20
|
-
var __export = (target, all) => {
|
|
21
|
-
for (var name in all)
|
|
22
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
23
|
-
};
|
|
24
|
-
var __copyProps = (to, from, except, desc) => {
|
|
25
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
26
|
-
for (let key of __getOwnPropNames(from))
|
|
27
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
28
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
29
|
-
}
|
|
30
|
-
return to;
|
|
31
|
-
};
|
|
32
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
33
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
34
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
35
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
36
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
37
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
38
|
-
mod
|
|
39
|
-
));
|
|
40
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
41
|
-
|
|
42
|
-
// ../contracts/evm/escrow-encoding/typescript/dist/payment-id.js
|
|
43
|
-
var require_payment_id = __commonJS({
|
|
44
|
-
"../contracts/evm/escrow-encoding/typescript/dist/payment-id.js"(exports) {
|
|
45
|
-
"use strict";
|
|
46
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47
|
-
exports.computePaymentId = computePaymentId;
|
|
48
|
-
exports.computePaymentIdV2 = computePaymentIdV2;
|
|
49
|
-
var ethers_1 = __require("ethers");
|
|
50
|
-
function computePaymentId(depositor, signature) {
|
|
51
|
-
const abiCoder = ethers_1.ethers.AbiCoder.defaultAbiCoder();
|
|
52
|
-
const encoded = abiCoder.encode(["address", "bytes"], [depositor, signature]);
|
|
53
|
-
return ethers_1.ethers.keccak256(encoded);
|
|
54
|
-
}
|
|
55
|
-
function computePaymentIdV2(depositor, signature, nonce) {
|
|
56
|
-
const abiCoder = ethers_1.ethers.AbiCoder.defaultAbiCoder();
|
|
57
|
-
const encoded = abiCoder.encode(["address", "bytes", "uint256"], [depositor, signature, nonce]);
|
|
58
|
-
return ethers_1.ethers.keccak256(encoded);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
// ../contracts/evm/escrow-encoding/typescript/dist/nonce-generator.js
|
|
64
|
-
var require_nonce_generator = __commonJS({
|
|
65
|
-
"../contracts/evm/escrow-encoding/typescript/dist/nonce-generator.js"(exports) {
|
|
66
|
-
"use strict";
|
|
67
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
68
|
-
exports.generateNonce = generateNonce;
|
|
69
|
-
var ethers_1 = __require("ethers");
|
|
70
|
-
function generateNonce() {
|
|
71
|
-
return ethers_1.ethers.hexlify(ethers_1.ethers.randomBytes(32));
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
// ../contracts/evm/escrow-encoding/typescript/dist/permit-types.js
|
|
77
|
-
var require_permit_types = __commonJS({
|
|
78
|
-
"../contracts/evm/escrow-encoding/typescript/dist/permit-types.js"(exports) {
|
|
79
|
-
"use strict";
|
|
80
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
81
|
-
exports.REFUND_WITNESS_TYPES = exports.RELEASE_WITNESS_TYPES = exports.RESERVE_WITNESS_TYPES = exports.PERMIT_WITNESS_TYPES_V2 = exports.PERMIT_WITNESS_TYPES = void 0;
|
|
82
|
-
exports.createPermit2Domain = createPermit2Domain;
|
|
83
|
-
exports.createEscrowDomain = createEscrowDomain;
|
|
84
|
-
exports.PERMIT_WITNESS_TYPES = {
|
|
85
|
-
PermitWitnessTransferFrom: [
|
|
86
|
-
{ name: "permitted", type: "TokenPermissions" },
|
|
87
|
-
{ name: "spender", type: "address" },
|
|
88
|
-
{ name: "nonce", type: "uint256" },
|
|
89
|
-
{ name: "deadline", type: "uint256" },
|
|
90
|
-
{ name: "witness", type: "DepositWitness" }
|
|
91
|
-
],
|
|
92
|
-
TokenPermissions: [
|
|
93
|
-
{ name: "token", type: "address" },
|
|
94
|
-
{ name: "amount", type: "uint256" }
|
|
95
|
-
],
|
|
96
|
-
DepositWitness: [
|
|
97
|
-
{ name: "requestId", type: "bytes32" },
|
|
98
|
-
{ name: "reserver", type: "address" },
|
|
99
|
-
{ name: "releaser", type: "address" }
|
|
100
|
-
]
|
|
101
|
-
};
|
|
102
|
-
exports.PERMIT_WITNESS_TYPES_V2 = {
|
|
103
|
-
PermitWitnessTransferFrom: [
|
|
104
|
-
{ name: "permitted", type: "TokenPermissions" },
|
|
105
|
-
{ name: "spender", type: "address" },
|
|
106
|
-
{ name: "nonce", type: "uint256" },
|
|
107
|
-
{ name: "deadline", type: "uint256" },
|
|
108
|
-
{ name: "witness", type: "DepositWitness" }
|
|
109
|
-
],
|
|
110
|
-
TokenPermissions: [
|
|
111
|
-
{ name: "token", type: "address" },
|
|
112
|
-
{ name: "amount", type: "uint256" }
|
|
113
|
-
],
|
|
114
|
-
DepositWitness: [
|
|
115
|
-
{ name: "reserver", type: "address" },
|
|
116
|
-
{ name: "releaser", type: "address" }
|
|
117
|
-
]
|
|
118
|
-
};
|
|
119
|
-
function createPermit2Domain(chainId, verifyingContract) {
|
|
120
|
-
return {
|
|
121
|
-
name: "Permit2",
|
|
122
|
-
chainId,
|
|
123
|
-
verifyingContract
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
function createEscrowDomain(chainId, verifyingContract) {
|
|
127
|
-
return {
|
|
128
|
-
name: "Escrow",
|
|
129
|
-
version: "3",
|
|
130
|
-
chainId,
|
|
131
|
-
verifyingContract
|
|
132
|
-
};
|
|
133
|
-
}
|
|
134
|
-
exports.RESERVE_WITNESS_TYPES = {
|
|
135
|
-
ReserveWitness: [
|
|
136
|
-
{ name: "paymentId", type: "bytes32" },
|
|
137
|
-
{ name: "settler", type: "address" }
|
|
138
|
-
]
|
|
139
|
-
};
|
|
140
|
-
exports.RELEASE_WITNESS_TYPES = {
|
|
141
|
-
ReleaseWitness: [
|
|
142
|
-
{ name: "paymentId", type: "bytes32" },
|
|
143
|
-
{ name: "depositor", type: "address" },
|
|
144
|
-
{ name: "token", type: "address" },
|
|
145
|
-
{ name: "amount", type: "uint256" },
|
|
146
|
-
{ name: "feeAmount", type: "uint256" },
|
|
147
|
-
{ name: "reserver", type: "address" },
|
|
148
|
-
{ name: "releaser", type: "address" },
|
|
149
|
-
{ name: "settler", type: "address" }
|
|
150
|
-
]
|
|
151
|
-
};
|
|
152
|
-
exports.REFUND_WITNESS_TYPES = {
|
|
153
|
-
RefundWitness: [
|
|
154
|
-
{ name: "paymentId", type: "bytes32" },
|
|
155
|
-
{ name: "depositor", type: "address" },
|
|
156
|
-
{ name: "token", type: "address" },
|
|
157
|
-
{ name: "amount", type: "uint256" },
|
|
158
|
-
{ name: "feeAmount", type: "uint256" },
|
|
159
|
-
{ name: "reserver", type: "address" },
|
|
160
|
-
{ name: "releaser", type: "address" },
|
|
161
|
-
{ name: "settler", type: "address" }
|
|
162
|
-
]
|
|
163
|
-
};
|
|
164
|
-
}
|
|
165
|
-
});
|
|
166
|
-
|
|
167
|
-
// ../contracts/evm/escrow-encoding/typescript/dist/escrow-abi.js
|
|
168
|
-
var require_escrow_abi = __commonJS({
|
|
169
|
-
"../contracts/evm/escrow-encoding/typescript/dist/escrow-abi.js"(exports) {
|
|
170
|
-
"use strict";
|
|
171
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
172
|
-
exports.ESCROW_V2_ABI_JSON = exports.ESCROW_V3_ABI_JSON = exports.ESCROW_ABI_JSON = exports.ESCROW_ABI = void 0;
|
|
173
|
-
exports.ESCROW_ABI = [
|
|
174
|
-
"function deposit((( address token, uint256 amount) permitted, uint256 nonce, uint256 deadline) permit, address depositor, (bytes32 requestId, address reserver, address releaser) witness, bytes signature) returns (bytes32)",
|
|
175
|
-
"function refund((bytes32 depositId, uint256 deadline) witness, bytes signature)",
|
|
176
|
-
"function getDepositInfo(bytes32 depositId) view returns ((address depositor, address token, uint256 amount, address reserver, address releaser, address settler))",
|
|
177
|
-
"function i_permit2() view returns (address)"
|
|
178
|
-
];
|
|
179
|
-
exports.ESCROW_ABI_JSON = [
|
|
180
|
-
{
|
|
181
|
-
type: "function",
|
|
182
|
-
name: "deposit",
|
|
183
|
-
inputs: [
|
|
184
|
-
{
|
|
185
|
-
name: "permit",
|
|
186
|
-
type: "tuple",
|
|
187
|
-
components: [
|
|
188
|
-
{
|
|
189
|
-
name: "permitted",
|
|
190
|
-
type: "tuple",
|
|
191
|
-
components: [
|
|
192
|
-
{ name: "token", type: "address" },
|
|
193
|
-
{ name: "amount", type: "uint256" }
|
|
194
|
-
]
|
|
195
|
-
},
|
|
196
|
-
{ name: "nonce", type: "uint256" },
|
|
197
|
-
{ name: "deadline", type: "uint256" }
|
|
198
|
-
]
|
|
199
|
-
},
|
|
200
|
-
{ name: "depositor", type: "address" },
|
|
201
|
-
{
|
|
202
|
-
name: "witness",
|
|
203
|
-
type: "tuple",
|
|
204
|
-
components: [
|
|
205
|
-
{ name: "requestId", type: "bytes32" },
|
|
206
|
-
{ name: "reserver", type: "address" },
|
|
207
|
-
{ name: "releaser", type: "address" }
|
|
208
|
-
]
|
|
209
|
-
},
|
|
210
|
-
{ name: "signature", type: "bytes" }
|
|
211
|
-
],
|
|
212
|
-
outputs: [{ name: "depositId", type: "bytes32" }],
|
|
213
|
-
stateMutability: "nonpayable"
|
|
214
|
-
},
|
|
215
|
-
{
|
|
216
|
-
type: "function",
|
|
217
|
-
name: "refund",
|
|
218
|
-
inputs: [
|
|
219
|
-
{
|
|
220
|
-
name: "witness",
|
|
221
|
-
type: "tuple",
|
|
222
|
-
components: [
|
|
223
|
-
{ name: "depositId", type: "bytes32" },
|
|
224
|
-
{ name: "deadline", type: "uint256" }
|
|
225
|
-
]
|
|
226
|
-
},
|
|
227
|
-
{ name: "signature", type: "bytes" }
|
|
228
|
-
],
|
|
229
|
-
outputs: [],
|
|
230
|
-
stateMutability: "nonpayable"
|
|
231
|
-
},
|
|
232
|
-
{
|
|
233
|
-
type: "function",
|
|
234
|
-
name: "getDepositInfo",
|
|
235
|
-
inputs: [{ name: "depositId", type: "bytes32" }],
|
|
236
|
-
outputs: [
|
|
237
|
-
{
|
|
238
|
-
name: "",
|
|
239
|
-
type: "tuple",
|
|
240
|
-
components: [
|
|
241
|
-
{ name: "depositor", type: "address" },
|
|
242
|
-
{ name: "token", type: "address" },
|
|
243
|
-
{ name: "amount", type: "uint256" },
|
|
244
|
-
{ name: "reserver", type: "address" },
|
|
245
|
-
{ name: "releaser", type: "address" },
|
|
246
|
-
{ name: "settler", type: "address" }
|
|
247
|
-
]
|
|
248
|
-
}
|
|
249
|
-
],
|
|
250
|
-
stateMutability: "view"
|
|
251
|
-
},
|
|
252
|
-
{
|
|
253
|
-
type: "function",
|
|
254
|
-
name: "i_permit2",
|
|
255
|
-
inputs: [],
|
|
256
|
-
outputs: [{ name: "", type: "address" }],
|
|
257
|
-
stateMutability: "view"
|
|
258
|
-
}
|
|
259
|
-
];
|
|
260
|
-
exports.ESCROW_V3_ABI_JSON = [
|
|
261
|
-
{
|
|
262
|
-
type: "function",
|
|
263
|
-
name: "deposit",
|
|
264
|
-
inputs: [
|
|
265
|
-
{
|
|
266
|
-
name: "depositInput",
|
|
267
|
-
type: "tuple",
|
|
268
|
-
components: [
|
|
269
|
-
{
|
|
270
|
-
name: "permit",
|
|
271
|
-
type: "tuple",
|
|
272
|
-
components: [
|
|
273
|
-
{
|
|
274
|
-
name: "permitted",
|
|
275
|
-
type: "tuple",
|
|
276
|
-
components: [
|
|
277
|
-
{ name: "token", type: "address" },
|
|
278
|
-
{ name: "amount", type: "uint256" }
|
|
279
|
-
]
|
|
280
|
-
},
|
|
281
|
-
{ name: "nonce", type: "uint256" },
|
|
282
|
-
{ name: "deadline", type: "uint256" }
|
|
283
|
-
]
|
|
284
|
-
},
|
|
285
|
-
{ name: "depositor", type: "address" },
|
|
286
|
-
{
|
|
287
|
-
name: "depositWitness",
|
|
288
|
-
type: "tuple",
|
|
289
|
-
components: [
|
|
290
|
-
{ name: "reserver", type: "address" },
|
|
291
|
-
{ name: "releaser", type: "address" }
|
|
292
|
-
]
|
|
293
|
-
},
|
|
294
|
-
{ name: "depositSignature", type: "bytes" },
|
|
295
|
-
{
|
|
296
|
-
name: "reserveWitness",
|
|
297
|
-
type: "tuple",
|
|
298
|
-
components: [
|
|
299
|
-
{ name: "paymentId", type: "bytes32" },
|
|
300
|
-
{ name: "settler", type: "address" }
|
|
301
|
-
]
|
|
302
|
-
},
|
|
303
|
-
{ name: "reserveSignature", type: "bytes" }
|
|
304
|
-
]
|
|
305
|
-
}
|
|
306
|
-
],
|
|
307
|
-
outputs: [{ name: "paymentId", type: "bytes32" }],
|
|
308
|
-
stateMutability: "nonpayable"
|
|
309
|
-
},
|
|
310
|
-
{
|
|
311
|
-
type: "function",
|
|
312
|
-
name: "refund",
|
|
313
|
-
inputs: [
|
|
314
|
-
{
|
|
315
|
-
name: "refundInput",
|
|
316
|
-
type: "tuple",
|
|
317
|
-
components: [
|
|
318
|
-
{
|
|
319
|
-
name: "refundWitness",
|
|
320
|
-
type: "tuple",
|
|
321
|
-
components: [
|
|
322
|
-
{ name: "paymentId", type: "bytes32" },
|
|
323
|
-
{ name: "depositor", type: "address" },
|
|
324
|
-
{ name: "token", type: "address" },
|
|
325
|
-
{ name: "amount", type: "uint256" },
|
|
326
|
-
{ name: "feeAmount", type: "uint256" },
|
|
327
|
-
{ name: "reserver", type: "address" },
|
|
328
|
-
{ name: "releaser", type: "address" },
|
|
329
|
-
{ name: "settler", type: "address" }
|
|
330
|
-
]
|
|
331
|
-
},
|
|
332
|
-
{ name: "refundSignature", type: "bytes" }
|
|
333
|
-
]
|
|
334
|
-
}
|
|
335
|
-
],
|
|
336
|
-
outputs: [],
|
|
337
|
-
stateMutability: "nonpayable"
|
|
338
|
-
},
|
|
339
|
-
{
|
|
340
|
-
type: "function",
|
|
341
|
-
name: "getDepositHash",
|
|
342
|
-
inputs: [{ name: "paymentId", type: "bytes32" }],
|
|
343
|
-
outputs: [{ name: "", type: "bytes32" }],
|
|
344
|
-
stateMutability: "view"
|
|
345
|
-
},
|
|
346
|
-
{
|
|
347
|
-
type: "function",
|
|
348
|
-
name: "i_permit2",
|
|
349
|
-
inputs: [],
|
|
350
|
-
outputs: [{ name: "", type: "address" }],
|
|
351
|
-
stateMutability: "view"
|
|
352
|
-
}
|
|
353
|
-
];
|
|
354
|
-
exports.ESCROW_V2_ABI_JSON = exports.ESCROW_V3_ABI_JSON;
|
|
355
|
-
}
|
|
356
|
-
});
|
|
357
|
-
|
|
358
|
-
// ../contracts/evm/escrow-encoding/typescript/dist/reserve-encoder.js
|
|
359
|
-
var require_reserve_encoder = __commonJS({
|
|
360
|
-
"../contracts/evm/escrow-encoding/typescript/dist/reserve-encoder.js"(exports) {
|
|
361
|
-
"use strict";
|
|
362
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
363
|
-
exports.computeReserveDigest = computeReserveDigest;
|
|
364
|
-
var ethers_1 = __require("ethers");
|
|
365
|
-
var permit_types_1 = require_permit_types();
|
|
366
|
-
function computeReserveDigest(input) {
|
|
367
|
-
const domain = (0, permit_types_1.createEscrowDomain)(input.chainId, input.escrowContract);
|
|
368
|
-
return ethers_1.TypedDataEncoder.hash(domain, permit_types_1.RESERVE_WITNESS_TYPES, {
|
|
369
|
-
paymentId: input.paymentId,
|
|
370
|
-
settler: input.settler
|
|
371
|
-
});
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
});
|
|
375
|
-
|
|
376
|
-
// ../contracts/evm/escrow-encoding/typescript/dist/deposit-encoder.js
|
|
377
|
-
var require_deposit_encoder = __commonJS({
|
|
378
|
-
"../contracts/evm/escrow-encoding/typescript/dist/deposit-encoder.js"(exports) {
|
|
379
|
-
"use strict";
|
|
380
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
381
|
-
exports.PERMIT2_CONTRACT_ADDRESS = void 0;
|
|
382
|
-
exports.createPermitWitnessTransferFromPrehash = createPermitWitnessTransferFromPrehash2;
|
|
383
|
-
exports.hashPermitWitnessTransferFrom = hashPermitWitnessTransferFrom2;
|
|
384
|
-
var ethers_1 = __require("ethers");
|
|
385
|
-
var permit_types_1 = require_permit_types();
|
|
386
|
-
exports.PERMIT2_CONTRACT_ADDRESS = "0x000000000022D473030F116dDEE9F6B43aC78BA3";
|
|
387
|
-
function createPermitWitnessTransferFromPrehash2(params) {
|
|
388
|
-
return {
|
|
389
|
-
types: permit_types_1.PERMIT_WITNESS_TYPES_V2,
|
|
390
|
-
primaryType: "PermitWitnessTransferFrom",
|
|
391
|
-
domain: {
|
|
392
|
-
name: "Permit2",
|
|
393
|
-
chainId: `0x${params.chainId.toString(16)}`,
|
|
394
|
-
verifyingContract: params.verifyingContract
|
|
395
|
-
},
|
|
396
|
-
message: {
|
|
397
|
-
permitted: {
|
|
398
|
-
token: params.token,
|
|
399
|
-
amount: params.amount
|
|
400
|
-
},
|
|
401
|
-
spender: params.spender,
|
|
402
|
-
nonce: params.nonce.toString(),
|
|
403
|
-
deadline: params.deadline.toString(),
|
|
404
|
-
witness: {
|
|
405
|
-
reserver: params.reserver,
|
|
406
|
-
releaser: params.releaser
|
|
407
|
-
}
|
|
408
|
-
}
|
|
409
|
-
};
|
|
410
|
-
}
|
|
411
|
-
function hashPermitWitnessTransferFrom2(prehash) {
|
|
412
|
-
return ethers_1.TypedDataEncoder.hash(prehash.domain, prehash.types, prehash.message);
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
});
|
|
416
|
-
|
|
417
|
-
// ../contracts/evm/escrow-encoding/typescript/dist/index.js
|
|
418
|
-
var require_dist = __commonJS({
|
|
419
|
-
"../contracts/evm/escrow-encoding/typescript/dist/index.js"(exports) {
|
|
420
|
-
"use strict";
|
|
421
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
422
|
-
exports.PERMIT2_CONTRACT_ADDRESS = exports.hashPermitWitnessTransferFrom = exports.createPermitWitnessTransferFromPrehash = exports.computeReserveDigest = exports.ESCROW_V3_ABI_JSON = exports.ESCROW_V2_ABI_JSON = exports.ESCROW_ABI_JSON = exports.ESCROW_ABI = exports.REFUND_WITNESS_TYPES = exports.RELEASE_WITNESS_TYPES = exports.RESERVE_WITNESS_TYPES = exports.createEscrowDomain = exports.createPermit2Domain = exports.PERMIT_WITNESS_TYPES_V2 = exports.PERMIT_WITNESS_TYPES = exports.generateNonce = exports.computePaymentIdV2 = exports.computePaymentId = void 0;
|
|
423
|
-
var payment_id_1 = require_payment_id();
|
|
424
|
-
Object.defineProperty(exports, "computePaymentId", { enumerable: true, get: function() {
|
|
425
|
-
return payment_id_1.computePaymentId;
|
|
426
|
-
} });
|
|
427
|
-
Object.defineProperty(exports, "computePaymentIdV2", { enumerable: true, get: function() {
|
|
428
|
-
return payment_id_1.computePaymentIdV2;
|
|
429
|
-
} });
|
|
430
|
-
var nonce_generator_1 = require_nonce_generator();
|
|
431
|
-
Object.defineProperty(exports, "generateNonce", { enumerable: true, get: function() {
|
|
432
|
-
return nonce_generator_1.generateNonce;
|
|
433
|
-
} });
|
|
434
|
-
var permit_types_1 = require_permit_types();
|
|
435
|
-
Object.defineProperty(exports, "PERMIT_WITNESS_TYPES", { enumerable: true, get: function() {
|
|
436
|
-
return permit_types_1.PERMIT_WITNESS_TYPES;
|
|
437
|
-
} });
|
|
438
|
-
Object.defineProperty(exports, "PERMIT_WITNESS_TYPES_V2", { enumerable: true, get: function() {
|
|
439
|
-
return permit_types_1.PERMIT_WITNESS_TYPES_V2;
|
|
440
|
-
} });
|
|
441
|
-
Object.defineProperty(exports, "createPermit2Domain", { enumerable: true, get: function() {
|
|
442
|
-
return permit_types_1.createPermit2Domain;
|
|
443
|
-
} });
|
|
444
|
-
Object.defineProperty(exports, "createEscrowDomain", { enumerable: true, get: function() {
|
|
445
|
-
return permit_types_1.createEscrowDomain;
|
|
446
|
-
} });
|
|
447
|
-
Object.defineProperty(exports, "RESERVE_WITNESS_TYPES", { enumerable: true, get: function() {
|
|
448
|
-
return permit_types_1.RESERVE_WITNESS_TYPES;
|
|
449
|
-
} });
|
|
450
|
-
Object.defineProperty(exports, "RELEASE_WITNESS_TYPES", { enumerable: true, get: function() {
|
|
451
|
-
return permit_types_1.RELEASE_WITNESS_TYPES;
|
|
452
|
-
} });
|
|
453
|
-
Object.defineProperty(exports, "REFUND_WITNESS_TYPES", { enumerable: true, get: function() {
|
|
454
|
-
return permit_types_1.REFUND_WITNESS_TYPES;
|
|
455
|
-
} });
|
|
456
|
-
var escrow_abi_1 = require_escrow_abi();
|
|
457
|
-
Object.defineProperty(exports, "ESCROW_ABI", { enumerable: true, get: function() {
|
|
458
|
-
return escrow_abi_1.ESCROW_ABI;
|
|
459
|
-
} });
|
|
460
|
-
Object.defineProperty(exports, "ESCROW_ABI_JSON", { enumerable: true, get: function() {
|
|
461
|
-
return escrow_abi_1.ESCROW_ABI_JSON;
|
|
462
|
-
} });
|
|
463
|
-
Object.defineProperty(exports, "ESCROW_V2_ABI_JSON", { enumerable: true, get: function() {
|
|
464
|
-
return escrow_abi_1.ESCROW_V2_ABI_JSON;
|
|
465
|
-
} });
|
|
466
|
-
Object.defineProperty(exports, "ESCROW_V3_ABI_JSON", { enumerable: true, get: function() {
|
|
467
|
-
return escrow_abi_1.ESCROW_V3_ABI_JSON;
|
|
468
|
-
} });
|
|
469
|
-
var reserve_encoder_1 = require_reserve_encoder();
|
|
470
|
-
Object.defineProperty(exports, "computeReserveDigest", { enumerable: true, get: function() {
|
|
471
|
-
return reserve_encoder_1.computeReserveDigest;
|
|
472
|
-
} });
|
|
473
|
-
var deposit_encoder_1 = require_deposit_encoder();
|
|
474
|
-
Object.defineProperty(exports, "createPermitWitnessTransferFromPrehash", { enumerable: true, get: function() {
|
|
475
|
-
return deposit_encoder_1.createPermitWitnessTransferFromPrehash;
|
|
476
|
-
} });
|
|
477
|
-
Object.defineProperty(exports, "hashPermitWitnessTransferFrom", { enumerable: true, get: function() {
|
|
478
|
-
return deposit_encoder_1.hashPermitWitnessTransferFrom;
|
|
479
|
-
} });
|
|
480
|
-
Object.defineProperty(exports, "PERMIT2_CONTRACT_ADDRESS", { enumerable: true, get: function() {
|
|
481
|
-
return deposit_encoder_1.PERMIT2_CONTRACT_ADDRESS;
|
|
482
|
-
} });
|
|
483
|
-
}
|
|
484
|
-
});
|
|
2
|
+
import {
|
|
3
|
+
__commonJS,
|
|
4
|
+
__esm,
|
|
5
|
+
__export,
|
|
6
|
+
__require,
|
|
7
|
+
__toCommonJS,
|
|
8
|
+
__toESM,
|
|
9
|
+
assetIdentifier,
|
|
10
|
+
atumEscrowChargeMethod,
|
|
11
|
+
chainDefaultsFromExtra,
|
|
12
|
+
namespaceOf,
|
|
13
|
+
require_dist
|
|
14
|
+
} from "./chunk-4P34CLTO.js";
|
|
485
15
|
|
|
486
16
|
// ../node_modules/.pnpm/delayed-stream@1.0.0/node_modules/delayed-stream/lib/delayed_stream.js
|
|
487
17
|
var require_delayed_stream = __commonJS({
|
|
@@ -9714,11 +9244,11 @@ var require_sign = __commonJS({
|
|
|
9714
9244
|
"../node_modules/.pnpm/math-intrinsics@1.1.0/node_modules/math-intrinsics/sign.js"(exports, module) {
|
|
9715
9245
|
"use strict";
|
|
9716
9246
|
var $isNaN = require_isNaN();
|
|
9717
|
-
module.exports = function sign(
|
|
9718
|
-
if ($isNaN(
|
|
9719
|
-
return
|
|
9247
|
+
module.exports = function sign(number) {
|
|
9248
|
+
if ($isNaN(number) || number === 0) {
|
|
9249
|
+
return number;
|
|
9720
9250
|
}
|
|
9721
|
-
return
|
|
9251
|
+
return number < 0 ? -1 : 1;
|
|
9722
9252
|
};
|
|
9723
9253
|
}
|
|
9724
9254
|
});
|
|
@@ -10289,17 +9819,17 @@ var require_get_intrinsic = __commonJS({
|
|
|
10289
9819
|
var $exec = bind.call($call, RegExp.prototype.exec);
|
|
10290
9820
|
var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g;
|
|
10291
9821
|
var reEscapeChar = /\\(\\)?/g;
|
|
10292
|
-
var stringToPath = function stringToPath2(
|
|
10293
|
-
var first = $strSlice(
|
|
10294
|
-
var last = $strSlice(
|
|
9822
|
+
var stringToPath = function stringToPath2(string) {
|
|
9823
|
+
var first = $strSlice(string, 0, 1);
|
|
9824
|
+
var last = $strSlice(string, -1);
|
|
10295
9825
|
if (first === "%" && last !== "%") {
|
|
10296
9826
|
throw new $SyntaxError("invalid intrinsic syntax, expected closing `%`");
|
|
10297
9827
|
} else if (last === "%" && first !== "%") {
|
|
10298
9828
|
throw new $SyntaxError("invalid intrinsic syntax, expected opening `%`");
|
|
10299
9829
|
}
|
|
10300
9830
|
var result = [];
|
|
10301
|
-
$replace(
|
|
10302
|
-
result[result.length] = quote ? $replace(subString, reEscapeChar, "$1") :
|
|
9831
|
+
$replace(string, rePropName, function(match, number, quote, subString) {
|
|
9832
|
+
result[result.length] = quote ? $replace(subString, reEscapeChar, "$1") : number || match;
|
|
10303
9833
|
});
|
|
10304
9834
|
return result;
|
|
10305
9835
|
};
|
|
@@ -10411,22 +9941,22 @@ var require_es_set_tostringtag = __commonJS({
|
|
|
10411
9941
|
var hasOwn = require_hasown();
|
|
10412
9942
|
var $TypeError = require_type();
|
|
10413
9943
|
var toStringTag = hasToStringTag ? Symbol.toStringTag : null;
|
|
10414
|
-
module.exports = function setToStringTag(
|
|
9944
|
+
module.exports = function setToStringTag(object, value) {
|
|
10415
9945
|
var overrideIfSet = arguments.length > 2 && !!arguments[2] && arguments[2].force;
|
|
10416
9946
|
var nonConfigurable = arguments.length > 2 && !!arguments[2] && arguments[2].nonConfigurable;
|
|
10417
9947
|
if (typeof overrideIfSet !== "undefined" && typeof overrideIfSet !== "boolean" || typeof nonConfigurable !== "undefined" && typeof nonConfigurable !== "boolean") {
|
|
10418
9948
|
throw new $TypeError("if provided, the `overrideIfSet` and `nonConfigurable` options must be booleans");
|
|
10419
9949
|
}
|
|
10420
|
-
if (toStringTag && (overrideIfSet || !hasOwn(
|
|
9950
|
+
if (toStringTag && (overrideIfSet || !hasOwn(object, toStringTag))) {
|
|
10421
9951
|
if ($defineProperty) {
|
|
10422
|
-
$defineProperty(
|
|
9952
|
+
$defineProperty(object, toStringTag, {
|
|
10423
9953
|
configurable: !nonConfigurable,
|
|
10424
9954
|
enumerable: false,
|
|
10425
9955
|
value,
|
|
10426
9956
|
writable: false
|
|
10427
9957
|
});
|
|
10428
9958
|
} else {
|
|
10429
|
-
|
|
9959
|
+
object[toStringTag] = value;
|
|
10430
9960
|
}
|
|
10431
9961
|
}
|
|
10432
9962
|
};
|
|
@@ -15658,106 +15188,458 @@ var require_axios = __commonJS({
|
|
|
15658
15188
|
var require_dist2 = __commonJS({
|
|
15659
15189
|
"../payment-gateway-client/dist/index.js"(exports, module) {
|
|
15660
15190
|
"use strict";
|
|
15661
|
-
var
|
|
15662
|
-
var
|
|
15663
|
-
var
|
|
15664
|
-
var
|
|
15665
|
-
var
|
|
15666
|
-
var
|
|
15191
|
+
var __create = Object.create;
|
|
15192
|
+
var __defProp = Object.defineProperty;
|
|
15193
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
15194
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
15195
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
15196
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
15667
15197
|
var __esm2 = (fn, res) => function __init() {
|
|
15668
|
-
return fn && (res = (0, fn[
|
|
15198
|
+
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
15669
15199
|
};
|
|
15670
15200
|
var __commonJS2 = (cb, mod) => function __require2() {
|
|
15671
|
-
return mod || (0, cb[
|
|
15201
|
+
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
15672
15202
|
};
|
|
15673
15203
|
var __export2 = (target, all) => {
|
|
15674
15204
|
for (var name in all)
|
|
15675
|
-
|
|
15205
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
15676
15206
|
};
|
|
15677
|
-
var
|
|
15207
|
+
var __copyProps = (to, from, except, desc) => {
|
|
15678
15208
|
if (from && typeof from === "object" || typeof from === "function") {
|
|
15679
|
-
for (let key of
|
|
15680
|
-
if (!
|
|
15681
|
-
|
|
15209
|
+
for (let key of __getOwnPropNames(from))
|
|
15210
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15211
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15682
15212
|
}
|
|
15683
15213
|
return to;
|
|
15684
15214
|
};
|
|
15685
|
-
var __toESM2 = (mod, isNodeMode, target) => (target = mod != null ?
|
|
15215
|
+
var __toESM2 = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
15686
15216
|
// If the importer is in node compatibility mode or this is not an ESM
|
|
15687
15217
|
// file that has been converted to a CommonJS file using a Babel-
|
|
15688
15218
|
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
15689
15219
|
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
15690
|
-
isNodeMode || !mod || !mod.__esModule ?
|
|
15220
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
15691
15221
|
mod
|
|
15692
15222
|
));
|
|
15693
|
-
var __toCommonJS2 = (mod) =>
|
|
15694
|
-
var
|
|
15695
|
-
"../contracts/
|
|
15223
|
+
var __toCommonJS2 = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
15224
|
+
var require_chain_id = __commonJS2({
|
|
15225
|
+
"../contracts/tvm/escrow-encoding/typescript/dist/chain-id.js"(exports2) {
|
|
15696
15226
|
"use strict";
|
|
15697
15227
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
15698
|
-
exports2.
|
|
15699
|
-
|
|
15700
|
-
|
|
15701
|
-
function computePaymentId(depositor, signature) {
|
|
15702
|
-
const abiCoder = ethers_1.ethers.AbiCoder.defaultAbiCoder();
|
|
15703
|
-
const encoded = abiCoder.encode(["address", "bytes"], [depositor, signature]);
|
|
15704
|
-
return ethers_1.ethers.keccak256(encoded);
|
|
15705
|
-
}
|
|
15706
|
-
function computePaymentIdV2(depositor, signature, nonce) {
|
|
15707
|
-
const abiCoder = ethers_1.ethers.AbiCoder.defaultAbiCoder();
|
|
15708
|
-
const encoded = abiCoder.encode(["address", "bytes", "uint256"], [depositor, signature, nonce]);
|
|
15709
|
-
return ethers_1.ethers.keccak256(encoded);
|
|
15228
|
+
exports2.maskChainId = maskChainId2;
|
|
15229
|
+
function maskChainId2(chainId) {
|
|
15230
|
+
return (chainId & 4294967295) >>> 0;
|
|
15710
15231
|
}
|
|
15711
15232
|
}
|
|
15712
15233
|
});
|
|
15713
|
-
var
|
|
15714
|
-
"../contracts/
|
|
15234
|
+
var require_tron_address = __commonJS2({
|
|
15235
|
+
"../contracts/tvm/escrow-encoding/typescript/dist/tron-address.js"(exports2) {
|
|
15715
15236
|
"use strict";
|
|
15237
|
+
var __importDefault = exports2 && exports2.__importDefault || function(mod) {
|
|
15238
|
+
return mod && mod.__esModule ? mod : { "default": mod };
|
|
15239
|
+
};
|
|
15716
15240
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
15717
|
-
exports2.
|
|
15241
|
+
exports2.base58ToHex = base58ToHex2;
|
|
15242
|
+
exports2.normalizeAddress = normalizeAddress2;
|
|
15718
15243
|
var ethers_1 = __require("ethers");
|
|
15719
|
-
|
|
15720
|
-
|
|
15244
|
+
var bs58_1 = __importDefault(__require("bs58"));
|
|
15245
|
+
var TVM_MAINNET_PREFIX = "41";
|
|
15246
|
+
function base58ToHex2(base58Address) {
|
|
15247
|
+
if (!base58Address || !base58Address.startsWith("T")) {
|
|
15248
|
+
throw new Error(`Invalid Tron base58 address: ${base58Address}`);
|
|
15249
|
+
}
|
|
15250
|
+
const decoded = bs58_1.default.decode(base58Address);
|
|
15251
|
+
if (decoded.length !== 25) {
|
|
15252
|
+
throw new Error(`Invalid Tron base58 length (expected 25 bytes): ${base58Address}`);
|
|
15253
|
+
}
|
|
15254
|
+
const payload = decoded.slice(0, 21);
|
|
15255
|
+
const checksum = (0, ethers_1.hexlify)(decoded.slice(21)).slice(2);
|
|
15256
|
+
const computed = (0, ethers_1.sha256)((0, ethers_1.sha256)(payload)).slice(2, 10);
|
|
15257
|
+
if (checksum !== computed) {
|
|
15258
|
+
throw new Error(`Invalid Tron base58 checksum: ${base58Address}`);
|
|
15259
|
+
}
|
|
15260
|
+
return (0, ethers_1.hexlify)(payload).slice(2);
|
|
15261
|
+
}
|
|
15262
|
+
function normalizeAddress2(address) {
|
|
15263
|
+
if (!address) {
|
|
15264
|
+
throw new Error("Empty address");
|
|
15265
|
+
}
|
|
15266
|
+
let hexAddress = address;
|
|
15267
|
+
if (address.startsWith("T")) {
|
|
15268
|
+
hexAddress = base58ToHex2(address);
|
|
15269
|
+
}
|
|
15270
|
+
hexAddress = hexAddress.replace(/^0x/, "");
|
|
15271
|
+
if (hexAddress.startsWith(TVM_MAINNET_PREFIX)) {
|
|
15272
|
+
hexAddress = hexAddress.substring(2);
|
|
15273
|
+
}
|
|
15274
|
+
if (hexAddress.length !== 40) {
|
|
15275
|
+
throw new Error(`Invalid address length: expected 40 chars, got ${hexAddress.length}`);
|
|
15276
|
+
}
|
|
15277
|
+
if (!/^[0-9a-fA-F]{40}$/.test(hexAddress)) {
|
|
15278
|
+
throw new Error("Invalid hex address format");
|
|
15279
|
+
}
|
|
15280
|
+
return "0x" + hexAddress.toLowerCase();
|
|
15721
15281
|
}
|
|
15722
15282
|
}
|
|
15723
15283
|
});
|
|
15724
|
-
var
|
|
15725
|
-
"../contracts/
|
|
15284
|
+
var require_reserve_encoder = __commonJS2({
|
|
15285
|
+
"../contracts/tvm/escrow-encoding/typescript/dist/reserve-encoder.js"(exports2) {
|
|
15726
15286
|
"use strict";
|
|
15727
15287
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
15728
|
-
exports2.
|
|
15729
|
-
|
|
15730
|
-
|
|
15731
|
-
|
|
15732
|
-
|
|
15733
|
-
{ name: "
|
|
15734
|
-
{ name: "
|
|
15735
|
-
{ name: "nonce", type: "uint256" },
|
|
15736
|
-
{ name: "deadline", type: "uint256" },
|
|
15737
|
-
{ name: "witness", type: "DepositWitness" }
|
|
15738
|
-
],
|
|
15739
|
-
TokenPermissions: [
|
|
15740
|
-
{ name: "token", type: "address" },
|
|
15741
|
-
{ name: "amount", type: "uint256" }
|
|
15742
|
-
],
|
|
15743
|
-
DepositWitness: [
|
|
15744
|
-
{ name: "requestId", type: "bytes32" },
|
|
15745
|
-
{ name: "reserver", type: "address" },
|
|
15746
|
-
{ name: "releaser", type: "address" }
|
|
15288
|
+
exports2.computeReserveDigest = computeReserveDigest;
|
|
15289
|
+
var ethers_1 = __require("ethers");
|
|
15290
|
+
var chain_id_1 = require_chain_id();
|
|
15291
|
+
var RESERVE_WITNESS_TYPES = {
|
|
15292
|
+
ReserveWitness: [
|
|
15293
|
+
{ name: "paymentId", type: "bytes32" },
|
|
15294
|
+
{ name: "settler", type: "address" }
|
|
15747
15295
|
]
|
|
15748
15296
|
};
|
|
15749
|
-
|
|
15750
|
-
|
|
15751
|
-
|
|
15752
|
-
|
|
15753
|
-
|
|
15754
|
-
|
|
15755
|
-
|
|
15756
|
-
|
|
15757
|
-
|
|
15758
|
-
|
|
15759
|
-
|
|
15760
|
-
|
|
15297
|
+
function computeReserveDigest(input) {
|
|
15298
|
+
const domain = {
|
|
15299
|
+
name: "Escrow",
|
|
15300
|
+
version: "3",
|
|
15301
|
+
chainId: (0, chain_id_1.maskChainId)(input.chainId),
|
|
15302
|
+
verifyingContract: input.escrowContract
|
|
15303
|
+
};
|
|
15304
|
+
return ethers_1.TypedDataEncoder.hash(domain, RESERVE_WITNESS_TYPES, {
|
|
15305
|
+
paymentId: input.paymentId,
|
|
15306
|
+
settler: input.settler
|
|
15307
|
+
});
|
|
15308
|
+
}
|
|
15309
|
+
}
|
|
15310
|
+
});
|
|
15311
|
+
var require_payment_id = __commonJS2({
|
|
15312
|
+
"../contracts/tvm/escrow-encoding/typescript/dist/payment-id.js"(exports2) {
|
|
15313
|
+
"use strict";
|
|
15314
|
+
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
15315
|
+
exports2.computePaymentId = computePaymentId;
|
|
15316
|
+
var ethers_1 = __require("ethers");
|
|
15317
|
+
var tron_address_1 = require_tron_address();
|
|
15318
|
+
function computePaymentId(depositor, signature, nonce) {
|
|
15319
|
+
if (!/^[0-9]+$/.test(nonce)) {
|
|
15320
|
+
throw new Error(`invalid nonce (expected base-10 decimal): ${nonce}`);
|
|
15321
|
+
}
|
|
15322
|
+
const encoded = ethers_1.AbiCoder.defaultAbiCoder().encode(["address", "bytes", "uint256"], [(0, tron_address_1.normalizeAddress)(depositor), signature, nonce]);
|
|
15323
|
+
return (0, ethers_1.keccak256)(encoded);
|
|
15324
|
+
}
|
|
15325
|
+
}
|
|
15326
|
+
});
|
|
15327
|
+
var require_deposit_encoder = __commonJS2({
|
|
15328
|
+
"../contracts/tvm/escrow-encoding/typescript/dist/deposit-encoder.js"(exports2) {
|
|
15329
|
+
"use strict";
|
|
15330
|
+
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
15331
|
+
exports2.createTvmPermitWitnessTransferFromPrehash = createTvmPermitWitnessTransferFromPrehash2;
|
|
15332
|
+
exports2.hashTvmPermitWitnessTransferFrom = hashTvmPermitWitnessTransferFrom2;
|
|
15333
|
+
var ethers_1 = __require("ethers");
|
|
15334
|
+
var chain_id_1 = require_chain_id();
|
|
15335
|
+
var tron_address_1 = require_tron_address();
|
|
15336
|
+
var PERMIT_WITNESS_TYPES_V2 = {
|
|
15337
|
+
PermitWitnessTransferFrom: [
|
|
15338
|
+
{ name: "permitted", type: "TokenPermissions" },
|
|
15339
|
+
{ name: "spender", type: "address" },
|
|
15340
|
+
{ name: "nonce", type: "uint256" },
|
|
15341
|
+
{ name: "deadline", type: "uint256" },
|
|
15342
|
+
{ name: "witness", type: "DepositWitness" }
|
|
15343
|
+
],
|
|
15344
|
+
TokenPermissions: [
|
|
15345
|
+
{ name: "token", type: "address" },
|
|
15346
|
+
{ name: "amount", type: "uint256" }
|
|
15347
|
+
],
|
|
15348
|
+
DepositWitness: [
|
|
15349
|
+
{ name: "reserver", type: "address" },
|
|
15350
|
+
{ name: "releaser", type: "address" }
|
|
15351
|
+
]
|
|
15352
|
+
};
|
|
15353
|
+
function createTvmPermitWitnessTransferFromPrehash2(params) {
|
|
15354
|
+
const maskedChainId = (0, chain_id_1.maskChainId)(params.chainId);
|
|
15355
|
+
return {
|
|
15356
|
+
types: PERMIT_WITNESS_TYPES_V2,
|
|
15357
|
+
primaryType: "PermitWitnessTransferFrom",
|
|
15358
|
+
domain: {
|
|
15359
|
+
name: "Permit2",
|
|
15360
|
+
chainId: `0x${maskedChainId.toString(16)}`,
|
|
15361
|
+
verifyingContract: (0, tron_address_1.normalizeAddress)(params.permit2Address)
|
|
15362
|
+
},
|
|
15363
|
+
message: {
|
|
15364
|
+
permitted: {
|
|
15365
|
+
token: (0, tron_address_1.normalizeAddress)(params.tokenAddress),
|
|
15366
|
+
amount: params.amount
|
|
15367
|
+
},
|
|
15368
|
+
spender: (0, tron_address_1.normalizeAddress)(params.spenderAddress),
|
|
15369
|
+
nonce: params.nonce.toString(),
|
|
15370
|
+
deadline: params.deadline.toString(),
|
|
15371
|
+
witness: {
|
|
15372
|
+
reserver: (0, tron_address_1.normalizeAddress)(params.reserverAddress),
|
|
15373
|
+
releaser: (0, tron_address_1.normalizeAddress)(params.releaserAddress)
|
|
15374
|
+
}
|
|
15375
|
+
}
|
|
15376
|
+
};
|
|
15377
|
+
}
|
|
15378
|
+
function hashTvmPermitWitnessTransferFrom2(prehash) {
|
|
15379
|
+
return ethers_1.TypedDataEncoder.hash(prehash.domain, prehash.types, prehash.message);
|
|
15380
|
+
}
|
|
15381
|
+
}
|
|
15382
|
+
});
|
|
15383
|
+
var require_dist3 = __commonJS2({
|
|
15384
|
+
"../contracts/tvm/escrow-encoding/typescript/dist/index.js"(exports2) {
|
|
15385
|
+
"use strict";
|
|
15386
|
+
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
15387
|
+
exports2.hashTvmPermitWitnessTransferFrom = exports2.createTvmPermitWitnessTransferFromPrehash = exports2.computePaymentId = exports2.computeReserveDigest = exports2.normalizeAddress = exports2.base58ToHex = exports2.maskChainId = void 0;
|
|
15388
|
+
var chain_id_1 = require_chain_id();
|
|
15389
|
+
Object.defineProperty(exports2, "maskChainId", { enumerable: true, get: function() {
|
|
15390
|
+
return chain_id_1.maskChainId;
|
|
15391
|
+
} });
|
|
15392
|
+
var tron_address_1 = require_tron_address();
|
|
15393
|
+
Object.defineProperty(exports2, "base58ToHex", { enumerable: true, get: function() {
|
|
15394
|
+
return tron_address_1.base58ToHex;
|
|
15395
|
+
} });
|
|
15396
|
+
Object.defineProperty(exports2, "normalizeAddress", { enumerable: true, get: function() {
|
|
15397
|
+
return tron_address_1.normalizeAddress;
|
|
15398
|
+
} });
|
|
15399
|
+
var reserve_encoder_1 = require_reserve_encoder();
|
|
15400
|
+
Object.defineProperty(exports2, "computeReserveDigest", { enumerable: true, get: function() {
|
|
15401
|
+
return reserve_encoder_1.computeReserveDigest;
|
|
15402
|
+
} });
|
|
15403
|
+
var payment_id_1 = require_payment_id();
|
|
15404
|
+
Object.defineProperty(exports2, "computePaymentId", { enumerable: true, get: function() {
|
|
15405
|
+
return payment_id_1.computePaymentId;
|
|
15406
|
+
} });
|
|
15407
|
+
var deposit_encoder_1 = require_deposit_encoder();
|
|
15408
|
+
Object.defineProperty(exports2, "createTvmPermitWitnessTransferFromPrehash", { enumerable: true, get: function() {
|
|
15409
|
+
return deposit_encoder_1.createTvmPermitWitnessTransferFromPrehash;
|
|
15410
|
+
} });
|
|
15411
|
+
Object.defineProperty(exports2, "hashTvmPermitWitnessTransferFrom", { enumerable: true, get: function() {
|
|
15412
|
+
return deposit_encoder_1.hashTvmPermitWitnessTransferFrom;
|
|
15413
|
+
} });
|
|
15414
|
+
}
|
|
15415
|
+
});
|
|
15416
|
+
var require_types = __commonJS2({
|
|
15417
|
+
"../schemas/declarations/PaymentRequest/v1/bindings/typescript/sender-auth/dist/types.js"(exports2) {
|
|
15418
|
+
"use strict";
|
|
15419
|
+
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
15420
|
+
}
|
|
15421
|
+
});
|
|
15422
|
+
var require_utils = __commonJS2({
|
|
15423
|
+
"../schemas/declarations/PaymentRequest/v1/bindings/typescript/sender-auth/dist/utils.js"(exports2) {
|
|
15424
|
+
"use strict";
|
|
15425
|
+
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
15426
|
+
exports2.SOLANA_REPLAY_SLOTS = exports2.PERMIT_NONCE_DOMAIN = exports2.REPLAY_HORIZON_SECS = void 0;
|
|
15427
|
+
exports2.resolvePermitDeadline = resolvePermitDeadline;
|
|
15428
|
+
exports2.generatePermitNonce = generatePermitNonce;
|
|
15429
|
+
exports2.resolvePermitNonce = resolvePermitNonce;
|
|
15430
|
+
exports2.deterministicPermitNonce = deterministicPermitNonce2;
|
|
15431
|
+
exports2.deterministicSolanaNonce = deterministicSolanaNonce2;
|
|
15432
|
+
exports2.sameAddress = sameAddress;
|
|
15433
|
+
exports2.assertKeyMatchesSender = assertKeyMatchesSender2;
|
|
15434
|
+
exports2.assertToken = assertToken;
|
|
15435
|
+
exports2.assertAmountMatches = assertAmountMatches;
|
|
15436
|
+
exports2.assertFresh = assertFresh;
|
|
15437
|
+
exports2.assertSpender = assertSpender;
|
|
15438
|
+
exports2.assertWitnessRoles = assertWitnessRoles;
|
|
15439
|
+
exports2.assertRolePairComplete = assertRolePairComplete;
|
|
15440
|
+
exports2.nowSec = nowSec;
|
|
15441
|
+
var ethers_1 = __require("ethers");
|
|
15442
|
+
exports2.REPLAY_HORIZON_SECS = 128;
|
|
15443
|
+
function resolvePermitDeadline(deadline) {
|
|
15444
|
+
return BigInt(deadline);
|
|
15445
|
+
}
|
|
15446
|
+
function generatePermitNonce() {
|
|
15447
|
+
const rand = new Uint32Array(1);
|
|
15448
|
+
globalThis.crypto.getRandomValues(rand);
|
|
15449
|
+
return (BigInt(Date.now()) << 32n) + BigInt(rand[0]);
|
|
15450
|
+
}
|
|
15451
|
+
function resolvePermitNonce(nonce) {
|
|
15452
|
+
return BigInt(nonce);
|
|
15453
|
+
}
|
|
15454
|
+
exports2.PERMIT_NONCE_DOMAIN = "atum-permit:v1:";
|
|
15455
|
+
exports2.SOLANA_REPLAY_SLOTS = 235n;
|
|
15456
|
+
var SOLANA_BUCKET_BITS = 17n;
|
|
15457
|
+
function canonicalDepositor(depositor) {
|
|
15458
|
+
const lower = depositor.toLowerCase();
|
|
15459
|
+
return lower.startsWith("0x") ? lower : depositor;
|
|
15460
|
+
}
|
|
15461
|
+
function permitNonceSeed(requestId, depositor) {
|
|
15462
|
+
if (!requestId) {
|
|
15463
|
+
throw new Error("sender_auth: request_id is required to derive a deterministic permit nonce");
|
|
15464
|
+
}
|
|
15465
|
+
return BigInt((0, ethers_1.keccak256)((0, ethers_1.toUtf8Bytes)(`${exports2.PERMIT_NONCE_DOMAIN}${requestId}:${canonicalDepositor(depositor)}`)));
|
|
15466
|
+
}
|
|
15467
|
+
function deterministicPermitNonce2(params) {
|
|
15468
|
+
return permitNonceSeed(params.requestId, params.depositor);
|
|
15469
|
+
}
|
|
15470
|
+
function deterministicSolanaNonce2(params) {
|
|
15471
|
+
const seed = permitNonceSeed(params.requestId, params.depositor);
|
|
15472
|
+
const slot = seed % exports2.SOLANA_REPLAY_SLOTS;
|
|
15473
|
+
const bucket = (seed >> 8n) % (1n << SOLANA_BUCKET_BITS);
|
|
15474
|
+
return bucket << 32n | slot;
|
|
15475
|
+
}
|
|
15476
|
+
function sameAddress(a, b) {
|
|
15477
|
+
if (a.startsWith("0x") && b.startsWith("0x")) {
|
|
15478
|
+
return a.toLowerCase() === b.toLowerCase();
|
|
15479
|
+
}
|
|
15480
|
+
return a === b;
|
|
15481
|
+
}
|
|
15482
|
+
function assertKeyMatchesSender2(matches, sender, derived) {
|
|
15483
|
+
if (!matches) {
|
|
15484
|
+
throw new Error(`sender_auth: private key derives ${derived}, not the expected sender ${sender}`);
|
|
15485
|
+
}
|
|
15486
|
+
}
|
|
15487
|
+
function assertToken(token, sourceAsset, normalize) {
|
|
15488
|
+
if (!sameAddress(token, normalize(sourceAsset))) {
|
|
15489
|
+
throw new Error("sender_auth: permit token does not match the source asset");
|
|
15490
|
+
}
|
|
15491
|
+
}
|
|
15492
|
+
function assertAmountMatches(amount, maxSourceAmount) {
|
|
15493
|
+
if (BigInt(amount) !== BigInt(maxSourceAmount)) {
|
|
15494
|
+
throw new Error("sender_auth: permit amount does not match max_source_amount");
|
|
15495
|
+
}
|
|
15496
|
+
}
|
|
15497
|
+
function assertFresh(deadlineSec, nowSec2) {
|
|
15498
|
+
if (deadlineSec <= nowSec2) {
|
|
15499
|
+
throw new Error("sender_auth: permit deadline is not in the future");
|
|
15500
|
+
}
|
|
15501
|
+
}
|
|
15502
|
+
function assertSpender(spender, escrow, normalize) {
|
|
15503
|
+
if (!sameAddress(spender, normalize(escrow))) {
|
|
15504
|
+
throw new Error("sender_auth: permit spender is not the source escrow");
|
|
15505
|
+
}
|
|
15506
|
+
}
|
|
15507
|
+
function assertWitnessRoles(reserver, releaser, expectedReserver, expectedReleaser, normalize) {
|
|
15508
|
+
if (!sameAddress(reserver, normalize(expectedReserver)) || !sameAddress(releaser, normalize(expectedReleaser))) {
|
|
15509
|
+
throw new Error("sender_auth: deposit witness roles do not match the challenge");
|
|
15510
|
+
}
|
|
15511
|
+
}
|
|
15512
|
+
function assertRolePairComplete(reserver, releaser) {
|
|
15513
|
+
if (reserver === void 0 !== (releaser === void 0)) {
|
|
15514
|
+
throw new Error("sender_auth: reserver and releaser must be supplied together");
|
|
15515
|
+
}
|
|
15516
|
+
}
|
|
15517
|
+
function nowSec() {
|
|
15518
|
+
return Math.floor(Date.now() / 1e3);
|
|
15519
|
+
}
|
|
15520
|
+
}
|
|
15521
|
+
});
|
|
15522
|
+
var require_chain_id2 = __commonJS2({
|
|
15523
|
+
"../schemas/declarations/PaymentRequest/v1/bindings/typescript/sender-auth/dist/chain-id.js"(exports2) {
|
|
15524
|
+
"use strict";
|
|
15525
|
+
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
15526
|
+
exports2.TRON_PERMIT2_FALLBACKS = exports2.TRON_CHAIN_IDS = void 0;
|
|
15527
|
+
exports2.namespaceOf = namespaceOf2;
|
|
15528
|
+
exports2.evmChainId = evmChainId;
|
|
15529
|
+
exports2.tronNumericChainId = tronNumericChainId;
|
|
15530
|
+
exports2.resolveTronPermit2 = resolveTronPermit2;
|
|
15531
|
+
exports2.clusterIdFromName = clusterIdFromName;
|
|
15532
|
+
function namespaceOf2(network) {
|
|
15533
|
+
return network.split(":")[0];
|
|
15534
|
+
}
|
|
15535
|
+
function evmChainId(network) {
|
|
15536
|
+
const match = /^eip155:([0-9]+)$/.exec(network);
|
|
15537
|
+
if (!match) {
|
|
15538
|
+
throw new Error(`sender_auth: expected an eip155 network, got ${network}`);
|
|
15539
|
+
}
|
|
15540
|
+
return Number(match[1]);
|
|
15541
|
+
}
|
|
15542
|
+
exports2.TRON_CHAIN_IDS = {
|
|
15543
|
+
mainnet: 728126428,
|
|
15544
|
+
shasta: 2494104990
|
|
15545
|
+
};
|
|
15546
|
+
function tronNumericChainId(network) {
|
|
15547
|
+
const cluster = network.split(":")[1];
|
|
15548
|
+
const id = exports2.TRON_CHAIN_IDS[cluster ?? ""];
|
|
15549
|
+
if (id === void 0) {
|
|
15550
|
+
throw new Error(`sender_auth: unsupported Tron network '${network}'`);
|
|
15551
|
+
}
|
|
15552
|
+
return id;
|
|
15553
|
+
}
|
|
15554
|
+
exports2.TRON_PERMIT2_FALLBACKS = {
|
|
15555
|
+
"tron:mainnet": "TJhMXTHQHeQyMD7TcKQFqAePNgG4b31H9m",
|
|
15556
|
+
"tron:shasta": "TPUqJPASUn1zLvbLBgRZ5pBYrx7WSe5ahp"
|
|
15557
|
+
};
|
|
15558
|
+
function resolveTronPermit2(network) {
|
|
15559
|
+
const resolved = exports2.TRON_PERMIT2_FALLBACKS[network];
|
|
15560
|
+
if (!resolved) {
|
|
15561
|
+
throw new Error(`sender_auth: no Permit2 address known for Tron network '${network}'`);
|
|
15562
|
+
}
|
|
15563
|
+
return resolved;
|
|
15564
|
+
}
|
|
15565
|
+
function clusterIdFromName(name) {
|
|
15566
|
+
const encoded = new TextEncoder().encode(name);
|
|
15567
|
+
if (encoded.length > 32) {
|
|
15568
|
+
throw new Error(`sender_auth: Solana cluster name too long (${encoded.length} > 32 bytes): ${name}`);
|
|
15569
|
+
}
|
|
15570
|
+
const out = new Uint8Array(32);
|
|
15571
|
+
out.set(encoded);
|
|
15572
|
+
return out;
|
|
15573
|
+
}
|
|
15574
|
+
}
|
|
15575
|
+
});
|
|
15576
|
+
var require_payment_id2 = __commonJS2({
|
|
15577
|
+
"../contracts/evm/escrow-encoding/typescript/dist/payment-id.js"(exports2) {
|
|
15578
|
+
"use strict";
|
|
15579
|
+
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
15580
|
+
exports2.computePaymentId = computePaymentId;
|
|
15581
|
+
exports2.computePaymentIdV2 = computePaymentIdV2;
|
|
15582
|
+
var ethers_1 = __require("ethers");
|
|
15583
|
+
function computePaymentId(depositor, signature) {
|
|
15584
|
+
const abiCoder = ethers_1.ethers.AbiCoder.defaultAbiCoder();
|
|
15585
|
+
const encoded = abiCoder.encode(["address", "bytes"], [depositor, signature]);
|
|
15586
|
+
return ethers_1.ethers.keccak256(encoded);
|
|
15587
|
+
}
|
|
15588
|
+
function computePaymentIdV2(depositor, signature, nonce) {
|
|
15589
|
+
const abiCoder = ethers_1.ethers.AbiCoder.defaultAbiCoder();
|
|
15590
|
+
const encoded = abiCoder.encode(["address", "bytes", "uint256"], [depositor, signature, nonce]);
|
|
15591
|
+
return ethers_1.ethers.keccak256(encoded);
|
|
15592
|
+
}
|
|
15593
|
+
}
|
|
15594
|
+
});
|
|
15595
|
+
var require_nonce_generator = __commonJS2({
|
|
15596
|
+
"../contracts/evm/escrow-encoding/typescript/dist/nonce-generator.js"(exports2) {
|
|
15597
|
+
"use strict";
|
|
15598
|
+
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
15599
|
+
exports2.generateNonce = generateNonce2;
|
|
15600
|
+
var ethers_1 = __require("ethers");
|
|
15601
|
+
function generateNonce2() {
|
|
15602
|
+
return ethers_1.ethers.hexlify(ethers_1.ethers.randomBytes(32));
|
|
15603
|
+
}
|
|
15604
|
+
}
|
|
15605
|
+
});
|
|
15606
|
+
var require_permit_types = __commonJS2({
|
|
15607
|
+
"../contracts/evm/escrow-encoding/typescript/dist/permit-types.js"(exports2) {
|
|
15608
|
+
"use strict";
|
|
15609
|
+
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
15610
|
+
exports2.REFUND_WITNESS_TYPES = exports2.RELEASE_WITNESS_TYPES = exports2.RESERVE_WITNESS_TYPES = exports2.PERMIT_WITNESS_TYPES_V2 = exports2.PERMIT_WITNESS_TYPES = void 0;
|
|
15611
|
+
exports2.createPermit2Domain = createPermit2Domain;
|
|
15612
|
+
exports2.createEscrowDomain = createEscrowDomain;
|
|
15613
|
+
exports2.PERMIT_WITNESS_TYPES = {
|
|
15614
|
+
PermitWitnessTransferFrom: [
|
|
15615
|
+
{ name: "permitted", type: "TokenPermissions" },
|
|
15616
|
+
{ name: "spender", type: "address" },
|
|
15617
|
+
{ name: "nonce", type: "uint256" },
|
|
15618
|
+
{ name: "deadline", type: "uint256" },
|
|
15619
|
+
{ name: "witness", type: "DepositWitness" }
|
|
15620
|
+
],
|
|
15621
|
+
TokenPermissions: [
|
|
15622
|
+
{ name: "token", type: "address" },
|
|
15623
|
+
{ name: "amount", type: "uint256" }
|
|
15624
|
+
],
|
|
15625
|
+
DepositWitness: [
|
|
15626
|
+
{ name: "requestId", type: "bytes32" },
|
|
15627
|
+
{ name: "reserver", type: "address" },
|
|
15628
|
+
{ name: "releaser", type: "address" }
|
|
15629
|
+
]
|
|
15630
|
+
};
|
|
15631
|
+
exports2.PERMIT_WITNESS_TYPES_V2 = {
|
|
15632
|
+
PermitWitnessTransferFrom: [
|
|
15633
|
+
{ name: "permitted", type: "TokenPermissions" },
|
|
15634
|
+
{ name: "spender", type: "address" },
|
|
15635
|
+
{ name: "nonce", type: "uint256" },
|
|
15636
|
+
{ name: "deadline", type: "uint256" },
|
|
15637
|
+
{ name: "witness", type: "DepositWitness" }
|
|
15638
|
+
],
|
|
15639
|
+
TokenPermissions: [
|
|
15640
|
+
{ name: "token", type: "address" },
|
|
15641
|
+
{ name: "amount", type: "uint256" }
|
|
15642
|
+
],
|
|
15761
15643
|
DepositWitness: [
|
|
15762
15644
|
{ name: "reserver", type: "address" },
|
|
15763
15645
|
{ name: "releaser", type: "address" }
|
|
@@ -15810,7 +15692,7 @@ var require_dist2 = __commonJS({
|
|
|
15810
15692
|
};
|
|
15811
15693
|
}
|
|
15812
15694
|
});
|
|
15813
|
-
var
|
|
15695
|
+
var require_escrow_abi = __commonJS2({
|
|
15814
15696
|
"../contracts/evm/escrow-encoding/typescript/dist/escrow-abi.js"(exports2) {
|
|
15815
15697
|
"use strict";
|
|
15816
15698
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
@@ -15999,13 +15881,13 @@ var require_dist2 = __commonJS({
|
|
|
15999
15881
|
exports2.ESCROW_V2_ABI_JSON = exports2.ESCROW_V3_ABI_JSON;
|
|
16000
15882
|
}
|
|
16001
15883
|
});
|
|
16002
|
-
var
|
|
15884
|
+
var require_reserve_encoder2 = __commonJS2({
|
|
16003
15885
|
"../contracts/evm/escrow-encoding/typescript/dist/reserve-encoder.js"(exports2) {
|
|
16004
15886
|
"use strict";
|
|
16005
15887
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
16006
15888
|
exports2.computeReserveDigest = computeReserveDigest;
|
|
16007
15889
|
var ethers_1 = __require("ethers");
|
|
16008
|
-
var permit_types_1 =
|
|
15890
|
+
var permit_types_1 = require_permit_types();
|
|
16009
15891
|
function computeReserveDigest(input) {
|
|
16010
15892
|
const domain = (0, permit_types_1.createEscrowDomain)(input.chainId, input.escrowContract);
|
|
16011
15893
|
return ethers_1.TypedDataEncoder.hash(domain, permit_types_1.RESERVE_WITNESS_TYPES, {
|
|
@@ -16015,7 +15897,7 @@ var require_dist2 = __commonJS({
|
|
|
16015
15897
|
}
|
|
16016
15898
|
}
|
|
16017
15899
|
});
|
|
16018
|
-
var
|
|
15900
|
+
var require_deposit_encoder2 = __commonJS2({
|
|
16019
15901
|
"../contracts/evm/escrow-encoding/typescript/dist/deposit-encoder.js"(exports2) {
|
|
16020
15902
|
"use strict";
|
|
16021
15903
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
@@ -16023,7 +15905,7 @@ var require_dist2 = __commonJS({
|
|
|
16023
15905
|
exports2.createPermitWitnessTransferFromPrehash = createPermitWitnessTransferFromPrehash2;
|
|
16024
15906
|
exports2.hashPermitWitnessTransferFrom = hashPermitWitnessTransferFrom2;
|
|
16025
15907
|
var ethers_1 = __require("ethers");
|
|
16026
|
-
var permit_types_1 =
|
|
15908
|
+
var permit_types_1 = require_permit_types();
|
|
16027
15909
|
exports2.PERMIT2_CONTRACT_ADDRESS = "0x000000000022D473030F116dDEE9F6B43aC78BA3";
|
|
16028
15910
|
function createPermitWitnessTransferFromPrehash2(params) {
|
|
16029
15911
|
return {
|
|
@@ -16054,23 +15936,23 @@ var require_dist2 = __commonJS({
|
|
|
16054
15936
|
}
|
|
16055
15937
|
}
|
|
16056
15938
|
});
|
|
16057
|
-
var
|
|
15939
|
+
var require_dist22 = __commonJS2({
|
|
16058
15940
|
"../contracts/evm/escrow-encoding/typescript/dist/index.js"(exports2) {
|
|
16059
15941
|
"use strict";
|
|
16060
15942
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
16061
15943
|
exports2.PERMIT2_CONTRACT_ADDRESS = exports2.hashPermitWitnessTransferFrom = exports2.createPermitWitnessTransferFromPrehash = exports2.computeReserveDigest = exports2.ESCROW_V3_ABI_JSON = exports2.ESCROW_V2_ABI_JSON = exports2.ESCROW_ABI_JSON = exports2.ESCROW_ABI = exports2.REFUND_WITNESS_TYPES = exports2.RELEASE_WITNESS_TYPES = exports2.RESERVE_WITNESS_TYPES = exports2.createEscrowDomain = exports2.createPermit2Domain = exports2.PERMIT_WITNESS_TYPES_V2 = exports2.PERMIT_WITNESS_TYPES = exports2.generateNonce = exports2.computePaymentIdV2 = exports2.computePaymentId = void 0;
|
|
16062
|
-
var payment_id_1 =
|
|
15944
|
+
var payment_id_1 = require_payment_id2();
|
|
16063
15945
|
Object.defineProperty(exports2, "computePaymentId", { enumerable: true, get: function() {
|
|
16064
15946
|
return payment_id_1.computePaymentId;
|
|
16065
15947
|
} });
|
|
16066
15948
|
Object.defineProperty(exports2, "computePaymentIdV2", { enumerable: true, get: function() {
|
|
16067
15949
|
return payment_id_1.computePaymentIdV2;
|
|
16068
15950
|
} });
|
|
16069
|
-
var nonce_generator_1 =
|
|
15951
|
+
var nonce_generator_1 = require_nonce_generator();
|
|
16070
15952
|
Object.defineProperty(exports2, "generateNonce", { enumerable: true, get: function() {
|
|
16071
15953
|
return nonce_generator_1.generateNonce;
|
|
16072
15954
|
} });
|
|
16073
|
-
var permit_types_1 =
|
|
15955
|
+
var permit_types_1 = require_permit_types();
|
|
16074
15956
|
Object.defineProperty(exports2, "PERMIT_WITNESS_TYPES", { enumerable: true, get: function() {
|
|
16075
15957
|
return permit_types_1.PERMIT_WITNESS_TYPES;
|
|
16076
15958
|
} });
|
|
@@ -16092,7 +15974,7 @@ var require_dist2 = __commonJS({
|
|
|
16092
15974
|
Object.defineProperty(exports2, "REFUND_WITNESS_TYPES", { enumerable: true, get: function() {
|
|
16093
15975
|
return permit_types_1.REFUND_WITNESS_TYPES;
|
|
16094
15976
|
} });
|
|
16095
|
-
var escrow_abi_1 =
|
|
15977
|
+
var escrow_abi_1 = require_escrow_abi();
|
|
16096
15978
|
Object.defineProperty(exports2, "ESCROW_ABI", { enumerable: true, get: function() {
|
|
16097
15979
|
return escrow_abi_1.ESCROW_ABI;
|
|
16098
15980
|
} });
|
|
@@ -16105,11 +15987,11 @@ var require_dist2 = __commonJS({
|
|
|
16105
15987
|
Object.defineProperty(exports2, "ESCROW_V3_ABI_JSON", { enumerable: true, get: function() {
|
|
16106
15988
|
return escrow_abi_1.ESCROW_V3_ABI_JSON;
|
|
16107
15989
|
} });
|
|
16108
|
-
var reserve_encoder_1 =
|
|
15990
|
+
var reserve_encoder_1 = require_reserve_encoder2();
|
|
16109
15991
|
Object.defineProperty(exports2, "computeReserveDigest", { enumerable: true, get: function() {
|
|
16110
15992
|
return reserve_encoder_1.computeReserveDigest;
|
|
16111
15993
|
} });
|
|
16112
|
-
var deposit_encoder_1 =
|
|
15994
|
+
var deposit_encoder_1 = require_deposit_encoder2();
|
|
16113
15995
|
Object.defineProperty(exports2, "createPermitWitnessTransferFromPrehash", { enumerable: true, get: function() {
|
|
16114
15996
|
return deposit_encoder_1.createPermitWitnessTransferFromPrehash;
|
|
16115
15997
|
} });
|
|
@@ -16121,199 +16003,256 @@ var require_dist2 = __commonJS({
|
|
|
16121
16003
|
} });
|
|
16122
16004
|
}
|
|
16123
16005
|
});
|
|
16124
|
-
var
|
|
16125
|
-
"../
|
|
16126
|
-
"use strict";
|
|
16127
|
-
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
16128
|
-
exports2.maskChainId = maskChainId2;
|
|
16129
|
-
function maskChainId2(chainId) {
|
|
16130
|
-
return (chainId & 4294967295) >>> 0;
|
|
16131
|
-
}
|
|
16132
|
-
}
|
|
16133
|
-
});
|
|
16134
|
-
var require_tron_address2 = __commonJS2({
|
|
16135
|
-
"../contracts/tvm/escrow-encoding/typescript/dist/tron-address.js"(exports2) {
|
|
16006
|
+
var require_errors = __commonJS2({
|
|
16007
|
+
"../schemas/declarations/PaymentRequest/v1/bindings/typescript/sender-auth/dist/errors.js"(exports2) {
|
|
16136
16008
|
"use strict";
|
|
16137
|
-
var __importDefault = exports2 && exports2.__importDefault || function(mod) {
|
|
16138
|
-
return mod && mod.__esModule ? mod : { "default": mod };
|
|
16139
|
-
};
|
|
16140
16009
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
16141
|
-
exports2.
|
|
16142
|
-
|
|
16143
|
-
|
|
16144
|
-
|
|
16145
|
-
|
|
16146
|
-
function base58ToHex2(base58Address) {
|
|
16147
|
-
if (!base58Address || !base58Address.startsWith("T")) {
|
|
16148
|
-
throw new Error(`Invalid Tron base58 address: ${base58Address}`);
|
|
16149
|
-
}
|
|
16150
|
-
const decoded = bs58_1.default.decode(base58Address);
|
|
16151
|
-
if (decoded.length !== 25) {
|
|
16152
|
-
throw new Error(`Invalid Tron base58 length (expected 25 bytes): ${base58Address}`);
|
|
16153
|
-
}
|
|
16154
|
-
const payload = decoded.slice(0, 21);
|
|
16155
|
-
const checksum = (0, ethers_1.hexlify)(decoded.slice(21)).slice(2);
|
|
16156
|
-
const computed = (0, ethers_1.sha256)((0, ethers_1.sha256)(payload)).slice(2, 10);
|
|
16157
|
-
if (checksum !== computed) {
|
|
16158
|
-
throw new Error(`Invalid Tron base58 checksum: ${base58Address}`);
|
|
16159
|
-
}
|
|
16160
|
-
return (0, ethers_1.hexlify)(payload).slice(2);
|
|
16161
|
-
}
|
|
16162
|
-
function normalizeAddress2(address) {
|
|
16163
|
-
if (!address) {
|
|
16164
|
-
throw new Error("Empty address");
|
|
16165
|
-
}
|
|
16166
|
-
let hexAddress = address;
|
|
16167
|
-
if (address.startsWith("T")) {
|
|
16168
|
-
hexAddress = base58ToHex2(address);
|
|
16169
|
-
}
|
|
16170
|
-
hexAddress = hexAddress.replace(/^0x/, "");
|
|
16171
|
-
if (hexAddress.startsWith(TVM_MAINNET_PREFIX)) {
|
|
16172
|
-
hexAddress = hexAddress.substring(2);
|
|
16010
|
+
exports2.SignerMismatchError = exports2.RecoveryFailedError = exports2.MalformedPrehashError = void 0;
|
|
16011
|
+
var MalformedPrehashError = class extends Error {
|
|
16012
|
+
constructor(message = "sender_auth: malformed message_prehash") {
|
|
16013
|
+
super(message);
|
|
16014
|
+
this.name = "MalformedPrehashError";
|
|
16173
16015
|
}
|
|
16174
|
-
|
|
16175
|
-
|
|
16016
|
+
};
|
|
16017
|
+
exports2.MalformedPrehashError = MalformedPrehashError;
|
|
16018
|
+
var RecoveryFailedError = class extends Error {
|
|
16019
|
+
constructor(message = "sender_auth: could not recover a signer from the signed message") {
|
|
16020
|
+
super(message);
|
|
16021
|
+
this.name = "RecoveryFailedError";
|
|
16176
16022
|
}
|
|
16177
|
-
|
|
16178
|
-
|
|
16023
|
+
};
|
|
16024
|
+
exports2.RecoveryFailedError = RecoveryFailedError;
|
|
16025
|
+
var SignerMismatchError = class extends Error {
|
|
16026
|
+
constructor(message = "sender_auth: recovered signer does not match source.account") {
|
|
16027
|
+
super(message);
|
|
16028
|
+
this.name = "SignerMismatchError";
|
|
16179
16029
|
}
|
|
16180
|
-
return "0x" + hexAddress.toLowerCase();
|
|
16181
|
-
}
|
|
16182
|
-
}
|
|
16183
|
-
});
|
|
16184
|
-
var require_reserve_encoder22 = __commonJS2({
|
|
16185
|
-
"../contracts/tvm/escrow-encoding/typescript/dist/reserve-encoder.js"(exports2) {
|
|
16186
|
-
"use strict";
|
|
16187
|
-
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
16188
|
-
exports2.computeReserveDigest = computeReserveDigest;
|
|
16189
|
-
var ethers_1 = __require("ethers");
|
|
16190
|
-
var chain_id_1 = require_chain_id2();
|
|
16191
|
-
var RESERVE_WITNESS_TYPES = {
|
|
16192
|
-
ReserveWitness: [
|
|
16193
|
-
{ name: "paymentId", type: "bytes32" },
|
|
16194
|
-
{ name: "settler", type: "address" }
|
|
16195
|
-
]
|
|
16196
16030
|
};
|
|
16197
|
-
|
|
16198
|
-
const domain = {
|
|
16199
|
-
name: "Escrow",
|
|
16200
|
-
version: "3",
|
|
16201
|
-
chainId: (0, chain_id_1.maskChainId)(input.chainId),
|
|
16202
|
-
verifyingContract: input.escrowContract
|
|
16203
|
-
};
|
|
16204
|
-
return ethers_1.TypedDataEncoder.hash(domain, RESERVE_WITNESS_TYPES, {
|
|
16205
|
-
paymentId: input.paymentId,
|
|
16206
|
-
settler: input.settler
|
|
16207
|
-
});
|
|
16208
|
-
}
|
|
16031
|
+
exports2.SignerMismatchError = SignerMismatchError;
|
|
16209
16032
|
}
|
|
16210
16033
|
});
|
|
16211
|
-
var
|
|
16212
|
-
"../
|
|
16034
|
+
var require_evm = __commonJS2({
|
|
16035
|
+
"../schemas/declarations/PaymentRequest/v1/bindings/typescript/sender-auth/dist/adapters/evm.js"(exports2) {
|
|
16213
16036
|
"use strict";
|
|
16214
16037
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
16215
|
-
exports2.
|
|
16038
|
+
exports2.evmAdapter = void 0;
|
|
16216
16039
|
var ethers_1 = __require("ethers");
|
|
16217
|
-
var
|
|
16218
|
-
|
|
16219
|
-
|
|
16220
|
-
|
|
16040
|
+
var evm_escrow_encoding_1 = require_dist22();
|
|
16041
|
+
var utils_js_1 = require_utils();
|
|
16042
|
+
var errors_js_1 = require_errors();
|
|
16043
|
+
var chain_id_js_1 = require_chain_id2();
|
|
16044
|
+
exports2.evmAdapter = {
|
|
16045
|
+
async buildAuthMessage({ sourceAsset, maxSourceAmount, sourceDefaults, deadline, nonce }) {
|
|
16046
|
+
if (nonce === void 0) {
|
|
16047
|
+
throw new Error("sender_auth: buildAuthMessage requires an explicit nonce \u2014 derive it deterministically from a stable request id (e.g. the challenge id) so retries reproduce the same permit; pass generatePermitNonce() only for genuinely one-shot builds");
|
|
16048
|
+
}
|
|
16049
|
+
if (deadline === void 0) {
|
|
16050
|
+
throw new Error("sender_auth: buildAuthMessage requires an explicit permit deadline (absolute Unix seconds) \u2014 the low-level builder does not default it; derive it from the payment's fulfillment/settlement deadline in the calling layer (pgc/mppx)");
|
|
16051
|
+
}
|
|
16052
|
+
const sourceChainId = sourceAsset.split("/")[0];
|
|
16053
|
+
const chainIdNum = parseInt(sourceChainId.split(":")[1]);
|
|
16054
|
+
const tokenAddress = sourceAsset.split("/")[1].split(":")[1];
|
|
16055
|
+
const permitParams = {
|
|
16056
|
+
chainId: chainIdNum,
|
|
16057
|
+
verifyingContract: evm_escrow_encoding_1.PERMIT2_CONTRACT_ADDRESS,
|
|
16058
|
+
token: tokenAddress,
|
|
16059
|
+
amount: maxSourceAmount,
|
|
16060
|
+
spender: sourceDefaults.escrowContract,
|
|
16061
|
+
nonce: (0, utils_js_1.resolvePermitNonce)(nonce),
|
|
16062
|
+
deadline: (0, utils_js_1.resolvePermitDeadline)(deadline),
|
|
16063
|
+
reserver: sourceDefaults.quoteSelector,
|
|
16064
|
+
releaser: sourceDefaults.fulfillmentVerifierAccount
|
|
16065
|
+
};
|
|
16066
|
+
const messagePrehash = (0, evm_escrow_encoding_1.createPermitWitnessTransferFromPrehash)(permitParams);
|
|
16067
|
+
const messageHash = (0, evm_escrow_encoding_1.hashPermitWitnessTransferFrom)(messagePrehash);
|
|
16068
|
+
return { messageScheme: "EVM_PERMIT2", messageHash, messagePrehash: JSON.stringify(messagePrehash) };
|
|
16069
|
+
},
|
|
16070
|
+
async sign(signedMessage, privateKey) {
|
|
16071
|
+
if (!signedMessage.message_prehash) {
|
|
16072
|
+
throw new Error("EVM adapter sign(): signed_messages[i].message_prehash is required");
|
|
16073
|
+
}
|
|
16074
|
+
const prehash = JSON.parse(signedMessage.message_prehash);
|
|
16075
|
+
const wallet = new ethers_1.Wallet(privateKey);
|
|
16076
|
+
return wallet.signTypedData(prehash.domain, prehash.types, prehash.message);
|
|
16077
|
+
},
|
|
16078
|
+
recoverSigner(signed, source) {
|
|
16079
|
+
let recovered;
|
|
16080
|
+
try {
|
|
16081
|
+
recovered = (0, ethers_1.recoverAddress)(signed.message, signed.signature);
|
|
16082
|
+
} catch (e) {
|
|
16083
|
+
throw new errors_js_1.RecoveryFailedError(`sender_auth: could not recover a signer: ${e.message}`);
|
|
16084
|
+
}
|
|
16085
|
+
if (!(0, utils_js_1.sameAddress)(recovered, source.account)) {
|
|
16086
|
+
throw new errors_js_1.SignerMismatchError(`sender_auth: recovered ${recovered}, not source.account`);
|
|
16087
|
+
}
|
|
16088
|
+
return source.account;
|
|
16089
|
+
},
|
|
16090
|
+
recoverAndVerify(signed, source, expected) {
|
|
16091
|
+
let canonical;
|
|
16092
|
+
let msg;
|
|
16093
|
+
try {
|
|
16094
|
+
msg = JSON.parse(signed.message_prehash).message;
|
|
16095
|
+
canonical = (0, evm_escrow_encoding_1.createPermitWitnessTransferFromPrehash)({
|
|
16096
|
+
chainId: (0, chain_id_js_1.evmChainId)(source.network),
|
|
16097
|
+
verifyingContract: evm_escrow_encoding_1.PERMIT2_CONTRACT_ADDRESS,
|
|
16098
|
+
token: msg.permitted.token,
|
|
16099
|
+
amount: msg.permitted.amount,
|
|
16100
|
+
spender: msg.spender,
|
|
16101
|
+
nonce: BigInt(msg.nonce),
|
|
16102
|
+
deadline: BigInt(msg.deadline),
|
|
16103
|
+
reserver: msg.witness.reserver,
|
|
16104
|
+
releaser: msg.witness.releaser
|
|
16105
|
+
});
|
|
16106
|
+
} catch {
|
|
16107
|
+
throw new errors_js_1.MalformedPrehashError();
|
|
16108
|
+
}
|
|
16109
|
+
let recovered;
|
|
16110
|
+
try {
|
|
16111
|
+
recovered = (0, ethers_1.verifyTypedData)(canonical.domain, canonical.types, canonical.message, signed.signature);
|
|
16112
|
+
} catch {
|
|
16113
|
+
throw new Error("sender_auth: deposit signature does not recover to source.account");
|
|
16114
|
+
}
|
|
16115
|
+
if (!(0, utils_js_1.sameAddress)(recovered, source.account)) {
|
|
16116
|
+
throw new Error("sender_auth: deposit signature does not recover to source.account");
|
|
16117
|
+
}
|
|
16118
|
+
const deadlineSec = Number(msg.deadline);
|
|
16119
|
+
(0, utils_js_1.assertToken)(msg.permitted.token, source.asset, (a) => a);
|
|
16120
|
+
(0, utils_js_1.assertAmountMatches)(msg.permitted.amount, expected.maxSourceAmount);
|
|
16121
|
+
(0, utils_js_1.assertFresh)(deadlineSec, expected.nowSec ?? (0, utils_js_1.nowSec)());
|
|
16122
|
+
if (expected.escrowContract !== void 0) {
|
|
16123
|
+
(0, utils_js_1.assertSpender)(msg.spender, expected.escrowContract, (a) => a);
|
|
16124
|
+
}
|
|
16125
|
+
(0, utils_js_1.assertRolePairComplete)(expected.reserver, expected.releaser);
|
|
16126
|
+
if (expected.reserver !== void 0 && expected.releaser !== void 0) {
|
|
16127
|
+
(0, utils_js_1.assertWitnessRoles)(msg.witness.reserver, msg.witness.releaser, expected.reserver, expected.releaser, (a) => a);
|
|
16128
|
+
}
|
|
16129
|
+
return {
|
|
16130
|
+
amount: msg.permitted.amount,
|
|
16131
|
+
deadlineSec,
|
|
16132
|
+
permit: {
|
|
16133
|
+
scheme: "EVM_PERMIT2",
|
|
16134
|
+
token: msg.permitted.token,
|
|
16135
|
+
amount: msg.permitted.amount,
|
|
16136
|
+
deadlineSec,
|
|
16137
|
+
reserver: msg.witness.reserver,
|
|
16138
|
+
releaser: msg.witness.releaser,
|
|
16139
|
+
spender: msg.spender
|
|
16140
|
+
}
|
|
16141
|
+
};
|
|
16221
16142
|
}
|
|
16222
|
-
const encoded = ethers_1.AbiCoder.defaultAbiCoder().encode(["address", "bytes", "uint256"], [(0, tron_address_1.normalizeAddress)(depositor), signature, nonce]);
|
|
16223
|
-
return (0, ethers_1.keccak256)(encoded);
|
|
16224
|
-
}
|
|
16225
|
-
}
|
|
16226
|
-
});
|
|
16227
|
-
var require_deposit_encoder22 = __commonJS2({
|
|
16228
|
-
"../contracts/tvm/escrow-encoding/typescript/dist/deposit-encoder.js"(exports2) {
|
|
16229
|
-
"use strict";
|
|
16230
|
-
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
16231
|
-
exports2.createTvmPermitWitnessTransferFromPrehash = createTvmPermitWitnessTransferFromPrehash2;
|
|
16232
|
-
exports2.hashTvmPermitWitnessTransferFrom = hashTvmPermitWitnessTransferFrom2;
|
|
16233
|
-
var ethers_1 = __require("ethers");
|
|
16234
|
-
var chain_id_1 = require_chain_id2();
|
|
16235
|
-
var tron_address_1 = require_tron_address2();
|
|
16236
|
-
var PERMIT_WITNESS_TYPES_V2 = {
|
|
16237
|
-
PermitWitnessTransferFrom: [
|
|
16238
|
-
{ name: "permitted", type: "TokenPermissions" },
|
|
16239
|
-
{ name: "spender", type: "address" },
|
|
16240
|
-
{ name: "nonce", type: "uint256" },
|
|
16241
|
-
{ name: "deadline", type: "uint256" },
|
|
16242
|
-
{ name: "witness", type: "DepositWitness" }
|
|
16243
|
-
],
|
|
16244
|
-
TokenPermissions: [
|
|
16245
|
-
{ name: "token", type: "address" },
|
|
16246
|
-
{ name: "amount", type: "uint256" }
|
|
16247
|
-
],
|
|
16248
|
-
DepositWitness: [
|
|
16249
|
-
{ name: "reserver", type: "address" },
|
|
16250
|
-
{ name: "releaser", type: "address" }
|
|
16251
|
-
]
|
|
16252
16143
|
};
|
|
16253
|
-
function createTvmPermitWitnessTransferFromPrehash2(params) {
|
|
16254
|
-
const maskedChainId = (0, chain_id_1.maskChainId)(params.chainId);
|
|
16255
|
-
return {
|
|
16256
|
-
types: PERMIT_WITNESS_TYPES_V2,
|
|
16257
|
-
primaryType: "PermitWitnessTransferFrom",
|
|
16258
|
-
domain: {
|
|
16259
|
-
name: "Permit2",
|
|
16260
|
-
chainId: `0x${maskedChainId.toString(16)}`,
|
|
16261
|
-
verifyingContract: (0, tron_address_1.normalizeAddress)(params.permit2Address)
|
|
16262
|
-
},
|
|
16263
|
-
message: {
|
|
16264
|
-
permitted: {
|
|
16265
|
-
token: (0, tron_address_1.normalizeAddress)(params.tokenAddress),
|
|
16266
|
-
amount: params.amount
|
|
16267
|
-
},
|
|
16268
|
-
spender: (0, tron_address_1.normalizeAddress)(params.spenderAddress),
|
|
16269
|
-
nonce: params.nonce.toString(),
|
|
16270
|
-
deadline: params.deadline.toString(),
|
|
16271
|
-
witness: {
|
|
16272
|
-
reserver: (0, tron_address_1.normalizeAddress)(params.reserverAddress),
|
|
16273
|
-
releaser: (0, tron_address_1.normalizeAddress)(params.releaserAddress)
|
|
16274
|
-
}
|
|
16275
|
-
}
|
|
16276
|
-
};
|
|
16277
|
-
}
|
|
16278
|
-
function hashTvmPermitWitnessTransferFrom2(prehash) {
|
|
16279
|
-
return ethers_1.TypedDataEncoder.hash(prehash.domain, prehash.types, prehash.message);
|
|
16280
|
-
}
|
|
16281
16144
|
}
|
|
16282
16145
|
});
|
|
16283
|
-
var
|
|
16284
|
-
"../
|
|
16285
|
-
"use strict";
|
|
16286
|
-
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
16287
|
-
exports2.
|
|
16288
|
-
var
|
|
16289
|
-
|
|
16290
|
-
|
|
16291
|
-
|
|
16292
|
-
var
|
|
16293
|
-
|
|
16294
|
-
|
|
16295
|
-
|
|
16296
|
-
|
|
16297
|
-
|
|
16298
|
-
|
|
16299
|
-
|
|
16300
|
-
|
|
16301
|
-
|
|
16302
|
-
|
|
16303
|
-
|
|
16304
|
-
|
|
16305
|
-
|
|
16306
|
-
|
|
16307
|
-
|
|
16308
|
-
|
|
16309
|
-
|
|
16310
|
-
|
|
16311
|
-
|
|
16312
|
-
|
|
16313
|
-
|
|
16146
|
+
var require_tron = __commonJS2({
|
|
16147
|
+
"../schemas/declarations/PaymentRequest/v1/bindings/typescript/sender-auth/dist/adapters/tron.js"(exports2) {
|
|
16148
|
+
"use strict";
|
|
16149
|
+
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
16150
|
+
exports2.tronAdapter = void 0;
|
|
16151
|
+
var ethers_1 = __require("ethers");
|
|
16152
|
+
var tvm_escrow_encoding_1 = require_dist3();
|
|
16153
|
+
var utils_js_1 = require_utils();
|
|
16154
|
+
var errors_js_1 = require_errors();
|
|
16155
|
+
var chain_id_js_1 = require_chain_id2();
|
|
16156
|
+
exports2.tronAdapter = {
|
|
16157
|
+
async buildAuthMessage({ sourceAsset, maxSourceAmount, sourceDefaults, deadline, nonce }) {
|
|
16158
|
+
if (nonce === void 0) {
|
|
16159
|
+
throw new Error("sender_auth: buildAuthMessage requires an explicit nonce \u2014 derive it deterministically from a stable request id (e.g. the challenge id) so retries reproduce the same permit; pass generatePermitNonce() only for genuinely one-shot builds");
|
|
16160
|
+
}
|
|
16161
|
+
if (deadline === void 0) {
|
|
16162
|
+
throw new Error("sender_auth: buildAuthMessage requires an explicit permit deadline (absolute Unix seconds) \u2014 the low-level builder does not default it; derive it from the payment's fulfillment/settlement deadline in the calling layer (pgc/mppx)");
|
|
16163
|
+
}
|
|
16164
|
+
const sourceChainId = sourceAsset.split("/")[0];
|
|
16165
|
+
const tokenAddress = sourceAsset.split("/")[1].split(":")[1];
|
|
16166
|
+
const permit2Address = sourceDefaults.permit2Contract ?? (0, chain_id_js_1.resolveTronPermit2)(sourceChainId);
|
|
16167
|
+
const tvmParams = {
|
|
16168
|
+
chainId: (0, chain_id_js_1.tronNumericChainId)(sourceChainId),
|
|
16169
|
+
permit2Address,
|
|
16170
|
+
tokenAddress,
|
|
16171
|
+
amount: maxSourceAmount,
|
|
16172
|
+
spenderAddress: sourceDefaults.escrowContract,
|
|
16173
|
+
nonce: (0, utils_js_1.resolvePermitNonce)(nonce),
|
|
16174
|
+
deadline: (0, utils_js_1.resolvePermitDeadline)(deadline),
|
|
16175
|
+
reserverAddress: sourceDefaults.quoteSelector,
|
|
16176
|
+
releaserAddress: sourceDefaults.fulfillmentVerifierAccount
|
|
16177
|
+
};
|
|
16178
|
+
const messagePrehash = (0, tvm_escrow_encoding_1.createTvmPermitWitnessTransferFromPrehash)(tvmParams);
|
|
16179
|
+
const messageHash = (0, tvm_escrow_encoding_1.hashTvmPermitWitnessTransferFrom)(messagePrehash);
|
|
16180
|
+
return { messageScheme: "EVM_PERMIT2", messageHash, messagePrehash: JSON.stringify(messagePrehash) };
|
|
16181
|
+
},
|
|
16182
|
+
async sign(signedMessage, privateKey) {
|
|
16183
|
+
const wallet = new ethers_1.Wallet(privateKey.startsWith("0x") ? privateKey : "0x" + privateKey);
|
|
16184
|
+
return wallet.signingKey.sign(signedMessage.message).serialized;
|
|
16185
|
+
},
|
|
16186
|
+
recoverSigner(signed, source) {
|
|
16187
|
+
let recovered;
|
|
16188
|
+
try {
|
|
16189
|
+
recovered = (0, ethers_1.recoverAddress)(signed.message, signed.signature);
|
|
16190
|
+
} catch (e) {
|
|
16191
|
+
throw new errors_js_1.RecoveryFailedError(`sender_auth: could not recover a signer: ${e.message}`);
|
|
16192
|
+
}
|
|
16193
|
+
if (!(0, utils_js_1.sameAddress)(recovered, (0, tvm_escrow_encoding_1.normalizeAddress)(source.account))) {
|
|
16194
|
+
throw new errors_js_1.SignerMismatchError(`sender_auth: recovered ${recovered}, not source.account`);
|
|
16195
|
+
}
|
|
16196
|
+
return source.account;
|
|
16197
|
+
},
|
|
16198
|
+
recoverAndVerify(signed, source, expected) {
|
|
16199
|
+
let msg;
|
|
16200
|
+
let digest;
|
|
16201
|
+
try {
|
|
16202
|
+
msg = JSON.parse(signed.message_prehash).message;
|
|
16203
|
+
const canonical = (0, tvm_escrow_encoding_1.createTvmPermitWitnessTransferFromPrehash)({
|
|
16204
|
+
chainId: (0, chain_id_js_1.tronNumericChainId)(source.network),
|
|
16205
|
+
permit2Address: (0, chain_id_js_1.resolveTronPermit2)(source.network),
|
|
16206
|
+
tokenAddress: msg.permitted.token,
|
|
16207
|
+
amount: msg.permitted.amount,
|
|
16208
|
+
spenderAddress: msg.spender,
|
|
16209
|
+
nonce: BigInt(msg.nonce),
|
|
16210
|
+
deadline: BigInt(msg.deadline),
|
|
16211
|
+
reserverAddress: msg.witness.reserver,
|
|
16212
|
+
releaserAddress: msg.witness.releaser
|
|
16213
|
+
});
|
|
16214
|
+
digest = (0, tvm_escrow_encoding_1.hashTvmPermitWitnessTransferFrom)(canonical);
|
|
16215
|
+
} catch {
|
|
16216
|
+
throw new errors_js_1.MalformedPrehashError();
|
|
16217
|
+
}
|
|
16218
|
+
let recovered;
|
|
16219
|
+
try {
|
|
16220
|
+
recovered = (0, ethers_1.recoverAddress)(digest, signed.signature);
|
|
16221
|
+
} catch {
|
|
16222
|
+
throw new Error("sender_auth: deposit signature does not recover to source.account");
|
|
16223
|
+
}
|
|
16224
|
+
if (!(0, utils_js_1.sameAddress)(recovered, (0, tvm_escrow_encoding_1.normalizeAddress)(source.account))) {
|
|
16225
|
+
throw new Error("sender_auth: deposit signature does not recover to source.account");
|
|
16226
|
+
}
|
|
16227
|
+
const deadlineSec = Number(msg.deadline);
|
|
16228
|
+
(0, utils_js_1.assertToken)(msg.permitted.token, source.asset, tvm_escrow_encoding_1.normalizeAddress);
|
|
16229
|
+
(0, utils_js_1.assertAmountMatches)(msg.permitted.amount, expected.maxSourceAmount);
|
|
16230
|
+
(0, utils_js_1.assertFresh)(deadlineSec, expected.nowSec ?? (0, utils_js_1.nowSec)());
|
|
16231
|
+
if (expected.escrowContract !== void 0) {
|
|
16232
|
+
(0, utils_js_1.assertSpender)(msg.spender, expected.escrowContract, tvm_escrow_encoding_1.normalizeAddress);
|
|
16233
|
+
}
|
|
16234
|
+
(0, utils_js_1.assertRolePairComplete)(expected.reserver, expected.releaser);
|
|
16235
|
+
if (expected.reserver !== void 0 && expected.releaser !== void 0) {
|
|
16236
|
+
(0, utils_js_1.assertWitnessRoles)(msg.witness.reserver, msg.witness.releaser, expected.reserver, expected.releaser, tvm_escrow_encoding_1.normalizeAddress);
|
|
16237
|
+
}
|
|
16238
|
+
return {
|
|
16239
|
+
amount: msg.permitted.amount,
|
|
16240
|
+
deadlineSec,
|
|
16241
|
+
permit: {
|
|
16242
|
+
scheme: "EVM_PERMIT2",
|
|
16243
|
+
token: msg.permitted.token,
|
|
16244
|
+
amount: msg.permitted.amount,
|
|
16245
|
+
deadlineSec,
|
|
16246
|
+
reserver: msg.witness.reserver,
|
|
16247
|
+
releaser: msg.witness.releaser,
|
|
16248
|
+
spender: msg.spender
|
|
16249
|
+
}
|
|
16250
|
+
};
|
|
16251
|
+
}
|
|
16252
|
+
};
|
|
16314
16253
|
}
|
|
16315
16254
|
});
|
|
16316
|
-
var
|
|
16255
|
+
var require_errors2 = __commonJS2({
|
|
16317
16256
|
"../contracts/svm/escrow-encoding/typescript/dist/errors.js"(exports2) {
|
|
16318
16257
|
"use strict";
|
|
16319
16258
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
@@ -16413,8 +16352,8 @@ var require_dist2 = __commonJS({
|
|
|
16413
16352
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
16414
16353
|
exports2.Pubkey = void 0;
|
|
16415
16354
|
var bs58_1 = __importDefault(__require("bs58"));
|
|
16416
|
-
var errors_1 =
|
|
16417
|
-
var
|
|
16355
|
+
var errors_1 = require_errors2();
|
|
16356
|
+
var Pubkey2 = class _Pubkey {
|
|
16418
16357
|
constructor(data) {
|
|
16419
16358
|
if (data.length !== 32) {
|
|
16420
16359
|
throw new errors_1.InvalidPubkeyLengthError();
|
|
@@ -16507,7 +16446,7 @@ var require_dist2 = __commonJS({
|
|
|
16507
16446
|
return this.data.every((b, i) => b === other.data[i]);
|
|
16508
16447
|
}
|
|
16509
16448
|
};
|
|
16510
|
-
exports2.Pubkey =
|
|
16449
|
+
exports2.Pubkey = Pubkey2;
|
|
16511
16450
|
}
|
|
16512
16451
|
});
|
|
16513
16452
|
var require_u64 = __commonJS2({
|
|
@@ -16613,7 +16552,7 @@ var require_dist2 = __commonJS({
|
|
|
16613
16552
|
exports2.crypto = nc && typeof nc === "object" && "webcrypto" in nc ? nc.webcrypto : nc && typeof nc === "object" && "randomBytes" in nc ? nc : void 0;
|
|
16614
16553
|
}
|
|
16615
16554
|
});
|
|
16616
|
-
var
|
|
16555
|
+
var require_utils2 = __commonJS2({
|
|
16617
16556
|
"../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/utils.js"(exports2) {
|
|
16618
16557
|
"use strict";
|
|
16619
16558
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
@@ -16860,7 +16799,7 @@ var require_dist2 = __commonJS({
|
|
|
16860
16799
|
exports2.shake256 = exports2.shake128 = exports2.keccak_512 = exports2.keccak_384 = exports2.keccak_256 = exports2.keccak_224 = exports2.sha3_512 = exports2.sha3_384 = exports2.sha3_256 = exports2.sha3_224 = exports2.Keccak = void 0;
|
|
16861
16800
|
exports2.keccakP = keccakP;
|
|
16862
16801
|
var _u64_ts_1 = require_u64();
|
|
16863
|
-
var utils_ts_1 =
|
|
16802
|
+
var utils_ts_1 = require_utils2();
|
|
16864
16803
|
var _0n = BigInt(0);
|
|
16865
16804
|
var _1n = BigInt(1);
|
|
16866
16805
|
var _2n = BigInt(2);
|
|
@@ -17112,14 +17051,14 @@ var require_dist2 = __commonJS({
|
|
|
17112
17051
|
}
|
|
17113
17052
|
}
|
|
17114
17053
|
});
|
|
17115
|
-
var
|
|
17054
|
+
var require_deposit_encoder3 = __commonJS2({
|
|
17116
17055
|
"../contracts/svm/escrow-encoding/typescript/dist/deposit-encoder.js"(exports2) {
|
|
17117
17056
|
"use strict";
|
|
17118
17057
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
17119
17058
|
exports2.computeDepositHash = computeDepositHash2;
|
|
17120
17059
|
var encoding_utils_1 = require_encoding_utils();
|
|
17121
17060
|
var escrow_domain_1 = require_escrow_domain();
|
|
17122
|
-
var errors_1 =
|
|
17061
|
+
var errors_1 = require_errors2();
|
|
17123
17062
|
function computeDepositHash2(params, domain) {
|
|
17124
17063
|
if (params.paymentId.length !== 32 || (0, encoding_utils_1.isZeroBytes32)(params.paymentId)) {
|
|
17125
17064
|
throw new errors_1.ZeroPaymentIdError();
|
|
@@ -17138,14 +17077,14 @@ var require_dist2 = __commonJS({
|
|
|
17138
17077
|
}
|
|
17139
17078
|
}
|
|
17140
17079
|
});
|
|
17141
|
-
var
|
|
17080
|
+
var require_reserve_encoder3 = __commonJS2({
|
|
17142
17081
|
"../contracts/svm/escrow-encoding/typescript/dist/reserve-encoder.js"(exports2) {
|
|
17143
17082
|
"use strict";
|
|
17144
17083
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
17145
17084
|
exports2.computeReserveHash = computeReserveHash;
|
|
17146
17085
|
var encoding_utils_1 = require_encoding_utils();
|
|
17147
17086
|
var escrow_domain_1 = require_escrow_domain();
|
|
17148
|
-
var errors_1 =
|
|
17087
|
+
var errors_1 = require_errors2();
|
|
17149
17088
|
function computeReserveHash(params, domain) {
|
|
17150
17089
|
if (params.depositHash.length !== 32 || (0, encoding_utils_1.isZeroBytes32)(params.depositHash)) {
|
|
17151
17090
|
throw new errors_1.ZeroDepositHashError();
|
|
@@ -17163,7 +17102,7 @@ var require_dist2 = __commonJS({
|
|
|
17163
17102
|
exports2.computeReleaseHash = computeReleaseHash;
|
|
17164
17103
|
var encoding_utils_1 = require_encoding_utils();
|
|
17165
17104
|
var escrow_domain_1 = require_escrow_domain();
|
|
17166
|
-
var errors_1 =
|
|
17105
|
+
var errors_1 = require_errors2();
|
|
17167
17106
|
function computeReleaseHash(params, domain) {
|
|
17168
17107
|
if (params.depositHash.length !== 32 || (0, encoding_utils_1.isZeroBytes32)(params.depositHash)) {
|
|
17169
17108
|
throw new errors_1.ZeroDepositHashError();
|
|
@@ -17179,7 +17118,7 @@ var require_dist2 = __commonJS({
|
|
|
17179
17118
|
exports2.computeRefundHash = computeRefundHash;
|
|
17180
17119
|
var encoding_utils_1 = require_encoding_utils();
|
|
17181
17120
|
var escrow_domain_1 = require_escrow_domain();
|
|
17182
|
-
var errors_1 =
|
|
17121
|
+
var errors_1 = require_errors2();
|
|
17183
17122
|
function computeRefundHash(params, domain) {
|
|
17184
17123
|
if (params.depositHash.length !== 32 || (0, encoding_utils_1.isZeroBytes32)(params.depositHash)) {
|
|
17185
17124
|
throw new errors_1.ZeroDepositHashError();
|
|
@@ -17188,7 +17127,7 @@ var require_dist2 = __commonJS({
|
|
|
17188
17127
|
}
|
|
17189
17128
|
}
|
|
17190
17129
|
});
|
|
17191
|
-
var
|
|
17130
|
+
var require_nonce_generator2 = __commonJS2({
|
|
17192
17131
|
"../contracts/svm/escrow-encoding/typescript/dist/nonce-generator.js"(exports2) {
|
|
17193
17132
|
"use strict";
|
|
17194
17133
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
@@ -17236,7 +17175,7 @@ var require_dist2 = __commonJS({
|
|
|
17236
17175
|
Object.defineProperty(exports2, "escrowDomainPrefixBytes", { enumerable: true, get: function() {
|
|
17237
17176
|
return escrow_domain_1.escrowDomainPrefixBytes;
|
|
17238
17177
|
} });
|
|
17239
|
-
var errors_1 =
|
|
17178
|
+
var errors_1 = require_errors2();
|
|
17240
17179
|
Object.defineProperty(exports2, "EncodingError", { enumerable: true, get: function() {
|
|
17241
17180
|
return errors_1.EncodingError;
|
|
17242
17181
|
} });
|
|
@@ -17273,11 +17212,11 @@ var require_dist2 = __commonJS({
|
|
|
17273
17212
|
Object.defineProperty(exports2, "InvalidHexError", { enumerable: true, get: function() {
|
|
17274
17213
|
return errors_1.InvalidHexError;
|
|
17275
17214
|
} });
|
|
17276
|
-
var deposit_encoder_1 =
|
|
17215
|
+
var deposit_encoder_1 = require_deposit_encoder3();
|
|
17277
17216
|
Object.defineProperty(exports2, "computeDepositHash", { enumerable: true, get: function() {
|
|
17278
17217
|
return deposit_encoder_1.computeDepositHash;
|
|
17279
17218
|
} });
|
|
17280
|
-
var reserve_encoder_1 =
|
|
17219
|
+
var reserve_encoder_1 = require_reserve_encoder3();
|
|
17281
17220
|
Object.defineProperty(exports2, "computeReserveHash", { enumerable: true, get: function() {
|
|
17282
17221
|
return reserve_encoder_1.computeReserveHash;
|
|
17283
17222
|
} });
|
|
@@ -17289,7 +17228,7 @@ var require_dist2 = __commonJS({
|
|
|
17289
17228
|
Object.defineProperty(exports2, "computeRefundHash", { enumerable: true, get: function() {
|
|
17290
17229
|
return refund_encoder_1.computeRefundHash;
|
|
17291
17230
|
} });
|
|
17292
|
-
var nonce_generator_1 =
|
|
17231
|
+
var nonce_generator_1 = require_nonce_generator2();
|
|
17293
17232
|
Object.defineProperty(exports2, "generateNonce", { enumerable: true, get: function() {
|
|
17294
17233
|
return nonce_generator_1.generateNonce;
|
|
17295
17234
|
} });
|
|
@@ -17301,7 +17240,312 @@ var require_dist2 = __commonJS({
|
|
|
17301
17240
|
} });
|
|
17302
17241
|
}
|
|
17303
17242
|
});
|
|
17304
|
-
var
|
|
17243
|
+
var require_solana = __commonJS2({
|
|
17244
|
+
"../schemas/declarations/PaymentRequest/v1/bindings/typescript/sender-auth/dist/adapters/solana.js"(exports2) {
|
|
17245
|
+
"use strict";
|
|
17246
|
+
var __importDefault = exports2 && exports2.__importDefault || function(mod) {
|
|
17247
|
+
return mod && mod.__esModule ? mod : { "default": mod };
|
|
17248
|
+
};
|
|
17249
|
+
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
17250
|
+
exports2.solanaAdapter = void 0;
|
|
17251
|
+
var ethers_1 = __require("ethers");
|
|
17252
|
+
var tweetnacl_1 = __importDefault(__require("tweetnacl"));
|
|
17253
|
+
var bs58_1 = __importDefault(__require("bs58"));
|
|
17254
|
+
var solana_escrow_encoding_1 = require_dist32();
|
|
17255
|
+
var utils_js_1 = require_utils();
|
|
17256
|
+
var errors_js_1 = require_errors();
|
|
17257
|
+
var chain_id_js_1 = require_chain_id2();
|
|
17258
|
+
var idAddr = (a) => a;
|
|
17259
|
+
function generateSolanaPaymentIdV3(requestId) {
|
|
17260
|
+
return (0, ethers_1.keccak256)((0, ethers_1.toUtf8Bytes)(requestId));
|
|
17261
|
+
}
|
|
17262
|
+
function hashDeposit(prehash, domain) {
|
|
17263
|
+
return (0, ethers_1.hexlify)((0, solana_escrow_encoding_1.computeDepositHash)({
|
|
17264
|
+
paymentId: (0, ethers_1.getBytes)(prehash.payment_id),
|
|
17265
|
+
depositor: solana_escrow_encoding_1.Pubkey.fromBase58(prehash.depositor),
|
|
17266
|
+
mint: solana_escrow_encoding_1.Pubkey.fromBase58(prehash.mint),
|
|
17267
|
+
amount: BigInt(prehash.amount),
|
|
17268
|
+
reserver: solana_escrow_encoding_1.Pubkey.fromBase58(prehash.reserver),
|
|
17269
|
+
releaser: solana_escrow_encoding_1.Pubkey.fromBase58(prehash.releaser),
|
|
17270
|
+
nonce: BigInt(prehash.nonce),
|
|
17271
|
+
issuedAt: BigInt(prehash.issued_at),
|
|
17272
|
+
deadline: BigInt(prehash.deadline)
|
|
17273
|
+
}, domain));
|
|
17274
|
+
}
|
|
17275
|
+
function domainFrom(defaults) {
|
|
17276
|
+
if (!defaults.escrowContract) {
|
|
17277
|
+
throw new Error("sender_auth: Solana source requires escrowContract (escrow program id) for the deposit-hash domain");
|
|
17278
|
+
}
|
|
17279
|
+
if (!defaults.svmSignatureClusterId || defaults.svmSignatureDomainVersion == null) {
|
|
17280
|
+
throw new Error("sender_auth: Solana source requires svmSignatureClusterId and svmSignatureDomainVersion (V3 escrow domain separation)");
|
|
17281
|
+
}
|
|
17282
|
+
return {
|
|
17283
|
+
clusterId: (0, chain_id_js_1.clusterIdFromName)(defaults.svmSignatureClusterId),
|
|
17284
|
+
signatureDomainVersion: defaults.svmSignatureDomainVersion,
|
|
17285
|
+
programId: solana_escrow_encoding_1.Pubkey.fromBase58(defaults.escrowContract)
|
|
17286
|
+
};
|
|
17287
|
+
}
|
|
17288
|
+
exports2.solanaAdapter = {
|
|
17289
|
+
async buildAuthMessage({ sourceAsset, depositor, maxSourceAmount, requestId, sourceDefaults, nonce, solanaClockReader }) {
|
|
17290
|
+
if (!requestId) {
|
|
17291
|
+
throw new Error("sender_auth: request_id is required");
|
|
17292
|
+
}
|
|
17293
|
+
const sourceChainId = sourceAsset.split("/")[0];
|
|
17294
|
+
const tokenMint = sourceAsset.split("/")[1].split(":")[1];
|
|
17295
|
+
const depositNonce = nonce !== void 0 ? BigInt(nonce) : (0, solana_escrow_encoding_1.generateNonce)();
|
|
17296
|
+
if (nonce !== void 0) {
|
|
17297
|
+
if (depositNonce < 0n || depositNonce >= 1n << 64n) {
|
|
17298
|
+
throw new Error("sender_auth: Solana nonce must fit an unsigned 64-bit integer (0 <= nonce < 2^64)");
|
|
17299
|
+
}
|
|
17300
|
+
if ((depositNonce & 0xffn) >= utils_js_1.SOLANA_REPLAY_SLOTS) {
|
|
17301
|
+
throw new Error(`sender_auth: Solana nonce low byte (replay slot = nonce & 0xFF = ${depositNonce & 0xffn}) must be < ${utils_js_1.SOLANA_REPLAY_SLOTS}; slots ${utils_js_1.SOLANA_REPLAY_SLOTS}-255 are reserved`);
|
|
17302
|
+
}
|
|
17303
|
+
}
|
|
17304
|
+
const issuedAt = solanaClockReader ? await solanaClockReader(sourceChainId) : BigInt(Math.floor(Date.now() / 1e3));
|
|
17305
|
+
const deadline = issuedAt + BigInt(utils_js_1.REPLAY_HORIZON_SECS - 8);
|
|
17306
|
+
const paymentId = generateSolanaPaymentIdV3(requestId);
|
|
17307
|
+
const prehash = {
|
|
17308
|
+
payment_id: paymentId,
|
|
17309
|
+
depositor,
|
|
17310
|
+
mint: tokenMint,
|
|
17311
|
+
amount: BigInt(maxSourceAmount).toString(),
|
|
17312
|
+
reserver: sourceDefaults.quoteSelector,
|
|
17313
|
+
releaser: sourceDefaults.fulfillmentVerifierAccount,
|
|
17314
|
+
nonce: depositNonce.toString(),
|
|
17315
|
+
issued_at: issuedAt.toString(),
|
|
17316
|
+
deadline: deadline.toString()
|
|
17317
|
+
};
|
|
17318
|
+
const depositHash = hashDeposit(prehash, domainFrom(sourceDefaults));
|
|
17319
|
+
return { messageScheme: "SOLANA", messageHash: depositHash, messagePrehash: JSON.stringify(prehash) };
|
|
17320
|
+
},
|
|
17321
|
+
async sign(signedMessage, privateKey) {
|
|
17322
|
+
const messageBytes = (0, ethers_1.getBytes)(signedMessage.message);
|
|
17323
|
+
const secretKey = secretKeyFromPrivate2(privateKey);
|
|
17324
|
+
const sig = tweetnacl_1.default.sign.detached(messageBytes, secretKey);
|
|
17325
|
+
return "0x" + Buffer.from(sig).toString("hex");
|
|
17326
|
+
},
|
|
17327
|
+
deriveDelegateSigner(privateKey) {
|
|
17328
|
+
return bs58_1.default.encode(tweetnacl_1.default.sign.keyPair.fromSecretKey(secretKeyFromPrivate2(privateKey)).publicKey);
|
|
17329
|
+
},
|
|
17330
|
+
recoverSigner(signed, source) {
|
|
17331
|
+
const provided = signed.payload?.delegate_signer;
|
|
17332
|
+
if (provided !== void 0 && provided !== source.account) {
|
|
17333
|
+
throw new errors_js_1.SignerMismatchError(`sender_auth: delegate_signer ${provided} != source.account`);
|
|
17334
|
+
}
|
|
17335
|
+
const signer = provided ?? source.account;
|
|
17336
|
+
let pub;
|
|
17337
|
+
let msg;
|
|
17338
|
+
let sig;
|
|
17339
|
+
try {
|
|
17340
|
+
pub = bs58_1.default.decode(signer);
|
|
17341
|
+
msg = (0, ethers_1.getBytes)(signed.message);
|
|
17342
|
+
sig = (0, ethers_1.getBytes)(signed.signature);
|
|
17343
|
+
} catch {
|
|
17344
|
+
throw new errors_js_1.RecoveryFailedError("sender_auth: malformed Solana pubkey/message/signature encoding");
|
|
17345
|
+
}
|
|
17346
|
+
if (pub.length !== 32 || msg.length !== 32 || sig.length !== 64) {
|
|
17347
|
+
throw new errors_js_1.RecoveryFailedError("sender_auth: Solana pubkey must be 32 bytes, message 32, signature 64");
|
|
17348
|
+
}
|
|
17349
|
+
let ok = false;
|
|
17350
|
+
try {
|
|
17351
|
+
ok = tweetnacl_1.default.sign.detached.verify(msg, sig, pub);
|
|
17352
|
+
} catch {
|
|
17353
|
+
ok = false;
|
|
17354
|
+
}
|
|
17355
|
+
if (!ok) {
|
|
17356
|
+
throw new errors_js_1.SignerMismatchError("sender_auth: ed25519 verification failed");
|
|
17357
|
+
}
|
|
17358
|
+
return source.account;
|
|
17359
|
+
},
|
|
17360
|
+
recoverAndVerify(signed, source, expected) {
|
|
17361
|
+
let prehash;
|
|
17362
|
+
let canonicalHash;
|
|
17363
|
+
try {
|
|
17364
|
+
prehash = JSON.parse(signed.message_prehash);
|
|
17365
|
+
canonicalHash = hashDeposit(prehash, domainFrom(expected));
|
|
17366
|
+
} catch {
|
|
17367
|
+
throw new errors_js_1.MalformedPrehashError();
|
|
17368
|
+
}
|
|
17369
|
+
if (canonicalHash.toLowerCase() !== signed.message.toLowerCase()) {
|
|
17370
|
+
throw new Error("sender_auth: deposit hash does not match the signed message");
|
|
17371
|
+
}
|
|
17372
|
+
const delegateSigner = signed.payload?.delegate_signer;
|
|
17373
|
+
if (!delegateSigner) {
|
|
17374
|
+
throw new Error("sender_auth: Solana credential is missing delegate_signer");
|
|
17375
|
+
}
|
|
17376
|
+
let verified = false;
|
|
17377
|
+
try {
|
|
17378
|
+
verified = tweetnacl_1.default.sign.detached.verify((0, ethers_1.getBytes)(signed.message), (0, ethers_1.getBytes)(signed.signature), bs58_1.default.decode(delegateSigner));
|
|
17379
|
+
} catch {
|
|
17380
|
+
verified = false;
|
|
17381
|
+
}
|
|
17382
|
+
if (!verified || delegateSigner !== source.account || prehash.depositor !== source.account) {
|
|
17383
|
+
throw new Error("sender_auth: deposit signature does not recover to source.account");
|
|
17384
|
+
}
|
|
17385
|
+
const deadlineSec = Number(prehash.deadline);
|
|
17386
|
+
(0, utils_js_1.assertToken)(prehash.mint, source.asset, idAddr);
|
|
17387
|
+
(0, utils_js_1.assertAmountMatches)(prehash.amount, expected.maxSourceAmount);
|
|
17388
|
+
(0, utils_js_1.assertRolePairComplete)(expected.reserver, expected.releaser);
|
|
17389
|
+
if (expected.reserver !== void 0 && expected.releaser !== void 0) {
|
|
17390
|
+
(0, utils_js_1.assertWitnessRoles)(prehash.reserver, prehash.releaser, expected.reserver, expected.releaser, idAddr);
|
|
17391
|
+
}
|
|
17392
|
+
return {
|
|
17393
|
+
amount: prehash.amount,
|
|
17394
|
+
deadlineSec,
|
|
17395
|
+
permit: {
|
|
17396
|
+
scheme: "SOLANA",
|
|
17397
|
+
token: prehash.mint,
|
|
17398
|
+
amount: prehash.amount,
|
|
17399
|
+
deadlineSec,
|
|
17400
|
+
reserver: prehash.reserver,
|
|
17401
|
+
releaser: prehash.releaser,
|
|
17402
|
+
depositor: prehash.depositor
|
|
17403
|
+
}
|
|
17404
|
+
};
|
|
17405
|
+
}
|
|
17406
|
+
};
|
|
17407
|
+
function secretKeyFromPrivate2(privateKey) {
|
|
17408
|
+
if (/^[0-9a-fA-F]{64}$/.test(privateKey)) {
|
|
17409
|
+
const seed = new Uint8Array(32);
|
|
17410
|
+
for (let i = 0; i < 32; i++) {
|
|
17411
|
+
seed[i] = parseInt(privateKey.substring(i * 2, i * 2 + 2), 16);
|
|
17412
|
+
}
|
|
17413
|
+
return tweetnacl_1.default.sign.keyPair.fromSeed(seed).secretKey;
|
|
17414
|
+
}
|
|
17415
|
+
const decoded = bs58_1.default.decode(privateKey);
|
|
17416
|
+
if (decoded.length === 64)
|
|
17417
|
+
return decoded;
|
|
17418
|
+
if (decoded.length === 32)
|
|
17419
|
+
return tweetnacl_1.default.sign.keyPair.fromSeed(decoded).secretKey;
|
|
17420
|
+
throw new Error(`Invalid Solana private key length: expected 32 or 64 bytes, got ${decoded.length}`);
|
|
17421
|
+
}
|
|
17422
|
+
}
|
|
17423
|
+
});
|
|
17424
|
+
var require_adapters = __commonJS2({
|
|
17425
|
+
"../schemas/declarations/PaymentRequest/v1/bindings/typescript/sender-auth/dist/adapters/index.js"(exports2) {
|
|
17426
|
+
"use strict";
|
|
17427
|
+
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
17428
|
+
exports2.getChainAdapter = getChainAdapter2;
|
|
17429
|
+
var chain_id_js_1 = require_chain_id2();
|
|
17430
|
+
var evm_js_1 = require_evm();
|
|
17431
|
+
var tron_js_1 = require_tron();
|
|
17432
|
+
var solana_js_1 = require_solana();
|
|
17433
|
+
var adapters2 = {
|
|
17434
|
+
eip155: evm_js_1.evmAdapter,
|
|
17435
|
+
tron: tron_js_1.tronAdapter,
|
|
17436
|
+
solana: solana_js_1.solanaAdapter
|
|
17437
|
+
};
|
|
17438
|
+
function getChainAdapter2(caip2) {
|
|
17439
|
+
const adapter = adapters2[(0, chain_id_js_1.namespaceOf)(caip2)];
|
|
17440
|
+
if (!adapter) {
|
|
17441
|
+
throw new Error(`sender_auth: unsupported source chain '${caip2}'`);
|
|
17442
|
+
}
|
|
17443
|
+
return adapter;
|
|
17444
|
+
}
|
|
17445
|
+
}
|
|
17446
|
+
});
|
|
17447
|
+
var require_verify = __commonJS2({
|
|
17448
|
+
"../schemas/declarations/PaymentRequest/v1/bindings/typescript/sender-auth/dist/verify.js"(exports2) {
|
|
17449
|
+
"use strict";
|
|
17450
|
+
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
17451
|
+
exports2.verifyPaymentRequest = verifyPaymentRequest;
|
|
17452
|
+
var index_js_1 = require_adapters();
|
|
17453
|
+
function parseSourceAsset(assetIdentifier2) {
|
|
17454
|
+
const parts = assetIdentifier2.split("/");
|
|
17455
|
+
const nsParts = parts[1]?.split(":");
|
|
17456
|
+
if (parts.length < 2 || !nsParts || nsParts.length < 2 || !nsParts[1]) {
|
|
17457
|
+
throw new Error(`sender_auth: invalid source asset "${assetIdentifier2}"`);
|
|
17458
|
+
}
|
|
17459
|
+
return { network: parts[0], asset: nsParts[1] };
|
|
17460
|
+
}
|
|
17461
|
+
function verifyPaymentRequest(request2, expected = {}) {
|
|
17462
|
+
const senderAuth = request2.sender_auth;
|
|
17463
|
+
if (!senderAuth?.signed_messages?.length) {
|
|
17464
|
+
throw new Error("sender_auth: request has no signed_messages to verify");
|
|
17465
|
+
}
|
|
17466
|
+
if (!request2.source) {
|
|
17467
|
+
throw new Error("sender_auth: request has no source");
|
|
17468
|
+
}
|
|
17469
|
+
const requestSource = parseSourceAsset(request2.source.asset_identifier);
|
|
17470
|
+
const { sourceAsset, network: networkOverride, maxSourceAmount: amountOverride, ...scheme } = expected;
|
|
17471
|
+
const network = networkOverride ?? requestSource.network;
|
|
17472
|
+
const asset = sourceAsset ?? requestSource.asset;
|
|
17473
|
+
const maxSourceAmount = amountOverride ?? request2.max_source_amount ?? "0";
|
|
17474
|
+
const source = { network, asset, account: request2.source.account };
|
|
17475
|
+
const perMessage = { ...scheme, maxSourceAmount };
|
|
17476
|
+
const adapter = (0, index_js_1.getChainAdapter)(network);
|
|
17477
|
+
const results = senderAuth.signed_messages.map((m) => adapter.recoverAndVerify(m, source, perMessage));
|
|
17478
|
+
return { results, recoveredAccount: source.account };
|
|
17479
|
+
}
|
|
17480
|
+
}
|
|
17481
|
+
});
|
|
17482
|
+
var require_signer = __commonJS2({
|
|
17483
|
+
"../schemas/declarations/PaymentRequest/v1/bindings/typescript/sender-auth/dist/signer.js"(exports2) {
|
|
17484
|
+
"use strict";
|
|
17485
|
+
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
17486
|
+
exports2.localKeySigner = localKeySigner2;
|
|
17487
|
+
var index_js_1 = require_adapters();
|
|
17488
|
+
function localKeySigner2(network, privateKey) {
|
|
17489
|
+
const adapter = (0, index_js_1.getChainAdapter)(network);
|
|
17490
|
+
return {
|
|
17491
|
+
async sign(signedMessage) {
|
|
17492
|
+
const signature = await adapter.sign(signedMessage, privateKey);
|
|
17493
|
+
const delegateSigner = adapter.deriveDelegateSigner?.(privateKey);
|
|
17494
|
+
return delegateSigner !== void 0 ? { signature, delegateSigner } : { signature };
|
|
17495
|
+
}
|
|
17496
|
+
};
|
|
17497
|
+
}
|
|
17498
|
+
}
|
|
17499
|
+
});
|
|
17500
|
+
var require_dist4 = __commonJS2({
|
|
17501
|
+
"../schemas/declarations/PaymentRequest/v1/bindings/typescript/sender-auth/dist/index.js"(exports2) {
|
|
17502
|
+
"use strict";
|
|
17503
|
+
var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
|
|
17504
|
+
if (k2 === void 0) k2 = k;
|
|
17505
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
17506
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17507
|
+
desc = { enumerable: true, get: function() {
|
|
17508
|
+
return m[k];
|
|
17509
|
+
} };
|
|
17510
|
+
}
|
|
17511
|
+
Object.defineProperty(o, k2, desc);
|
|
17512
|
+
}) : (function(o, m, k, k2) {
|
|
17513
|
+
if (k2 === void 0) k2 = k;
|
|
17514
|
+
o[k2] = m[k];
|
|
17515
|
+
}));
|
|
17516
|
+
var __exportStar = exports2 && exports2.__exportStar || function(m, exports3) {
|
|
17517
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p)) __createBinding(exports3, m, p);
|
|
17518
|
+
};
|
|
17519
|
+
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
17520
|
+
exports2.localKeySigner = exports2.SignerMismatchError = exports2.RecoveryFailedError = exports2.MalformedPrehashError = exports2.verifyPaymentRequest = exports2.getChainAdapter = void 0;
|
|
17521
|
+
__exportStar(require_types(), exports2);
|
|
17522
|
+
__exportStar(require_utils(), exports2);
|
|
17523
|
+
__exportStar(require_chain_id2(), exports2);
|
|
17524
|
+
var index_js_1 = require_adapters();
|
|
17525
|
+
Object.defineProperty(exports2, "getChainAdapter", { enumerable: true, get: function() {
|
|
17526
|
+
return index_js_1.getChainAdapter;
|
|
17527
|
+
} });
|
|
17528
|
+
var verify_js_1 = require_verify();
|
|
17529
|
+
Object.defineProperty(exports2, "verifyPaymentRequest", { enumerable: true, get: function() {
|
|
17530
|
+
return verify_js_1.verifyPaymentRequest;
|
|
17531
|
+
} });
|
|
17532
|
+
var errors_js_1 = require_errors();
|
|
17533
|
+
Object.defineProperty(exports2, "MalformedPrehashError", { enumerable: true, get: function() {
|
|
17534
|
+
return errors_js_1.MalformedPrehashError;
|
|
17535
|
+
} });
|
|
17536
|
+
Object.defineProperty(exports2, "RecoveryFailedError", { enumerable: true, get: function() {
|
|
17537
|
+
return errors_js_1.RecoveryFailedError;
|
|
17538
|
+
} });
|
|
17539
|
+
Object.defineProperty(exports2, "SignerMismatchError", { enumerable: true, get: function() {
|
|
17540
|
+
return errors_js_1.SignerMismatchError;
|
|
17541
|
+
} });
|
|
17542
|
+
var signer_js_1 = require_signer();
|
|
17543
|
+
Object.defineProperty(exports2, "localKeySigner", { enumerable: true, get: function() {
|
|
17544
|
+
return signer_js_1.localKeySigner;
|
|
17545
|
+
} });
|
|
17546
|
+
}
|
|
17547
|
+
});
|
|
17548
|
+
var require_errors3 = __commonJS2({
|
|
17305
17549
|
"../key-management/common/typescript/dist/errors.js"(exports2) {
|
|
17306
17550
|
"use strict";
|
|
17307
17551
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
@@ -17363,7 +17607,7 @@ var require_dist2 = __commonJS({
|
|
|
17363
17607
|
}
|
|
17364
17608
|
}
|
|
17365
17609
|
});
|
|
17366
|
-
var
|
|
17610
|
+
var require_types2 = __commonJS2({
|
|
17367
17611
|
"../key-management/common/typescript/dist/types.js"(exports2) {
|
|
17368
17612
|
"use strict";
|
|
17369
17613
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
@@ -17391,7 +17635,7 @@ var require_dist2 = __commonJS({
|
|
|
17391
17635
|
});
|
|
17392
17636
|
}
|
|
17393
17637
|
});
|
|
17394
|
-
var
|
|
17638
|
+
var require_dist5 = __commonJS2({
|
|
17395
17639
|
"../key-management/common/typescript/dist/index.js"(exports2) {
|
|
17396
17640
|
"use strict";
|
|
17397
17641
|
var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
|
|
@@ -17411,8 +17655,8 @@ var require_dist2 = __commonJS({
|
|
|
17411
17655
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p)) __createBinding(exports3, m, p);
|
|
17412
17656
|
};
|
|
17413
17657
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
17414
|
-
__exportStar(
|
|
17415
|
-
__exportStar(
|
|
17658
|
+
__exportStar(require_errors3(), exports2);
|
|
17659
|
+
__exportStar(require_types2(), exports2);
|
|
17416
17660
|
__exportStar(require_policy(), exports2);
|
|
17417
17661
|
}
|
|
17418
17662
|
});
|
|
@@ -17523,7 +17767,7 @@ var require_dist2 = __commonJS({
|
|
|
17523
17767
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
17524
17768
|
exports2.TurnkeyClient = void 0;
|
|
17525
17769
|
var promises_1 = __require("timers/promises");
|
|
17526
|
-
var km_core_1 =
|
|
17770
|
+
var km_core_1 = require_dist5();
|
|
17527
17771
|
var constants_1 = require_constants();
|
|
17528
17772
|
var logger_1 = require_logger();
|
|
17529
17773
|
var meter_1 = require_meter();
|
|
@@ -17880,7 +18124,7 @@ var require_dist2 = __commonJS({
|
|
|
17880
18124
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
17881
18125
|
exports2.resolveTurnkeyAccountAddress = resolveTurnkeyAccountAddress;
|
|
17882
18126
|
var promises_1 = __require("timers/promises");
|
|
17883
|
-
var km_core_1 =
|
|
18127
|
+
var km_core_1 = require_dist5();
|
|
17884
18128
|
var constants_1 = require_constants();
|
|
17885
18129
|
var DISCOVERY_BACKOFF_MS = constants_1.TURNKEY_RETRY_BACKOFF_MS;
|
|
17886
18130
|
async function resolveTurnkeyAccountAddress(deps, addressFormat) {
|
|
@@ -17936,7 +18180,7 @@ var require_dist2 = __commonJS({
|
|
|
17936
18180
|
exports2.signSecp256k1PreimageAndVerify = signSecp256k1PreimageAndVerify;
|
|
17937
18181
|
exports2.bytesFromHexOrBytes = bytesFromHexOrBytes;
|
|
17938
18182
|
var ethers_1 = __require("ethers");
|
|
17939
|
-
var km_core_1 =
|
|
18183
|
+
var km_core_1 = require_dist5();
|
|
17940
18184
|
async function signSecp256k1PreimageAndVerify(client, signWith, preimage, expectedEvmAddrLower) {
|
|
17941
18185
|
const preimageHex = (0, ethers_1.hexlify)(preimage).slice(2);
|
|
17942
18186
|
const { r, s, v } = await client.signRawPayload({
|
|
@@ -17967,13 +18211,13 @@ var require_dist2 = __commonJS({
|
|
|
17967
18211
|
}
|
|
17968
18212
|
}
|
|
17969
18213
|
});
|
|
17970
|
-
var
|
|
18214
|
+
var require_evm2 = __commonJS2({
|
|
17971
18215
|
"../key-management/providers/turnkey/typescript/dist/chains/evm.js"(exports2) {
|
|
17972
18216
|
"use strict";
|
|
17973
18217
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
17974
18218
|
exports2.TurnkeyEvmSigner = void 0;
|
|
17975
18219
|
var ethers_1 = __require("ethers");
|
|
17976
|
-
var km_core_1 =
|
|
18220
|
+
var km_core_1 = require_dist5();
|
|
17977
18221
|
var signer_base_1 = require_signer_base();
|
|
17978
18222
|
var secp256k1_helpers_1 = require_secp256k1_helpers();
|
|
17979
18223
|
var ADDRESS_FORMAT = "ADDRESS_FORMAT_ETHEREUM";
|
|
@@ -18088,7 +18332,7 @@ ${msgBytes.length}`);
|
|
|
18088
18332
|
exports2.TurnkeyEvmSigner = TurnkeyEvmSigner2;
|
|
18089
18333
|
}
|
|
18090
18334
|
});
|
|
18091
|
-
var
|
|
18335
|
+
var require_solana2 = __commonJS2({
|
|
18092
18336
|
"../key-management/providers/turnkey/typescript/dist/chains/solana.js"(exports2) {
|
|
18093
18337
|
"use strict";
|
|
18094
18338
|
var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
|
|
@@ -18135,7 +18379,7 @@ ${msgBytes.length}`);
|
|
|
18135
18379
|
exports2.TurnkeySolanaSigner = void 0;
|
|
18136
18380
|
var web3_js_1 = __require("@solana/web3.js");
|
|
18137
18381
|
var bs58_1 = __importDefault(__require("bs58"));
|
|
18138
|
-
var km_core_1 =
|
|
18382
|
+
var km_core_1 = require_dist5();
|
|
18139
18383
|
var signer_base_1 = require_signer_base();
|
|
18140
18384
|
var ADDRESS_FORMAT = "ADDRESS_FORMAT_SOLANA";
|
|
18141
18385
|
var TurnkeySolanaSigner2 = class {
|
|
@@ -18218,7 +18462,7 @@ ${msgBytes.length}`);
|
|
|
18218
18462
|
}
|
|
18219
18463
|
}
|
|
18220
18464
|
});
|
|
18221
|
-
var
|
|
18465
|
+
var require_tron2 = __commonJS2({
|
|
18222
18466
|
"../key-management/providers/turnkey/typescript/dist/chains/tron.js"(exports2) {
|
|
18223
18467
|
"use strict";
|
|
18224
18468
|
var __importDefault = exports2 && exports2.__importDefault || function(mod) {
|
|
@@ -18230,7 +18474,7 @@ ${msgBytes.length}`);
|
|
|
18230
18474
|
var bs58_1 = __importDefault(__require("bs58"));
|
|
18231
18475
|
var ethers_1 = __require("ethers");
|
|
18232
18476
|
var node_crypto_1 = __require("crypto");
|
|
18233
|
-
var km_core_1 =
|
|
18477
|
+
var km_core_1 = require_dist5();
|
|
18234
18478
|
var signer_base_1 = require_signer_base();
|
|
18235
18479
|
var secp256k1_helpers_1 = require_secp256k1_helpers();
|
|
18236
18480
|
var ADDRESS_FORMAT = "ADDRESS_FORMAT_TRON";
|
|
@@ -18368,9 +18612,20 @@ ${messageBytes.length}`);
|
|
|
18368
18612
|
exports2.listSubOrganizations = listSubOrganizations;
|
|
18369
18613
|
exports2.deleteSubOrganization = deleteSubOrganization;
|
|
18370
18614
|
async function createSubOrganization(client, input) {
|
|
18615
|
+
const rootUsers = input.rootUsers.map((u) => ({
|
|
18616
|
+
userName: u.userName,
|
|
18617
|
+
...u.userEmail ? { userEmail: u.userEmail } : {},
|
|
18618
|
+
apiKeys: (u.apiKeys ?? []).map((k) => ({
|
|
18619
|
+
apiKeyName: k.apiKeyName,
|
|
18620
|
+
publicKey: k.publicKey,
|
|
18621
|
+
curveType: k.curveType ?? "API_KEY_CURVE_P256"
|
|
18622
|
+
})),
|
|
18623
|
+
authenticators: u.authenticators ?? [],
|
|
18624
|
+
oauthProviders: []
|
|
18625
|
+
}));
|
|
18371
18626
|
const params = {
|
|
18372
18627
|
subOrganizationName: input.subOrganizationName,
|
|
18373
|
-
rootUsers
|
|
18628
|
+
rootUsers,
|
|
18374
18629
|
rootQuorumThreshold: input.rootQuorumThreshold,
|
|
18375
18630
|
wallet: input.wallet ? {
|
|
18376
18631
|
walletName: input.wallet.walletName,
|
|
@@ -18391,8 +18646,8 @@ ${messageBytes.length}`);
|
|
|
18391
18646
|
const out = await client.query("/public/v1/query/list_suborgs");
|
|
18392
18647
|
return (out.organizationIds ?? []).map((id) => ({ subOrganizationId: id }));
|
|
18393
18648
|
}
|
|
18394
|
-
async function deleteSubOrganization(client,
|
|
18395
|
-
await client.executeActivity("ACTIVITY_TYPE_DELETE_SUB_ORGANIZATION", "delete_sub_organization", {
|
|
18649
|
+
async function deleteSubOrganization(client, opts = {}) {
|
|
18650
|
+
await client.executeActivity("ACTIVITY_TYPE_DELETE_SUB_ORGANIZATION", "delete_sub_organization", { deleteWithoutExport: opts.deleteWithoutExport ?? false });
|
|
18396
18651
|
}
|
|
18397
18652
|
}
|
|
18398
18653
|
});
|
|
@@ -18785,7 +19040,7 @@ ${detail}`);
|
|
|
18785
19040
|
});
|
|
18786
19041
|
for (const chain of chains) {
|
|
18787
19042
|
if (chain.kind === "evm") {
|
|
18788
|
-
const
|
|
19043
|
+
const evmChainId = parseInt(chain.chainId.split(":")[1], 10);
|
|
18789
19044
|
const tokens = extras.allowedTokens[chain.key]?.map((t) => t.toLowerCase()) ?? [];
|
|
18790
19045
|
if (tokens.length === 0) {
|
|
18791
19046
|
throw new Error(`Sender extras: chain "${chain.key}" has no allowedTokens. Add at least one ERC-20 contract address the sender's wallet is permitted to approve, or remove this chain.`);
|
|
@@ -18795,13 +19050,13 @@ ${detail}`);
|
|
|
18795
19050
|
policies.push({
|
|
18796
19051
|
policyName: `allowApproveToPermit2 (${chain.chainId})`,
|
|
18797
19052
|
effect: "EFFECT_ALLOW",
|
|
18798
|
-
condition: `activity.type == 'ACTIVITY_TYPE_SIGN_TRANSACTION_V2' && eth.tx.chain_id == ${
|
|
19053
|
+
condition: `activity.type == 'ACTIVITY_TYPE_SIGN_TRANSACTION_V2' && eth.tx.chain_id == ${evmChainId} && eth.tx.to in [${tokenList}] && eth.tx.data[0..10] == '${APPROVE_SELECTOR}' && eth.tx.data[34..74] == '${permit2Lower}'`,
|
|
18799
19054
|
notes: "Allows ERC-20 approve(Permit2, amount) on allowlisted token contracts. Permit2 is the only legitimate approve spender for the sender flow."
|
|
18800
19055
|
});
|
|
18801
19056
|
policies.push({
|
|
18802
19057
|
policyName: `denyNonZeroValue (${chain.chainId})`,
|
|
18803
19058
|
effect: "EFFECT_DENY",
|
|
18804
|
-
condition: `activity.type == 'ACTIVITY_TYPE_SIGN_TRANSACTION_V2' && eth.tx.chain_id == ${
|
|
19059
|
+
condition: `activity.type == 'ACTIVITY_TYPE_SIGN_TRANSACTION_V2' && eth.tx.chain_id == ${evmChainId} && eth.tx.value > 0`,
|
|
18805
19060
|
notes: "Sender flow never moves native ETH; deny any non-zero value."
|
|
18806
19061
|
});
|
|
18807
19062
|
const caps = extras.evmCaps?.[chain.key];
|
|
@@ -18809,7 +19064,7 @@ ${detail}`);
|
|
|
18809
19064
|
policies.push({
|
|
18810
19065
|
policyName: `maxGasLimit (${chain.chainId})`,
|
|
18811
19066
|
effect: "EFFECT_DENY",
|
|
18812
|
-
condition: `activity.type == 'ACTIVITY_TYPE_SIGN_TRANSACTION_V2' && eth.tx.chain_id == ${
|
|
19067
|
+
condition: `activity.type == 'ACTIVITY_TYPE_SIGN_TRANSACTION_V2' && eth.tx.chain_id == ${evmChainId} && eth.tx.gas > ${caps.maxGasLimit}`,
|
|
18813
19068
|
notes: "Gas DoS defense."
|
|
18814
19069
|
});
|
|
18815
19070
|
}
|
|
@@ -18817,7 +19072,7 @@ ${detail}`);
|
|
|
18817
19072
|
policies.push({
|
|
18818
19073
|
policyName: `maxFeePerGasWei (${chain.chainId})`,
|
|
18819
19074
|
effect: "EFFECT_DENY",
|
|
18820
|
-
condition: `activity.type == 'ACTIVITY_TYPE_SIGN_TRANSACTION_V2' && eth.tx.chain_id == ${
|
|
19075
|
+
condition: `activity.type == 'ACTIVITY_TYPE_SIGN_TRANSACTION_V2' && eth.tx.chain_id == ${evmChainId} && (eth.tx.max_fee_per_gas > ${caps.maxFeePerGasWei} || eth.tx.gas_price > ${caps.maxFeePerGasWei})`,
|
|
18821
19076
|
notes: "Fee DoS defense (covers EIP-1559 and legacy)."
|
|
18822
19077
|
});
|
|
18823
19078
|
}
|
|
@@ -18864,6 +19119,19 @@ ${detail}`);
|
|
|
18864
19119
|
condition: `activity.type == 'ACTIVITY_TYPE_SIGN_TRANSACTION_V2' && solana.tx.instructions.all(i, i.program_key in [${list}])`,
|
|
18865
19120
|
notes: "Sender Solana deposit txs invoke ComputeBudget + Ed25519Program + Atum escrow only."
|
|
18866
19121
|
});
|
|
19122
|
+
const solCap = extras.solanaMaxNativeValue ?? "10000000";
|
|
19123
|
+
policies.push({
|
|
19124
|
+
policyName: `maxNativeValue (${chain.chainId})`,
|
|
19125
|
+
effect: "EFFECT_DENY",
|
|
19126
|
+
condition: `activity.type == 'ACTIVITY_TYPE_SIGN_TRANSACTION_V2' && solana.tx.transfers.any(t, t.amount > ${solCap})`,
|
|
19127
|
+
notes: "Caps native SOL (lamports); default 10,000,000 (0.01 SOL) ATA-rent headroom."
|
|
19128
|
+
});
|
|
19129
|
+
policies.push({
|
|
19130
|
+
policyName: `denySplTransfers (${chain.chainId})`,
|
|
19131
|
+
effect: "EFFECT_DENY",
|
|
19132
|
+
condition: `activity.type == 'ACTIVITY_TYPE_SIGN_TRANSACTION_V2' && solana.tx.spl_transfers.any(t, !(t.to in []))`,
|
|
19133
|
+
notes: "Denies all top-level SPL transfers; the sender moves tokens only via escrow CPI."
|
|
19134
|
+
});
|
|
18867
19135
|
}
|
|
18868
19136
|
}
|
|
18869
19137
|
policies.push({
|
|
@@ -18982,7 +19250,7 @@ ${detail}`);
|
|
|
18982
19250
|
validateAddressMap(obj.allowedTrc20Recipients, "allowedTrc20Recipients", TRON_ADDRESS, source);
|
|
18983
19251
|
}
|
|
18984
19252
|
if (obj.allowedSplRecipients != null) {
|
|
18985
|
-
validateAddressMap(obj.allowedSplRecipients, "allowedSplRecipients", /^[1-9A-HJ-NP-Za-km-z]{32,44}$/, source);
|
|
19253
|
+
validateAddressMap(obj.allowedSplRecipients, "allowedSplRecipients", /^[1-9A-HJ-NP-Za-km-z]{32,44}$/, source, true);
|
|
18986
19254
|
}
|
|
18987
19255
|
if (obj.evmCaps != null) {
|
|
18988
19256
|
validateCapMap(obj.evmCaps, "evmCaps", ["maxGasLimit", "maxFeePerGasWei"], source);
|
|
@@ -19013,12 +19281,12 @@ ${detail}`);
|
|
|
19013
19281
|
}
|
|
19014
19282
|
}
|
|
19015
19283
|
}
|
|
19016
|
-
function validateAddressMap(map, field, pattern, source) {
|
|
19284
|
+
function validateAddressMap(map, field, pattern, source, allowEmpty = false) {
|
|
19017
19285
|
if (typeof map !== "object" || map == null || Array.isArray(map)) {
|
|
19018
19286
|
throw new Error(`${source}: ${field} must be a map keyed by chain name.`);
|
|
19019
19287
|
}
|
|
19020
19288
|
for (const [chainKey, list] of Object.entries(map)) {
|
|
19021
|
-
if (!Array.isArray(list) || list.length === 0) {
|
|
19289
|
+
if (!Array.isArray(list) || !allowEmpty && list.length === 0) {
|
|
19022
19290
|
throw new Error(`${source}: ${field}.${chainKey} must be a non-empty list of addresses.`);
|
|
19023
19291
|
}
|
|
19024
19292
|
for (const addr of list) {
|
|
@@ -19093,6 +19361,10 @@ ${detail}`);
|
|
|
19093
19361
|
const jobs = [];
|
|
19094
19362
|
for (const [chainKey, recipients] of Object.entries(extras.allowedSplRecipients)) {
|
|
19095
19363
|
const chainId = resolveChainId("allowedSplRecipients", chainKey, "solana:");
|
|
19364
|
+
if (recipients.length === 0) {
|
|
19365
|
+
out.push(buildSplRecipientPolicy(chainId, []));
|
|
19366
|
+
continue;
|
|
19367
|
+
}
|
|
19096
19368
|
const mints = ctx.solanaMintsByChainKey[chainKey] ?? [];
|
|
19097
19369
|
if (mints.length === 0) {
|
|
19098
19370
|
throw new Error(`allowedSplRecipients.${chainKey} requires the Solana chain "${chainKey}" to expose at least one asset mint; got 0.`);
|
|
@@ -19160,7 +19432,7 @@ ${detail}`);
|
|
|
19160
19432
|
policyName: `allowedSplRecipients (${chainId})`,
|
|
19161
19433
|
effect: "EFFECT_DENY",
|
|
19162
19434
|
condition: `activity.type == 'ACTIVITY_TYPE_SIGN_TRANSACTION_V2' && solana.tx.spl_transfers.any(t, !(t.to in [${list}]))`,
|
|
19163
|
-
notes: "Denies any top-level SPL transfer to a destination ATA outside the allowlist."
|
|
19435
|
+
notes: allowedAtas.length === 0 ? "Denies ALL top-level SPL transfers (empty allowlist \u2014 no destination is permitted)." : "Denies any top-level SPL transfer to a destination ATA outside the allowlist."
|
|
19164
19436
|
};
|
|
19165
19437
|
}
|
|
19166
19438
|
}
|
|
@@ -19234,7 +19506,7 @@ ${detail}`);
|
|
|
19234
19506
|
} });
|
|
19235
19507
|
}
|
|
19236
19508
|
});
|
|
19237
|
-
var
|
|
19509
|
+
var require_dist6 = __commonJS2({
|
|
19238
19510
|
"../key-management/providers/turnkey/typescript/dist/index.js"(exports2) {
|
|
19239
19511
|
"use strict";
|
|
19240
19512
|
var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
|
|
@@ -19289,15 +19561,15 @@ ${detail}`);
|
|
|
19289
19561
|
Object.defineProperty(exports2, "noopMeter", { enumerable: true, get: function() {
|
|
19290
19562
|
return meter_1.noopMeter;
|
|
19291
19563
|
} });
|
|
19292
|
-
var evm_1 =
|
|
19564
|
+
var evm_1 = require_evm2();
|
|
19293
19565
|
Object.defineProperty(exports2, "TurnkeyEvmSigner", { enumerable: true, get: function() {
|
|
19294
19566
|
return evm_1.TurnkeyEvmSigner;
|
|
19295
19567
|
} });
|
|
19296
|
-
var solana_1 =
|
|
19568
|
+
var solana_1 = require_solana2();
|
|
19297
19569
|
Object.defineProperty(exports2, "TurnkeySolanaSigner", { enumerable: true, get: function() {
|
|
19298
19570
|
return solana_1.TurnkeySolanaSigner;
|
|
19299
19571
|
} });
|
|
19300
|
-
var tron_1 =
|
|
19572
|
+
var tron_1 = require_tron2();
|
|
19301
19573
|
Object.defineProperty(exports2, "TurnkeyTronSigner", { enumerable: true, get: function() {
|
|
19302
19574
|
return tron_1.TurnkeyTronSigner;
|
|
19303
19575
|
} });
|
|
@@ -19412,7 +19684,7 @@ ${detail}`);
|
|
|
19412
19684
|
var init_turnkey_impl = __esm2({
|
|
19413
19685
|
"src/signers/turnkey-impl.ts"() {
|
|
19414
19686
|
"use strict";
|
|
19415
|
-
import_turnkey_signer = __toESM2(
|
|
19687
|
+
import_turnkey_signer = __toESM2(require_dist6());
|
|
19416
19688
|
TURNKEY_API_URL = "https://api.turnkey.com";
|
|
19417
19689
|
DEFAULTS = {
|
|
19418
19690
|
concurrencyLimit: 10,
|
|
@@ -19467,35 +19739,37 @@ ${detail}`);
|
|
|
19467
19739
|
HealthService: () => HealthService,
|
|
19468
19740
|
Interceptors: () => Interceptors,
|
|
19469
19741
|
MAX_VALID_SLOT: () => import_solana_escrow_encoding.MAX_VALID_SLOT,
|
|
19470
|
-
OpenAPI: () =>
|
|
19742
|
+
OpenAPI: () => OpenAPI2,
|
|
19471
19743
|
PAYMENT_REQUEST_VERSION: () => PAYMENT_REQUEST_VERSION,
|
|
19472
|
-
PERMIT2_CONTRACT_ADDRESS: () =>
|
|
19473
|
-
PaymentGatewayClient: () =>
|
|
19744
|
+
PERMIT2_CONTRACT_ADDRESS: () => import_evm_escrow_encoding2.PERMIT2_CONTRACT_ADDRESS,
|
|
19745
|
+
PaymentGatewayClient: () => PaymentGatewayClient22,
|
|
19474
19746
|
PaymentsService: () => PaymentsService,
|
|
19475
19747
|
QuoteRequestsService: () => QuoteRequestsService,
|
|
19476
19748
|
REPLAY_HORIZON_SECS: () => REPLAY_HORIZON_SECS,
|
|
19477
19749
|
TOTAL_BUCKETS: () => TOTAL_BUCKETS,
|
|
19478
19750
|
TurnkeySenderSigner: () => TurnkeySenderSigner,
|
|
19479
19751
|
base58ToBytes: () => base58ToBytes,
|
|
19480
|
-
base58ToHex: () =>
|
|
19752
|
+
base58ToHex: () => import_tvm_escrow_encoding.base58ToHex,
|
|
19481
19753
|
bytesToHex: () => bytesToHex,
|
|
19482
|
-
createPermitWitnessTransferFromPrehash: () =>
|
|
19483
|
-
createSenderSigner: () =>
|
|
19754
|
+
createPermitWitnessTransferFromPrehash: () => import_evm_escrow_encoding2.createPermitWitnessTransferFromPrehash,
|
|
19755
|
+
createSenderSigner: () => createSenderSigner2,
|
|
19484
19756
|
createSolanaDepositPrehash: () => createSolanaDepositPrehash,
|
|
19485
|
-
createTvmPermitWitnessTransferFromPrehash: () =>
|
|
19757
|
+
createTvmPermitWitnessTransferFromPrehash: () => import_tvm_escrow_encoding.createTvmPermitWitnessTransferFromPrehash,
|
|
19486
19758
|
defaultGateway: () => defaultGateway,
|
|
19487
19759
|
encodeU64LE: () => import_solana_escrow_encoding.encodeU64LE,
|
|
19488
19760
|
generateSolanaNonce: () => generateSolanaNonce,
|
|
19489
19761
|
generateSolanaPaymentId: () => generateSolanaPaymentId,
|
|
19490
|
-
|
|
19762
|
+
getErrorResponse: () => getErrorResponse,
|
|
19763
|
+
hashPermitWitnessTransferFrom: () => import_evm_escrow_encoding2.hashPermitWitnessTransferFrom,
|
|
19491
19764
|
hashRequestId: () => hashRequestId,
|
|
19492
19765
|
hashSolanaDeposit: () => hashSolanaDeposit,
|
|
19493
|
-
hashTvmPermitWitnessTransferFrom: () =>
|
|
19766
|
+
hashTvmPermitWitnessTransferFrom: () => import_tvm_escrow_encoding.hashTvmPermitWitnessTransferFrom,
|
|
19494
19767
|
hexToBytes: () => hexToBytes,
|
|
19495
|
-
|
|
19496
|
-
|
|
19768
|
+
isApiError: () => isApiError,
|
|
19769
|
+
maskChainId: () => import_tvm_escrow_encoding.maskChainId,
|
|
19770
|
+
normalizeAddress: () => import_tvm_escrow_encoding.normalizeAddress,
|
|
19497
19771
|
resolveTurnkeyAddresses: () => resolveTurnkeyAddresses,
|
|
19498
|
-
signPaymentRequest: () =>
|
|
19772
|
+
signPaymentRequest: () => signPaymentRequest2
|
|
19499
19773
|
});
|
|
19500
19774
|
module.exports = __toCommonJS2(index_exports);
|
|
19501
19775
|
var Interceptors = class {
|
|
@@ -19513,7 +19787,7 @@ ${detail}`);
|
|
|
19513
19787
|
}
|
|
19514
19788
|
};
|
|
19515
19789
|
var OpenAPI = {
|
|
19516
|
-
BASE: "https://
|
|
19790
|
+
BASE: "https://payment-gw.production-mainnet.atum.xyz",
|
|
19517
19791
|
CREDENTIALS: "include",
|
|
19518
19792
|
ENCODE_PATH: void 0,
|
|
19519
19793
|
HEADERS: void 0,
|
|
@@ -19686,7 +19960,7 @@ ${detail}`);
|
|
|
19686
19960
|
var getFormData = (options) => {
|
|
19687
19961
|
if (options.formData) {
|
|
19688
19962
|
const formData = new FormData();
|
|
19689
|
-
const
|
|
19963
|
+
const process22 = (key, value) => {
|
|
19690
19964
|
if (isString(value) || isBlob(value)) {
|
|
19691
19965
|
formData.append(key, value);
|
|
19692
19966
|
} else {
|
|
@@ -19695,9 +19969,9 @@ ${detail}`);
|
|
|
19695
19969
|
};
|
|
19696
19970
|
Object.entries(options.formData).filter(([, value]) => value !== void 0 && value !== null).forEach(([key, value]) => {
|
|
19697
19971
|
if (Array.isArray(value)) {
|
|
19698
|
-
value.forEach((v) =>
|
|
19972
|
+
value.forEach((v) => process22(key, v));
|
|
19699
19973
|
} else {
|
|
19700
|
-
|
|
19974
|
+
process22(key, value);
|
|
19701
19975
|
}
|
|
19702
19976
|
});
|
|
19703
19977
|
return formData;
|
|
@@ -20217,10 +20491,10 @@ ${detail}`);
|
|
|
20217
20491
|
});
|
|
20218
20492
|
}
|
|
20219
20493
|
};
|
|
20220
|
-
var
|
|
20494
|
+
var PaymentGatewayClient2 = class {
|
|
20221
20495
|
constructor(config, HttpRequest = AxiosHttpRequest) {
|
|
20222
20496
|
this.request = new HttpRequest({
|
|
20223
|
-
BASE: config?.BASE ?? "https://
|
|
20497
|
+
BASE: config?.BASE ?? "https://payment-gw.production-mainnet.atum.xyz",
|
|
20224
20498
|
VERSION: config?.VERSION ?? "1.0.0",
|
|
20225
20499
|
WITH_CREDENTIALS: config?.WITH_CREDENTIALS ?? false,
|
|
20226
20500
|
CREDENTIALS: config?.CREDENTIALS ?? "include",
|
|
@@ -20241,56 +20515,13 @@ ${detail}`);
|
|
|
20241
20515
|
}
|
|
20242
20516
|
};
|
|
20243
20517
|
var import_ethers2 = __require("ethers");
|
|
20244
|
-
var PERMIT_DEADLINE = BigInt(1924991999);
|
|
20245
|
-
function resolvePermitDeadline(deadlineSeconds) {
|
|
20246
|
-
if (deadlineSeconds !== void 0) {
|
|
20247
|
-
return BigInt(Math.floor(Date.now() / 1e3) + deadlineSeconds);
|
|
20248
|
-
}
|
|
20249
|
-
return PERMIT_DEADLINE;
|
|
20250
|
-
}
|
|
20251
|
-
function generatePermitNonce() {
|
|
20252
|
-
const rand = new Uint32Array(1);
|
|
20253
|
-
globalThis.crypto.getRandomValues(rand);
|
|
20254
|
-
return (BigInt(Date.now()) << 32n) + BigInt(rand[0]);
|
|
20255
|
-
}
|
|
20256
|
-
function resolvePermitNonce(nonce) {
|
|
20257
|
-
return nonce !== void 0 ? BigInt(nonce) : generatePermitNonce();
|
|
20258
|
-
}
|
|
20259
20518
|
function assertKeyMatchesSender(matches, sender, derived) {
|
|
20260
20519
|
if (!matches) {
|
|
20261
20520
|
throw new Error(`The private key derives ${derived}, which does not match the sender address ${sender}`);
|
|
20262
20521
|
}
|
|
20263
20522
|
}
|
|
20264
|
-
var import_ethers = __require("ethers");
|
|
20265
|
-
var import_evm_escrow_encoding = __toESM2(require_dist4());
|
|
20266
|
-
function hashRequestId(requestId) {
|
|
20267
|
-
return (0, import_ethers.keccak256)((0, import_ethers.toUtf8Bytes)(requestId));
|
|
20268
|
-
}
|
|
20269
20523
|
var evmAdapter = {
|
|
20270
20524
|
turnkeyAddressFormat: "ADDRESS_FORMAT_ETHEREUM",
|
|
20271
|
-
async buildAuthMessage({ sourceAsset, maxSourceAmount, sourceDefaults, deadlineSeconds, nonce }) {
|
|
20272
|
-
const sourceChainId = sourceAsset.split("/")[0];
|
|
20273
|
-
const chainIdNum = parseInt(sourceChainId.split(":")[1]);
|
|
20274
|
-
const tokenAddress = sourceAsset.split("/")[1].split(":")[1];
|
|
20275
|
-
const permitParams = {
|
|
20276
|
-
chainId: chainIdNum,
|
|
20277
|
-
verifyingContract: import_evm_escrow_encoding.PERMIT2_CONTRACT_ADDRESS,
|
|
20278
|
-
token: tokenAddress,
|
|
20279
|
-
amount: maxSourceAmount,
|
|
20280
|
-
spender: sourceDefaults.escrowContract,
|
|
20281
|
-
nonce: resolvePermitNonce(nonce),
|
|
20282
|
-
deadline: resolvePermitDeadline(deadlineSeconds),
|
|
20283
|
-
reserver: sourceDefaults.quoteSelector,
|
|
20284
|
-
releaser: sourceDefaults.fulfillmentVerifierAccount
|
|
20285
|
-
};
|
|
20286
|
-
const messagePrehash = (0, import_evm_escrow_encoding.createPermitWitnessTransferFromPrehash)(permitParams);
|
|
20287
|
-
const messageHash = (0, import_evm_escrow_encoding.hashPermitWitnessTransferFrom)(messagePrehash);
|
|
20288
|
-
return {
|
|
20289
|
-
messageScheme: "EVM_PERMIT2",
|
|
20290
|
-
messageHash,
|
|
20291
|
-
messagePrehash: JSON.stringify(messagePrehash)
|
|
20292
|
-
};
|
|
20293
|
-
},
|
|
20294
20525
|
formatPrivateKey(key) {
|
|
20295
20526
|
return key.startsWith("0x") ? key : "0x" + key;
|
|
20296
20527
|
},
|
|
@@ -20301,77 +20532,21 @@ ${detail}`);
|
|
|
20301
20532
|
throw new Error("Invalid private key");
|
|
20302
20533
|
}
|
|
20303
20534
|
},
|
|
20304
|
-
/**
|
|
20305
|
-
* Sign the Permit2 PermitWitnessTransferFrom typed data via standard
|
|
20306
|
-
* EIP-712 signing. The prehash is already shaped for direct consumption
|
|
20307
|
-
* by ethers' signTypedData (Permit2 domain has no version/salt; types
|
|
20308
|
-
* omits EIP712Domain since ethers generates that from the domain object).
|
|
20309
|
-
*/
|
|
20310
|
-
async sign(signedMessage, privateKey) {
|
|
20311
|
-
if (!signedMessage.message_prehash) {
|
|
20312
|
-
throw new Error("EVM adapter sign(): signed_messages[i].message_prehash is required");
|
|
20313
|
-
}
|
|
20314
|
-
const prehash = JSON.parse(signedMessage.message_prehash);
|
|
20315
|
-
const wallet = new import_ethers2.ethers.Wallet(privateKey);
|
|
20316
|
-
return wallet.signTypedData(prehash.domain, prehash.types, prehash.message);
|
|
20317
|
-
},
|
|
20318
20535
|
// Called after validatePrivateKey, so ethers.Wallet won't echo a malformed key.
|
|
20319
20536
|
verifyAddressMatchesKey(privateKey, address) {
|
|
20320
20537
|
const derived = new import_ethers2.ethers.Wallet(privateKey).address;
|
|
20321
20538
|
assertKeyMatchesSender(derived.toLowerCase() === address.toLowerCase(), address, derived);
|
|
20322
20539
|
}
|
|
20323
20540
|
};
|
|
20324
|
-
var
|
|
20325
|
-
var
|
|
20326
|
-
var CHAIN_ID_MAP = {
|
|
20327
|
-
"shasta": 2494104990,
|
|
20328
|
-
"mainnet": 728126428
|
|
20329
|
-
};
|
|
20330
|
-
var PERMIT2_FALLBACKS = {
|
|
20331
|
-
"tron:shasta": "TPUqJPASUn1zLvbLBgRZ5pBYrx7WSe5ahp",
|
|
20332
|
-
"tron:mainnet": "TJhMXTHQHeQyMD7TcKQFqAePNgG4b31H9m"
|
|
20333
|
-
};
|
|
20541
|
+
var import_ethers22 = __require("ethers");
|
|
20542
|
+
var import_tvm_escrow_encoding = __toESM2(require_dist3());
|
|
20334
20543
|
var tronAdapter = {
|
|
20335
20544
|
turnkeyAddressFormat: "ADDRESS_FORMAT_TRON",
|
|
20336
|
-
async buildAuthMessage({ sourceAsset, maxSourceAmount, sourceDefaults, deadlineSeconds, nonce }) {
|
|
20337
|
-
const sourceChainId = sourceAsset.split("/")[0];
|
|
20338
|
-
const chainName = sourceChainId.split(":")[1];
|
|
20339
|
-
const chainIdNum = CHAIN_ID_MAP[chainName];
|
|
20340
|
-
if (!chainIdNum) {
|
|
20341
|
-
throw new Error(`Unsupported Tron chain: ${chainName}`);
|
|
20342
|
-
}
|
|
20343
|
-
const tokenAddress = sourceAsset.split("/")[1].split(":")[1];
|
|
20344
|
-
let permit2Address = sourceDefaults.permit2Contract;
|
|
20345
|
-
if (permit2Address === void 0) {
|
|
20346
|
-
permit2Address = PERMIT2_FALLBACKS[sourceChainId];
|
|
20347
|
-
if (!permit2Address) {
|
|
20348
|
-
throw new Error(`don't know Permit2 address for chain ${sourceChainId}`);
|
|
20349
|
-
}
|
|
20350
|
-
}
|
|
20351
|
-
const tvmParams = {
|
|
20352
|
-
chainId: chainIdNum,
|
|
20353
|
-
permit2Address,
|
|
20354
|
-
tokenAddress,
|
|
20355
|
-
amount: maxSourceAmount,
|
|
20356
|
-
spenderAddress: sourceDefaults.escrowContract,
|
|
20357
|
-
nonce: resolvePermitNonce(nonce),
|
|
20358
|
-
deadline: resolvePermitDeadline(deadlineSeconds),
|
|
20359
|
-
reserverAddress: sourceDefaults.quoteSelector,
|
|
20360
|
-
releaserAddress: sourceDefaults.fulfillmentVerifierAccount
|
|
20361
|
-
};
|
|
20362
|
-
const messagePrehash = (0, import_tvm_escrow_encoding2.createTvmPermitWitnessTransferFromPrehash)(tvmParams);
|
|
20363
|
-
const messageHash = (0, import_tvm_escrow_encoding2.hashTvmPermitWitnessTransferFrom)(messagePrehash);
|
|
20364
|
-
return {
|
|
20365
|
-
messageScheme: "EVM_PERMIT2",
|
|
20366
|
-
messageHash,
|
|
20367
|
-
messagePrehash: JSON.stringify(messagePrehash)
|
|
20368
|
-
};
|
|
20369
|
-
},
|
|
20370
20545
|
resolveContractOverrides(sourceDefaults) {
|
|
20371
20546
|
return {
|
|
20372
|
-
quote_selector: (0,
|
|
20547
|
+
quote_selector: (0, import_tvm_escrow_encoding.normalizeAddress)(sourceDefaults.quoteSelector),
|
|
20373
20548
|
fulfillment_verifier: {
|
|
20374
|
-
account: (0,
|
|
20549
|
+
account: (0, import_tvm_escrow_encoding.normalizeAddress)(sourceDefaults.fulfillmentVerifierAccount),
|
|
20375
20550
|
endpoint: sourceDefaults.fulfillmentVerifierEndpoint
|
|
20376
20551
|
}
|
|
20377
20552
|
};
|
|
@@ -20386,129 +20561,64 @@ ${detail}`);
|
|
|
20386
20561
|
throw new Error("Invalid private key");
|
|
20387
20562
|
}
|
|
20388
20563
|
},
|
|
20389
|
-
/**
|
|
20390
|
-
* Tron uses TIP-712 typed-data — same wire format as EIP-712. The prehash
|
|
20391
|
-
* built by createTvmPermitWitnessTransferFromPrehash is now directly
|
|
20392
|
-
* consumable by `wallet.signTypedData(prehash.domain, prehash.types,
|
|
20393
|
-
* prehash.message)`, but this adapter (an internal SDK helper) stays on the
|
|
20394
|
-
* raw-hash sign for parity with the EVM adapter — e2e tests use ethers
|
|
20395
|
-
* directly when they need the typed-data path.
|
|
20396
|
-
*/
|
|
20397
|
-
async sign(signedMessage, privateKey) {
|
|
20398
|
-
const wallet = new import_ethers3.ethers.Wallet(privateKey.startsWith("0x") ? privateKey : "0x" + privateKey);
|
|
20399
|
-
return wallet.signingKey.sign(signedMessage.message).serialized;
|
|
20400
|
-
},
|
|
20401
20564
|
// Tron addresses are the same secp256k1-derived 20 bytes as EVM. Compare the
|
|
20402
20565
|
// derived hex directly against the canonical sender; do NOT run normalizeAddress
|
|
20403
20566
|
// on the derived side — it strips a leading 41, which would corrupt an address
|
|
20404
20567
|
// whose first byte is 0x41.
|
|
20405
20568
|
verifyAddressMatchesKey(privateKey, address) {
|
|
20406
20569
|
const key = privateKey.startsWith("0x") ? privateKey : "0x" + privateKey;
|
|
20407
|
-
const derived = new
|
|
20408
|
-
assertKeyMatchesSender(derived.toLowerCase() === (0,
|
|
20570
|
+
const derived = new import_ethers22.ethers.Wallet(key).address;
|
|
20571
|
+
assertKeyMatchesSender(derived.toLowerCase() === (0, import_tvm_escrow_encoding.normalizeAddress)(address), address, derived);
|
|
20409
20572
|
}
|
|
20410
20573
|
};
|
|
20411
20574
|
var import_tweetnacl = __toESM2(__require("tweetnacl"));
|
|
20412
|
-
var import_bs582 = __toESM2(__require("bs58"));
|
|
20413
|
-
var import_solana_escrow_encoding2 = __toESM2(require_dist32());
|
|
20414
|
-
var import_ethers4 = __require("ethers");
|
|
20415
20575
|
var import_bs58 = __toESM2(__require("bs58"));
|
|
20416
|
-
var
|
|
20417
|
-
|
|
20418
|
-
|
|
20419
|
-
|
|
20420
|
-
|
|
20421
|
-
|
|
20422
|
-
|
|
20423
|
-
|
|
20576
|
+
var solanaAdapter = {
|
|
20577
|
+
turnkeyAddressFormat: "ADDRESS_FORMAT_SOLANA",
|
|
20578
|
+
formatPrivateKey(key) {
|
|
20579
|
+
return key.startsWith("0x") ? key.slice(2) : key;
|
|
20580
|
+
},
|
|
20581
|
+
verifyAddressMatchesKey(privateKey, address) {
|
|
20582
|
+
const derived = deriveSolanaAddress(privateKey);
|
|
20583
|
+
assertKeyMatchesSender(derived === address, address, derived);
|
|
20424
20584
|
}
|
|
20425
|
-
|
|
20426
|
-
|
|
20427
|
-
|
|
20428
|
-
return (0, import_ethers4.hexlify)(bytes);
|
|
20429
|
-
}
|
|
20430
|
-
function hexToBytes(hex) {
|
|
20431
|
-
return (0, import_ethers4.getBytes)(hex.startsWith("0x") ? hex : "0x" + hex);
|
|
20432
|
-
}
|
|
20433
|
-
function generateSolanaPaymentId(requestId, params) {
|
|
20434
|
-
const depositorBytes = base58ToBytes(params.depositor);
|
|
20435
|
-
const reserverBytes = base58ToBytes(params.reserver);
|
|
20436
|
-
const releaserBytes = base58ToBytes(params.releaser);
|
|
20437
|
-
return (0, import_ethers4.keccak256)((0, import_ethers4.concat)([
|
|
20438
|
-
(0, import_ethers4.toUtf8Bytes)(requestId),
|
|
20439
|
-
(0, import_ethers4.toUtf8Bytes)("deposit"),
|
|
20440
|
-
depositorBytes,
|
|
20441
|
-
(0, import_solana_escrow_encoding.encodeU64LE)(params.amount),
|
|
20442
|
-
reserverBytes,
|
|
20443
|
-
releaserBytes,
|
|
20444
|
-
(0, import_solana_escrow_encoding.encodeU64LE)(params.nonce),
|
|
20445
|
-
(0, import_solana_escrow_encoding.encodeU64LE)(params.issuedAt),
|
|
20446
|
-
(0, import_solana_escrow_encoding.encodeU64LE)(params.deadline)
|
|
20447
|
-
]));
|
|
20448
|
-
}
|
|
20449
|
-
function createSolanaDepositPrehash(paymentId, params) {
|
|
20450
|
-
return {
|
|
20451
|
-
payment_id: paymentId,
|
|
20452
|
-
depositor: params.depositor,
|
|
20453
|
-
mint: params.mint,
|
|
20454
|
-
amount: params.amount.toString(),
|
|
20455
|
-
reserver: params.reserver,
|
|
20456
|
-
releaser: params.releaser,
|
|
20457
|
-
nonce: params.nonce.toString(),
|
|
20458
|
-
issued_at: params.issuedAt.toString(),
|
|
20459
|
-
deadline: params.deadline.toString()
|
|
20460
|
-
};
|
|
20461
|
-
}
|
|
20462
|
-
function hashSolanaDeposit(prehash) {
|
|
20463
|
-
const paymentIdBytes = hexToBytes(prehash.payment_id);
|
|
20464
|
-
const depositorBytes = base58ToBytes(prehash.depositor);
|
|
20465
|
-
const mintBytes = base58ToBytes(prehash.mint);
|
|
20466
|
-
const reserverBytes = base58ToBytes(prehash.reserver);
|
|
20467
|
-
const releaserBytes = base58ToBytes(prehash.releaser);
|
|
20468
|
-
return (0, import_ethers4.keccak256)((0, import_ethers4.concat)([
|
|
20469
|
-
(0, import_ethers4.toUtf8Bytes)("deposit"),
|
|
20470
|
-
paymentIdBytes,
|
|
20471
|
-
depositorBytes,
|
|
20472
|
-
mintBytes,
|
|
20473
|
-
(0, import_solana_escrow_encoding.encodeU64LE)(BigInt(prehash.amount)),
|
|
20474
|
-
reserverBytes,
|
|
20475
|
-
releaserBytes,
|
|
20476
|
-
(0, import_solana_escrow_encoding.encodeU64LE)(BigInt(prehash.nonce)),
|
|
20477
|
-
(0, import_solana_escrow_encoding.encodeU64LE)(BigInt(prehash.issued_at)),
|
|
20478
|
-
(0, import_solana_escrow_encoding.encodeU64LE)(BigInt(prehash.deadline))
|
|
20479
|
-
]));
|
|
20480
|
-
}
|
|
20481
|
-
function generateSolanaNonce() {
|
|
20482
|
-
return (0, import_solana_escrow_encoding.generateNonce)();
|
|
20585
|
+
};
|
|
20586
|
+
function deriveSolanaAddress(privateKey) {
|
|
20587
|
+
return import_bs58.default.encode(import_tweetnacl.default.sign.keyPair.fromSecretKey(secretKeyFromPrivate(privateKey)).publicKey);
|
|
20483
20588
|
}
|
|
20484
|
-
function
|
|
20485
|
-
|
|
20486
|
-
|
|
20487
|
-
|
|
20488
|
-
|
|
20489
|
-
|
|
20490
|
-
|
|
20491
|
-
|
|
20589
|
+
function secretKeyFromPrivate(privateKey) {
|
|
20590
|
+
if (/^[0-9a-fA-F]{64}$/.test(privateKey)) {
|
|
20591
|
+
const seed = new Uint8Array(32);
|
|
20592
|
+
for (let i = 0; i < 32; i++) {
|
|
20593
|
+
seed[i] = parseInt(privateKey.substring(i * 2, i * 2 + 2), 16);
|
|
20594
|
+
}
|
|
20595
|
+
return import_tweetnacl.default.sign.keyPair.fromSeed(seed).secretKey;
|
|
20596
|
+
}
|
|
20597
|
+
const decoded = import_bs58.default.decode(privateKey);
|
|
20598
|
+
if (decoded.length === 64) {
|
|
20599
|
+
return decoded;
|
|
20600
|
+
}
|
|
20601
|
+
if (decoded.length === 32) {
|
|
20602
|
+
return import_tweetnacl.default.sign.keyPair.fromSeed(decoded).secretKey;
|
|
20603
|
+
}
|
|
20604
|
+
throw new Error(`Invalid Solana private key length: expected 32 or 64 bytes, got ${decoded.length}`);
|
|
20492
20605
|
}
|
|
20493
|
-
|
|
20494
|
-
|
|
20606
|
+
var adapters = {
|
|
20607
|
+
"eip155": evmAdapter,
|
|
20608
|
+
"tron": tronAdapter,
|
|
20609
|
+
"solana": solanaAdapter
|
|
20610
|
+
};
|
|
20611
|
+
function getChainAdapter(sourceChainId) {
|
|
20612
|
+
const prefix = sourceChainId.split(":")[0];
|
|
20613
|
+
const adapter = adapters[prefix];
|
|
20614
|
+
if (!adapter) throw new Error(`Unsupported source chain: ${sourceChainId}`);
|
|
20615
|
+
return adapter;
|
|
20495
20616
|
}
|
|
20496
|
-
function
|
|
20497
|
-
const
|
|
20498
|
-
|
|
20499
|
-
|
|
20500
|
-
|
|
20501
|
-
mint: import_solana_escrow_encoding.Pubkey.fromBase58(prehash.mint),
|
|
20502
|
-
amount: BigInt(prehash.amount),
|
|
20503
|
-
reserver: import_solana_escrow_encoding.Pubkey.fromBase58(prehash.reserver),
|
|
20504
|
-
releaser: import_solana_escrow_encoding.Pubkey.fromBase58(prehash.releaser),
|
|
20505
|
-
nonce: BigInt(prehash.nonce),
|
|
20506
|
-
issuedAt: BigInt(prehash.issued_at),
|
|
20507
|
-
deadline: BigInt(prehash.deadline)
|
|
20508
|
-
},
|
|
20509
|
-
domain
|
|
20510
|
-
);
|
|
20511
|
-
return bytesToHex(hash);
|
|
20617
|
+
function namespaceForTurnkeyAddressFormat(addressFormat) {
|
|
20618
|
+
for (const [namespace, adapter] of Object.entries(adapters)) {
|
|
20619
|
+
if (adapter.turnkeyAddressFormat === addressFormat) return namespace;
|
|
20620
|
+
}
|
|
20621
|
+
return void 0;
|
|
20512
20622
|
}
|
|
20513
20623
|
var DEFAULT_SOLANA_RPC_URLS = {
|
|
20514
20624
|
"5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp": "https://api.mainnet-beta.solana.com",
|
|
@@ -20575,117 +20685,7 @@ ${detail}`);
|
|
|
20575
20685
|
}
|
|
20576
20686
|
return BigInt(Math.floor(Date.now() / 1e3)) - SOLANA_ISSUED_AT_FALLBACK_SKEW_SECS;
|
|
20577
20687
|
}
|
|
20578
|
-
var
|
|
20579
|
-
turnkeyAddressFormat: "ADDRESS_FORMAT_SOLANA",
|
|
20580
|
-
async buildAuthMessage({ sourceAsset, depositor, maxSourceAmount, requestId, sourceDefaults, solanaRpcUrl, solanaClockReader, solanaLogger }) {
|
|
20581
|
-
const sourceChainId = sourceAsset.split("/")[0];
|
|
20582
|
-
const tokenMint = sourceAsset.split("/")[1].split(":")[1];
|
|
20583
|
-
const nonce = generateSolanaNonce();
|
|
20584
|
-
const issuedAt = await resolveSolanaIssuedAt({
|
|
20585
|
-
sourceChainId,
|
|
20586
|
-
rpcUrlOverride: solanaRpcUrl,
|
|
20587
|
-
reader: solanaClockReader,
|
|
20588
|
-
logger: solanaLogger
|
|
20589
|
-
});
|
|
20590
|
-
const deadline = issuedAt + BigInt(REPLAY_HORIZON_SECS - 8);
|
|
20591
|
-
const solanaParams = {
|
|
20592
|
-
depositor,
|
|
20593
|
-
mint: tokenMint,
|
|
20594
|
-
amount: BigInt(maxSourceAmount),
|
|
20595
|
-
reserver: sourceDefaults.quoteSelector,
|
|
20596
|
-
releaser: sourceDefaults.fulfillmentVerifierAccount,
|
|
20597
|
-
nonce,
|
|
20598
|
-
issuedAt,
|
|
20599
|
-
deadline,
|
|
20600
|
-
requestId
|
|
20601
|
-
};
|
|
20602
|
-
const paymentId = generateSolanaPaymentIdV3(requestId);
|
|
20603
|
-
const prehash = createSolanaDepositPrehash(paymentId, solanaParams);
|
|
20604
|
-
if (!sourceDefaults.svmSignatureClusterId || sourceDefaults.svmSignatureDomainVersion == null) {
|
|
20605
|
-
throw new Error(
|
|
20606
|
-
"Solana source requires svm_signature_cluster_id and svm_signature_domain_version from payment-gw /defaults (V3 escrow domain separation). Is the gateway on V3?"
|
|
20607
|
-
);
|
|
20608
|
-
}
|
|
20609
|
-
const domain = {
|
|
20610
|
-
clusterId: clusterIdFromName2(sourceDefaults.svmSignatureClusterId),
|
|
20611
|
-
signatureDomainVersion: sourceDefaults.svmSignatureDomainVersion,
|
|
20612
|
-
programId: import_solana_escrow_encoding2.Pubkey.fromBase58(sourceDefaults.escrowContract)
|
|
20613
|
-
};
|
|
20614
|
-
const depositHash = hashSolanaDepositV3(prehash, domain);
|
|
20615
|
-
return {
|
|
20616
|
-
messageScheme: "SOLANA",
|
|
20617
|
-
messageHash: depositHash,
|
|
20618
|
-
messagePrehash: JSON.stringify(prehash)
|
|
20619
|
-
};
|
|
20620
|
-
},
|
|
20621
|
-
formatPrivateKey(key) {
|
|
20622
|
-
return key.startsWith("0x") ? key.slice(2) : key;
|
|
20623
|
-
},
|
|
20624
|
-
/**
|
|
20625
|
-
* Solana has no EIP-712-style typed-data standard. The prehash structure
|
|
20626
|
-
* still describes what was hashed (for debugging / wallet UX), but the
|
|
20627
|
-
* canonical signing input is the chain-specific digest already in
|
|
20628
|
-
* signedMessage.message. We sign that with ed25519.
|
|
20629
|
-
*/
|
|
20630
|
-
async sign(signedMessage, privateKey) {
|
|
20631
|
-
const messageBytes = new Uint8Array(Buffer.from(signedMessage.message.replace("0x", ""), "hex"));
|
|
20632
|
-
const secretKey = secretKeyFromPrivate(privateKey);
|
|
20633
|
-
const sig = import_tweetnacl.default.sign.detached(messageBytes, secretKey);
|
|
20634
|
-
return "0x" + Buffer.from(sig).toString("hex");
|
|
20635
|
-
},
|
|
20636
|
-
/**
|
|
20637
|
-
* Solana Ed25519 signatures are not public-key-recoverable (unlike EVM
|
|
20638
|
-
* secp256k1, where ecrecover derives the signer from the signature). The
|
|
20639
|
-
* on-chain Ed25519 verify instruction must therefore be given the signer's
|
|
20640
|
-
* public key explicitly, so we ship it as signed_messages[0].payload.delegate_signer.
|
|
20641
|
-
* In the self-custody CLI flow the signer is the depositor itself, so this
|
|
20642
|
-
* equals source.account.
|
|
20643
|
-
*/
|
|
20644
|
-
deriveDelegateSigner(privateKey) {
|
|
20645
|
-
return deriveSolanaAddress(privateKey);
|
|
20646
|
-
},
|
|
20647
|
-
verifyAddressMatchesKey(privateKey, address) {
|
|
20648
|
-
const derived = deriveSolanaAddress(privateKey);
|
|
20649
|
-
assertKeyMatchesSender(derived === address, address, derived);
|
|
20650
|
-
}
|
|
20651
|
-
};
|
|
20652
|
-
function deriveSolanaAddress(privateKey) {
|
|
20653
|
-
return import_bs582.default.encode(import_tweetnacl.default.sign.keyPair.fromSecretKey(secretKeyFromPrivate(privateKey)).publicKey);
|
|
20654
|
-
}
|
|
20655
|
-
function secretKeyFromPrivate(privateKey) {
|
|
20656
|
-
if (/^[0-9a-fA-F]{64}$/.test(privateKey)) {
|
|
20657
|
-
const seed = new Uint8Array(32);
|
|
20658
|
-
for (let i = 0; i < 32; i++) {
|
|
20659
|
-
seed[i] = parseInt(privateKey.substring(i * 2, i * 2 + 2), 16);
|
|
20660
|
-
}
|
|
20661
|
-
return import_tweetnacl.default.sign.keyPair.fromSeed(seed).secretKey;
|
|
20662
|
-
}
|
|
20663
|
-
const decoded = import_bs582.default.decode(privateKey);
|
|
20664
|
-
if (decoded.length === 64) {
|
|
20665
|
-
return decoded;
|
|
20666
|
-
}
|
|
20667
|
-
if (decoded.length === 32) {
|
|
20668
|
-
return import_tweetnacl.default.sign.keyPair.fromSeed(decoded).secretKey;
|
|
20669
|
-
}
|
|
20670
|
-
throw new Error(`Invalid Solana private key length: expected 32 or 64 bytes, got ${decoded.length}`);
|
|
20671
|
-
}
|
|
20672
|
-
var adapters = {
|
|
20673
|
-
"eip155": evmAdapter,
|
|
20674
|
-
"tron": tronAdapter,
|
|
20675
|
-
"solana": solanaAdapter
|
|
20676
|
-
};
|
|
20677
|
-
function getChainAdapter(sourceChainId) {
|
|
20678
|
-
const prefix = sourceChainId.split(":")[0];
|
|
20679
|
-
const adapter = adapters[prefix];
|
|
20680
|
-
if (!adapter) throw new Error(`Unsupported source chain: ${sourceChainId}`);
|
|
20681
|
-
return adapter;
|
|
20682
|
-
}
|
|
20683
|
-
function namespaceForTurnkeyAddressFormat(addressFormat) {
|
|
20684
|
-
for (const [namespace, adapter] of Object.entries(adapters)) {
|
|
20685
|
-
if (adapter.turnkeyAddressFormat === addressFormat) return namespace;
|
|
20686
|
-
}
|
|
20687
|
-
return void 0;
|
|
20688
|
-
}
|
|
20688
|
+
var import_payment_request_sender_auth2 = __toESM2(require_dist4());
|
|
20689
20689
|
var $AuthorizationResult = {
|
|
20690
20690
|
type: "object",
|
|
20691
20691
|
description: `The result of a counterparty authorization request. Contains either
|
|
@@ -20857,8 +20857,11 @@ Leave empty to use the default verifier.
|
|
|
20857
20857
|
endpoint: {
|
|
20858
20858
|
type: "string",
|
|
20859
20859
|
format: "uri",
|
|
20860
|
-
description:
|
|
20861
|
-
|
|
20860
|
+
description: `Origin of the fulfillment verifier service, with no path \u2014 the caller
|
|
20861
|
+
appends the verifier's own API paths. The gateway's \`/defaults\` response
|
|
20862
|
+
supplies the default fulfillment verifier for each chain.
|
|
20863
|
+
`,
|
|
20864
|
+
example: "https://veri-fill.production-testnet.atum.xyz"
|
|
20862
20865
|
}
|
|
20863
20866
|
}
|
|
20864
20867
|
},
|
|
@@ -21726,8 +21729,11 @@ Leave empty to use the default selector.
|
|
|
21726
21729
|
endpoint: {
|
|
21727
21730
|
type: "string",
|
|
21728
21731
|
format: "uri",
|
|
21729
|
-
description:
|
|
21730
|
-
|
|
21732
|
+
description: `Origin of the fulfillment verifier service, with no path \u2014 the caller
|
|
21733
|
+
appends the verifier's own API paths. The gateway's \`/defaults\` response
|
|
21734
|
+
supplies the default fulfillment verifier for each chain.
|
|
21735
|
+
`,
|
|
21736
|
+
example: "https://veri-fill.production-testnet.atum.xyz"
|
|
21731
21737
|
}
|
|
21732
21738
|
}
|
|
21733
21739
|
},
|
|
@@ -21847,7 +21853,7 @@ bid_award.fulfillment_quote_json.
|
|
|
21847
21853
|
fulfillment_quote: {
|
|
21848
21854
|
type: "object",
|
|
21849
21855
|
description: `The settler-signed FulfillmentQuote (structurally the canonical FulfillmentQuote/v1
|
|
21850
|
-
declaration at https://schemas.atum.
|
|
21856
|
+
declaration at https://schemas.atum.xyz/declarations/FulfillmentQuote/v1), returned
|
|
21851
21857
|
verbatim as an opaque signed document. A client recomputes quote_hash over the returned
|
|
21852
21858
|
bytes and verifies the settler signature, then re-embeds them into
|
|
21853
21859
|
bid_award.fulfillment_quote_json at award. quote_hash is canonicalization-based
|
|
@@ -21873,7 +21879,7 @@ values and WOULD change quote_hash), so the Go binding exposes it as a raw JSON
|
|
|
21873
21879
|
fulfillment_quote: {
|
|
21874
21880
|
type: "object",
|
|
21875
21881
|
description: `The settler-signed FulfillmentQuote (structurally the canonical FulfillmentQuote/v1
|
|
21876
|
-
declaration at https://schemas.atum.
|
|
21882
|
+
declaration at https://schemas.atum.xyz/declarations/FulfillmentQuote/v1), returned
|
|
21877
21883
|
verbatim as an opaque signed document. A client recomputes quote_hash over the returned
|
|
21878
21884
|
bytes and verifies the settler signature, then re-embeds them into
|
|
21879
21885
|
bid_award.fulfillment_quote_json at award. quote_hash is canonicalization-based
|
|
@@ -22186,16 +22192,103 @@ payment-status endpoint.
|
|
|
22186
22192
|
}
|
|
22187
22193
|
}
|
|
22188
22194
|
};
|
|
22195
|
+
function isApiError(err) {
|
|
22196
|
+
return err instanceof ApiError;
|
|
22197
|
+
}
|
|
22198
|
+
function getErrorResponse(err) {
|
|
22199
|
+
if (!(err instanceof ApiError)) {
|
|
22200
|
+
return void 0;
|
|
22201
|
+
}
|
|
22202
|
+
const body = err.body;
|
|
22203
|
+
if (body && typeof body === "object" && typeof body.code === "string" && typeof body.message === "string") {
|
|
22204
|
+
return body;
|
|
22205
|
+
}
|
|
22206
|
+
return void 0;
|
|
22207
|
+
}
|
|
22208
|
+
var import_ethers3 = __require("ethers");
|
|
22209
|
+
var import_evm_escrow_encoding2 = __toESM2(require_dist22());
|
|
22210
|
+
function hashRequestId(requestId) {
|
|
22211
|
+
return (0, import_ethers3.keccak256)((0, import_ethers3.toUtf8Bytes)(requestId));
|
|
22212
|
+
}
|
|
22213
|
+
var import_ethers4 = __require("ethers");
|
|
22214
|
+
var import_bs582 = __toESM2(__require("bs58"));
|
|
22215
|
+
var import_solana_escrow_encoding = __toESM2(require_dist32());
|
|
22216
|
+
var REPLAY_HORIZON_SECS = 128;
|
|
22217
|
+
var TOTAL_BUCKETS = 131072;
|
|
22218
|
+
var DEPOSIT_MESSAGE_SIZE = 199;
|
|
22219
|
+
function base58ToBytes(address) {
|
|
22220
|
+
const bytes = import_bs582.default.decode(address);
|
|
22221
|
+
if (bytes.length !== 32) {
|
|
22222
|
+
throw new Error(`Invalid Solana public key length: expected 32 bytes, got ${bytes.length}`);
|
|
22223
|
+
}
|
|
22224
|
+
return bytes;
|
|
22225
|
+
}
|
|
22226
|
+
function bytesToHex(bytes) {
|
|
22227
|
+
return (0, import_ethers4.hexlify)(bytes);
|
|
22228
|
+
}
|
|
22229
|
+
function hexToBytes(hex) {
|
|
22230
|
+
return (0, import_ethers4.getBytes)(hex.startsWith("0x") ? hex : "0x" + hex);
|
|
22231
|
+
}
|
|
22232
|
+
function generateSolanaPaymentId(requestId, params) {
|
|
22233
|
+
const depositorBytes = base58ToBytes(params.depositor);
|
|
22234
|
+
const reserverBytes = base58ToBytes(params.reserver);
|
|
22235
|
+
const releaserBytes = base58ToBytes(params.releaser);
|
|
22236
|
+
return (0, import_ethers4.keccak256)((0, import_ethers4.concat)([
|
|
22237
|
+
(0, import_ethers4.toUtf8Bytes)(requestId),
|
|
22238
|
+
(0, import_ethers4.toUtf8Bytes)("deposit"),
|
|
22239
|
+
depositorBytes,
|
|
22240
|
+
(0, import_solana_escrow_encoding.encodeU64LE)(params.amount),
|
|
22241
|
+
reserverBytes,
|
|
22242
|
+
releaserBytes,
|
|
22243
|
+
(0, import_solana_escrow_encoding.encodeU64LE)(params.nonce),
|
|
22244
|
+
(0, import_solana_escrow_encoding.encodeU64LE)(params.issuedAt),
|
|
22245
|
+
(0, import_solana_escrow_encoding.encodeU64LE)(params.deadline)
|
|
22246
|
+
]));
|
|
22247
|
+
}
|
|
22248
|
+
function createSolanaDepositPrehash(paymentId, params) {
|
|
22249
|
+
return {
|
|
22250
|
+
payment_id: paymentId,
|
|
22251
|
+
depositor: params.depositor,
|
|
22252
|
+
mint: params.mint,
|
|
22253
|
+
amount: params.amount.toString(),
|
|
22254
|
+
reserver: params.reserver,
|
|
22255
|
+
releaser: params.releaser,
|
|
22256
|
+
nonce: params.nonce.toString(),
|
|
22257
|
+
issued_at: params.issuedAt.toString(),
|
|
22258
|
+
deadline: params.deadline.toString()
|
|
22259
|
+
};
|
|
22260
|
+
}
|
|
22261
|
+
function hashSolanaDeposit(prehash) {
|
|
22262
|
+
const paymentIdBytes = hexToBytes(prehash.payment_id);
|
|
22263
|
+
const depositorBytes = base58ToBytes(prehash.depositor);
|
|
22264
|
+
const mintBytes = base58ToBytes(prehash.mint);
|
|
22265
|
+
const reserverBytes = base58ToBytes(prehash.reserver);
|
|
22266
|
+
const releaserBytes = base58ToBytes(prehash.releaser);
|
|
22267
|
+
return (0, import_ethers4.keccak256)((0, import_ethers4.concat)([
|
|
22268
|
+
(0, import_ethers4.toUtf8Bytes)("deposit"),
|
|
22269
|
+
paymentIdBytes,
|
|
22270
|
+
depositorBytes,
|
|
22271
|
+
mintBytes,
|
|
22272
|
+
(0, import_solana_escrow_encoding.encodeU64LE)(BigInt(prehash.amount)),
|
|
22273
|
+
reserverBytes,
|
|
22274
|
+
releaserBytes,
|
|
22275
|
+
(0, import_solana_escrow_encoding.encodeU64LE)(BigInt(prehash.nonce)),
|
|
22276
|
+
(0, import_solana_escrow_encoding.encodeU64LE)(BigInt(prehash.issued_at)),
|
|
22277
|
+
(0, import_solana_escrow_encoding.encodeU64LE)(BigInt(prehash.deadline))
|
|
22278
|
+
]));
|
|
22279
|
+
}
|
|
22280
|
+
function generateSolanaNonce() {
|
|
22281
|
+
return (0, import_solana_escrow_encoding.generateNonce)();
|
|
22282
|
+
}
|
|
22283
|
+
var import_payment_request_sender_auth = __toESM2(require_dist4());
|
|
22189
22284
|
var RawSenderSigner = class {
|
|
22190
|
-
constructor(
|
|
22191
|
-
|
|
22192
|
-
this.privateKey = privateKey;
|
|
22285
|
+
constructor(network, privateKey) {
|
|
22286
|
+
const adapter = getChainAdapter(network);
|
|
22193
22287
|
adapter.validatePrivateKey?.(privateKey);
|
|
22288
|
+
this.inner = (0, import_payment_request_sender_auth.localKeySigner)(network, adapter.formatPrivateKey(privateKey));
|
|
22194
22289
|
}
|
|
22195
|
-
|
|
22196
|
-
|
|
22197
|
-
const delegateSigner = this.adapter.deriveDelegateSigner?.(this.privateKey);
|
|
22198
|
-
return { signature, ...delegateSigner ? { delegateSigner } : {} };
|
|
22290
|
+
sign(signedMessage) {
|
|
22291
|
+
return this.inner.sign(signedMessage);
|
|
22199
22292
|
}
|
|
22200
22293
|
};
|
|
22201
22294
|
async function loadImpl() {
|
|
@@ -22225,21 +22318,21 @@ payment-status endpoint.
|
|
|
22225
22318
|
);
|
|
22226
22319
|
}
|
|
22227
22320
|
};
|
|
22228
|
-
function
|
|
22321
|
+
function createSenderSigner2(sourceChainId, opts) {
|
|
22229
22322
|
const chainPrefix = sourceChainId.split(":")[0];
|
|
22230
22323
|
if (opts.provider === "turnkey") {
|
|
22231
22324
|
return new TurnkeySenderSigner(chainPrefix, opts);
|
|
22232
22325
|
}
|
|
22233
22326
|
const adapter = getChainAdapter(sourceChainId);
|
|
22234
22327
|
const privateKey = adapter.formatPrivateKey(opts.privateKey);
|
|
22235
|
-
|
|
22328
|
+
adapter.validatePrivateKey?.(opts.privateKey);
|
|
22236
22329
|
if (opts.pinnedAddress) {
|
|
22237
22330
|
if (!adapter.verifyAddressMatchesKey) {
|
|
22238
22331
|
throw new Error(`pinnedAddress was provided but the ${sourceChainId} adapter cannot verify the key derives it`);
|
|
22239
22332
|
}
|
|
22240
22333
|
adapter.verifyAddressMatchesKey(privateKey, opts.pinnedAddress);
|
|
22241
22334
|
}
|
|
22242
|
-
return
|
|
22335
|
+
return new RawSenderSigner(sourceChainId, opts.privateKey);
|
|
22243
22336
|
}
|
|
22244
22337
|
async function resolveTurnkeyAddresses(cfg) {
|
|
22245
22338
|
const impl = await Promise.resolve().then(() => (init_turnkey_impl(), turnkey_impl_exports));
|
|
@@ -22260,7 +22353,7 @@ payment-status endpoint.
|
|
|
22260
22353
|
return addresses;
|
|
22261
22354
|
}
|
|
22262
22355
|
var PAYMENT_REQUEST_VERSION = "1.0";
|
|
22263
|
-
async function
|
|
22356
|
+
async function signPaymentRequest2(request2, signer) {
|
|
22264
22357
|
if (!request2.sender_auth?.signed_messages?.length) {
|
|
22265
22358
|
throw new Error("signPaymentRequest: request.sender_auth.signed_messages must contain at least one message to sign");
|
|
22266
22359
|
}
|
|
@@ -22274,7 +22367,8 @@ payment-status endpoint.
|
|
|
22274
22367
|
}
|
|
22275
22368
|
return request2;
|
|
22276
22369
|
}
|
|
22277
|
-
var defaultGateway = "https://payment-
|
|
22370
|
+
var defaultGateway = "https://payment-gw.production-testnet.atum.xyz";
|
|
22371
|
+
var OpenAPI2 = { ...OpenAPI, BASE: defaultGateway };
|
|
22278
22372
|
var DEFAULT_QUOTE_DEADLINE_SECONDS = 5;
|
|
22279
22373
|
var DEFAULT_FULFILLMENT_DEADLINE_SECONDS = 3600;
|
|
22280
22374
|
var DEFAULT_PAYMENT_QUOTE_DEADLINE_SECONDS = 10;
|
|
@@ -22307,18 +22401,25 @@ payment-status endpoint.
|
|
|
22307
22401
|
}
|
|
22308
22402
|
async function assemblePaymentRequest(params) {
|
|
22309
22403
|
const sourceChainId = params.sourceAsset.split("/")[0];
|
|
22404
|
+
const namespace = sourceChainId.split(":")[0];
|
|
22310
22405
|
const adapter = getChainAdapter(sourceChainId);
|
|
22311
|
-
const
|
|
22406
|
+
const nonce = params.nonce ?? (namespace === "solana" ? (0, import_payment_request_sender_auth2.deterministicSolanaNonce)({ requestId: params.requestId, depositor: params.depositor }) : (0, import_payment_request_sender_auth2.deterministicPermitNonce)({ requestId: params.requestId, depositor: params.depositor }));
|
|
22407
|
+
const auth = await (0, import_payment_request_sender_auth2.getChainAdapter)(sourceChainId).buildAuthMessage({
|
|
22312
22408
|
sourceAsset: params.sourceAsset,
|
|
22313
22409
|
depositor: params.depositor,
|
|
22314
22410
|
// The gateway pins the signed deposit amount to max_source_amount (the cap).
|
|
22315
22411
|
maxSourceAmount: params.maxSourceAmount,
|
|
22316
22412
|
requestId: params.requestId,
|
|
22317
22413
|
sourceDefaults: params.sourceDefaults,
|
|
22318
|
-
|
|
22319
|
-
nonce
|
|
22320
|
-
|
|
22321
|
-
|
|
22414
|
+
deadline: params.deadline,
|
|
22415
|
+
nonce,
|
|
22416
|
+
...namespace === "solana" ? {
|
|
22417
|
+
solanaClockReader: (chainId) => resolveSolanaIssuedAt({
|
|
22418
|
+
sourceChainId: chainId,
|
|
22419
|
+
rpcUrlOverride: params.solanaRpcUrl,
|
|
22420
|
+
reader: params.solanaClockReader
|
|
22421
|
+
})
|
|
22422
|
+
} : {}
|
|
22322
22423
|
});
|
|
22323
22424
|
const contractOverrides = adapter.resolveContractOverrides?.(params.sourceDefaults);
|
|
22324
22425
|
return {
|
|
@@ -22354,10 +22455,12 @@ payment-status endpoint.
|
|
|
22354
22455
|
}
|
|
22355
22456
|
};
|
|
22356
22457
|
}
|
|
22357
|
-
var
|
|
22458
|
+
var PaymentGatewayClient22 = class extends PaymentGatewayClient2 {
|
|
22358
22459
|
constructor(config, HttpRequest = AxiosHttpRequest) {
|
|
22359
|
-
|
|
22360
|
-
|
|
22460
|
+
const envBase = (typeof process !== "undefined" ? process.env.GATEWAY_URL : void 0)?.trim();
|
|
22461
|
+
const base = config?.BASE ?? (envBase || defaultGateway);
|
|
22462
|
+
super({ ...config, BASE: base }, HttpRequest);
|
|
22463
|
+
this.baseUrl = base;
|
|
22361
22464
|
}
|
|
22362
22465
|
/**
|
|
22363
22466
|
* Fetches chain defaults from the payment gateway.
|
|
@@ -22445,14 +22548,35 @@ payment-status endpoint.
|
|
|
22445
22548
|
* @returns A complete PaymentRequest object without the signature
|
|
22446
22549
|
*/
|
|
22447
22550
|
async preparePaymentRequest(params) {
|
|
22448
|
-
const
|
|
22551
|
+
const now = (params.now ?? Date.now)();
|
|
22552
|
+
const { quote_deadline, fulfillment_deadline } = resolveDeadlines({ ...params, now: () => now }, DEFAULT_PAYMENT_QUOTE_DEADLINE_SECONDS);
|
|
22449
22553
|
const sourceChainId = params.sourceAsset.split("/")[0];
|
|
22450
22554
|
const destChainId = params.destinationAsset.split("/")[0];
|
|
22451
22555
|
const [sourceDefaults, fulfillmentProxy] = await Promise.all([
|
|
22452
22556
|
params.resolvedDefaults?.source ?? this.fetchChainDefaults(sourceChainId),
|
|
22453
22557
|
params.resolvedDefaults?.destination?.fulfillmentProxy ?? this.fetchChainDefaults(destChainId).then((d) => d.fulfillmentProxy)
|
|
22454
22558
|
]);
|
|
22455
|
-
|
|
22559
|
+
if (!params.requestId) {
|
|
22560
|
+
throw new Error(
|
|
22561
|
+
"payment-gateway-client: requestId is required \u2014 it is the idempotency key that seeds the deterministic deposit nonce; supply a stable id per logical payment and reuse it on retry"
|
|
22562
|
+
);
|
|
22563
|
+
}
|
|
22564
|
+
const requestId = params.requestId;
|
|
22565
|
+
const sourceNamespace = sourceChainId.split(":")[0];
|
|
22566
|
+
let permitDeadline;
|
|
22567
|
+
if (sourceNamespace !== "solana") {
|
|
22568
|
+
const fulfillmentMs = Date.parse(fulfillment_deadline);
|
|
22569
|
+
if (params.deadlineSeconds !== void 0) {
|
|
22570
|
+
permitDeadline = Math.ceil(now / 1e3) + Math.ceil(params.deadlineSeconds);
|
|
22571
|
+
if (permitDeadline * 1e3 < fulfillmentMs) {
|
|
22572
|
+
throw new Error(
|
|
22573
|
+
`payment-gateway-client: deadlineSeconds (${params.deadlineSeconds}) expires the deposit permit before settlement (fulfillmentDeadlineSeconds). The permit must stay valid until settlement \u2014 pass a deadlineSeconds at least as long as fulfillmentDeadlineSeconds, or omit it to derive it from fulfillment_deadline automatically.`
|
|
22574
|
+
);
|
|
22575
|
+
}
|
|
22576
|
+
} else {
|
|
22577
|
+
permitDeadline = Math.floor(fulfillmentMs / 1e3) + 1;
|
|
22578
|
+
}
|
|
22579
|
+
}
|
|
22456
22580
|
return assemblePaymentRequest({
|
|
22457
22581
|
depositor: params.depositor,
|
|
22458
22582
|
fulfillmentAmount: params.fulfillmentAmount,
|
|
@@ -22466,7 +22590,7 @@ payment-status endpoint.
|
|
|
22466
22590
|
sourceDefaults,
|
|
22467
22591
|
fulfillmentProxy,
|
|
22468
22592
|
nonce: params.nonce,
|
|
22469
|
-
|
|
22593
|
+
deadline: permitDeadline,
|
|
22470
22594
|
solanaRpcUrl: params.solanaRpcUrl,
|
|
22471
22595
|
solanaClockReader: params.solanaClockReader,
|
|
22472
22596
|
settlerRequirements: params.settlerRequirements
|
|
@@ -22553,382 +22677,126 @@ payment-status endpoint.
|
|
|
22553
22677
|
}
|
|
22554
22678
|
});
|
|
22555
22679
|
|
|
22556
|
-
//
|
|
22557
|
-
var
|
|
22558
|
-
|
|
22559
|
-
|
|
22560
|
-
|
|
22561
|
-
|
|
22562
|
-
|
|
22563
|
-
|
|
22564
|
-
|
|
22565
|
-
|
|
22566
|
-
}
|
|
22567
|
-
|
|
22568
|
-
|
|
22569
|
-
|
|
22570
|
-
|
|
22571
|
-
|
|
22572
|
-
|
|
22573
|
-
|
|
22574
|
-
};
|
|
22575
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22576
|
-
exports.base58ToHex = base58ToHex2;
|
|
22577
|
-
exports.normalizeAddress = normalizeAddress2;
|
|
22578
|
-
var ethers_1 = __require("ethers");
|
|
22579
|
-
var bs58_1 = __importDefault(__require("bs58"));
|
|
22580
|
-
var TVM_MAINNET_PREFIX = "41";
|
|
22581
|
-
function base58ToHex2(base58Address) {
|
|
22582
|
-
if (!base58Address || !base58Address.startsWith("T")) {
|
|
22583
|
-
throw new Error(`Invalid Tron base58 address: ${base58Address}`);
|
|
22584
|
-
}
|
|
22585
|
-
const decoded = bs58_1.default.decode(base58Address);
|
|
22586
|
-
if (decoded.length !== 25) {
|
|
22587
|
-
throw new Error(`Invalid Tron base58 length (expected 25 bytes): ${base58Address}`);
|
|
22588
|
-
}
|
|
22589
|
-
const payload = decoded.slice(0, 21);
|
|
22590
|
-
const checksum = (0, ethers_1.hexlify)(decoded.slice(21)).slice(2);
|
|
22591
|
-
const computed = (0, ethers_1.sha256)((0, ethers_1.sha256)(payload)).slice(2, 10);
|
|
22592
|
-
if (checksum !== computed) {
|
|
22593
|
-
throw new Error(`Invalid Tron base58 checksum: ${base58Address}`);
|
|
22594
|
-
}
|
|
22595
|
-
return (0, ethers_1.hexlify)(payload).slice(2);
|
|
22596
|
-
}
|
|
22597
|
-
function normalizeAddress2(address) {
|
|
22598
|
-
if (!address) {
|
|
22599
|
-
throw new Error("Empty address");
|
|
22600
|
-
}
|
|
22601
|
-
let hexAddress = address;
|
|
22602
|
-
if (address.startsWith("T")) {
|
|
22603
|
-
hexAddress = base58ToHex2(address);
|
|
22604
|
-
}
|
|
22605
|
-
hexAddress = hexAddress.replace(/^0x/, "");
|
|
22606
|
-
if (hexAddress.startsWith(TVM_MAINNET_PREFIX)) {
|
|
22607
|
-
hexAddress = hexAddress.substring(2);
|
|
22608
|
-
}
|
|
22609
|
-
if (hexAddress.length !== 40) {
|
|
22610
|
-
throw new Error(`Invalid address length: expected 40 chars, got ${hexAddress.length}`);
|
|
22611
|
-
}
|
|
22612
|
-
if (!/^[0-9a-fA-F]{40}$/.test(hexAddress)) {
|
|
22613
|
-
throw new Error("Invalid hex address format");
|
|
22680
|
+
// src/client.ts
|
|
22681
|
+
var import_evm_escrow_encoding = __toESM(require_dist(), 1);
|
|
22682
|
+
var import_payment_gateway_client = __toESM(require_dist2(), 1);
|
|
22683
|
+
import { keccak256, toUtf8Bytes, Contract, MaxUint256 } from "ethers";
|
|
22684
|
+
import { Credential, Method } from "mppx";
|
|
22685
|
+
function registerClient(config) {
|
|
22686
|
+
const now = config.now ?? (() => Date.now());
|
|
22687
|
+
const gateway = new import_payment_gateway_client.PaymentGatewayClient();
|
|
22688
|
+
return Method.toClient(atumEscrowChargeMethod, {
|
|
22689
|
+
async createCredential({ challenge }) {
|
|
22690
|
+
const { source, extra } = challenge.request;
|
|
22691
|
+
const namespace = namespaceOf(source.network);
|
|
22692
|
+
const account = config.account;
|
|
22693
|
+
const nowMs = now();
|
|
22694
|
+
if (!(extra.quoteDeadlineSeconds > 0 && extra.quoteDeadlineSeconds < extra.fulfillmentDeadlineSeconds)) {
|
|
22695
|
+
throw new Error(
|
|
22696
|
+
`atum-escrow: deadline ordering violated (now < quote_deadline < fulfillment_deadline); quoteDeadlineSeconds=${extra.quoteDeadlineSeconds}, fulfillmentDeadlineSeconds=${extra.fulfillmentDeadlineSeconds}`
|
|
22697
|
+
);
|
|
22614
22698
|
}
|
|
22615
|
-
|
|
22616
|
-
|
|
22617
|
-
|
|
22618
|
-
|
|
22619
|
-
|
|
22620
|
-
|
|
22621
|
-
|
|
22622
|
-
|
|
22623
|
-
|
|
22624
|
-
|
|
22625
|
-
|
|
22626
|
-
|
|
22627
|
-
|
|
22628
|
-
|
|
22629
|
-
|
|
22630
|
-
|
|
22631
|
-
|
|
22632
|
-
|
|
22633
|
-
|
|
22634
|
-
|
|
22635
|
-
|
|
22636
|
-
|
|
22637
|
-
|
|
22638
|
-
|
|
22639
|
-
|
|
22640
|
-
|
|
22641
|
-
return ethers_1.TypedDataEncoder.hash(domain, RESERVE_WITNESS_TYPES, {
|
|
22642
|
-
paymentId: input.paymentId,
|
|
22643
|
-
settler: input.settler
|
|
22644
|
-
});
|
|
22645
|
-
}
|
|
22646
|
-
}
|
|
22647
|
-
});
|
|
22648
|
-
|
|
22649
|
-
// ../contracts/tvm/escrow-encoding/typescript/dist/payment-id.js
|
|
22650
|
-
var require_payment_id2 = __commonJS({
|
|
22651
|
-
"../contracts/tvm/escrow-encoding/typescript/dist/payment-id.js"(exports) {
|
|
22652
|
-
"use strict";
|
|
22653
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22654
|
-
exports.computePaymentId = computePaymentId;
|
|
22655
|
-
var ethers_1 = __require("ethers");
|
|
22656
|
-
var tron_address_1 = require_tron_address();
|
|
22657
|
-
function computePaymentId(depositor, signature, nonce) {
|
|
22658
|
-
if (!/^[0-9]+$/.test(nonce)) {
|
|
22659
|
-
throw new Error(`invalid nonce (expected base-10 decimal): ${nonce}`);
|
|
22660
|
-
}
|
|
22661
|
-
const encoded = ethers_1.AbiCoder.defaultAbiCoder().encode(["address", "bytes", "uint256"], [(0, tron_address_1.normalizeAddress)(depositor), signature, nonce]);
|
|
22662
|
-
return (0, ethers_1.keccak256)(encoded);
|
|
22663
|
-
}
|
|
22664
|
-
}
|
|
22665
|
-
});
|
|
22666
|
-
|
|
22667
|
-
// ../contracts/tvm/escrow-encoding/typescript/dist/deposit-encoder.js
|
|
22668
|
-
var require_deposit_encoder2 = __commonJS({
|
|
22669
|
-
"../contracts/tvm/escrow-encoding/typescript/dist/deposit-encoder.js"(exports) {
|
|
22670
|
-
"use strict";
|
|
22671
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22672
|
-
exports.createTvmPermitWitnessTransferFromPrehash = createTvmPermitWitnessTransferFromPrehash2;
|
|
22673
|
-
exports.hashTvmPermitWitnessTransferFrom = hashTvmPermitWitnessTransferFrom2;
|
|
22674
|
-
var ethers_1 = __require("ethers");
|
|
22675
|
-
var chain_id_1 = require_chain_id();
|
|
22676
|
-
var tron_address_1 = require_tron_address();
|
|
22677
|
-
var PERMIT_WITNESS_TYPES_V2 = {
|
|
22678
|
-
PermitWitnessTransferFrom: [
|
|
22679
|
-
{ name: "permitted", type: "TokenPermissions" },
|
|
22680
|
-
{ name: "spender", type: "address" },
|
|
22681
|
-
{ name: "nonce", type: "uint256" },
|
|
22682
|
-
{ name: "deadline", type: "uint256" },
|
|
22683
|
-
{ name: "witness", type: "DepositWitness" }
|
|
22684
|
-
],
|
|
22685
|
-
TokenPermissions: [
|
|
22686
|
-
{ name: "token", type: "address" },
|
|
22687
|
-
{ name: "amount", type: "uint256" }
|
|
22688
|
-
],
|
|
22689
|
-
DepositWitness: [
|
|
22690
|
-
{ name: "reserver", type: "address" },
|
|
22691
|
-
{ name: "releaser", type: "address" }
|
|
22692
|
-
]
|
|
22693
|
-
};
|
|
22694
|
-
function createTvmPermitWitnessTransferFromPrehash2(params) {
|
|
22695
|
-
const maskedChainId = (0, chain_id_1.maskChainId)(params.chainId);
|
|
22696
|
-
return {
|
|
22697
|
-
types: PERMIT_WITNESS_TYPES_V2,
|
|
22698
|
-
primaryType: "PermitWitnessTransferFrom",
|
|
22699
|
-
domain: {
|
|
22700
|
-
name: "Permit2",
|
|
22701
|
-
chainId: `0x${maskedChainId.toString(16)}`,
|
|
22702
|
-
verifyingContract: (0, tron_address_1.normalizeAddress)(params.permit2Address)
|
|
22699
|
+
const anchorAccount = namespace === "eip155" ? account.toLowerCase() : account;
|
|
22700
|
+
const idempotencyAnchor = keccak256(
|
|
22701
|
+
toUtf8Bytes(`atum-escrow:${challenge.id}:${anchorAccount}`)
|
|
22702
|
+
);
|
|
22703
|
+
const requestId = `req_mpp_${idempotencyAnchor.slice(2, 26)}`;
|
|
22704
|
+
const sourceDefaults = chainDefaultsFromExtra(extra, source.network);
|
|
22705
|
+
const sourceAssetId = assetIdentifier(source.network, source.asset);
|
|
22706
|
+
const isSolana = namespace === "solana";
|
|
22707
|
+
const solanaIssuedAt = extra.issuedAt;
|
|
22708
|
+
const paymentRequestGw = await gateway.preparePaymentRequest({
|
|
22709
|
+
depositor: account,
|
|
22710
|
+
fulfillmentAmount: extra.fulfillmentAmount,
|
|
22711
|
+
sourceAsset: sourceAssetId,
|
|
22712
|
+
destinationAccount: extra.destination.address,
|
|
22713
|
+
destinationAsset: assetIdentifier(extra.destination.network, extra.destination.asset),
|
|
22714
|
+
// Sign the full advertised cap. The payer MAY sign a lower value, but that only
|
|
22715
|
+
// lowers its own escrow lock and risks the auction not clearing; the full cap is
|
|
22716
|
+
// the safe default and never affects the receive side.
|
|
22717
|
+
maxSourceAmount: source.amount,
|
|
22718
|
+
requestId,
|
|
22719
|
+
quoteDeadlineSeconds: extra.quoteDeadlineSeconds,
|
|
22720
|
+
fulfillmentDeadlineSeconds: extra.fulfillmentDeadlineSeconds,
|
|
22721
|
+
now: () => nowMs,
|
|
22722
|
+
resolvedDefaults: {
|
|
22723
|
+
source: sourceDefaults,
|
|
22724
|
+
destination: { fulfillmentProxy: extra.fulfillmentProxy }
|
|
22703
22725
|
},
|
|
22704
|
-
|
|
22705
|
-
|
|
22706
|
-
|
|
22707
|
-
|
|
22708
|
-
|
|
22709
|
-
|
|
22710
|
-
|
|
22711
|
-
|
|
22712
|
-
|
|
22713
|
-
|
|
22714
|
-
|
|
22715
|
-
|
|
22726
|
+
// EVM/Tron: thread the deterministic nonce, and keep the deposit deadline at least
|
|
22727
|
+
// as late as the fulfillment deadline. The adapter floors the relative deadline, so
|
|
22728
|
+
// +1s guards against truncating below fulfillment_deadline.
|
|
22729
|
+
...isSolana ? {
|
|
22730
|
+
// Solana stamps issued_at and derives its own replay-window deadline. Prefer the
|
|
22731
|
+
// merchant-stamped `extra.issuedAt` (self-contained 402, no client RPC); fall back
|
|
22732
|
+
// to an injected reader, then the client clock, when the 402 doesn't carry it.
|
|
22733
|
+
solanaRpcUrl: "atum-escrow:offline",
|
|
22734
|
+
solanaClockReader: solanaIssuedAt != null ? async () => BigInt(solanaIssuedAt) : config.solanaClockReader ?? (async () => BigInt(Math.floor(nowMs / 1e3)))
|
|
22735
|
+
} : {
|
|
22736
|
+
nonce: BigInt(idempotencyAnchor),
|
|
22737
|
+
// Keep the deposit deadline at least as late as fulfillment. pgc converts this
|
|
22738
|
+
// relative budget to an absolute permit deadline against the same clock; round
|
|
22739
|
+
// the budget up and add a second so it never truncates below fulfillment_deadline.
|
|
22740
|
+
deadlineSeconds: Math.ceil(extra.fulfillmentDeadlineSeconds) + 1
|
|
22716
22741
|
}
|
|
22717
|
-
};
|
|
22718
|
-
|
|
22719
|
-
|
|
22720
|
-
|
|
22742
|
+
});
|
|
22743
|
+
const signer = buildSenderSigner(source.network, config.signer, account);
|
|
22744
|
+
await (0, import_payment_gateway_client.signPaymentRequest)(paymentRequestGw, signer);
|
|
22745
|
+
const paymentRequest = paymentRequestGw;
|
|
22746
|
+
return Credential.serialize({
|
|
22747
|
+
challenge,
|
|
22748
|
+
payload: { paymentRequest },
|
|
22749
|
+
source: `did:pkh:${source.network}:${anchorAccount}`
|
|
22750
|
+
});
|
|
22721
22751
|
}
|
|
22722
|
-
}
|
|
22723
|
-
});
|
|
22724
|
-
|
|
22725
|
-
// ../contracts/tvm/escrow-encoding/typescript/dist/index.js
|
|
22726
|
-
var require_dist3 = __commonJS({
|
|
22727
|
-
"../contracts/tvm/escrow-encoding/typescript/dist/index.js"(exports) {
|
|
22728
|
-
"use strict";
|
|
22729
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22730
|
-
exports.hashTvmPermitWitnessTransferFrom = exports.createTvmPermitWitnessTransferFromPrehash = exports.computePaymentId = exports.computeReserveDigest = exports.normalizeAddress = exports.base58ToHex = exports.maskChainId = void 0;
|
|
22731
|
-
var chain_id_1 = require_chain_id();
|
|
22732
|
-
Object.defineProperty(exports, "maskChainId", { enumerable: true, get: function() {
|
|
22733
|
-
return chain_id_1.maskChainId;
|
|
22734
|
-
} });
|
|
22735
|
-
var tron_address_1 = require_tron_address();
|
|
22736
|
-
Object.defineProperty(exports, "base58ToHex", { enumerable: true, get: function() {
|
|
22737
|
-
return tron_address_1.base58ToHex;
|
|
22738
|
-
} });
|
|
22739
|
-
Object.defineProperty(exports, "normalizeAddress", { enumerable: true, get: function() {
|
|
22740
|
-
return tron_address_1.normalizeAddress;
|
|
22741
|
-
} });
|
|
22742
|
-
var reserve_encoder_1 = require_reserve_encoder2();
|
|
22743
|
-
Object.defineProperty(exports, "computeReserveDigest", { enumerable: true, get: function() {
|
|
22744
|
-
return reserve_encoder_1.computeReserveDigest;
|
|
22745
|
-
} });
|
|
22746
|
-
var payment_id_1 = require_payment_id2();
|
|
22747
|
-
Object.defineProperty(exports, "computePaymentId", { enumerable: true, get: function() {
|
|
22748
|
-
return payment_id_1.computePaymentId;
|
|
22749
|
-
} });
|
|
22750
|
-
var deposit_encoder_1 = require_deposit_encoder2();
|
|
22751
|
-
Object.defineProperty(exports, "createTvmPermitWitnessTransferFromPrehash", { enumerable: true, get: function() {
|
|
22752
|
-
return deposit_encoder_1.createTvmPermitWitnessTransferFromPrehash;
|
|
22753
|
-
} });
|
|
22754
|
-
Object.defineProperty(exports, "hashTvmPermitWitnessTransferFrom", { enumerable: true, get: function() {
|
|
22755
|
-
return deposit_encoder_1.hashTvmPermitWitnessTransferFrom;
|
|
22756
|
-
} });
|
|
22757
|
-
}
|
|
22758
|
-
});
|
|
22759
|
-
|
|
22760
|
-
// src/internal.ts
|
|
22761
|
-
var import_tvm_escrow_encoding = __toESM(require_dist3(), 1);
|
|
22762
|
-
import * as z from "zod/mini";
|
|
22763
|
-
import { Method } from "mppx";
|
|
22764
|
-
var METHOD_NAME = "atum-escrow";
|
|
22765
|
-
var INTENT = "charge";
|
|
22766
|
-
var ChargeRequestSchema = z.object({
|
|
22767
|
-
/** The source chain/token/cap the payer funds from (one option per challenge). */
|
|
22768
|
-
source: z.object({
|
|
22769
|
-
/** CAIP-2 source chain id (e.g. `eip155:8453`, `tron:mainnet`, `solana:<genesis>`). */
|
|
22770
|
-
network: z.string(),
|
|
22771
|
-
/** Source token address (EVM hex or base58). */
|
|
22772
|
-
asset: z.string(),
|
|
22773
|
-
/** Source spend cap (fulfillmentAmount + markup), atomic units — the authoritative `max_source_amount`. */
|
|
22774
|
-
amount: z.string()
|
|
22775
|
-
}),
|
|
22776
|
-
/** The destination/corridor block (the reused x402 `extra`). */
|
|
22777
|
-
extra: z.object({
|
|
22778
|
-
/** Where the merchant receives: CAIP-2 chain, token, and receive account. */
|
|
22779
|
-
destination: z.object({
|
|
22780
|
-
network: z.string(),
|
|
22781
|
-
asset: z.string(),
|
|
22782
|
-
account: z.string()
|
|
22783
|
-
}),
|
|
22784
|
-
/** Exact amount the merchant receives, in atomic units of the destination token. */
|
|
22785
|
-
fulfillmentAmount: z.string(),
|
|
22786
|
-
/** Source-chain escrow contract for this option; the payer's funds lock here. */
|
|
22787
|
-
escrow: z.string(),
|
|
22788
|
-
/** Destination-chain fulfillment-proxy contract. */
|
|
22789
|
-
fulfillmentProxy: z.string(),
|
|
22790
|
-
/** Role address that witnesses the escrow deposit on reservation. */
|
|
22791
|
-
reserver: z.string(),
|
|
22792
|
-
/** Role address that witnesses the escrow release on fulfillment. */
|
|
22793
|
-
releaser: z.string(),
|
|
22794
|
-
/** Endpoint used to verify fulfillment on the source chain. */
|
|
22795
|
-
fulfillmentVerifierEndpoint: z.string(),
|
|
22796
|
-
/** Quote-deadline budget in seconds, relative to signing time. */
|
|
22797
|
-
quoteDeadlineSeconds: z.number(),
|
|
22798
|
-
/** Fulfillment-deadline budget in seconds, relative to signing time. */
|
|
22799
|
-
fulfillmentDeadlineSeconds: z.number(),
|
|
22800
|
-
/** Tron-only: the Permit2 contract the deposit is signed against (TIP-712 verifying contract). */
|
|
22801
|
-
permit2: z.optional(z.string()),
|
|
22802
|
-
/** Solana-only: cluster id that domain-separates the deposit authorization. */
|
|
22803
|
-
svmSignatureClusterId: z.optional(z.string()),
|
|
22804
|
-
/** Solana-only: signature domain version that domain-separates the deposit authorization. */
|
|
22805
|
-
svmSignatureDomainVersion: z.optional(z.number())
|
|
22806
|
-
})
|
|
22807
|
-
});
|
|
22808
|
-
var CredentialPayloadSchema = z.object({
|
|
22809
|
-
paymentRequest: z.record(z.string(), z.unknown())
|
|
22810
|
-
});
|
|
22811
|
-
var atumEscrowChargeMethod = Method.from({
|
|
22812
|
-
name: METHOD_NAME,
|
|
22813
|
-
intent: INTENT,
|
|
22814
|
-
schema: {
|
|
22815
|
-
request: ChargeRequestSchema,
|
|
22816
|
-
credential: { payload: CredentialPayloadSchema }
|
|
22817
|
-
}
|
|
22818
|
-
});
|
|
22819
|
-
function namespaceOf(network) {
|
|
22820
|
-
return network.split(":")[0];
|
|
22821
|
-
}
|
|
22822
|
-
function assetTypeFor(network) {
|
|
22823
|
-
switch (namespaceOf(network)) {
|
|
22824
|
-
case "eip155":
|
|
22825
|
-
return "erc20";
|
|
22826
|
-
case "tron":
|
|
22827
|
-
return "trc20";
|
|
22828
|
-
case "solana":
|
|
22829
|
-
return "spl";
|
|
22830
|
-
default:
|
|
22831
|
-
throw new Error(`atum-escrow: unsupported network '${network}'`);
|
|
22832
|
-
}
|
|
22752
|
+
});
|
|
22833
22753
|
}
|
|
22834
|
-
function
|
|
22835
|
-
return
|
|
22754
|
+
function isSenderSigner(signer) {
|
|
22755
|
+
return typeof signer.sign === "function";
|
|
22836
22756
|
}
|
|
22837
|
-
function
|
|
22838
|
-
if (
|
|
22839
|
-
return
|
|
22757
|
+
function buildSenderSigner(network, signer, account) {
|
|
22758
|
+
if (isSenderSigner(signer)) {
|
|
22759
|
+
return signer;
|
|
22840
22760
|
}
|
|
22841
|
-
|
|
22842
|
-
}
|
|
22843
|
-
function chainDefaultsFromExtra(extra, network) {
|
|
22844
|
-
return {
|
|
22845
|
-
escrowContract: extra.escrow,
|
|
22846
|
-
quoteSelector: extra.reserver,
|
|
22847
|
-
fulfillmentVerifierAccount: extra.releaser,
|
|
22848
|
-
fulfillmentVerifierEndpoint: extra.fulfillmentVerifierEndpoint,
|
|
22849
|
-
fulfillmentProxy: extra.fulfillmentProxy,
|
|
22850
|
-
// Pin the Tron Permit2 so the adapter signs against the canonical address (the same one
|
|
22851
|
-
// verify() rebuilds against), never leaving it to the adapter's internal fallback.
|
|
22852
|
-
...namespaceOf(network) === "tron" ? { permit2Contract: resolveTronPermit2(network, extra.permit2) } : {},
|
|
22853
|
-
...extra.svmSignatureClusterId ? { svmSignatureClusterId: extra.svmSignatureClusterId } : {},
|
|
22854
|
-
...extra.svmSignatureDomainVersion != null ? { svmSignatureDomainVersion: extra.svmSignatureDomainVersion } : {}
|
|
22855
|
-
};
|
|
22856
|
-
}
|
|
22857
|
-
var TRON_PERMIT2_FALLBACKS = {
|
|
22858
|
-
"tron:mainnet": "TJhMXTHQHeQyMD7TcKQFqAePNgG4b31H9m",
|
|
22859
|
-
"tron:shasta": "TPUqJPASUn1zLvbLBgRZ5pBYrx7WSe5ahp"
|
|
22860
|
-
};
|
|
22861
|
-
function resolveTronPermit2(network, permit2) {
|
|
22862
|
-
const resolved = permit2 ?? TRON_PERMIT2_FALLBACKS[network];
|
|
22863
|
-
if (!resolved) {
|
|
22761
|
+
if (signer.provider === "turnkey") {
|
|
22864
22762
|
throw new Error(
|
|
22865
|
-
|
|
22763
|
+
"atum-escrow: construct a Turnkey SenderSigner with the payment-gateway client and pass it as `signer`"
|
|
22866
22764
|
);
|
|
22867
22765
|
}
|
|
22868
|
-
return
|
|
22869
|
-
|
|
22870
|
-
|
|
22871
|
-
|
|
22872
|
-
|
|
22873
|
-
}
|
|
22874
|
-
return {
|
|
22875
|
-
quote_selector: (0, import_tvm_escrow_encoding.normalizeAddress)(extra.reserver),
|
|
22876
|
-
fulfillment_verifier: {
|
|
22877
|
-
account: (0, import_tvm_escrow_encoding.normalizeAddress)(extra.releaser),
|
|
22878
|
-
endpoint: extra.fulfillmentVerifierEndpoint
|
|
22879
|
-
}
|
|
22880
|
-
};
|
|
22766
|
+
return (0, import_payment_gateway_client.createSenderSigner)(network, {
|
|
22767
|
+
provider: "raw",
|
|
22768
|
+
privateKey: signer.privateKey,
|
|
22769
|
+
pinnedAddress: signer.pinnedAddress ?? account
|
|
22770
|
+
});
|
|
22881
22771
|
}
|
|
22882
|
-
|
|
22883
|
-
|
|
22884
|
-
|
|
22885
|
-
|
|
22772
|
+
var ERC20_ALLOWANCE_ABI = [
|
|
22773
|
+
"function allowance(address owner, address spender) view returns (uint256)",
|
|
22774
|
+
"function approve(address spender, uint256 amount) returns (bool)"
|
|
22775
|
+
];
|
|
22776
|
+
async function ensureSourceApproval(params) {
|
|
22777
|
+
if (namespaceOf(params.network) === "solana") {
|
|
22778
|
+
return { alreadySufficient: true };
|
|
22886
22779
|
}
|
|
22887
|
-
|
|
22888
|
-
|
|
22889
|
-
|
|
22890
|
-
|
|
22891
|
-
|
|
22892
|
-
};
|
|
22893
|
-
function tronNumericChainId(network) {
|
|
22894
|
-
const cluster = network.split(":")[1];
|
|
22895
|
-
const id = TRON_CHAIN_IDS[cluster ?? ""];
|
|
22896
|
-
if (id === void 0) {
|
|
22897
|
-
throw new Error(`atum-escrow: unsupported Tron network '${network}'`);
|
|
22780
|
+
const spender = params.spender ?? (namespaceOf(params.network) === "eip155" ? import_evm_escrow_encoding.PERMIT2_CONTRACT_ADDRESS : void 0);
|
|
22781
|
+
if (!spender) {
|
|
22782
|
+
throw new Error(
|
|
22783
|
+
`atum-escrow: a spender (Permit2 address) is required to approve on ${params.network}`
|
|
22784
|
+
);
|
|
22898
22785
|
}
|
|
22899
|
-
|
|
22900
|
-
|
|
22901
|
-
|
|
22902
|
-
|
|
22903
|
-
|
|
22904
|
-
throw new Error(`atum-escrow: Solana cluster name too long (${encoded.length} > 32 bytes): ${name}`);
|
|
22786
|
+
const erc20 = new Contract(params.token, ERC20_ALLOWANCE_ABI, params.signer);
|
|
22787
|
+
const current = await erc20.allowance(params.owner, spender);
|
|
22788
|
+
const sufficient = params.requiredAllowance !== void 0 ? current >= params.requiredAllowance : current >= MaxUint256;
|
|
22789
|
+
if (sufficient) {
|
|
22790
|
+
return { alreadySufficient: true };
|
|
22905
22791
|
}
|
|
22906
|
-
const
|
|
22907
|
-
|
|
22908
|
-
return
|
|
22792
|
+
const tx = await erc20.approve(spender, MaxUint256);
|
|
22793
|
+
await tx.wait?.();
|
|
22794
|
+
return { alreadySufficient: false, txHash: tx.hash };
|
|
22909
22795
|
}
|
|
22910
22796
|
|
|
22911
22797
|
export {
|
|
22912
|
-
|
|
22913
|
-
|
|
22914
|
-
__toESM,
|
|
22915
|
-
require_dist,
|
|
22916
|
-
require_dist2,
|
|
22917
|
-
require_dist3,
|
|
22918
|
-
METHOD_NAME,
|
|
22919
|
-
INTENT,
|
|
22920
|
-
ChargeRequestSchema,
|
|
22921
|
-
CredentialPayloadSchema,
|
|
22922
|
-
atumEscrowChargeMethod,
|
|
22923
|
-
namespaceOf,
|
|
22924
|
-
assetIdentifier,
|
|
22925
|
-
sameAddress,
|
|
22926
|
-
chainDefaultsFromExtra,
|
|
22927
|
-
resolveTronPermit2,
|
|
22928
|
-
contractOverridesFromExtra,
|
|
22929
|
-
evmChainId,
|
|
22930
|
-
tronNumericChainId,
|
|
22931
|
-
clusterIdFromName
|
|
22798
|
+
registerClient,
|
|
22799
|
+
ensureSourceApproval
|
|
22932
22800
|
};
|
|
22933
22801
|
/*! Bundled license information:
|
|
22934
22802
|
|