@atumlabs/mppx-atum-escrow 0.1.1 → 0.3.0
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 +50 -0
- package/README.md +212 -47
- package/dist/chunk-4YD6566T.js +371 -0
- package/dist/chunk-Z3AUNEU5.js +2645 -0
- package/dist/{chunk-2MWWLU75.js → chunk-ZFA5SSUP.js} +1691 -1653
- package/dist/client.d.ts +21 -16
- package/dist/client.js +4 -2
- package/dist/index.d.ts +19 -18
- package/dist/index.js +19 -3
- package/dist/internal-9tB7y-A7.d.ts +365 -0
- package/dist/server.d.ts +234 -17
- package/dist/server.js +18 -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
|
@@ -0,0 +1,2645 @@
|
|
|
1
|
+
import { createRequire as __atumCreateRequire } from 'module'; const require = __atumCreateRequire(import.meta.url);
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
9
|
+
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
10
|
+
}) : x)(function(x) {
|
|
11
|
+
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
12
|
+
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
13
|
+
});
|
|
14
|
+
var __esm = (fn, res) => function __init() {
|
|
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 = createPermitWitnessTransferFromPrehash;
|
|
383
|
+
exports.hashPermitWitnessTransferFrom = hashPermitWitnessTransferFrom;
|
|
384
|
+
var ethers_1 = __require("ethers");
|
|
385
|
+
var permit_types_1 = require_permit_types();
|
|
386
|
+
exports.PERMIT2_CONTRACT_ADDRESS = "0x000000000022D473030F116dDEE9F6B43aC78BA3";
|
|
387
|
+
function createPermitWitnessTransferFromPrehash(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 hashPermitWitnessTransferFrom(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
|
+
});
|
|
485
|
+
|
|
486
|
+
// ../schemas/declarations/PaymentRequest/v1/bindings/typescript/sender-auth/dist/types.js
|
|
487
|
+
var require_types = __commonJS({
|
|
488
|
+
"../schemas/declarations/PaymentRequest/v1/bindings/typescript/sender-auth/dist/types.js"(exports) {
|
|
489
|
+
"use strict";
|
|
490
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
491
|
+
}
|
|
492
|
+
});
|
|
493
|
+
|
|
494
|
+
// ../schemas/declarations/PaymentRequest/v1/bindings/typescript/sender-auth/dist/utils.js
|
|
495
|
+
var require_utils = __commonJS({
|
|
496
|
+
"../schemas/declarations/PaymentRequest/v1/bindings/typescript/sender-auth/dist/utils.js"(exports) {
|
|
497
|
+
"use strict";
|
|
498
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
499
|
+
exports.REQUEST_ID_DOMAIN = exports.SOLANA_REPLAY_SLOTS = exports.PERMIT_NONCE_DOMAIN = exports.REPLAY_HORIZON_SECS = void 0;
|
|
500
|
+
exports.resolvePermitDeadline = resolvePermitDeadline;
|
|
501
|
+
exports.generatePermitNonce = generatePermitNonce;
|
|
502
|
+
exports.resolvePermitNonce = resolvePermitNonce;
|
|
503
|
+
exports.canonicalDepositor = canonicalDepositor;
|
|
504
|
+
exports.deterministicPermitNonce = deterministicPermitNonce;
|
|
505
|
+
exports.deterministicSolanaNonce = deterministicSolanaNonce;
|
|
506
|
+
exports.deterministicRequestId = deterministicRequestId2;
|
|
507
|
+
exports.sameAddress = sameAddress2;
|
|
508
|
+
exports.assertKeyMatchesSender = assertKeyMatchesSender;
|
|
509
|
+
exports.assertToken = assertToken;
|
|
510
|
+
exports.assertAmountMatches = assertAmountMatches;
|
|
511
|
+
exports.assertFresh = assertFresh;
|
|
512
|
+
exports.assertSpender = assertSpender;
|
|
513
|
+
exports.assertWitnessRoles = assertWitnessRoles;
|
|
514
|
+
exports.assertRolePairComplete = assertRolePairComplete;
|
|
515
|
+
exports.nowSec = nowSec;
|
|
516
|
+
var ethers_1 = __require("ethers");
|
|
517
|
+
exports.REPLAY_HORIZON_SECS = 128;
|
|
518
|
+
function resolvePermitDeadline(deadline) {
|
|
519
|
+
return BigInt(deadline);
|
|
520
|
+
}
|
|
521
|
+
function generatePermitNonce() {
|
|
522
|
+
const rand = new Uint32Array(1);
|
|
523
|
+
globalThis.crypto.getRandomValues(rand);
|
|
524
|
+
return (BigInt(Date.now()) << 32n) + BigInt(rand[0]);
|
|
525
|
+
}
|
|
526
|
+
function resolvePermitNonce(nonce) {
|
|
527
|
+
return BigInt(nonce);
|
|
528
|
+
}
|
|
529
|
+
exports.PERMIT_NONCE_DOMAIN = "atum-permit:v1:";
|
|
530
|
+
exports.SOLANA_REPLAY_SLOTS = 235n;
|
|
531
|
+
var SOLANA_BUCKET_BITS = 17n;
|
|
532
|
+
function canonicalDepositor(depositor) {
|
|
533
|
+
const lower = depositor.toLowerCase();
|
|
534
|
+
return lower.startsWith("0x") ? lower : depositor;
|
|
535
|
+
}
|
|
536
|
+
function permitNonceSeed(requestId, depositor) {
|
|
537
|
+
if (!requestId) {
|
|
538
|
+
throw new Error("sender_auth: request_id is required to derive a deterministic permit nonce");
|
|
539
|
+
}
|
|
540
|
+
return BigInt((0, ethers_1.keccak256)((0, ethers_1.toUtf8Bytes)(`${exports.PERMIT_NONCE_DOMAIN}${requestId}:${canonicalDepositor(depositor)}`)));
|
|
541
|
+
}
|
|
542
|
+
function deterministicPermitNonce(params) {
|
|
543
|
+
return permitNonceSeed(params.requestId, params.depositor);
|
|
544
|
+
}
|
|
545
|
+
function deterministicSolanaNonce(params) {
|
|
546
|
+
const seed = permitNonceSeed(params.requestId, params.depositor);
|
|
547
|
+
const slot = seed % exports.SOLANA_REPLAY_SLOTS;
|
|
548
|
+
const bucket = (seed >> 8n) % (1n << SOLANA_BUCKET_BITS);
|
|
549
|
+
return bucket << 32n | slot;
|
|
550
|
+
}
|
|
551
|
+
exports.REQUEST_ID_DOMAIN = "atum-request:v1:";
|
|
552
|
+
function deterministicRequestId2(params) {
|
|
553
|
+
if (!params.anchor) {
|
|
554
|
+
throw new Error("sender_auth: a per-intent anchor is required to derive a deterministic request_id (a random one would silently break idempotency and let a retry double-charge)");
|
|
555
|
+
}
|
|
556
|
+
if (!params.account) {
|
|
557
|
+
throw new Error("sender_auth: account is required to derive a deterministic request_id");
|
|
558
|
+
}
|
|
559
|
+
if (!/^[A-Za-z0-9_-]*$/.test(params.prefix)) {
|
|
560
|
+
throw new Error(`sender_auth: request_id prefix must contain only letters, digits, '_' or '-' (got ${JSON.stringify(params.prefix)})`);
|
|
561
|
+
}
|
|
562
|
+
const digest = (0, ethers_1.keccak256)((0, ethers_1.toUtf8Bytes)(`${exports.REQUEST_ID_DOMAIN}${params.anchor}:${canonicalDepositor(params.account)}`));
|
|
563
|
+
return `${params.prefix}${digest.slice(2, 26)}`;
|
|
564
|
+
}
|
|
565
|
+
function sameAddress2(a, b) {
|
|
566
|
+
if (a.startsWith("0x") && b.startsWith("0x")) {
|
|
567
|
+
return a.toLowerCase() === b.toLowerCase();
|
|
568
|
+
}
|
|
569
|
+
return a === b;
|
|
570
|
+
}
|
|
571
|
+
function assertKeyMatchesSender(matches, sender, derived) {
|
|
572
|
+
if (!matches) {
|
|
573
|
+
throw new Error(`sender_auth: private key derives ${derived}, not the expected sender ${sender}`);
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
function assertToken(token, sourceAsset, normalize) {
|
|
577
|
+
if (!sameAddress2(token, normalize(sourceAsset))) {
|
|
578
|
+
throw new Error("sender_auth: permit token does not match the source asset");
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
function assertAmountMatches(amount, maxSourceAmount) {
|
|
582
|
+
if (BigInt(amount) !== BigInt(maxSourceAmount)) {
|
|
583
|
+
throw new Error("sender_auth: permit amount does not match max_source_amount");
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
function assertFresh(deadlineSec, nowSec2) {
|
|
587
|
+
if (deadlineSec <= nowSec2) {
|
|
588
|
+
throw new Error("sender_auth: permit deadline is not in the future");
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
function assertSpender(spender, escrow, normalize) {
|
|
592
|
+
if (!sameAddress2(spender, normalize(escrow))) {
|
|
593
|
+
throw new Error("sender_auth: permit spender is not the source escrow");
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
function assertWitnessRoles(reserver, releaser, expectedReserver, expectedReleaser, normalize) {
|
|
597
|
+
if (!sameAddress2(reserver, normalize(expectedReserver)) || !sameAddress2(releaser, normalize(expectedReleaser))) {
|
|
598
|
+
throw new Error("sender_auth: deposit witness roles do not match the challenge");
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
function assertRolePairComplete(reserver, releaser) {
|
|
602
|
+
if (reserver === void 0 !== (releaser === void 0)) {
|
|
603
|
+
throw new Error("sender_auth: reserver and releaser must be supplied together");
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
function nowSec() {
|
|
607
|
+
return Math.floor(Date.now() / 1e3);
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
});
|
|
611
|
+
|
|
612
|
+
// ../schemas/declarations/PaymentRequest/v1/bindings/typescript/sender-auth/dist/chain-id.js
|
|
613
|
+
var require_chain_id = __commonJS({
|
|
614
|
+
"../schemas/declarations/PaymentRequest/v1/bindings/typescript/sender-auth/dist/chain-id.js"(exports) {
|
|
615
|
+
"use strict";
|
|
616
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
617
|
+
exports.TRON_PERMIT2_FALLBACKS = exports.TRON_CHAIN_IDS = void 0;
|
|
618
|
+
exports.namespaceOf = namespaceOf2;
|
|
619
|
+
exports.evmChainId = evmChainId;
|
|
620
|
+
exports.tronNumericChainId = tronNumericChainId;
|
|
621
|
+
exports.resolveTronPermit2 = resolveTronPermit22;
|
|
622
|
+
exports.clusterIdFromName = clusterIdFromName;
|
|
623
|
+
function namespaceOf2(network) {
|
|
624
|
+
return network.split(":")[0];
|
|
625
|
+
}
|
|
626
|
+
function evmChainId(network) {
|
|
627
|
+
const match = /^eip155:([0-9]+)$/.exec(network);
|
|
628
|
+
if (!match) {
|
|
629
|
+
throw new Error(`sender_auth: expected an eip155 network, got ${network}`);
|
|
630
|
+
}
|
|
631
|
+
return Number(match[1]);
|
|
632
|
+
}
|
|
633
|
+
exports.TRON_CHAIN_IDS = {
|
|
634
|
+
mainnet: 728126428,
|
|
635
|
+
shasta: 2494104990
|
|
636
|
+
};
|
|
637
|
+
function tronNumericChainId(network) {
|
|
638
|
+
const cluster = network.split(":")[1];
|
|
639
|
+
const id = exports.TRON_CHAIN_IDS[cluster ?? ""];
|
|
640
|
+
if (id === void 0) {
|
|
641
|
+
throw new Error(`sender_auth: unsupported Tron network '${network}'`);
|
|
642
|
+
}
|
|
643
|
+
return id;
|
|
644
|
+
}
|
|
645
|
+
exports.TRON_PERMIT2_FALLBACKS = {
|
|
646
|
+
"tron:mainnet": "TJhMXTHQHeQyMD7TcKQFqAePNgG4b31H9m",
|
|
647
|
+
"tron:shasta": "TPUqJPASUn1zLvbLBgRZ5pBYrx7WSe5ahp"
|
|
648
|
+
};
|
|
649
|
+
function resolveTronPermit22(network) {
|
|
650
|
+
const resolved = exports.TRON_PERMIT2_FALLBACKS[network];
|
|
651
|
+
if (!resolved) {
|
|
652
|
+
throw new Error(`sender_auth: no Permit2 address known for Tron network '${network}'`);
|
|
653
|
+
}
|
|
654
|
+
return resolved;
|
|
655
|
+
}
|
|
656
|
+
function clusterIdFromName(name) {
|
|
657
|
+
const encoded = new TextEncoder().encode(name);
|
|
658
|
+
if (encoded.length > 32) {
|
|
659
|
+
throw new Error(`sender_auth: Solana cluster name too long (${encoded.length} > 32 bytes): ${name}`);
|
|
660
|
+
}
|
|
661
|
+
const out = new Uint8Array(32);
|
|
662
|
+
out.set(encoded);
|
|
663
|
+
return out;
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
});
|
|
667
|
+
|
|
668
|
+
// ../schemas/declarations/PaymentRequest/v1/bindings/typescript/sender-auth/dist/errors.js
|
|
669
|
+
var require_errors = __commonJS({
|
|
670
|
+
"../schemas/declarations/PaymentRequest/v1/bindings/typescript/sender-auth/dist/errors.js"(exports) {
|
|
671
|
+
"use strict";
|
|
672
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
673
|
+
exports.SignerMismatchError = exports.RecoveryFailedError = exports.MalformedPrehashError = void 0;
|
|
674
|
+
var MalformedPrehashError = class extends Error {
|
|
675
|
+
constructor(message = "sender_auth: malformed message_prehash") {
|
|
676
|
+
super(message);
|
|
677
|
+
this.name = "MalformedPrehashError";
|
|
678
|
+
}
|
|
679
|
+
};
|
|
680
|
+
exports.MalformedPrehashError = MalformedPrehashError;
|
|
681
|
+
var RecoveryFailedError = class extends Error {
|
|
682
|
+
constructor(message = "sender_auth: could not recover a signer from the signed message") {
|
|
683
|
+
super(message);
|
|
684
|
+
this.name = "RecoveryFailedError";
|
|
685
|
+
}
|
|
686
|
+
};
|
|
687
|
+
exports.RecoveryFailedError = RecoveryFailedError;
|
|
688
|
+
var SignerMismatchError = class extends Error {
|
|
689
|
+
constructor(message = "sender_auth: recovered signer does not match source.account") {
|
|
690
|
+
super(message);
|
|
691
|
+
this.name = "SignerMismatchError";
|
|
692
|
+
}
|
|
693
|
+
};
|
|
694
|
+
exports.SignerMismatchError = SignerMismatchError;
|
|
695
|
+
}
|
|
696
|
+
});
|
|
697
|
+
|
|
698
|
+
// ../schemas/declarations/PaymentRequest/v1/bindings/typescript/sender-auth/dist/adapters/evm.js
|
|
699
|
+
var require_evm = __commonJS({
|
|
700
|
+
"../schemas/declarations/PaymentRequest/v1/bindings/typescript/sender-auth/dist/adapters/evm.js"(exports) {
|
|
701
|
+
"use strict";
|
|
702
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
703
|
+
exports.evmAdapter = void 0;
|
|
704
|
+
var ethers_1 = __require("ethers");
|
|
705
|
+
var evm_escrow_encoding_1 = require_dist();
|
|
706
|
+
var utils_js_1 = require_utils();
|
|
707
|
+
var errors_js_1 = require_errors();
|
|
708
|
+
var chain_id_js_1 = require_chain_id();
|
|
709
|
+
exports.evmAdapter = {
|
|
710
|
+
async buildAuthMessage({ sourceAsset, maxSourceAmount, sourceDefaults, deadline, nonce }) {
|
|
711
|
+
if (nonce === void 0) {
|
|
712
|
+
throw new Error("sender_auth: buildAuthMessage requires an explicit nonce \u2014 derive it deterministically from a stable request id (e.g. an order id) so retries reproduce the same permit; pass generatePermitNonce() only for genuinely one-shot builds");
|
|
713
|
+
}
|
|
714
|
+
if (deadline === void 0) {
|
|
715
|
+
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)");
|
|
716
|
+
}
|
|
717
|
+
const sourceChainId = sourceAsset.split("/")[0];
|
|
718
|
+
const chainIdNum = parseInt(sourceChainId.split(":")[1]);
|
|
719
|
+
const tokenAddress = sourceAsset.split("/")[1].split(":")[1];
|
|
720
|
+
const permitParams = {
|
|
721
|
+
chainId: chainIdNum,
|
|
722
|
+
verifyingContract: evm_escrow_encoding_1.PERMIT2_CONTRACT_ADDRESS,
|
|
723
|
+
token: tokenAddress,
|
|
724
|
+
amount: maxSourceAmount,
|
|
725
|
+
spender: sourceDefaults.escrowContract,
|
|
726
|
+
nonce: (0, utils_js_1.resolvePermitNonce)(nonce),
|
|
727
|
+
deadline: (0, utils_js_1.resolvePermitDeadline)(deadline),
|
|
728
|
+
reserver: sourceDefaults.quoteSelector,
|
|
729
|
+
releaser: sourceDefaults.fulfillmentVerifierAccount
|
|
730
|
+
};
|
|
731
|
+
const messagePrehash = (0, evm_escrow_encoding_1.createPermitWitnessTransferFromPrehash)(permitParams);
|
|
732
|
+
const messageHash = (0, evm_escrow_encoding_1.hashPermitWitnessTransferFrom)(messagePrehash);
|
|
733
|
+
return { messageScheme: "EVM_PERMIT2", messageHash, messagePrehash: JSON.stringify(messagePrehash) };
|
|
734
|
+
},
|
|
735
|
+
async sign(signedMessage, privateKey) {
|
|
736
|
+
if (!signedMessage.message_prehash) {
|
|
737
|
+
throw new Error("EVM adapter sign(): signed_messages[i].message_prehash is required");
|
|
738
|
+
}
|
|
739
|
+
const prehash = JSON.parse(signedMessage.message_prehash);
|
|
740
|
+
const prehashDigest = (0, evm_escrow_encoding_1.hashPermitWitnessTransferFrom)(prehash);
|
|
741
|
+
if (prehashDigest.toLowerCase() !== signedMessage.message.toLowerCase()) {
|
|
742
|
+
throw new Error(`EVM adapter sign(): message_prehash implies digest ${prehashDigest} but message is ${signedMessage.message}`);
|
|
743
|
+
}
|
|
744
|
+
const wallet = new ethers_1.Wallet(privateKey);
|
|
745
|
+
return wallet.signTypedData(prehash.domain, prehash.types, prehash.message);
|
|
746
|
+
},
|
|
747
|
+
recoverSigner(signed, source) {
|
|
748
|
+
let recovered;
|
|
749
|
+
try {
|
|
750
|
+
recovered = (0, ethers_1.recoverAddress)(signed.message, signed.signature);
|
|
751
|
+
} catch (e) {
|
|
752
|
+
throw new errors_js_1.RecoveryFailedError(`sender_auth: could not recover a signer: ${e.message}`);
|
|
753
|
+
}
|
|
754
|
+
if (!(0, utils_js_1.sameAddress)(recovered, source.account)) {
|
|
755
|
+
throw new errors_js_1.SignerMismatchError(`sender_auth: recovered ${recovered}, not source.account`);
|
|
756
|
+
}
|
|
757
|
+
return source.account;
|
|
758
|
+
},
|
|
759
|
+
recoverAndVerify(signed, source, expected) {
|
|
760
|
+
let canonical;
|
|
761
|
+
let msg;
|
|
762
|
+
try {
|
|
763
|
+
msg = JSON.parse(signed.message_prehash).message;
|
|
764
|
+
canonical = (0, evm_escrow_encoding_1.createPermitWitnessTransferFromPrehash)({
|
|
765
|
+
chainId: (0, chain_id_js_1.evmChainId)(source.network),
|
|
766
|
+
verifyingContract: evm_escrow_encoding_1.PERMIT2_CONTRACT_ADDRESS,
|
|
767
|
+
token: msg.permitted.token,
|
|
768
|
+
amount: msg.permitted.amount,
|
|
769
|
+
spender: msg.spender,
|
|
770
|
+
nonce: BigInt(msg.nonce),
|
|
771
|
+
deadline: BigInt(msg.deadline),
|
|
772
|
+
reserver: msg.witness.reserver,
|
|
773
|
+
releaser: msg.witness.releaser
|
|
774
|
+
});
|
|
775
|
+
} catch {
|
|
776
|
+
throw new errors_js_1.MalformedPrehashError();
|
|
777
|
+
}
|
|
778
|
+
let recovered;
|
|
779
|
+
try {
|
|
780
|
+
recovered = (0, ethers_1.verifyTypedData)(canonical.domain, canonical.types, canonical.message, signed.signature);
|
|
781
|
+
} catch {
|
|
782
|
+
throw new Error("sender_auth: deposit signature does not recover to source.account");
|
|
783
|
+
}
|
|
784
|
+
if (!(0, utils_js_1.sameAddress)(recovered, source.account)) {
|
|
785
|
+
throw new Error("sender_auth: deposit signature does not recover to source.account");
|
|
786
|
+
}
|
|
787
|
+
const deadlineSec = Number(msg.deadline);
|
|
788
|
+
(0, utils_js_1.assertToken)(msg.permitted.token, source.asset, (a) => a);
|
|
789
|
+
(0, utils_js_1.assertAmountMatches)(msg.permitted.amount, expected.maxSourceAmount);
|
|
790
|
+
(0, utils_js_1.assertFresh)(deadlineSec, expected.nowSec ?? (0, utils_js_1.nowSec)());
|
|
791
|
+
if (expected.escrowContract !== void 0) {
|
|
792
|
+
(0, utils_js_1.assertSpender)(msg.spender, expected.escrowContract, (a) => a);
|
|
793
|
+
}
|
|
794
|
+
(0, utils_js_1.assertRolePairComplete)(expected.reserver, expected.releaser);
|
|
795
|
+
if (expected.reserver !== void 0 && expected.releaser !== void 0) {
|
|
796
|
+
(0, utils_js_1.assertWitnessRoles)(msg.witness.reserver, msg.witness.releaser, expected.reserver, expected.releaser, (a) => a);
|
|
797
|
+
}
|
|
798
|
+
return {
|
|
799
|
+
amount: msg.permitted.amount,
|
|
800
|
+
deadlineSec,
|
|
801
|
+
permit: {
|
|
802
|
+
scheme: "EVM_PERMIT2",
|
|
803
|
+
token: msg.permitted.token,
|
|
804
|
+
amount: msg.permitted.amount,
|
|
805
|
+
deadlineSec,
|
|
806
|
+
reserver: msg.witness.reserver,
|
|
807
|
+
releaser: msg.witness.releaser,
|
|
808
|
+
spender: msg.spender
|
|
809
|
+
}
|
|
810
|
+
};
|
|
811
|
+
}
|
|
812
|
+
};
|
|
813
|
+
}
|
|
814
|
+
});
|
|
815
|
+
|
|
816
|
+
// ../contracts/tvm/escrow-encoding/typescript/dist/chain-id.js
|
|
817
|
+
var require_chain_id2 = __commonJS({
|
|
818
|
+
"../contracts/tvm/escrow-encoding/typescript/dist/chain-id.js"(exports) {
|
|
819
|
+
"use strict";
|
|
820
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
821
|
+
exports.maskChainId = maskChainId;
|
|
822
|
+
function maskChainId(chainId) {
|
|
823
|
+
return (chainId & 4294967295) >>> 0;
|
|
824
|
+
}
|
|
825
|
+
}
|
|
826
|
+
});
|
|
827
|
+
|
|
828
|
+
// ../contracts/tvm/escrow-encoding/typescript/dist/tron-address.js
|
|
829
|
+
var require_tron_address = __commonJS({
|
|
830
|
+
"../contracts/tvm/escrow-encoding/typescript/dist/tron-address.js"(exports) {
|
|
831
|
+
"use strict";
|
|
832
|
+
var __importDefault = exports && exports.__importDefault || function(mod) {
|
|
833
|
+
return mod && mod.__esModule ? mod : { "default": mod };
|
|
834
|
+
};
|
|
835
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
836
|
+
exports.base58ToHex = base58ToHex;
|
|
837
|
+
exports.normalizeAddress = normalizeAddress;
|
|
838
|
+
var ethers_1 = __require("ethers");
|
|
839
|
+
var bs58_1 = __importDefault(__require("bs58"));
|
|
840
|
+
var TVM_MAINNET_PREFIX = "41";
|
|
841
|
+
function base58ToHex(base58Address) {
|
|
842
|
+
if (!base58Address || !base58Address.startsWith("T")) {
|
|
843
|
+
throw new Error(`Invalid Tron base58 address: ${base58Address}`);
|
|
844
|
+
}
|
|
845
|
+
const decoded = bs58_1.default.decode(base58Address);
|
|
846
|
+
if (decoded.length !== 25) {
|
|
847
|
+
throw new Error(`Invalid Tron base58 length (expected 25 bytes): ${base58Address}`);
|
|
848
|
+
}
|
|
849
|
+
const payload = decoded.slice(0, 21);
|
|
850
|
+
const checksum = (0, ethers_1.hexlify)(decoded.slice(21)).slice(2);
|
|
851
|
+
const computed = (0, ethers_1.sha256)((0, ethers_1.sha256)(payload)).slice(2, 10);
|
|
852
|
+
if (checksum !== computed) {
|
|
853
|
+
throw new Error(`Invalid Tron base58 checksum: ${base58Address}`);
|
|
854
|
+
}
|
|
855
|
+
return (0, ethers_1.hexlify)(payload).slice(2);
|
|
856
|
+
}
|
|
857
|
+
function normalizeAddress(address) {
|
|
858
|
+
if (!address) {
|
|
859
|
+
throw new Error("Empty address");
|
|
860
|
+
}
|
|
861
|
+
let hexAddress = address;
|
|
862
|
+
if (address.startsWith("T")) {
|
|
863
|
+
hexAddress = base58ToHex(address);
|
|
864
|
+
}
|
|
865
|
+
hexAddress = hexAddress.replace(/^0x/, "");
|
|
866
|
+
if (hexAddress.startsWith(TVM_MAINNET_PREFIX)) {
|
|
867
|
+
hexAddress = hexAddress.substring(2);
|
|
868
|
+
}
|
|
869
|
+
if (hexAddress.length !== 40) {
|
|
870
|
+
throw new Error(`Invalid address length: expected 40 chars, got ${hexAddress.length}`);
|
|
871
|
+
}
|
|
872
|
+
if (!/^[0-9a-fA-F]{40}$/.test(hexAddress)) {
|
|
873
|
+
throw new Error("Invalid hex address format");
|
|
874
|
+
}
|
|
875
|
+
return "0x" + hexAddress.toLowerCase();
|
|
876
|
+
}
|
|
877
|
+
}
|
|
878
|
+
});
|
|
879
|
+
|
|
880
|
+
// ../contracts/tvm/escrow-encoding/typescript/dist/reserve-encoder.js
|
|
881
|
+
var require_reserve_encoder2 = __commonJS({
|
|
882
|
+
"../contracts/tvm/escrow-encoding/typescript/dist/reserve-encoder.js"(exports) {
|
|
883
|
+
"use strict";
|
|
884
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
885
|
+
exports.computeReserveDigest = computeReserveDigest;
|
|
886
|
+
var ethers_1 = __require("ethers");
|
|
887
|
+
var chain_id_1 = require_chain_id2();
|
|
888
|
+
var RESERVE_WITNESS_TYPES = {
|
|
889
|
+
ReserveWitness: [
|
|
890
|
+
{ name: "paymentId", type: "bytes32" },
|
|
891
|
+
{ name: "settler", type: "address" }
|
|
892
|
+
]
|
|
893
|
+
};
|
|
894
|
+
function computeReserveDigest(input) {
|
|
895
|
+
const domain = {
|
|
896
|
+
name: "Escrow",
|
|
897
|
+
version: "3",
|
|
898
|
+
chainId: (0, chain_id_1.maskChainId)(input.chainId),
|
|
899
|
+
verifyingContract: input.escrowContract
|
|
900
|
+
};
|
|
901
|
+
return ethers_1.TypedDataEncoder.hash(domain, RESERVE_WITNESS_TYPES, {
|
|
902
|
+
paymentId: input.paymentId,
|
|
903
|
+
settler: input.settler
|
|
904
|
+
});
|
|
905
|
+
}
|
|
906
|
+
}
|
|
907
|
+
});
|
|
908
|
+
|
|
909
|
+
// ../contracts/tvm/escrow-encoding/typescript/dist/payment-id.js
|
|
910
|
+
var require_payment_id2 = __commonJS({
|
|
911
|
+
"../contracts/tvm/escrow-encoding/typescript/dist/payment-id.js"(exports) {
|
|
912
|
+
"use strict";
|
|
913
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
914
|
+
exports.computePaymentId = computePaymentId;
|
|
915
|
+
var ethers_1 = __require("ethers");
|
|
916
|
+
var tron_address_1 = require_tron_address();
|
|
917
|
+
function computePaymentId(depositor, signature, nonce) {
|
|
918
|
+
if (!/^[0-9]+$/.test(nonce)) {
|
|
919
|
+
throw new Error(`invalid nonce (expected base-10 decimal): ${nonce}`);
|
|
920
|
+
}
|
|
921
|
+
const encoded = ethers_1.AbiCoder.defaultAbiCoder().encode(["address", "bytes", "uint256"], [(0, tron_address_1.normalizeAddress)(depositor), signature, nonce]);
|
|
922
|
+
return (0, ethers_1.keccak256)(encoded);
|
|
923
|
+
}
|
|
924
|
+
}
|
|
925
|
+
});
|
|
926
|
+
|
|
927
|
+
// ../contracts/tvm/escrow-encoding/typescript/dist/deposit-encoder.js
|
|
928
|
+
var require_deposit_encoder2 = __commonJS({
|
|
929
|
+
"../contracts/tvm/escrow-encoding/typescript/dist/deposit-encoder.js"(exports) {
|
|
930
|
+
"use strict";
|
|
931
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
932
|
+
exports.createTvmPermitWitnessTransferFromPrehash = createTvmPermitWitnessTransferFromPrehash;
|
|
933
|
+
exports.hashTvmPermitWitnessTransferFrom = hashTvmPermitWitnessTransferFrom;
|
|
934
|
+
var ethers_1 = __require("ethers");
|
|
935
|
+
var chain_id_1 = require_chain_id2();
|
|
936
|
+
var tron_address_1 = require_tron_address();
|
|
937
|
+
var PERMIT_WITNESS_TYPES_V2 = {
|
|
938
|
+
PermitWitnessTransferFrom: [
|
|
939
|
+
{ name: "permitted", type: "TokenPermissions" },
|
|
940
|
+
{ name: "spender", type: "address" },
|
|
941
|
+
{ name: "nonce", type: "uint256" },
|
|
942
|
+
{ name: "deadline", type: "uint256" },
|
|
943
|
+
{ name: "witness", type: "DepositWitness" }
|
|
944
|
+
],
|
|
945
|
+
TokenPermissions: [
|
|
946
|
+
{ name: "token", type: "address" },
|
|
947
|
+
{ name: "amount", type: "uint256" }
|
|
948
|
+
],
|
|
949
|
+
DepositWitness: [
|
|
950
|
+
{ name: "reserver", type: "address" },
|
|
951
|
+
{ name: "releaser", type: "address" }
|
|
952
|
+
]
|
|
953
|
+
};
|
|
954
|
+
function createTvmPermitWitnessTransferFromPrehash(params) {
|
|
955
|
+
const maskedChainId = (0, chain_id_1.maskChainId)(params.chainId);
|
|
956
|
+
return {
|
|
957
|
+
types: PERMIT_WITNESS_TYPES_V2,
|
|
958
|
+
primaryType: "PermitWitnessTransferFrom",
|
|
959
|
+
domain: {
|
|
960
|
+
name: "Permit2",
|
|
961
|
+
chainId: `0x${maskedChainId.toString(16)}`,
|
|
962
|
+
verifyingContract: (0, tron_address_1.normalizeAddress)(params.permit2Address)
|
|
963
|
+
},
|
|
964
|
+
message: {
|
|
965
|
+
permitted: {
|
|
966
|
+
token: (0, tron_address_1.normalizeAddress)(params.tokenAddress),
|
|
967
|
+
amount: params.amount
|
|
968
|
+
},
|
|
969
|
+
spender: (0, tron_address_1.normalizeAddress)(params.spenderAddress),
|
|
970
|
+
nonce: params.nonce.toString(),
|
|
971
|
+
deadline: params.deadline.toString(),
|
|
972
|
+
witness: {
|
|
973
|
+
reserver: (0, tron_address_1.normalizeAddress)(params.reserverAddress),
|
|
974
|
+
releaser: (0, tron_address_1.normalizeAddress)(params.releaserAddress)
|
|
975
|
+
}
|
|
976
|
+
}
|
|
977
|
+
};
|
|
978
|
+
}
|
|
979
|
+
function hashTvmPermitWitnessTransferFrom(prehash) {
|
|
980
|
+
return ethers_1.TypedDataEncoder.hash(prehash.domain, prehash.types, prehash.message);
|
|
981
|
+
}
|
|
982
|
+
}
|
|
983
|
+
});
|
|
984
|
+
|
|
985
|
+
// ../contracts/tvm/escrow-encoding/typescript/dist/index.js
|
|
986
|
+
var require_dist2 = __commonJS({
|
|
987
|
+
"../contracts/tvm/escrow-encoding/typescript/dist/index.js"(exports) {
|
|
988
|
+
"use strict";
|
|
989
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
990
|
+
exports.hashTvmPermitWitnessTransferFrom = exports.createTvmPermitWitnessTransferFromPrehash = exports.computePaymentId = exports.computeReserveDigest = exports.normalizeAddress = exports.base58ToHex = exports.maskChainId = void 0;
|
|
991
|
+
var chain_id_1 = require_chain_id2();
|
|
992
|
+
Object.defineProperty(exports, "maskChainId", { enumerable: true, get: function() {
|
|
993
|
+
return chain_id_1.maskChainId;
|
|
994
|
+
} });
|
|
995
|
+
var tron_address_1 = require_tron_address();
|
|
996
|
+
Object.defineProperty(exports, "base58ToHex", { enumerable: true, get: function() {
|
|
997
|
+
return tron_address_1.base58ToHex;
|
|
998
|
+
} });
|
|
999
|
+
Object.defineProperty(exports, "normalizeAddress", { enumerable: true, get: function() {
|
|
1000
|
+
return tron_address_1.normalizeAddress;
|
|
1001
|
+
} });
|
|
1002
|
+
var reserve_encoder_1 = require_reserve_encoder2();
|
|
1003
|
+
Object.defineProperty(exports, "computeReserveDigest", { enumerable: true, get: function() {
|
|
1004
|
+
return reserve_encoder_1.computeReserveDigest;
|
|
1005
|
+
} });
|
|
1006
|
+
var payment_id_1 = require_payment_id2();
|
|
1007
|
+
Object.defineProperty(exports, "computePaymentId", { enumerable: true, get: function() {
|
|
1008
|
+
return payment_id_1.computePaymentId;
|
|
1009
|
+
} });
|
|
1010
|
+
var deposit_encoder_1 = require_deposit_encoder2();
|
|
1011
|
+
Object.defineProperty(exports, "createTvmPermitWitnessTransferFromPrehash", { enumerable: true, get: function() {
|
|
1012
|
+
return deposit_encoder_1.createTvmPermitWitnessTransferFromPrehash;
|
|
1013
|
+
} });
|
|
1014
|
+
Object.defineProperty(exports, "hashTvmPermitWitnessTransferFrom", { enumerable: true, get: function() {
|
|
1015
|
+
return deposit_encoder_1.hashTvmPermitWitnessTransferFrom;
|
|
1016
|
+
} });
|
|
1017
|
+
}
|
|
1018
|
+
});
|
|
1019
|
+
|
|
1020
|
+
// ../schemas/declarations/PaymentRequest/v1/bindings/typescript/sender-auth/dist/adapters/tron.js
|
|
1021
|
+
var require_tron = __commonJS({
|
|
1022
|
+
"../schemas/declarations/PaymentRequest/v1/bindings/typescript/sender-auth/dist/adapters/tron.js"(exports) {
|
|
1023
|
+
"use strict";
|
|
1024
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1025
|
+
exports.tronAdapter = void 0;
|
|
1026
|
+
var ethers_1 = __require("ethers");
|
|
1027
|
+
var tvm_escrow_encoding_1 = require_dist2();
|
|
1028
|
+
var utils_js_1 = require_utils();
|
|
1029
|
+
var errors_js_1 = require_errors();
|
|
1030
|
+
var chain_id_js_1 = require_chain_id();
|
|
1031
|
+
exports.tronAdapter = {
|
|
1032
|
+
async buildAuthMessage({ sourceAsset, maxSourceAmount, sourceDefaults, deadline, nonce }) {
|
|
1033
|
+
if (nonce === void 0) {
|
|
1034
|
+
throw new Error("sender_auth: buildAuthMessage requires an explicit nonce \u2014 derive it deterministically from a stable request id (e.g. an order id) so retries reproduce the same permit; pass generatePermitNonce() only for genuinely one-shot builds");
|
|
1035
|
+
}
|
|
1036
|
+
if (deadline === void 0) {
|
|
1037
|
+
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)");
|
|
1038
|
+
}
|
|
1039
|
+
const sourceChainId = sourceAsset.split("/")[0];
|
|
1040
|
+
const tokenAddress = sourceAsset.split("/")[1].split(":")[1];
|
|
1041
|
+
const permit2Address = sourceDefaults.permit2Contract ?? (0, chain_id_js_1.resolveTronPermit2)(sourceChainId);
|
|
1042
|
+
const tvmParams = {
|
|
1043
|
+
chainId: (0, chain_id_js_1.tronNumericChainId)(sourceChainId),
|
|
1044
|
+
permit2Address,
|
|
1045
|
+
tokenAddress,
|
|
1046
|
+
amount: maxSourceAmount,
|
|
1047
|
+
spenderAddress: sourceDefaults.escrowContract,
|
|
1048
|
+
nonce: (0, utils_js_1.resolvePermitNonce)(nonce),
|
|
1049
|
+
deadline: (0, utils_js_1.resolvePermitDeadline)(deadline),
|
|
1050
|
+
reserverAddress: sourceDefaults.quoteSelector,
|
|
1051
|
+
releaserAddress: sourceDefaults.fulfillmentVerifierAccount
|
|
1052
|
+
};
|
|
1053
|
+
const messagePrehash = (0, tvm_escrow_encoding_1.createTvmPermitWitnessTransferFromPrehash)(tvmParams);
|
|
1054
|
+
const messageHash = (0, tvm_escrow_encoding_1.hashTvmPermitWitnessTransferFrom)(messagePrehash);
|
|
1055
|
+
return { messageScheme: "EVM_PERMIT2", messageHash, messagePrehash: JSON.stringify(messagePrehash) };
|
|
1056
|
+
},
|
|
1057
|
+
// Signs the TIP-712 typed data, not the bare digest, so a signer can inspect the fields it is
|
|
1058
|
+
// authorizing (Turnkey policies read `eth.eip_712.message[...]`).
|
|
1059
|
+
async sign(signedMessage, privateKey) {
|
|
1060
|
+
if (!signedMessage.message_prehash) {
|
|
1061
|
+
throw new Error("Tron adapter sign(): signed_messages[i].message_prehash is required");
|
|
1062
|
+
}
|
|
1063
|
+
const prehash = JSON.parse(signedMessage.message_prehash);
|
|
1064
|
+
const prehashDigest = (0, tvm_escrow_encoding_1.hashTvmPermitWitnessTransferFrom)(prehash);
|
|
1065
|
+
if (prehashDigest.toLowerCase() !== signedMessage.message.toLowerCase()) {
|
|
1066
|
+
throw new Error(`Tron adapter sign(): message_prehash implies digest ${prehashDigest} but message is ${signedMessage.message}`);
|
|
1067
|
+
}
|
|
1068
|
+
const wallet = new ethers_1.Wallet(privateKey.startsWith("0x") ? privateKey : "0x" + privateKey);
|
|
1069
|
+
return wallet.signTypedData(prehash.domain, prehash.types, prehash.message);
|
|
1070
|
+
},
|
|
1071
|
+
recoverSigner(signed, source) {
|
|
1072
|
+
let recovered;
|
|
1073
|
+
try {
|
|
1074
|
+
recovered = (0, ethers_1.recoverAddress)(signed.message, signed.signature);
|
|
1075
|
+
} catch (e) {
|
|
1076
|
+
throw new errors_js_1.RecoveryFailedError(`sender_auth: could not recover a signer: ${e.message}`);
|
|
1077
|
+
}
|
|
1078
|
+
if (!(0, utils_js_1.sameAddress)(recovered, (0, tvm_escrow_encoding_1.normalizeAddress)(source.account))) {
|
|
1079
|
+
throw new errors_js_1.SignerMismatchError(`sender_auth: recovered ${recovered}, not source.account`);
|
|
1080
|
+
}
|
|
1081
|
+
return source.account;
|
|
1082
|
+
},
|
|
1083
|
+
recoverAndVerify(signed, source, expected) {
|
|
1084
|
+
let msg;
|
|
1085
|
+
let digest;
|
|
1086
|
+
try {
|
|
1087
|
+
msg = JSON.parse(signed.message_prehash).message;
|
|
1088
|
+
const canonical = (0, tvm_escrow_encoding_1.createTvmPermitWitnessTransferFromPrehash)({
|
|
1089
|
+
chainId: (0, chain_id_js_1.tronNumericChainId)(source.network),
|
|
1090
|
+
permit2Address: (0, chain_id_js_1.resolveTronPermit2)(source.network),
|
|
1091
|
+
tokenAddress: msg.permitted.token,
|
|
1092
|
+
amount: msg.permitted.amount,
|
|
1093
|
+
spenderAddress: msg.spender,
|
|
1094
|
+
nonce: BigInt(msg.nonce),
|
|
1095
|
+
deadline: BigInt(msg.deadline),
|
|
1096
|
+
reserverAddress: msg.witness.reserver,
|
|
1097
|
+
releaserAddress: msg.witness.releaser
|
|
1098
|
+
});
|
|
1099
|
+
digest = (0, tvm_escrow_encoding_1.hashTvmPermitWitnessTransferFrom)(canonical);
|
|
1100
|
+
} catch {
|
|
1101
|
+
throw new errors_js_1.MalformedPrehashError();
|
|
1102
|
+
}
|
|
1103
|
+
let recovered;
|
|
1104
|
+
try {
|
|
1105
|
+
recovered = (0, ethers_1.recoverAddress)(digest, signed.signature);
|
|
1106
|
+
} catch {
|
|
1107
|
+
throw new Error("sender_auth: deposit signature does not recover to source.account");
|
|
1108
|
+
}
|
|
1109
|
+
if (!(0, utils_js_1.sameAddress)(recovered, (0, tvm_escrow_encoding_1.normalizeAddress)(source.account))) {
|
|
1110
|
+
throw new Error("sender_auth: deposit signature does not recover to source.account");
|
|
1111
|
+
}
|
|
1112
|
+
const deadlineSec = Number(msg.deadline);
|
|
1113
|
+
(0, utils_js_1.assertToken)(msg.permitted.token, source.asset, tvm_escrow_encoding_1.normalizeAddress);
|
|
1114
|
+
(0, utils_js_1.assertAmountMatches)(msg.permitted.amount, expected.maxSourceAmount);
|
|
1115
|
+
(0, utils_js_1.assertFresh)(deadlineSec, expected.nowSec ?? (0, utils_js_1.nowSec)());
|
|
1116
|
+
if (expected.escrowContract !== void 0) {
|
|
1117
|
+
(0, utils_js_1.assertSpender)(msg.spender, expected.escrowContract, tvm_escrow_encoding_1.normalizeAddress);
|
|
1118
|
+
}
|
|
1119
|
+
(0, utils_js_1.assertRolePairComplete)(expected.reserver, expected.releaser);
|
|
1120
|
+
if (expected.reserver !== void 0 && expected.releaser !== void 0) {
|
|
1121
|
+
(0, utils_js_1.assertWitnessRoles)(msg.witness.reserver, msg.witness.releaser, expected.reserver, expected.releaser, tvm_escrow_encoding_1.normalizeAddress);
|
|
1122
|
+
}
|
|
1123
|
+
return {
|
|
1124
|
+
amount: msg.permitted.amount,
|
|
1125
|
+
deadlineSec,
|
|
1126
|
+
permit: {
|
|
1127
|
+
scheme: "EVM_PERMIT2",
|
|
1128
|
+
token: msg.permitted.token,
|
|
1129
|
+
amount: msg.permitted.amount,
|
|
1130
|
+
deadlineSec,
|
|
1131
|
+
reserver: msg.witness.reserver,
|
|
1132
|
+
releaser: msg.witness.releaser,
|
|
1133
|
+
spender: msg.spender
|
|
1134
|
+
}
|
|
1135
|
+
};
|
|
1136
|
+
}
|
|
1137
|
+
};
|
|
1138
|
+
}
|
|
1139
|
+
});
|
|
1140
|
+
|
|
1141
|
+
// ../contracts/svm/escrow-encoding/typescript/dist/errors.js
|
|
1142
|
+
var require_errors2 = __commonJS({
|
|
1143
|
+
"../contracts/svm/escrow-encoding/typescript/dist/errors.js"(exports) {
|
|
1144
|
+
"use strict";
|
|
1145
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1146
|
+
exports.InvalidHexError = exports.InvalidBase58Error = exports.InvalidPubkeyLengthError = exports.ZeroDepositHashError = exports.ZeroRecipientError = exports.ZeroReleaserError = exports.ZeroReserverError = exports.ZeroAmountError = exports.ZeroMintError = exports.ZeroDepositorError = exports.ZeroPaymentIdError = exports.EncodingError = void 0;
|
|
1147
|
+
var EncodingError = class extends Error {
|
|
1148
|
+
constructor(message) {
|
|
1149
|
+
super(message);
|
|
1150
|
+
this.name = "EncodingError";
|
|
1151
|
+
}
|
|
1152
|
+
};
|
|
1153
|
+
exports.EncodingError = EncodingError;
|
|
1154
|
+
var ZeroPaymentIdError = class extends EncodingError {
|
|
1155
|
+
constructor() {
|
|
1156
|
+
super("payment ID cannot be zero");
|
|
1157
|
+
this.name = "ZeroPaymentIdError";
|
|
1158
|
+
}
|
|
1159
|
+
};
|
|
1160
|
+
exports.ZeroPaymentIdError = ZeroPaymentIdError;
|
|
1161
|
+
var ZeroDepositorError = class extends EncodingError {
|
|
1162
|
+
constructor() {
|
|
1163
|
+
super("depositor cannot be zero");
|
|
1164
|
+
this.name = "ZeroDepositorError";
|
|
1165
|
+
}
|
|
1166
|
+
};
|
|
1167
|
+
exports.ZeroDepositorError = ZeroDepositorError;
|
|
1168
|
+
var ZeroMintError = class extends EncodingError {
|
|
1169
|
+
constructor() {
|
|
1170
|
+
super("mint cannot be zero");
|
|
1171
|
+
this.name = "ZeroMintError";
|
|
1172
|
+
}
|
|
1173
|
+
};
|
|
1174
|
+
exports.ZeroMintError = ZeroMintError;
|
|
1175
|
+
var ZeroAmountError = class extends EncodingError {
|
|
1176
|
+
constructor() {
|
|
1177
|
+
super("amount cannot be zero");
|
|
1178
|
+
this.name = "ZeroAmountError";
|
|
1179
|
+
}
|
|
1180
|
+
};
|
|
1181
|
+
exports.ZeroAmountError = ZeroAmountError;
|
|
1182
|
+
var ZeroReserverError = class extends EncodingError {
|
|
1183
|
+
constructor() {
|
|
1184
|
+
super("reserver cannot be zero");
|
|
1185
|
+
this.name = "ZeroReserverError";
|
|
1186
|
+
}
|
|
1187
|
+
};
|
|
1188
|
+
exports.ZeroReserverError = ZeroReserverError;
|
|
1189
|
+
var ZeroReleaserError = class extends EncodingError {
|
|
1190
|
+
constructor() {
|
|
1191
|
+
super("releaser cannot be zero");
|
|
1192
|
+
this.name = "ZeroReleaserError";
|
|
1193
|
+
}
|
|
1194
|
+
};
|
|
1195
|
+
exports.ZeroReleaserError = ZeroReleaserError;
|
|
1196
|
+
var ZeroRecipientError = class extends EncodingError {
|
|
1197
|
+
constructor() {
|
|
1198
|
+
super("recipient cannot be zero");
|
|
1199
|
+
this.name = "ZeroRecipientError";
|
|
1200
|
+
}
|
|
1201
|
+
};
|
|
1202
|
+
exports.ZeroRecipientError = ZeroRecipientError;
|
|
1203
|
+
var ZeroDepositHashError = class extends EncodingError {
|
|
1204
|
+
constructor() {
|
|
1205
|
+
super("deposit hash cannot be zero");
|
|
1206
|
+
this.name = "ZeroDepositHashError";
|
|
1207
|
+
}
|
|
1208
|
+
};
|
|
1209
|
+
exports.ZeroDepositHashError = ZeroDepositHashError;
|
|
1210
|
+
var InvalidPubkeyLengthError = class extends EncodingError {
|
|
1211
|
+
constructor() {
|
|
1212
|
+
super("invalid pubkey length: expected 32 bytes");
|
|
1213
|
+
this.name = "InvalidPubkeyLengthError";
|
|
1214
|
+
}
|
|
1215
|
+
};
|
|
1216
|
+
exports.InvalidPubkeyLengthError = InvalidPubkeyLengthError;
|
|
1217
|
+
var InvalidBase58Error = class extends EncodingError {
|
|
1218
|
+
constructor() {
|
|
1219
|
+
super("invalid base58 encoding");
|
|
1220
|
+
this.name = "InvalidBase58Error";
|
|
1221
|
+
}
|
|
1222
|
+
};
|
|
1223
|
+
exports.InvalidBase58Error = InvalidBase58Error;
|
|
1224
|
+
var InvalidHexError = class extends EncodingError {
|
|
1225
|
+
constructor() {
|
|
1226
|
+
super("invalid hex encoding");
|
|
1227
|
+
this.name = "InvalidHexError";
|
|
1228
|
+
}
|
|
1229
|
+
};
|
|
1230
|
+
exports.InvalidHexError = InvalidHexError;
|
|
1231
|
+
}
|
|
1232
|
+
});
|
|
1233
|
+
|
|
1234
|
+
// ../contracts/svm/escrow-encoding/typescript/dist/pubkey.js
|
|
1235
|
+
var require_pubkey = __commonJS({
|
|
1236
|
+
"../contracts/svm/escrow-encoding/typescript/dist/pubkey.js"(exports) {
|
|
1237
|
+
"use strict";
|
|
1238
|
+
var __importDefault = exports && exports.__importDefault || function(mod) {
|
|
1239
|
+
return mod && mod.__esModule ? mod : { "default": mod };
|
|
1240
|
+
};
|
|
1241
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1242
|
+
exports.Pubkey = void 0;
|
|
1243
|
+
var bs58_1 = __importDefault(__require("bs58"));
|
|
1244
|
+
var errors_1 = require_errors2();
|
|
1245
|
+
var Pubkey = class _Pubkey {
|
|
1246
|
+
constructor(data) {
|
|
1247
|
+
if (data.length !== 32) {
|
|
1248
|
+
throw new errors_1.InvalidPubkeyLengthError();
|
|
1249
|
+
}
|
|
1250
|
+
this.data = data;
|
|
1251
|
+
}
|
|
1252
|
+
/**
|
|
1253
|
+
* Creates a Pubkey from a Base58-encoded string.
|
|
1254
|
+
* This is the standard format for Solana public keys.
|
|
1255
|
+
*/
|
|
1256
|
+
static fromBase58(s) {
|
|
1257
|
+
try {
|
|
1258
|
+
const decoded = bs58_1.default.decode(s);
|
|
1259
|
+
if (decoded.length !== 32) {
|
|
1260
|
+
throw new errors_1.InvalidPubkeyLengthError();
|
|
1261
|
+
}
|
|
1262
|
+
return new _Pubkey(decoded);
|
|
1263
|
+
} catch (e) {
|
|
1264
|
+
if (e instanceof errors_1.InvalidPubkeyLengthError) {
|
|
1265
|
+
throw e;
|
|
1266
|
+
}
|
|
1267
|
+
throw new errors_1.InvalidBase58Error();
|
|
1268
|
+
}
|
|
1269
|
+
}
|
|
1270
|
+
/**
|
|
1271
|
+
* Creates a Pubkey from a hex-encoded string.
|
|
1272
|
+
* Accepts with or without "0x" prefix.
|
|
1273
|
+
*/
|
|
1274
|
+
static fromHex(s) {
|
|
1275
|
+
let hex = s;
|
|
1276
|
+
if (hex.startsWith("0x") || hex.startsWith("0X")) {
|
|
1277
|
+
hex = hex.slice(2);
|
|
1278
|
+
}
|
|
1279
|
+
if (hex.length !== 64) {
|
|
1280
|
+
throw new errors_1.InvalidPubkeyLengthError();
|
|
1281
|
+
}
|
|
1282
|
+
try {
|
|
1283
|
+
const bytes = new Uint8Array(32);
|
|
1284
|
+
for (let i = 0; i < 32; i++) {
|
|
1285
|
+
bytes[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16);
|
|
1286
|
+
if (isNaN(bytes[i])) {
|
|
1287
|
+
throw new errors_1.InvalidHexError();
|
|
1288
|
+
}
|
|
1289
|
+
}
|
|
1290
|
+
return new _Pubkey(bytes);
|
|
1291
|
+
} catch (e) {
|
|
1292
|
+
if (e instanceof errors_1.InvalidPubkeyLengthError || e instanceof errors_1.InvalidHexError) {
|
|
1293
|
+
throw e;
|
|
1294
|
+
}
|
|
1295
|
+
throw new errors_1.InvalidHexError();
|
|
1296
|
+
}
|
|
1297
|
+
}
|
|
1298
|
+
/**
|
|
1299
|
+
* Creates a Pubkey from raw bytes.
|
|
1300
|
+
*/
|
|
1301
|
+
static fromBytes(bytes) {
|
|
1302
|
+
if (bytes.length !== 32) {
|
|
1303
|
+
throw new errors_1.InvalidPubkeyLengthError();
|
|
1304
|
+
}
|
|
1305
|
+
return new _Pubkey(new Uint8Array(bytes));
|
|
1306
|
+
}
|
|
1307
|
+
/**
|
|
1308
|
+
* Returns the pubkey as a byte array.
|
|
1309
|
+
*/
|
|
1310
|
+
toBytes() {
|
|
1311
|
+
return new Uint8Array(this.data);
|
|
1312
|
+
}
|
|
1313
|
+
/**
|
|
1314
|
+
* Returns the Base58 encoding of the pubkey.
|
|
1315
|
+
*/
|
|
1316
|
+
toString() {
|
|
1317
|
+
return bs58_1.default.encode(this.data);
|
|
1318
|
+
}
|
|
1319
|
+
/**
|
|
1320
|
+
* Returns the hex encoding of the pubkey (without 0x prefix).
|
|
1321
|
+
*/
|
|
1322
|
+
toHex() {
|
|
1323
|
+
return Array.from(this.data).map((b) => b.toString(16).padStart(2, "0")).join("");
|
|
1324
|
+
}
|
|
1325
|
+
/**
|
|
1326
|
+
* Returns true if the pubkey is all zeros.
|
|
1327
|
+
*/
|
|
1328
|
+
isZero() {
|
|
1329
|
+
return this.data.every((b) => b === 0);
|
|
1330
|
+
}
|
|
1331
|
+
/**
|
|
1332
|
+
* Returns true if this pubkey equals another.
|
|
1333
|
+
*/
|
|
1334
|
+
equals(other) {
|
|
1335
|
+
return this.data.every((b, i) => b === other.data[i]);
|
|
1336
|
+
}
|
|
1337
|
+
};
|
|
1338
|
+
exports.Pubkey = Pubkey;
|
|
1339
|
+
}
|
|
1340
|
+
});
|
|
1341
|
+
|
|
1342
|
+
// ../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/_u64.js
|
|
1343
|
+
var require_u64 = __commonJS({
|
|
1344
|
+
"../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/_u64.js"(exports) {
|
|
1345
|
+
"use strict";
|
|
1346
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1347
|
+
exports.toBig = exports.shrSL = exports.shrSH = exports.rotrSL = exports.rotrSH = exports.rotrBL = exports.rotrBH = exports.rotr32L = exports.rotr32H = exports.rotlSL = exports.rotlSH = exports.rotlBL = exports.rotlBH = exports.add5L = exports.add5H = exports.add4L = exports.add4H = exports.add3L = exports.add3H = void 0;
|
|
1348
|
+
exports.add = add;
|
|
1349
|
+
exports.fromBig = fromBig;
|
|
1350
|
+
exports.split = split;
|
|
1351
|
+
var U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);
|
|
1352
|
+
var _32n = /* @__PURE__ */ BigInt(32);
|
|
1353
|
+
function fromBig(n, le = false) {
|
|
1354
|
+
if (le)
|
|
1355
|
+
return { h: Number(n & U32_MASK64), l: Number(n >> _32n & U32_MASK64) };
|
|
1356
|
+
return { h: Number(n >> _32n & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };
|
|
1357
|
+
}
|
|
1358
|
+
function split(lst, le = false) {
|
|
1359
|
+
const len = lst.length;
|
|
1360
|
+
let Ah = new Uint32Array(len);
|
|
1361
|
+
let Al = new Uint32Array(len);
|
|
1362
|
+
for (let i = 0; i < len; i++) {
|
|
1363
|
+
const { h, l } = fromBig(lst[i], le);
|
|
1364
|
+
[Ah[i], Al[i]] = [h, l];
|
|
1365
|
+
}
|
|
1366
|
+
return [Ah, Al];
|
|
1367
|
+
}
|
|
1368
|
+
var toBig = (h, l) => BigInt(h >>> 0) << _32n | BigInt(l >>> 0);
|
|
1369
|
+
exports.toBig = toBig;
|
|
1370
|
+
var shrSH = (h, _l, s) => h >>> s;
|
|
1371
|
+
exports.shrSH = shrSH;
|
|
1372
|
+
var shrSL = (h, l, s) => h << 32 - s | l >>> s;
|
|
1373
|
+
exports.shrSL = shrSL;
|
|
1374
|
+
var rotrSH = (h, l, s) => h >>> s | l << 32 - s;
|
|
1375
|
+
exports.rotrSH = rotrSH;
|
|
1376
|
+
var rotrSL = (h, l, s) => h << 32 - s | l >>> s;
|
|
1377
|
+
exports.rotrSL = rotrSL;
|
|
1378
|
+
var rotrBH = (h, l, s) => h << 64 - s | l >>> s - 32;
|
|
1379
|
+
exports.rotrBH = rotrBH;
|
|
1380
|
+
var rotrBL = (h, l, s) => h >>> s - 32 | l << 64 - s;
|
|
1381
|
+
exports.rotrBL = rotrBL;
|
|
1382
|
+
var rotr32H = (_h, l) => l;
|
|
1383
|
+
exports.rotr32H = rotr32H;
|
|
1384
|
+
var rotr32L = (h, _l) => h;
|
|
1385
|
+
exports.rotr32L = rotr32L;
|
|
1386
|
+
var rotlSH = (h, l, s) => h << s | l >>> 32 - s;
|
|
1387
|
+
exports.rotlSH = rotlSH;
|
|
1388
|
+
var rotlSL = (h, l, s) => l << s | h >>> 32 - s;
|
|
1389
|
+
exports.rotlSL = rotlSL;
|
|
1390
|
+
var rotlBH = (h, l, s) => l << s - 32 | h >>> 64 - s;
|
|
1391
|
+
exports.rotlBH = rotlBH;
|
|
1392
|
+
var rotlBL = (h, l, s) => h << s - 32 | l >>> 64 - s;
|
|
1393
|
+
exports.rotlBL = rotlBL;
|
|
1394
|
+
function add(Ah, Al, Bh, Bl) {
|
|
1395
|
+
const l = (Al >>> 0) + (Bl >>> 0);
|
|
1396
|
+
return { h: Ah + Bh + (l / 2 ** 32 | 0) | 0, l: l | 0 };
|
|
1397
|
+
}
|
|
1398
|
+
var add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);
|
|
1399
|
+
exports.add3L = add3L;
|
|
1400
|
+
var add3H = (low, Ah, Bh, Ch) => Ah + Bh + Ch + (low / 2 ** 32 | 0) | 0;
|
|
1401
|
+
exports.add3H = add3H;
|
|
1402
|
+
var add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);
|
|
1403
|
+
exports.add4L = add4L;
|
|
1404
|
+
var add4H = (low, Ah, Bh, Ch, Dh) => Ah + Bh + Ch + Dh + (low / 2 ** 32 | 0) | 0;
|
|
1405
|
+
exports.add4H = add4H;
|
|
1406
|
+
var add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);
|
|
1407
|
+
exports.add5L = add5L;
|
|
1408
|
+
var add5H = (low, Ah, Bh, Ch, Dh, Eh) => Ah + Bh + Ch + Dh + Eh + (low / 2 ** 32 | 0) | 0;
|
|
1409
|
+
exports.add5H = add5H;
|
|
1410
|
+
var u64 = {
|
|
1411
|
+
fromBig,
|
|
1412
|
+
split,
|
|
1413
|
+
toBig,
|
|
1414
|
+
shrSH,
|
|
1415
|
+
shrSL,
|
|
1416
|
+
rotrSH,
|
|
1417
|
+
rotrSL,
|
|
1418
|
+
rotrBH,
|
|
1419
|
+
rotrBL,
|
|
1420
|
+
rotr32H,
|
|
1421
|
+
rotr32L,
|
|
1422
|
+
rotlSH,
|
|
1423
|
+
rotlSL,
|
|
1424
|
+
rotlBH,
|
|
1425
|
+
rotlBL,
|
|
1426
|
+
add,
|
|
1427
|
+
add3L,
|
|
1428
|
+
add3H,
|
|
1429
|
+
add4L,
|
|
1430
|
+
add4H,
|
|
1431
|
+
add5H,
|
|
1432
|
+
add5L
|
|
1433
|
+
};
|
|
1434
|
+
exports.default = u64;
|
|
1435
|
+
}
|
|
1436
|
+
});
|
|
1437
|
+
|
|
1438
|
+
// ../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/cryptoNode.js
|
|
1439
|
+
var require_cryptoNode = __commonJS({
|
|
1440
|
+
"../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/cryptoNode.js"(exports) {
|
|
1441
|
+
"use strict";
|
|
1442
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1443
|
+
exports.crypto = void 0;
|
|
1444
|
+
var nc = __require("crypto");
|
|
1445
|
+
exports.crypto = nc && typeof nc === "object" && "webcrypto" in nc ? nc.webcrypto : nc && typeof nc === "object" && "randomBytes" in nc ? nc : void 0;
|
|
1446
|
+
}
|
|
1447
|
+
});
|
|
1448
|
+
|
|
1449
|
+
// ../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/utils.js
|
|
1450
|
+
var require_utils2 = __commonJS({
|
|
1451
|
+
"../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/utils.js"(exports) {
|
|
1452
|
+
"use strict";
|
|
1453
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1454
|
+
exports.wrapXOFConstructorWithOpts = exports.wrapConstructorWithOpts = exports.wrapConstructor = exports.Hash = exports.nextTick = exports.swap32IfBE = exports.byteSwapIfBE = exports.swap8IfBE = exports.isLE = void 0;
|
|
1455
|
+
exports.isBytes = isBytes;
|
|
1456
|
+
exports.anumber = anumber;
|
|
1457
|
+
exports.abytes = abytes;
|
|
1458
|
+
exports.ahash = ahash;
|
|
1459
|
+
exports.aexists = aexists;
|
|
1460
|
+
exports.aoutput = aoutput;
|
|
1461
|
+
exports.u8 = u8;
|
|
1462
|
+
exports.u32 = u32;
|
|
1463
|
+
exports.clean = clean;
|
|
1464
|
+
exports.createView = createView;
|
|
1465
|
+
exports.rotr = rotr;
|
|
1466
|
+
exports.rotl = rotl;
|
|
1467
|
+
exports.byteSwap = byteSwap;
|
|
1468
|
+
exports.byteSwap32 = byteSwap32;
|
|
1469
|
+
exports.bytesToHex = bytesToHex;
|
|
1470
|
+
exports.hexToBytes = hexToBytes;
|
|
1471
|
+
exports.asyncLoop = asyncLoop;
|
|
1472
|
+
exports.utf8ToBytes = utf8ToBytes;
|
|
1473
|
+
exports.bytesToUtf8 = bytesToUtf8;
|
|
1474
|
+
exports.toBytes = toBytes;
|
|
1475
|
+
exports.kdfInputToBytes = kdfInputToBytes;
|
|
1476
|
+
exports.concatBytes = concatBytes;
|
|
1477
|
+
exports.checkOpts = checkOpts;
|
|
1478
|
+
exports.createHasher = createHasher;
|
|
1479
|
+
exports.createOptHasher = createOptHasher;
|
|
1480
|
+
exports.createXOFer = createXOFer;
|
|
1481
|
+
exports.randomBytes = randomBytes;
|
|
1482
|
+
var crypto_1 = require_cryptoNode();
|
|
1483
|
+
function isBytes(a) {
|
|
1484
|
+
return a instanceof Uint8Array || ArrayBuffer.isView(a) && a.constructor.name === "Uint8Array";
|
|
1485
|
+
}
|
|
1486
|
+
function anumber(n) {
|
|
1487
|
+
if (!Number.isSafeInteger(n) || n < 0)
|
|
1488
|
+
throw new Error("positive integer expected, got " + n);
|
|
1489
|
+
}
|
|
1490
|
+
function abytes(b, ...lengths) {
|
|
1491
|
+
if (!isBytes(b))
|
|
1492
|
+
throw new Error("Uint8Array expected");
|
|
1493
|
+
if (lengths.length > 0 && !lengths.includes(b.length))
|
|
1494
|
+
throw new Error("Uint8Array expected of length " + lengths + ", got length=" + b.length);
|
|
1495
|
+
}
|
|
1496
|
+
function ahash(h) {
|
|
1497
|
+
if (typeof h !== "function" || typeof h.create !== "function")
|
|
1498
|
+
throw new Error("Hash should be wrapped by utils.createHasher");
|
|
1499
|
+
anumber(h.outputLen);
|
|
1500
|
+
anumber(h.blockLen);
|
|
1501
|
+
}
|
|
1502
|
+
function aexists(instance, checkFinished = true) {
|
|
1503
|
+
if (instance.destroyed)
|
|
1504
|
+
throw new Error("Hash instance has been destroyed");
|
|
1505
|
+
if (checkFinished && instance.finished)
|
|
1506
|
+
throw new Error("Hash#digest() has already been called");
|
|
1507
|
+
}
|
|
1508
|
+
function aoutput(out, instance) {
|
|
1509
|
+
abytes(out);
|
|
1510
|
+
const min = instance.outputLen;
|
|
1511
|
+
if (out.length < min) {
|
|
1512
|
+
throw new Error("digestInto() expects output buffer of length at least " + min);
|
|
1513
|
+
}
|
|
1514
|
+
}
|
|
1515
|
+
function u8(arr) {
|
|
1516
|
+
return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);
|
|
1517
|
+
}
|
|
1518
|
+
function u32(arr) {
|
|
1519
|
+
return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));
|
|
1520
|
+
}
|
|
1521
|
+
function clean(...arrays) {
|
|
1522
|
+
for (let i = 0; i < arrays.length; i++) {
|
|
1523
|
+
arrays[i].fill(0);
|
|
1524
|
+
}
|
|
1525
|
+
}
|
|
1526
|
+
function createView(arr) {
|
|
1527
|
+
return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);
|
|
1528
|
+
}
|
|
1529
|
+
function rotr(word, shift) {
|
|
1530
|
+
return word << 32 - shift | word >>> shift;
|
|
1531
|
+
}
|
|
1532
|
+
function rotl(word, shift) {
|
|
1533
|
+
return word << shift | word >>> 32 - shift >>> 0;
|
|
1534
|
+
}
|
|
1535
|
+
exports.isLE = (() => new Uint8Array(new Uint32Array([287454020]).buffer)[0] === 68)();
|
|
1536
|
+
function byteSwap(word) {
|
|
1537
|
+
return word << 24 & 4278190080 | word << 8 & 16711680 | word >>> 8 & 65280 | word >>> 24 & 255;
|
|
1538
|
+
}
|
|
1539
|
+
exports.swap8IfBE = exports.isLE ? (n) => n : (n) => byteSwap(n);
|
|
1540
|
+
exports.byteSwapIfBE = exports.swap8IfBE;
|
|
1541
|
+
function byteSwap32(arr) {
|
|
1542
|
+
for (let i = 0; i < arr.length; i++) {
|
|
1543
|
+
arr[i] = byteSwap(arr[i]);
|
|
1544
|
+
}
|
|
1545
|
+
return arr;
|
|
1546
|
+
}
|
|
1547
|
+
exports.swap32IfBE = exports.isLE ? (u) => u : byteSwap32;
|
|
1548
|
+
var hasHexBuiltin = /* @__PURE__ */ (() => (
|
|
1549
|
+
// @ts-ignore
|
|
1550
|
+
typeof Uint8Array.from([]).toHex === "function" && typeof Uint8Array.fromHex === "function"
|
|
1551
|
+
))();
|
|
1552
|
+
var hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, "0"));
|
|
1553
|
+
function bytesToHex(bytes) {
|
|
1554
|
+
abytes(bytes);
|
|
1555
|
+
if (hasHexBuiltin)
|
|
1556
|
+
return bytes.toHex();
|
|
1557
|
+
let hex = "";
|
|
1558
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
1559
|
+
hex += hexes[bytes[i]];
|
|
1560
|
+
}
|
|
1561
|
+
return hex;
|
|
1562
|
+
}
|
|
1563
|
+
var asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 };
|
|
1564
|
+
function asciiToBase16(ch) {
|
|
1565
|
+
if (ch >= asciis._0 && ch <= asciis._9)
|
|
1566
|
+
return ch - asciis._0;
|
|
1567
|
+
if (ch >= asciis.A && ch <= asciis.F)
|
|
1568
|
+
return ch - (asciis.A - 10);
|
|
1569
|
+
if (ch >= asciis.a && ch <= asciis.f)
|
|
1570
|
+
return ch - (asciis.a - 10);
|
|
1571
|
+
return;
|
|
1572
|
+
}
|
|
1573
|
+
function hexToBytes(hex) {
|
|
1574
|
+
if (typeof hex !== "string")
|
|
1575
|
+
throw new Error("hex string expected, got " + typeof hex);
|
|
1576
|
+
if (hasHexBuiltin)
|
|
1577
|
+
return Uint8Array.fromHex(hex);
|
|
1578
|
+
const hl = hex.length;
|
|
1579
|
+
const al = hl / 2;
|
|
1580
|
+
if (hl % 2)
|
|
1581
|
+
throw new Error("hex string expected, got unpadded hex of length " + hl);
|
|
1582
|
+
const array = new Uint8Array(al);
|
|
1583
|
+
for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {
|
|
1584
|
+
const n1 = asciiToBase16(hex.charCodeAt(hi));
|
|
1585
|
+
const n2 = asciiToBase16(hex.charCodeAt(hi + 1));
|
|
1586
|
+
if (n1 === void 0 || n2 === void 0) {
|
|
1587
|
+
const char = hex[hi] + hex[hi + 1];
|
|
1588
|
+
throw new Error('hex string expected, got non-hex character "' + char + '" at index ' + hi);
|
|
1589
|
+
}
|
|
1590
|
+
array[ai] = n1 * 16 + n2;
|
|
1591
|
+
}
|
|
1592
|
+
return array;
|
|
1593
|
+
}
|
|
1594
|
+
var nextTick = async () => {
|
|
1595
|
+
};
|
|
1596
|
+
exports.nextTick = nextTick;
|
|
1597
|
+
async function asyncLoop(iters, tick, cb) {
|
|
1598
|
+
let ts = Date.now();
|
|
1599
|
+
for (let i = 0; i < iters; i++) {
|
|
1600
|
+
cb(i);
|
|
1601
|
+
const diff = Date.now() - ts;
|
|
1602
|
+
if (diff >= 0 && diff < tick)
|
|
1603
|
+
continue;
|
|
1604
|
+
await (0, exports.nextTick)();
|
|
1605
|
+
ts += diff;
|
|
1606
|
+
}
|
|
1607
|
+
}
|
|
1608
|
+
function utf8ToBytes(str) {
|
|
1609
|
+
if (typeof str !== "string")
|
|
1610
|
+
throw new Error("string expected");
|
|
1611
|
+
return new Uint8Array(new TextEncoder().encode(str));
|
|
1612
|
+
}
|
|
1613
|
+
function bytesToUtf8(bytes) {
|
|
1614
|
+
return new TextDecoder().decode(bytes);
|
|
1615
|
+
}
|
|
1616
|
+
function toBytes(data) {
|
|
1617
|
+
if (typeof data === "string")
|
|
1618
|
+
data = utf8ToBytes(data);
|
|
1619
|
+
abytes(data);
|
|
1620
|
+
return data;
|
|
1621
|
+
}
|
|
1622
|
+
function kdfInputToBytes(data) {
|
|
1623
|
+
if (typeof data === "string")
|
|
1624
|
+
data = utf8ToBytes(data);
|
|
1625
|
+
abytes(data);
|
|
1626
|
+
return data;
|
|
1627
|
+
}
|
|
1628
|
+
function concatBytes(...arrays) {
|
|
1629
|
+
let sum = 0;
|
|
1630
|
+
for (let i = 0; i < arrays.length; i++) {
|
|
1631
|
+
const a = arrays[i];
|
|
1632
|
+
abytes(a);
|
|
1633
|
+
sum += a.length;
|
|
1634
|
+
}
|
|
1635
|
+
const res = new Uint8Array(sum);
|
|
1636
|
+
for (let i = 0, pad = 0; i < arrays.length; i++) {
|
|
1637
|
+
const a = arrays[i];
|
|
1638
|
+
res.set(a, pad);
|
|
1639
|
+
pad += a.length;
|
|
1640
|
+
}
|
|
1641
|
+
return res;
|
|
1642
|
+
}
|
|
1643
|
+
function checkOpts(defaults, opts) {
|
|
1644
|
+
if (opts !== void 0 && {}.toString.call(opts) !== "[object Object]")
|
|
1645
|
+
throw new Error("options should be object or undefined");
|
|
1646
|
+
const merged = Object.assign(defaults, opts);
|
|
1647
|
+
return merged;
|
|
1648
|
+
}
|
|
1649
|
+
var Hash = class {
|
|
1650
|
+
};
|
|
1651
|
+
exports.Hash = Hash;
|
|
1652
|
+
function createHasher(hashCons) {
|
|
1653
|
+
const hashC = (msg) => hashCons().update(toBytes(msg)).digest();
|
|
1654
|
+
const tmp = hashCons();
|
|
1655
|
+
hashC.outputLen = tmp.outputLen;
|
|
1656
|
+
hashC.blockLen = tmp.blockLen;
|
|
1657
|
+
hashC.create = () => hashCons();
|
|
1658
|
+
return hashC;
|
|
1659
|
+
}
|
|
1660
|
+
function createOptHasher(hashCons) {
|
|
1661
|
+
const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();
|
|
1662
|
+
const tmp = hashCons({});
|
|
1663
|
+
hashC.outputLen = tmp.outputLen;
|
|
1664
|
+
hashC.blockLen = tmp.blockLen;
|
|
1665
|
+
hashC.create = (opts) => hashCons(opts);
|
|
1666
|
+
return hashC;
|
|
1667
|
+
}
|
|
1668
|
+
function createXOFer(hashCons) {
|
|
1669
|
+
const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();
|
|
1670
|
+
const tmp = hashCons({});
|
|
1671
|
+
hashC.outputLen = tmp.outputLen;
|
|
1672
|
+
hashC.blockLen = tmp.blockLen;
|
|
1673
|
+
hashC.create = (opts) => hashCons(opts);
|
|
1674
|
+
return hashC;
|
|
1675
|
+
}
|
|
1676
|
+
exports.wrapConstructor = createHasher;
|
|
1677
|
+
exports.wrapConstructorWithOpts = createOptHasher;
|
|
1678
|
+
exports.wrapXOFConstructorWithOpts = createXOFer;
|
|
1679
|
+
function randomBytes(bytesLength = 32) {
|
|
1680
|
+
if (crypto_1.crypto && typeof crypto_1.crypto.getRandomValues === "function") {
|
|
1681
|
+
return crypto_1.crypto.getRandomValues(new Uint8Array(bytesLength));
|
|
1682
|
+
}
|
|
1683
|
+
if (crypto_1.crypto && typeof crypto_1.crypto.randomBytes === "function") {
|
|
1684
|
+
return Uint8Array.from(crypto_1.crypto.randomBytes(bytesLength));
|
|
1685
|
+
}
|
|
1686
|
+
throw new Error("crypto.getRandomValues must be defined");
|
|
1687
|
+
}
|
|
1688
|
+
}
|
|
1689
|
+
});
|
|
1690
|
+
|
|
1691
|
+
// ../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/sha3.js
|
|
1692
|
+
var require_sha3 = __commonJS({
|
|
1693
|
+
"../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/sha3.js"(exports) {
|
|
1694
|
+
"use strict";
|
|
1695
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1696
|
+
exports.shake256 = exports.shake128 = exports.keccak_512 = exports.keccak_384 = exports.keccak_256 = exports.keccak_224 = exports.sha3_512 = exports.sha3_384 = exports.sha3_256 = exports.sha3_224 = exports.Keccak = void 0;
|
|
1697
|
+
exports.keccakP = keccakP;
|
|
1698
|
+
var _u64_ts_1 = require_u64();
|
|
1699
|
+
var utils_ts_1 = require_utils2();
|
|
1700
|
+
var _0n = BigInt(0);
|
|
1701
|
+
var _1n = BigInt(1);
|
|
1702
|
+
var _2n = BigInt(2);
|
|
1703
|
+
var _7n = BigInt(7);
|
|
1704
|
+
var _256n = BigInt(256);
|
|
1705
|
+
var _0x71n = BigInt(113);
|
|
1706
|
+
var SHA3_PI = [];
|
|
1707
|
+
var SHA3_ROTL = [];
|
|
1708
|
+
var _SHA3_IOTA = [];
|
|
1709
|
+
for (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {
|
|
1710
|
+
[x, y] = [y, (2 * x + 3 * y) % 5];
|
|
1711
|
+
SHA3_PI.push(2 * (5 * y + x));
|
|
1712
|
+
SHA3_ROTL.push((round + 1) * (round + 2) / 2 % 64);
|
|
1713
|
+
let t = _0n;
|
|
1714
|
+
for (let j = 0; j < 7; j++) {
|
|
1715
|
+
R = (R << _1n ^ (R >> _7n) * _0x71n) % _256n;
|
|
1716
|
+
if (R & _2n)
|
|
1717
|
+
t ^= _1n << (_1n << /* @__PURE__ */ BigInt(j)) - _1n;
|
|
1718
|
+
}
|
|
1719
|
+
_SHA3_IOTA.push(t);
|
|
1720
|
+
}
|
|
1721
|
+
var IOTAS = (0, _u64_ts_1.split)(_SHA3_IOTA, true);
|
|
1722
|
+
var SHA3_IOTA_H = IOTAS[0];
|
|
1723
|
+
var SHA3_IOTA_L = IOTAS[1];
|
|
1724
|
+
var rotlH = (h, l, s) => s > 32 ? (0, _u64_ts_1.rotlBH)(h, l, s) : (0, _u64_ts_1.rotlSH)(h, l, s);
|
|
1725
|
+
var rotlL = (h, l, s) => s > 32 ? (0, _u64_ts_1.rotlBL)(h, l, s) : (0, _u64_ts_1.rotlSL)(h, l, s);
|
|
1726
|
+
function keccakP(s, rounds = 24) {
|
|
1727
|
+
const B = new Uint32Array(5 * 2);
|
|
1728
|
+
for (let round = 24 - rounds; round < 24; round++) {
|
|
1729
|
+
for (let x = 0; x < 10; x++)
|
|
1730
|
+
B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];
|
|
1731
|
+
for (let x = 0; x < 10; x += 2) {
|
|
1732
|
+
const idx1 = (x + 8) % 10;
|
|
1733
|
+
const idx0 = (x + 2) % 10;
|
|
1734
|
+
const B0 = B[idx0];
|
|
1735
|
+
const B1 = B[idx0 + 1];
|
|
1736
|
+
const Th = rotlH(B0, B1, 1) ^ B[idx1];
|
|
1737
|
+
const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];
|
|
1738
|
+
for (let y = 0; y < 50; y += 10) {
|
|
1739
|
+
s[x + y] ^= Th;
|
|
1740
|
+
s[x + y + 1] ^= Tl;
|
|
1741
|
+
}
|
|
1742
|
+
}
|
|
1743
|
+
let curH = s[2];
|
|
1744
|
+
let curL = s[3];
|
|
1745
|
+
for (let t = 0; t < 24; t++) {
|
|
1746
|
+
const shift = SHA3_ROTL[t];
|
|
1747
|
+
const Th = rotlH(curH, curL, shift);
|
|
1748
|
+
const Tl = rotlL(curH, curL, shift);
|
|
1749
|
+
const PI = SHA3_PI[t];
|
|
1750
|
+
curH = s[PI];
|
|
1751
|
+
curL = s[PI + 1];
|
|
1752
|
+
s[PI] = Th;
|
|
1753
|
+
s[PI + 1] = Tl;
|
|
1754
|
+
}
|
|
1755
|
+
for (let y = 0; y < 50; y += 10) {
|
|
1756
|
+
for (let x = 0; x < 10; x++)
|
|
1757
|
+
B[x] = s[y + x];
|
|
1758
|
+
for (let x = 0; x < 10; x++)
|
|
1759
|
+
s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];
|
|
1760
|
+
}
|
|
1761
|
+
s[0] ^= SHA3_IOTA_H[round];
|
|
1762
|
+
s[1] ^= SHA3_IOTA_L[round];
|
|
1763
|
+
}
|
|
1764
|
+
(0, utils_ts_1.clean)(B);
|
|
1765
|
+
}
|
|
1766
|
+
var Keccak = class _Keccak extends utils_ts_1.Hash {
|
|
1767
|
+
// NOTE: we accept arguments in bytes instead of bits here.
|
|
1768
|
+
constructor(blockLen, suffix, outputLen, enableXOF = false, rounds = 24) {
|
|
1769
|
+
super();
|
|
1770
|
+
this.pos = 0;
|
|
1771
|
+
this.posOut = 0;
|
|
1772
|
+
this.finished = false;
|
|
1773
|
+
this.destroyed = false;
|
|
1774
|
+
this.enableXOF = false;
|
|
1775
|
+
this.blockLen = blockLen;
|
|
1776
|
+
this.suffix = suffix;
|
|
1777
|
+
this.outputLen = outputLen;
|
|
1778
|
+
this.enableXOF = enableXOF;
|
|
1779
|
+
this.rounds = rounds;
|
|
1780
|
+
(0, utils_ts_1.anumber)(outputLen);
|
|
1781
|
+
if (!(0 < blockLen && blockLen < 200))
|
|
1782
|
+
throw new Error("only keccak-f1600 function is supported");
|
|
1783
|
+
this.state = new Uint8Array(200);
|
|
1784
|
+
this.state32 = (0, utils_ts_1.u32)(this.state);
|
|
1785
|
+
}
|
|
1786
|
+
clone() {
|
|
1787
|
+
return this._cloneInto();
|
|
1788
|
+
}
|
|
1789
|
+
keccak() {
|
|
1790
|
+
(0, utils_ts_1.swap32IfBE)(this.state32);
|
|
1791
|
+
keccakP(this.state32, this.rounds);
|
|
1792
|
+
(0, utils_ts_1.swap32IfBE)(this.state32);
|
|
1793
|
+
this.posOut = 0;
|
|
1794
|
+
this.pos = 0;
|
|
1795
|
+
}
|
|
1796
|
+
update(data) {
|
|
1797
|
+
(0, utils_ts_1.aexists)(this);
|
|
1798
|
+
data = (0, utils_ts_1.toBytes)(data);
|
|
1799
|
+
(0, utils_ts_1.abytes)(data);
|
|
1800
|
+
const { blockLen, state } = this;
|
|
1801
|
+
const len = data.length;
|
|
1802
|
+
for (let pos = 0; pos < len; ) {
|
|
1803
|
+
const take = Math.min(blockLen - this.pos, len - pos);
|
|
1804
|
+
for (let i = 0; i < take; i++)
|
|
1805
|
+
state[this.pos++] ^= data[pos++];
|
|
1806
|
+
if (this.pos === blockLen)
|
|
1807
|
+
this.keccak();
|
|
1808
|
+
}
|
|
1809
|
+
return this;
|
|
1810
|
+
}
|
|
1811
|
+
finish() {
|
|
1812
|
+
if (this.finished)
|
|
1813
|
+
return;
|
|
1814
|
+
this.finished = true;
|
|
1815
|
+
const { state, suffix, pos, blockLen } = this;
|
|
1816
|
+
state[pos] ^= suffix;
|
|
1817
|
+
if ((suffix & 128) !== 0 && pos === blockLen - 1)
|
|
1818
|
+
this.keccak();
|
|
1819
|
+
state[blockLen - 1] ^= 128;
|
|
1820
|
+
this.keccak();
|
|
1821
|
+
}
|
|
1822
|
+
writeInto(out) {
|
|
1823
|
+
(0, utils_ts_1.aexists)(this, false);
|
|
1824
|
+
(0, utils_ts_1.abytes)(out);
|
|
1825
|
+
this.finish();
|
|
1826
|
+
const bufferOut = this.state;
|
|
1827
|
+
const { blockLen } = this;
|
|
1828
|
+
for (let pos = 0, len = out.length; pos < len; ) {
|
|
1829
|
+
if (this.posOut >= blockLen)
|
|
1830
|
+
this.keccak();
|
|
1831
|
+
const take = Math.min(blockLen - this.posOut, len - pos);
|
|
1832
|
+
out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);
|
|
1833
|
+
this.posOut += take;
|
|
1834
|
+
pos += take;
|
|
1835
|
+
}
|
|
1836
|
+
return out;
|
|
1837
|
+
}
|
|
1838
|
+
xofInto(out) {
|
|
1839
|
+
if (!this.enableXOF)
|
|
1840
|
+
throw new Error("XOF is not possible for this instance");
|
|
1841
|
+
return this.writeInto(out);
|
|
1842
|
+
}
|
|
1843
|
+
xof(bytes) {
|
|
1844
|
+
(0, utils_ts_1.anumber)(bytes);
|
|
1845
|
+
return this.xofInto(new Uint8Array(bytes));
|
|
1846
|
+
}
|
|
1847
|
+
digestInto(out) {
|
|
1848
|
+
(0, utils_ts_1.aoutput)(out, this);
|
|
1849
|
+
if (this.finished)
|
|
1850
|
+
throw new Error("digest() was already called");
|
|
1851
|
+
this.writeInto(out);
|
|
1852
|
+
this.destroy();
|
|
1853
|
+
return out;
|
|
1854
|
+
}
|
|
1855
|
+
digest() {
|
|
1856
|
+
return this.digestInto(new Uint8Array(this.outputLen));
|
|
1857
|
+
}
|
|
1858
|
+
destroy() {
|
|
1859
|
+
this.destroyed = true;
|
|
1860
|
+
(0, utils_ts_1.clean)(this.state);
|
|
1861
|
+
}
|
|
1862
|
+
_cloneInto(to) {
|
|
1863
|
+
const { blockLen, suffix, outputLen, rounds, enableXOF } = this;
|
|
1864
|
+
to || (to = new _Keccak(blockLen, suffix, outputLen, enableXOF, rounds));
|
|
1865
|
+
to.state32.set(this.state32);
|
|
1866
|
+
to.pos = this.pos;
|
|
1867
|
+
to.posOut = this.posOut;
|
|
1868
|
+
to.finished = this.finished;
|
|
1869
|
+
to.rounds = rounds;
|
|
1870
|
+
to.suffix = suffix;
|
|
1871
|
+
to.outputLen = outputLen;
|
|
1872
|
+
to.enableXOF = enableXOF;
|
|
1873
|
+
to.destroyed = this.destroyed;
|
|
1874
|
+
return to;
|
|
1875
|
+
}
|
|
1876
|
+
};
|
|
1877
|
+
exports.Keccak = Keccak;
|
|
1878
|
+
var gen = (suffix, blockLen, outputLen) => (0, utils_ts_1.createHasher)(() => new Keccak(blockLen, suffix, outputLen));
|
|
1879
|
+
exports.sha3_224 = (() => gen(6, 144, 224 / 8))();
|
|
1880
|
+
exports.sha3_256 = (() => gen(6, 136, 256 / 8))();
|
|
1881
|
+
exports.sha3_384 = (() => gen(6, 104, 384 / 8))();
|
|
1882
|
+
exports.sha3_512 = (() => gen(6, 72, 512 / 8))();
|
|
1883
|
+
exports.keccak_224 = (() => gen(1, 144, 224 / 8))();
|
|
1884
|
+
exports.keccak_256 = (() => gen(1, 136, 256 / 8))();
|
|
1885
|
+
exports.keccak_384 = (() => gen(1, 104, 384 / 8))();
|
|
1886
|
+
exports.keccak_512 = (() => gen(1, 72, 512 / 8))();
|
|
1887
|
+
var genShake = (suffix, blockLen, outputLen) => (0, utils_ts_1.createXOFer)((opts = {}) => new Keccak(blockLen, suffix, opts.dkLen === void 0 ? outputLen : opts.dkLen, true));
|
|
1888
|
+
exports.shake128 = (() => genShake(31, 168, 128 / 8))();
|
|
1889
|
+
exports.shake256 = (() => genShake(31, 136, 256 / 8))();
|
|
1890
|
+
}
|
|
1891
|
+
});
|
|
1892
|
+
|
|
1893
|
+
// ../contracts/svm/escrow-encoding/typescript/dist/encoding-utils.js
|
|
1894
|
+
var require_encoding_utils = __commonJS({
|
|
1895
|
+
"../contracts/svm/escrow-encoding/typescript/dist/encoding-utils.js"(exports) {
|
|
1896
|
+
"use strict";
|
|
1897
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1898
|
+
exports.encodeU64LE = encodeU64LE;
|
|
1899
|
+
exports.keccak256 = keccak256;
|
|
1900
|
+
exports.stringToBytes = stringToBytes;
|
|
1901
|
+
exports.isZeroBytes32 = isZeroBytes32;
|
|
1902
|
+
var sha3_1 = require_sha3();
|
|
1903
|
+
function encodeU64LE(value) {
|
|
1904
|
+
const buffer = new Uint8Array(8);
|
|
1905
|
+
let v = value;
|
|
1906
|
+
for (let i = 0; i < 8; i++) {
|
|
1907
|
+
buffer[i] = Number(v & 0xffn);
|
|
1908
|
+
v = v >> 8n;
|
|
1909
|
+
}
|
|
1910
|
+
return buffer;
|
|
1911
|
+
}
|
|
1912
|
+
function keccak256(...data) {
|
|
1913
|
+
const totalLength = data.reduce((sum, arr) => sum + arr.length, 0);
|
|
1914
|
+
const combined = new Uint8Array(totalLength);
|
|
1915
|
+
let offset = 0;
|
|
1916
|
+
for (const arr of data) {
|
|
1917
|
+
combined.set(arr, offset);
|
|
1918
|
+
offset += arr.length;
|
|
1919
|
+
}
|
|
1920
|
+
return (0, sha3_1.keccak_256)(combined);
|
|
1921
|
+
}
|
|
1922
|
+
function stringToBytes(s) {
|
|
1923
|
+
return new TextEncoder().encode(s);
|
|
1924
|
+
}
|
|
1925
|
+
function isZeroBytes32(data) {
|
|
1926
|
+
if (data.length !== 32)
|
|
1927
|
+
return false;
|
|
1928
|
+
return data.every((b) => b === 0);
|
|
1929
|
+
}
|
|
1930
|
+
}
|
|
1931
|
+
});
|
|
1932
|
+
|
|
1933
|
+
// ../contracts/svm/escrow-encoding/typescript/dist/escrow-domain.js
|
|
1934
|
+
var require_escrow_domain = __commonJS({
|
|
1935
|
+
"../contracts/svm/escrow-encoding/typescript/dist/escrow-domain.js"(exports) {
|
|
1936
|
+
"use strict";
|
|
1937
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1938
|
+
exports.escrowDomainPrefixBytes = escrowDomainPrefixBytes;
|
|
1939
|
+
function escrowDomainPrefixBytes(domain) {
|
|
1940
|
+
if (domain.clusterId.length !== 32) {
|
|
1941
|
+
throw new Error(`EscrowDomain.clusterId must be 32 bytes, got ${domain.clusterId.length}`);
|
|
1942
|
+
}
|
|
1943
|
+
if (!Number.isInteger(domain.signatureDomainVersion) || domain.signatureDomainVersion < 1 || domain.signatureDomainVersion > 255) {
|
|
1944
|
+
throw new Error(`EscrowDomain.signatureDomainVersion must be an integer in 1..=255, got ${domain.signatureDomainVersion}`);
|
|
1945
|
+
}
|
|
1946
|
+
return [
|
|
1947
|
+
new TextEncoder().encode("escrow"),
|
|
1948
|
+
new Uint8Array([domain.signatureDomainVersion]),
|
|
1949
|
+
domain.clusterId,
|
|
1950
|
+
domain.programId.toBytes()
|
|
1951
|
+
];
|
|
1952
|
+
}
|
|
1953
|
+
}
|
|
1954
|
+
});
|
|
1955
|
+
|
|
1956
|
+
// ../contracts/svm/escrow-encoding/typescript/dist/deposit-encoder.js
|
|
1957
|
+
var require_deposit_encoder3 = __commonJS({
|
|
1958
|
+
"../contracts/svm/escrow-encoding/typescript/dist/deposit-encoder.js"(exports) {
|
|
1959
|
+
"use strict";
|
|
1960
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1961
|
+
exports.computeDepositHash = computeDepositHash;
|
|
1962
|
+
var encoding_utils_1 = require_encoding_utils();
|
|
1963
|
+
var escrow_domain_1 = require_escrow_domain();
|
|
1964
|
+
var errors_1 = require_errors2();
|
|
1965
|
+
function computeDepositHash(params, domain) {
|
|
1966
|
+
if (params.paymentId.length !== 32 || (0, encoding_utils_1.isZeroBytes32)(params.paymentId)) {
|
|
1967
|
+
throw new errors_1.ZeroPaymentIdError();
|
|
1968
|
+
}
|
|
1969
|
+
if (params.depositor.isZero())
|
|
1970
|
+
throw new errors_1.ZeroDepositorError();
|
|
1971
|
+
if (params.mint.isZero())
|
|
1972
|
+
throw new errors_1.ZeroMintError();
|
|
1973
|
+
if (params.amount === 0n)
|
|
1974
|
+
throw new errors_1.ZeroAmountError();
|
|
1975
|
+
if (params.reserver.isZero())
|
|
1976
|
+
throw new errors_1.ZeroReserverError();
|
|
1977
|
+
if (params.releaser.isZero())
|
|
1978
|
+
throw new errors_1.ZeroReleaserError();
|
|
1979
|
+
return (0, encoding_utils_1.keccak256)(...(0, escrow_domain_1.escrowDomainPrefixBytes)(domain), (0, encoding_utils_1.stringToBytes)("deposit"), params.paymentId, params.depositor.toBytes(), params.mint.toBytes(), (0, encoding_utils_1.encodeU64LE)(params.amount), params.reserver.toBytes(), params.releaser.toBytes(), (0, encoding_utils_1.encodeU64LE)(params.nonce), (0, encoding_utils_1.encodeU64LE)(params.issuedAt), (0, encoding_utils_1.encodeU64LE)(params.deadline));
|
|
1980
|
+
}
|
|
1981
|
+
}
|
|
1982
|
+
});
|
|
1983
|
+
|
|
1984
|
+
// ../contracts/svm/escrow-encoding/typescript/dist/reserve-encoder.js
|
|
1985
|
+
var require_reserve_encoder3 = __commonJS({
|
|
1986
|
+
"../contracts/svm/escrow-encoding/typescript/dist/reserve-encoder.js"(exports) {
|
|
1987
|
+
"use strict";
|
|
1988
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1989
|
+
exports.computeReserveHash = computeReserveHash;
|
|
1990
|
+
var encoding_utils_1 = require_encoding_utils();
|
|
1991
|
+
var escrow_domain_1 = require_escrow_domain();
|
|
1992
|
+
var errors_1 = require_errors2();
|
|
1993
|
+
function computeReserveHash(params, domain) {
|
|
1994
|
+
if (params.depositHash.length !== 32 || (0, encoding_utils_1.isZeroBytes32)(params.depositHash)) {
|
|
1995
|
+
throw new errors_1.ZeroDepositHashError();
|
|
1996
|
+
}
|
|
1997
|
+
if (params.recipient.isZero())
|
|
1998
|
+
throw new errors_1.ZeroRecipientError();
|
|
1999
|
+
return (0, encoding_utils_1.keccak256)(...(0, escrow_domain_1.escrowDomainPrefixBytes)(domain), (0, encoding_utils_1.stringToBytes)("reserve"), params.recipient.toBytes(), params.depositHash);
|
|
2000
|
+
}
|
|
2001
|
+
}
|
|
2002
|
+
});
|
|
2003
|
+
|
|
2004
|
+
// ../contracts/svm/escrow-encoding/typescript/dist/release-encoder.js
|
|
2005
|
+
var require_release_encoder = __commonJS({
|
|
2006
|
+
"../contracts/svm/escrow-encoding/typescript/dist/release-encoder.js"(exports) {
|
|
2007
|
+
"use strict";
|
|
2008
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2009
|
+
exports.computeReleaseHash = computeReleaseHash;
|
|
2010
|
+
var encoding_utils_1 = require_encoding_utils();
|
|
2011
|
+
var escrow_domain_1 = require_escrow_domain();
|
|
2012
|
+
var errors_1 = require_errors2();
|
|
2013
|
+
function computeReleaseHash(params, domain) {
|
|
2014
|
+
if (params.depositHash.length !== 32 || (0, encoding_utils_1.isZeroBytes32)(params.depositHash)) {
|
|
2015
|
+
throw new errors_1.ZeroDepositHashError();
|
|
2016
|
+
}
|
|
2017
|
+
return (0, encoding_utils_1.keccak256)(...(0, escrow_domain_1.escrowDomainPrefixBytes)(domain), (0, encoding_utils_1.stringToBytes)("release"), params.depositHash);
|
|
2018
|
+
}
|
|
2019
|
+
}
|
|
2020
|
+
});
|
|
2021
|
+
|
|
2022
|
+
// ../contracts/svm/escrow-encoding/typescript/dist/refund-encoder.js
|
|
2023
|
+
var require_refund_encoder = __commonJS({
|
|
2024
|
+
"../contracts/svm/escrow-encoding/typescript/dist/refund-encoder.js"(exports) {
|
|
2025
|
+
"use strict";
|
|
2026
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2027
|
+
exports.computeRefundHash = computeRefundHash;
|
|
2028
|
+
var encoding_utils_1 = require_encoding_utils();
|
|
2029
|
+
var escrow_domain_1 = require_escrow_domain();
|
|
2030
|
+
var errors_1 = require_errors2();
|
|
2031
|
+
function computeRefundHash(params, domain) {
|
|
2032
|
+
if (params.depositHash.length !== 32 || (0, encoding_utils_1.isZeroBytes32)(params.depositHash)) {
|
|
2033
|
+
throw new errors_1.ZeroDepositHashError();
|
|
2034
|
+
}
|
|
2035
|
+
return (0, encoding_utils_1.keccak256)(...(0, escrow_domain_1.escrowDomainPrefixBytes)(domain), (0, encoding_utils_1.stringToBytes)("refund"), params.depositHash);
|
|
2036
|
+
}
|
|
2037
|
+
}
|
|
2038
|
+
});
|
|
2039
|
+
|
|
2040
|
+
// ../contracts/svm/escrow-encoding/typescript/dist/nonce-generator.js
|
|
2041
|
+
var require_nonce_generator2 = __commonJS({
|
|
2042
|
+
"../contracts/svm/escrow-encoding/typescript/dist/nonce-generator.js"(exports) {
|
|
2043
|
+
"use strict";
|
|
2044
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2045
|
+
exports.MAX_VALID_SLOT = exports.REPLAY_SLOTS = void 0;
|
|
2046
|
+
exports.generateNonce = generateNonce;
|
|
2047
|
+
var crypto_1 = __require("crypto");
|
|
2048
|
+
exports.REPLAY_SLOTS = 235;
|
|
2049
|
+
exports.MAX_VALID_SLOT = exports.REPLAY_SLOTS - 1;
|
|
2050
|
+
var NONCE_BUCKET_MASK = 131071;
|
|
2051
|
+
var NONCE_BUCKET_SHIFT = 32n;
|
|
2052
|
+
function generateNonce() {
|
|
2053
|
+
const bucketBytes = (0, crypto_1.randomBytes)(4);
|
|
2054
|
+
const bucketID = bucketBytes.readUInt32LE(0) & NONCE_BUCKET_MASK;
|
|
2055
|
+
let slot;
|
|
2056
|
+
do {
|
|
2057
|
+
slot = (0, crypto_1.randomBytes)(1)[0];
|
|
2058
|
+
} while (slot >= exports.REPLAY_SLOTS);
|
|
2059
|
+
return BigInt(bucketID) << NONCE_BUCKET_SHIFT | BigInt(slot);
|
|
2060
|
+
}
|
|
2061
|
+
}
|
|
2062
|
+
});
|
|
2063
|
+
|
|
2064
|
+
// ../contracts/svm/escrow-encoding/typescript/dist/index.js
|
|
2065
|
+
var require_dist3 = __commonJS({
|
|
2066
|
+
"../contracts/svm/escrow-encoding/typescript/dist/index.js"(exports) {
|
|
2067
|
+
"use strict";
|
|
2068
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2069
|
+
exports.MAX_VALID_SLOT = exports.REPLAY_SLOTS = exports.generateNonce = exports.computeRefundHash = exports.computeReleaseHash = exports.computeReserveHash = exports.computeDepositHash = exports.InvalidHexError = exports.InvalidBase58Error = exports.InvalidPubkeyLengthError = exports.ZeroDepositHashError = exports.ZeroRecipientError = exports.ZeroReleaserError = exports.ZeroReserverError = exports.ZeroAmountError = exports.ZeroMintError = exports.ZeroDepositorError = exports.ZeroPaymentIdError = exports.EncodingError = exports.escrowDomainPrefixBytes = exports.isZeroBytes32 = exports.stringToBytes = exports.keccak256 = exports.encodeU64LE = exports.Pubkey = void 0;
|
|
2070
|
+
var pubkey_1 = require_pubkey();
|
|
2071
|
+
Object.defineProperty(exports, "Pubkey", { enumerable: true, get: function() {
|
|
2072
|
+
return pubkey_1.Pubkey;
|
|
2073
|
+
} });
|
|
2074
|
+
var encoding_utils_1 = require_encoding_utils();
|
|
2075
|
+
Object.defineProperty(exports, "encodeU64LE", { enumerable: true, get: function() {
|
|
2076
|
+
return encoding_utils_1.encodeU64LE;
|
|
2077
|
+
} });
|
|
2078
|
+
Object.defineProperty(exports, "keccak256", { enumerable: true, get: function() {
|
|
2079
|
+
return encoding_utils_1.keccak256;
|
|
2080
|
+
} });
|
|
2081
|
+
Object.defineProperty(exports, "stringToBytes", { enumerable: true, get: function() {
|
|
2082
|
+
return encoding_utils_1.stringToBytes;
|
|
2083
|
+
} });
|
|
2084
|
+
Object.defineProperty(exports, "isZeroBytes32", { enumerable: true, get: function() {
|
|
2085
|
+
return encoding_utils_1.isZeroBytes32;
|
|
2086
|
+
} });
|
|
2087
|
+
var escrow_domain_1 = require_escrow_domain();
|
|
2088
|
+
Object.defineProperty(exports, "escrowDomainPrefixBytes", { enumerable: true, get: function() {
|
|
2089
|
+
return escrow_domain_1.escrowDomainPrefixBytes;
|
|
2090
|
+
} });
|
|
2091
|
+
var errors_1 = require_errors2();
|
|
2092
|
+
Object.defineProperty(exports, "EncodingError", { enumerable: true, get: function() {
|
|
2093
|
+
return errors_1.EncodingError;
|
|
2094
|
+
} });
|
|
2095
|
+
Object.defineProperty(exports, "ZeroPaymentIdError", { enumerable: true, get: function() {
|
|
2096
|
+
return errors_1.ZeroPaymentIdError;
|
|
2097
|
+
} });
|
|
2098
|
+
Object.defineProperty(exports, "ZeroDepositorError", { enumerable: true, get: function() {
|
|
2099
|
+
return errors_1.ZeroDepositorError;
|
|
2100
|
+
} });
|
|
2101
|
+
Object.defineProperty(exports, "ZeroMintError", { enumerable: true, get: function() {
|
|
2102
|
+
return errors_1.ZeroMintError;
|
|
2103
|
+
} });
|
|
2104
|
+
Object.defineProperty(exports, "ZeroAmountError", { enumerable: true, get: function() {
|
|
2105
|
+
return errors_1.ZeroAmountError;
|
|
2106
|
+
} });
|
|
2107
|
+
Object.defineProperty(exports, "ZeroReserverError", { enumerable: true, get: function() {
|
|
2108
|
+
return errors_1.ZeroReserverError;
|
|
2109
|
+
} });
|
|
2110
|
+
Object.defineProperty(exports, "ZeroReleaserError", { enumerable: true, get: function() {
|
|
2111
|
+
return errors_1.ZeroReleaserError;
|
|
2112
|
+
} });
|
|
2113
|
+
Object.defineProperty(exports, "ZeroRecipientError", { enumerable: true, get: function() {
|
|
2114
|
+
return errors_1.ZeroRecipientError;
|
|
2115
|
+
} });
|
|
2116
|
+
Object.defineProperty(exports, "ZeroDepositHashError", { enumerable: true, get: function() {
|
|
2117
|
+
return errors_1.ZeroDepositHashError;
|
|
2118
|
+
} });
|
|
2119
|
+
Object.defineProperty(exports, "InvalidPubkeyLengthError", { enumerable: true, get: function() {
|
|
2120
|
+
return errors_1.InvalidPubkeyLengthError;
|
|
2121
|
+
} });
|
|
2122
|
+
Object.defineProperty(exports, "InvalidBase58Error", { enumerable: true, get: function() {
|
|
2123
|
+
return errors_1.InvalidBase58Error;
|
|
2124
|
+
} });
|
|
2125
|
+
Object.defineProperty(exports, "InvalidHexError", { enumerable: true, get: function() {
|
|
2126
|
+
return errors_1.InvalidHexError;
|
|
2127
|
+
} });
|
|
2128
|
+
var deposit_encoder_1 = require_deposit_encoder3();
|
|
2129
|
+
Object.defineProperty(exports, "computeDepositHash", { enumerable: true, get: function() {
|
|
2130
|
+
return deposit_encoder_1.computeDepositHash;
|
|
2131
|
+
} });
|
|
2132
|
+
var reserve_encoder_1 = require_reserve_encoder3();
|
|
2133
|
+
Object.defineProperty(exports, "computeReserveHash", { enumerable: true, get: function() {
|
|
2134
|
+
return reserve_encoder_1.computeReserveHash;
|
|
2135
|
+
} });
|
|
2136
|
+
var release_encoder_1 = require_release_encoder();
|
|
2137
|
+
Object.defineProperty(exports, "computeReleaseHash", { enumerable: true, get: function() {
|
|
2138
|
+
return release_encoder_1.computeReleaseHash;
|
|
2139
|
+
} });
|
|
2140
|
+
var refund_encoder_1 = require_refund_encoder();
|
|
2141
|
+
Object.defineProperty(exports, "computeRefundHash", { enumerable: true, get: function() {
|
|
2142
|
+
return refund_encoder_1.computeRefundHash;
|
|
2143
|
+
} });
|
|
2144
|
+
var nonce_generator_1 = require_nonce_generator2();
|
|
2145
|
+
Object.defineProperty(exports, "generateNonce", { enumerable: true, get: function() {
|
|
2146
|
+
return nonce_generator_1.generateNonce;
|
|
2147
|
+
} });
|
|
2148
|
+
Object.defineProperty(exports, "REPLAY_SLOTS", { enumerable: true, get: function() {
|
|
2149
|
+
return nonce_generator_1.REPLAY_SLOTS;
|
|
2150
|
+
} });
|
|
2151
|
+
Object.defineProperty(exports, "MAX_VALID_SLOT", { enumerable: true, get: function() {
|
|
2152
|
+
return nonce_generator_1.MAX_VALID_SLOT;
|
|
2153
|
+
} });
|
|
2154
|
+
}
|
|
2155
|
+
});
|
|
2156
|
+
|
|
2157
|
+
// ../schemas/declarations/PaymentRequest/v1/bindings/typescript/sender-auth/dist/adapters/solana.js
|
|
2158
|
+
var require_solana = __commonJS({
|
|
2159
|
+
"../schemas/declarations/PaymentRequest/v1/bindings/typescript/sender-auth/dist/adapters/solana.js"(exports) {
|
|
2160
|
+
"use strict";
|
|
2161
|
+
var __importDefault = exports && exports.__importDefault || function(mod) {
|
|
2162
|
+
return mod && mod.__esModule ? mod : { "default": mod };
|
|
2163
|
+
};
|
|
2164
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2165
|
+
exports.solanaAdapter = void 0;
|
|
2166
|
+
var ethers_1 = __require("ethers");
|
|
2167
|
+
var tweetnacl_1 = __importDefault(__require("tweetnacl"));
|
|
2168
|
+
var bs58_1 = __importDefault(__require("bs58"));
|
|
2169
|
+
var solana_escrow_encoding_1 = require_dist3();
|
|
2170
|
+
var utils_js_1 = require_utils();
|
|
2171
|
+
var errors_js_1 = require_errors();
|
|
2172
|
+
var chain_id_js_1 = require_chain_id();
|
|
2173
|
+
var idAddr = (a) => a;
|
|
2174
|
+
function generateSolanaPaymentIdV3(requestId) {
|
|
2175
|
+
return (0, ethers_1.keccak256)((0, ethers_1.toUtf8Bytes)(requestId));
|
|
2176
|
+
}
|
|
2177
|
+
function hashDeposit(prehash, domain) {
|
|
2178
|
+
return (0, ethers_1.hexlify)((0, solana_escrow_encoding_1.computeDepositHash)({
|
|
2179
|
+
paymentId: (0, ethers_1.getBytes)(prehash.payment_id),
|
|
2180
|
+
depositor: solana_escrow_encoding_1.Pubkey.fromBase58(prehash.depositor),
|
|
2181
|
+
mint: solana_escrow_encoding_1.Pubkey.fromBase58(prehash.mint),
|
|
2182
|
+
amount: BigInt(prehash.amount),
|
|
2183
|
+
reserver: solana_escrow_encoding_1.Pubkey.fromBase58(prehash.reserver),
|
|
2184
|
+
releaser: solana_escrow_encoding_1.Pubkey.fromBase58(prehash.releaser),
|
|
2185
|
+
nonce: BigInt(prehash.nonce),
|
|
2186
|
+
issuedAt: BigInt(prehash.issued_at),
|
|
2187
|
+
deadline: BigInt(prehash.deadline)
|
|
2188
|
+
}, domain));
|
|
2189
|
+
}
|
|
2190
|
+
function domainFrom(defaults) {
|
|
2191
|
+
if (!defaults.escrowContract) {
|
|
2192
|
+
throw new Error("sender_auth: Solana source requires escrowContract (escrow program id) for the deposit-hash domain");
|
|
2193
|
+
}
|
|
2194
|
+
if (!defaults.svmSignatureClusterId || defaults.svmSignatureDomainVersion == null) {
|
|
2195
|
+
throw new Error("sender_auth: Solana source requires svmSignatureClusterId and svmSignatureDomainVersion (V3 escrow domain separation)");
|
|
2196
|
+
}
|
|
2197
|
+
return {
|
|
2198
|
+
clusterId: (0, chain_id_js_1.clusterIdFromName)(defaults.svmSignatureClusterId),
|
|
2199
|
+
signatureDomainVersion: defaults.svmSignatureDomainVersion,
|
|
2200
|
+
programId: solana_escrow_encoding_1.Pubkey.fromBase58(defaults.escrowContract)
|
|
2201
|
+
};
|
|
2202
|
+
}
|
|
2203
|
+
exports.solanaAdapter = {
|
|
2204
|
+
async buildAuthMessage({ sourceAsset, depositor, maxSourceAmount, requestId, sourceDefaults, nonce, solanaClockReader }) {
|
|
2205
|
+
if (!requestId) {
|
|
2206
|
+
throw new Error("sender_auth: request_id is required");
|
|
2207
|
+
}
|
|
2208
|
+
const sourceChainId = sourceAsset.split("/")[0];
|
|
2209
|
+
const tokenMint = sourceAsset.split("/")[1].split(":")[1];
|
|
2210
|
+
const depositNonce = nonce !== void 0 ? BigInt(nonce) : (0, solana_escrow_encoding_1.generateNonce)();
|
|
2211
|
+
if (nonce !== void 0) {
|
|
2212
|
+
if (depositNonce < 0n || depositNonce >= 1n << 64n) {
|
|
2213
|
+
throw new Error("sender_auth: Solana nonce must fit an unsigned 64-bit integer (0 <= nonce < 2^64)");
|
|
2214
|
+
}
|
|
2215
|
+
if ((depositNonce & 0xffn) >= utils_js_1.SOLANA_REPLAY_SLOTS) {
|
|
2216
|
+
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`);
|
|
2217
|
+
}
|
|
2218
|
+
}
|
|
2219
|
+
const issuedAt = solanaClockReader ? await solanaClockReader(sourceChainId) : BigInt(Math.floor(Date.now() / 1e3));
|
|
2220
|
+
const deadline = issuedAt + BigInt(utils_js_1.REPLAY_HORIZON_SECS - 8);
|
|
2221
|
+
const paymentId = generateSolanaPaymentIdV3(requestId);
|
|
2222
|
+
const prehash = {
|
|
2223
|
+
payment_id: paymentId,
|
|
2224
|
+
depositor,
|
|
2225
|
+
mint: tokenMint,
|
|
2226
|
+
amount: BigInt(maxSourceAmount).toString(),
|
|
2227
|
+
reserver: sourceDefaults.quoteSelector,
|
|
2228
|
+
releaser: sourceDefaults.fulfillmentVerifierAccount,
|
|
2229
|
+
nonce: depositNonce.toString(),
|
|
2230
|
+
issued_at: issuedAt.toString(),
|
|
2231
|
+
deadline: deadline.toString()
|
|
2232
|
+
};
|
|
2233
|
+
const depositHash = hashDeposit(prehash, domainFrom(sourceDefaults));
|
|
2234
|
+
return { messageScheme: "SOLANA", messageHash: depositHash, messagePrehash: JSON.stringify(prehash) };
|
|
2235
|
+
},
|
|
2236
|
+
async sign(signedMessage, privateKey) {
|
|
2237
|
+
const messageBytes = (0, ethers_1.getBytes)(signedMessage.message);
|
|
2238
|
+
const secretKey = secretKeyFromPrivate(privateKey);
|
|
2239
|
+
const sig = tweetnacl_1.default.sign.detached(messageBytes, secretKey);
|
|
2240
|
+
return "0x" + Buffer.from(sig).toString("hex");
|
|
2241
|
+
},
|
|
2242
|
+
deriveDelegateSigner(privateKey) {
|
|
2243
|
+
return bs58_1.default.encode(tweetnacl_1.default.sign.keyPair.fromSecretKey(secretKeyFromPrivate(privateKey)).publicKey);
|
|
2244
|
+
},
|
|
2245
|
+
recoverSigner(signed, source) {
|
|
2246
|
+
const provided = signed.payload?.delegate_signer;
|
|
2247
|
+
if (provided !== void 0 && provided !== source.account) {
|
|
2248
|
+
throw new errors_js_1.SignerMismatchError(`sender_auth: delegate_signer ${provided} != source.account`);
|
|
2249
|
+
}
|
|
2250
|
+
const signer = provided ?? source.account;
|
|
2251
|
+
let pub;
|
|
2252
|
+
let msg;
|
|
2253
|
+
let sig;
|
|
2254
|
+
try {
|
|
2255
|
+
pub = bs58_1.default.decode(signer);
|
|
2256
|
+
msg = (0, ethers_1.getBytes)(signed.message);
|
|
2257
|
+
sig = (0, ethers_1.getBytes)(signed.signature);
|
|
2258
|
+
} catch {
|
|
2259
|
+
throw new errors_js_1.RecoveryFailedError("sender_auth: malformed Solana pubkey/message/signature encoding");
|
|
2260
|
+
}
|
|
2261
|
+
if (pub.length !== 32 || msg.length !== 32 || sig.length !== 64) {
|
|
2262
|
+
throw new errors_js_1.RecoveryFailedError("sender_auth: Solana pubkey must be 32 bytes, message 32, signature 64");
|
|
2263
|
+
}
|
|
2264
|
+
let ok = false;
|
|
2265
|
+
try {
|
|
2266
|
+
ok = tweetnacl_1.default.sign.detached.verify(msg, sig, pub);
|
|
2267
|
+
} catch {
|
|
2268
|
+
ok = false;
|
|
2269
|
+
}
|
|
2270
|
+
if (!ok) {
|
|
2271
|
+
throw new errors_js_1.SignerMismatchError("sender_auth: ed25519 verification failed");
|
|
2272
|
+
}
|
|
2273
|
+
return source.account;
|
|
2274
|
+
},
|
|
2275
|
+
recoverAndVerify(signed, source, expected) {
|
|
2276
|
+
let prehash;
|
|
2277
|
+
let canonicalHash;
|
|
2278
|
+
try {
|
|
2279
|
+
prehash = JSON.parse(signed.message_prehash);
|
|
2280
|
+
canonicalHash = hashDeposit(prehash, domainFrom(expected));
|
|
2281
|
+
} catch {
|
|
2282
|
+
throw new errors_js_1.MalformedPrehashError();
|
|
2283
|
+
}
|
|
2284
|
+
if (canonicalHash.toLowerCase() !== signed.message.toLowerCase()) {
|
|
2285
|
+
throw new Error("sender_auth: deposit hash does not match the signed message");
|
|
2286
|
+
}
|
|
2287
|
+
const delegateSigner = signed.payload?.delegate_signer;
|
|
2288
|
+
if (!delegateSigner) {
|
|
2289
|
+
throw new Error("sender_auth: Solana credential is missing delegate_signer");
|
|
2290
|
+
}
|
|
2291
|
+
let verified = false;
|
|
2292
|
+
try {
|
|
2293
|
+
verified = tweetnacl_1.default.sign.detached.verify((0, ethers_1.getBytes)(signed.message), (0, ethers_1.getBytes)(signed.signature), bs58_1.default.decode(delegateSigner));
|
|
2294
|
+
} catch {
|
|
2295
|
+
verified = false;
|
|
2296
|
+
}
|
|
2297
|
+
if (!verified || delegateSigner !== source.account || prehash.depositor !== source.account) {
|
|
2298
|
+
throw new Error("sender_auth: deposit signature does not recover to source.account");
|
|
2299
|
+
}
|
|
2300
|
+
const deadlineSec = Number(prehash.deadline);
|
|
2301
|
+
(0, utils_js_1.assertToken)(prehash.mint, source.asset, idAddr);
|
|
2302
|
+
(0, utils_js_1.assertAmountMatches)(prehash.amount, expected.maxSourceAmount);
|
|
2303
|
+
(0, utils_js_1.assertRolePairComplete)(expected.reserver, expected.releaser);
|
|
2304
|
+
if (expected.reserver !== void 0 && expected.releaser !== void 0) {
|
|
2305
|
+
(0, utils_js_1.assertWitnessRoles)(prehash.reserver, prehash.releaser, expected.reserver, expected.releaser, idAddr);
|
|
2306
|
+
}
|
|
2307
|
+
return {
|
|
2308
|
+
amount: prehash.amount,
|
|
2309
|
+
deadlineSec,
|
|
2310
|
+
permit: {
|
|
2311
|
+
scheme: "SOLANA",
|
|
2312
|
+
token: prehash.mint,
|
|
2313
|
+
amount: prehash.amount,
|
|
2314
|
+
deadlineSec,
|
|
2315
|
+
reserver: prehash.reserver,
|
|
2316
|
+
releaser: prehash.releaser,
|
|
2317
|
+
depositor: prehash.depositor
|
|
2318
|
+
}
|
|
2319
|
+
};
|
|
2320
|
+
}
|
|
2321
|
+
};
|
|
2322
|
+
function secretKeyFromPrivate(privateKey) {
|
|
2323
|
+
if (/^[0-9a-fA-F]{64}$/.test(privateKey)) {
|
|
2324
|
+
const seed = new Uint8Array(32);
|
|
2325
|
+
for (let i = 0; i < 32; i++) {
|
|
2326
|
+
seed[i] = parseInt(privateKey.substring(i * 2, i * 2 + 2), 16);
|
|
2327
|
+
}
|
|
2328
|
+
return tweetnacl_1.default.sign.keyPair.fromSeed(seed).secretKey;
|
|
2329
|
+
}
|
|
2330
|
+
const decoded = bs58_1.default.decode(privateKey);
|
|
2331
|
+
if (decoded.length === 64)
|
|
2332
|
+
return decoded;
|
|
2333
|
+
if (decoded.length === 32)
|
|
2334
|
+
return tweetnacl_1.default.sign.keyPair.fromSeed(decoded).secretKey;
|
|
2335
|
+
throw new Error(`Invalid Solana private key length: expected 32 or 64 bytes, got ${decoded.length}`);
|
|
2336
|
+
}
|
|
2337
|
+
}
|
|
2338
|
+
});
|
|
2339
|
+
|
|
2340
|
+
// ../schemas/declarations/PaymentRequest/v1/bindings/typescript/sender-auth/dist/adapters/index.js
|
|
2341
|
+
var require_adapters = __commonJS({
|
|
2342
|
+
"../schemas/declarations/PaymentRequest/v1/bindings/typescript/sender-auth/dist/adapters/index.js"(exports) {
|
|
2343
|
+
"use strict";
|
|
2344
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2345
|
+
exports.getChainAdapter = getChainAdapter;
|
|
2346
|
+
var chain_id_js_1 = require_chain_id();
|
|
2347
|
+
var evm_js_1 = require_evm();
|
|
2348
|
+
var tron_js_1 = require_tron();
|
|
2349
|
+
var solana_js_1 = require_solana();
|
|
2350
|
+
var adapters = {
|
|
2351
|
+
eip155: evm_js_1.evmAdapter,
|
|
2352
|
+
tron: tron_js_1.tronAdapter,
|
|
2353
|
+
solana: solana_js_1.solanaAdapter
|
|
2354
|
+
};
|
|
2355
|
+
function getChainAdapter(caip2) {
|
|
2356
|
+
const adapter = adapters[(0, chain_id_js_1.namespaceOf)(caip2)];
|
|
2357
|
+
if (!adapter) {
|
|
2358
|
+
throw new Error(`sender_auth: unsupported source chain '${caip2}'`);
|
|
2359
|
+
}
|
|
2360
|
+
return adapter;
|
|
2361
|
+
}
|
|
2362
|
+
}
|
|
2363
|
+
});
|
|
2364
|
+
|
|
2365
|
+
// ../schemas/declarations/PaymentRequest/v1/bindings/typescript/sender-auth/dist/verify.js
|
|
2366
|
+
var require_verify = __commonJS({
|
|
2367
|
+
"../schemas/declarations/PaymentRequest/v1/bindings/typescript/sender-auth/dist/verify.js"(exports) {
|
|
2368
|
+
"use strict";
|
|
2369
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2370
|
+
exports.verifyPaymentRequest = verifyPaymentRequest;
|
|
2371
|
+
var index_js_1 = require_adapters();
|
|
2372
|
+
function parseSourceAsset(assetIdentifier2) {
|
|
2373
|
+
const parts = assetIdentifier2.split("/");
|
|
2374
|
+
const nsParts = parts[1]?.split(":");
|
|
2375
|
+
if (parts.length < 2 || !nsParts || nsParts.length < 2 || !nsParts[1]) {
|
|
2376
|
+
throw new Error(`sender_auth: invalid source asset "${assetIdentifier2}"`);
|
|
2377
|
+
}
|
|
2378
|
+
return { network: parts[0], asset: nsParts[1] };
|
|
2379
|
+
}
|
|
2380
|
+
function verifyPaymentRequest(request, expected = {}) {
|
|
2381
|
+
const senderAuth = request.sender_auth;
|
|
2382
|
+
if (!senderAuth?.signed_messages?.length) {
|
|
2383
|
+
throw new Error("sender_auth: request has no signed_messages to verify");
|
|
2384
|
+
}
|
|
2385
|
+
if (!request.source) {
|
|
2386
|
+
throw new Error("sender_auth: request has no source");
|
|
2387
|
+
}
|
|
2388
|
+
const requestSource = parseSourceAsset(request.source.asset_identifier);
|
|
2389
|
+
const { sourceAsset, network: networkOverride, maxSourceAmount: amountOverride, ...scheme } = expected;
|
|
2390
|
+
const network = networkOverride ?? requestSource.network;
|
|
2391
|
+
const asset = sourceAsset ?? requestSource.asset;
|
|
2392
|
+
const maxSourceAmount = amountOverride ?? request.max_source_amount ?? "0";
|
|
2393
|
+
const source = { network, asset, account: request.source.account };
|
|
2394
|
+
const perMessage = { ...scheme, maxSourceAmount };
|
|
2395
|
+
const adapter = (0, index_js_1.getChainAdapter)(network);
|
|
2396
|
+
const results = senderAuth.signed_messages.map((m) => adapter.recoverAndVerify(m, source, perMessage));
|
|
2397
|
+
return { results, recoveredAccount: source.account };
|
|
2398
|
+
}
|
|
2399
|
+
}
|
|
2400
|
+
});
|
|
2401
|
+
|
|
2402
|
+
// ../schemas/declarations/PaymentRequest/v1/bindings/typescript/sender-auth/dist/signer.js
|
|
2403
|
+
var require_signer = __commonJS({
|
|
2404
|
+
"../schemas/declarations/PaymentRequest/v1/bindings/typescript/sender-auth/dist/signer.js"(exports) {
|
|
2405
|
+
"use strict";
|
|
2406
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2407
|
+
exports.localKeySigner = localKeySigner;
|
|
2408
|
+
var index_js_1 = require_adapters();
|
|
2409
|
+
function localKeySigner(network, privateKey) {
|
|
2410
|
+
const adapter = (0, index_js_1.getChainAdapter)(network);
|
|
2411
|
+
return {
|
|
2412
|
+
async sign(signedMessage) {
|
|
2413
|
+
const signature = await adapter.sign(signedMessage, privateKey);
|
|
2414
|
+
const delegateSigner = adapter.deriveDelegateSigner?.(privateKey);
|
|
2415
|
+
return delegateSigner !== void 0 ? { signature, delegateSigner } : { signature };
|
|
2416
|
+
}
|
|
2417
|
+
};
|
|
2418
|
+
}
|
|
2419
|
+
}
|
|
2420
|
+
});
|
|
2421
|
+
|
|
2422
|
+
// ../schemas/declarations/PaymentRequest/v1/bindings/typescript/sender-auth/dist/index.js
|
|
2423
|
+
var require_dist4 = __commonJS({
|
|
2424
|
+
"../schemas/declarations/PaymentRequest/v1/bindings/typescript/sender-auth/dist/index.js"(exports) {
|
|
2425
|
+
"use strict";
|
|
2426
|
+
var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) {
|
|
2427
|
+
if (k2 === void 0) k2 = k;
|
|
2428
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
2429
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
2430
|
+
desc = { enumerable: true, get: function() {
|
|
2431
|
+
return m[k];
|
|
2432
|
+
} };
|
|
2433
|
+
}
|
|
2434
|
+
Object.defineProperty(o, k2, desc);
|
|
2435
|
+
}) : (function(o, m, k, k2) {
|
|
2436
|
+
if (k2 === void 0) k2 = k;
|
|
2437
|
+
o[k2] = m[k];
|
|
2438
|
+
}));
|
|
2439
|
+
var __exportStar = exports && exports.__exportStar || function(m, exports2) {
|
|
2440
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p)) __createBinding(exports2, m, p);
|
|
2441
|
+
};
|
|
2442
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2443
|
+
exports.localKeySigner = exports.SignerMismatchError = exports.RecoveryFailedError = exports.MalformedPrehashError = exports.verifyPaymentRequest = exports.getChainAdapter = void 0;
|
|
2444
|
+
__exportStar(require_types(), exports);
|
|
2445
|
+
__exportStar(require_utils(), exports);
|
|
2446
|
+
__exportStar(require_chain_id(), exports);
|
|
2447
|
+
var index_js_1 = require_adapters();
|
|
2448
|
+
Object.defineProperty(exports, "getChainAdapter", { enumerable: true, get: function() {
|
|
2449
|
+
return index_js_1.getChainAdapter;
|
|
2450
|
+
} });
|
|
2451
|
+
var verify_js_1 = require_verify();
|
|
2452
|
+
Object.defineProperty(exports, "verifyPaymentRequest", { enumerable: true, get: function() {
|
|
2453
|
+
return verify_js_1.verifyPaymentRequest;
|
|
2454
|
+
} });
|
|
2455
|
+
var errors_js_1 = require_errors();
|
|
2456
|
+
Object.defineProperty(exports, "MalformedPrehashError", { enumerable: true, get: function() {
|
|
2457
|
+
return errors_js_1.MalformedPrehashError;
|
|
2458
|
+
} });
|
|
2459
|
+
Object.defineProperty(exports, "RecoveryFailedError", { enumerable: true, get: function() {
|
|
2460
|
+
return errors_js_1.RecoveryFailedError;
|
|
2461
|
+
} });
|
|
2462
|
+
Object.defineProperty(exports, "SignerMismatchError", { enumerable: true, get: function() {
|
|
2463
|
+
return errors_js_1.SignerMismatchError;
|
|
2464
|
+
} });
|
|
2465
|
+
var signer_js_1 = require_signer();
|
|
2466
|
+
Object.defineProperty(exports, "localKeySigner", { enumerable: true, get: function() {
|
|
2467
|
+
return signer_js_1.localKeySigner;
|
|
2468
|
+
} });
|
|
2469
|
+
}
|
|
2470
|
+
});
|
|
2471
|
+
|
|
2472
|
+
// src/internal.ts
|
|
2473
|
+
var import_tvm_escrow_encoding = __toESM(require_dist2(), 1);
|
|
2474
|
+
var import_payment_request_sender_auth = __toESM(require_dist4(), 1);
|
|
2475
|
+
import * as z from "zod/mini";
|
|
2476
|
+
import { Method, PaymentRequest as OpaqueCodec } from "mppx";
|
|
2477
|
+
var METHOD_NAME = "atum-escrow";
|
|
2478
|
+
var INTENT = "charge";
|
|
2479
|
+
var INTENT_ID_META_KEY = "atumIntentId";
|
|
2480
|
+
var REQUEST_ID_PREFIX = "req_mpp_";
|
|
2481
|
+
function chargeRequestId(intentId, account) {
|
|
2482
|
+
return (0, import_payment_request_sender_auth.deterministicRequestId)({ anchor: intentId, account, prefix: REQUEST_ID_PREFIX });
|
|
2483
|
+
}
|
|
2484
|
+
function intentIdOf(challenge) {
|
|
2485
|
+
const fromMeta = challenge.meta?.[INTENT_ID_META_KEY];
|
|
2486
|
+
if (typeof fromMeta === "string" && fromMeta !== "") {
|
|
2487
|
+
return fromMeta;
|
|
2488
|
+
}
|
|
2489
|
+
if (challenge.opaque === void 0) {
|
|
2490
|
+
return void 0;
|
|
2491
|
+
}
|
|
2492
|
+
let decoded;
|
|
2493
|
+
try {
|
|
2494
|
+
decoded = OpaqueCodec.deserialize(challenge.opaque);
|
|
2495
|
+
} catch {
|
|
2496
|
+
return void 0;
|
|
2497
|
+
}
|
|
2498
|
+
if (typeof decoded !== "object" || decoded === null) {
|
|
2499
|
+
return void 0;
|
|
2500
|
+
}
|
|
2501
|
+
const value = decoded[INTENT_ID_META_KEY];
|
|
2502
|
+
return typeof value === "string" && value !== "" ? value : void 0;
|
|
2503
|
+
}
|
|
2504
|
+
var ChargeRequestSchema = z.object({
|
|
2505
|
+
/** The source chain/token/cap the payer funds from (one option per challenge). */
|
|
2506
|
+
source: z.object({
|
|
2507
|
+
/** CAIP-2 source chain id (e.g. `eip155:8453`, `tron:mainnet`, `solana:<genesis>`). */
|
|
2508
|
+
network: z.string(),
|
|
2509
|
+
/** Source token address (EVM hex or base58). */
|
|
2510
|
+
asset: z.string(),
|
|
2511
|
+
/** Source spend cap (fulfillmentAmount + markup), atomic units — the authoritative `max_source_amount`. */
|
|
2512
|
+
amount: z.string()
|
|
2513
|
+
}),
|
|
2514
|
+
/** The destination/corridor block (the reused x402 `extra`). */
|
|
2515
|
+
extra: z.object({
|
|
2516
|
+
/** Where the merchant receives: CAIP-2 chain, token, and receive address. */
|
|
2517
|
+
destination: z.object({
|
|
2518
|
+
network: z.string(),
|
|
2519
|
+
asset: z.string(),
|
|
2520
|
+
address: z.string()
|
|
2521
|
+
}),
|
|
2522
|
+
/** Exact amount the merchant receives, in atomic units of the destination token. */
|
|
2523
|
+
fulfillmentAmount: z.string(),
|
|
2524
|
+
/** Source-chain escrow contract for this option; the payer's funds lock here. */
|
|
2525
|
+
escrow: z.string(),
|
|
2526
|
+
/** Destination-chain fulfillment-proxy contract. */
|
|
2527
|
+
fulfillmentProxy: z.string(),
|
|
2528
|
+
/** Role address that witnesses the escrow deposit on reservation. */
|
|
2529
|
+
reserver: z.string(),
|
|
2530
|
+
/** Role address that witnesses the escrow release on fulfillment. */
|
|
2531
|
+
releaser: z.string(),
|
|
2532
|
+
/** Endpoint used to verify fulfillment on the source chain. */
|
|
2533
|
+
fulfillmentVerifierEndpoint: z.string(),
|
|
2534
|
+
/** Quote-deadline budget in seconds, relative to signing time. */
|
|
2535
|
+
quoteDeadlineSeconds: z.number(),
|
|
2536
|
+
/** Fulfillment-deadline budget in seconds, relative to signing time. */
|
|
2537
|
+
fulfillmentDeadlineSeconds: z.number(),
|
|
2538
|
+
/** Solana-only: cluster id that domain-separates the deposit authorization. */
|
|
2539
|
+
svmSignatureClusterId: z.optional(z.string()),
|
|
2540
|
+
/**
|
|
2541
|
+
* Solana-only: signature domain version that domain-separates the deposit authorization.
|
|
2542
|
+
* Bounded 1–255 to match the wire schema (a uint8 the escrow's V3 domain uses).
|
|
2543
|
+
*/
|
|
2544
|
+
svmSignatureDomainVersion: z.optional(z.number().check(z.gte(1), z.lte(255))),
|
|
2545
|
+
/**
|
|
2546
|
+
* Solana-only: merchant-stamped issue time (epoch seconds). When present, the client
|
|
2547
|
+
* stamps the deposit's `issued_at` from it so the 402 is self-contained (no client RPC).
|
|
2548
|
+
* Digits-only, matching the wire schema — so the client's `BigInt(issuedAt)` can never
|
|
2549
|
+
* throw on a non-numeric value or silently coerce `""`/whitespace to the Unix epoch.
|
|
2550
|
+
*/
|
|
2551
|
+
issuedAt: z.optional(z.string().check(z.regex(/^[0-9]+$/)))
|
|
2552
|
+
})
|
|
2553
|
+
});
|
|
2554
|
+
var CredentialPayloadSchema = z.object({
|
|
2555
|
+
paymentRequest: z.record(z.string(), z.unknown())
|
|
2556
|
+
});
|
|
2557
|
+
var atumEscrowChargeMethod = Method.from({
|
|
2558
|
+
name: METHOD_NAME,
|
|
2559
|
+
intent: INTENT,
|
|
2560
|
+
schema: {
|
|
2561
|
+
request: ChargeRequestSchema,
|
|
2562
|
+
credential: { payload: CredentialPayloadSchema }
|
|
2563
|
+
}
|
|
2564
|
+
});
|
|
2565
|
+
function namespaceOf(network) {
|
|
2566
|
+
return network.split(":")[0];
|
|
2567
|
+
}
|
|
2568
|
+
function assetTypeFor(network) {
|
|
2569
|
+
switch (namespaceOf(network)) {
|
|
2570
|
+
case "eip155":
|
|
2571
|
+
return "erc20";
|
|
2572
|
+
case "tron":
|
|
2573
|
+
return "trc20";
|
|
2574
|
+
case "solana":
|
|
2575
|
+
return "spl";
|
|
2576
|
+
default:
|
|
2577
|
+
throw new Error(`atum-escrow: unsupported network '${network}'`);
|
|
2578
|
+
}
|
|
2579
|
+
}
|
|
2580
|
+
function assetIdentifier(network, asset) {
|
|
2581
|
+
return `${network}/${assetTypeFor(network)}:${asset}`;
|
|
2582
|
+
}
|
|
2583
|
+
function sameAddress(a, b) {
|
|
2584
|
+
if (a.startsWith("0x") && b.startsWith("0x")) {
|
|
2585
|
+
return a.toLowerCase() === b.toLowerCase();
|
|
2586
|
+
}
|
|
2587
|
+
return a === b;
|
|
2588
|
+
}
|
|
2589
|
+
function chainDefaultsFromExtra(extra, network) {
|
|
2590
|
+
return {
|
|
2591
|
+
escrowContract: extra.escrow,
|
|
2592
|
+
quoteSelector: extra.reserver,
|
|
2593
|
+
fulfillmentVerifierAccount: extra.releaser,
|
|
2594
|
+
fulfillmentVerifierEndpoint: extra.fulfillmentVerifierEndpoint,
|
|
2595
|
+
fulfillmentProxy: extra.fulfillmentProxy,
|
|
2596
|
+
// Pin the Tron Permit2 so the adapter signs against the canonical address (the same one
|
|
2597
|
+
// verify() rebuilds against), never leaving it to the adapter's internal fallback. The
|
|
2598
|
+
// address is fixed per-network (not carried on the wire) — see resolveTronPermit2.
|
|
2599
|
+
...namespaceOf(network) === "tron" ? { permit2Contract: (0, import_payment_request_sender_auth.resolveTronPermit2)(network) } : {},
|
|
2600
|
+
...extra.svmSignatureClusterId ? { svmSignatureClusterId: extra.svmSignatureClusterId } : {},
|
|
2601
|
+
...extra.svmSignatureDomainVersion != null ? { svmSignatureDomainVersion: extra.svmSignatureDomainVersion } : {}
|
|
2602
|
+
};
|
|
2603
|
+
}
|
|
2604
|
+
function contractOverridesFromExtra(network, extra) {
|
|
2605
|
+
if (namespaceOf(network) !== "tron") {
|
|
2606
|
+
return void 0;
|
|
2607
|
+
}
|
|
2608
|
+
return {
|
|
2609
|
+
quote_selector: (0, import_tvm_escrow_encoding.normalizeAddress)(extra.reserver),
|
|
2610
|
+
fulfillment_verifier: {
|
|
2611
|
+
account: (0, import_tvm_escrow_encoding.normalizeAddress)(extra.releaser),
|
|
2612
|
+
endpoint: extra.fulfillmentVerifierEndpoint
|
|
2613
|
+
}
|
|
2614
|
+
};
|
|
2615
|
+
}
|
|
2616
|
+
|
|
2617
|
+
export {
|
|
2618
|
+
__require,
|
|
2619
|
+
__esm,
|
|
2620
|
+
__commonJS,
|
|
2621
|
+
__export,
|
|
2622
|
+
__toESM,
|
|
2623
|
+
__toCommonJS,
|
|
2624
|
+
require_dist,
|
|
2625
|
+
require_dist4 as require_dist2,
|
|
2626
|
+
import_payment_request_sender_auth,
|
|
2627
|
+
METHOD_NAME,
|
|
2628
|
+
INTENT,
|
|
2629
|
+
INTENT_ID_META_KEY,
|
|
2630
|
+
chargeRequestId,
|
|
2631
|
+
intentIdOf,
|
|
2632
|
+
ChargeRequestSchema,
|
|
2633
|
+
CredentialPayloadSchema,
|
|
2634
|
+
atumEscrowChargeMethod,
|
|
2635
|
+
namespaceOf,
|
|
2636
|
+
assetIdentifier,
|
|
2637
|
+
sameAddress,
|
|
2638
|
+
chainDefaultsFromExtra,
|
|
2639
|
+
contractOverridesFromExtra
|
|
2640
|
+
};
|
|
2641
|
+
/*! Bundled license information:
|
|
2642
|
+
|
|
2643
|
+
@noble/hashes/utils.js:
|
|
2644
|
+
(*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
|
|
2645
|
+
*/
|