stxer 0.2.0 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +10 -2
- package/dist/stxer.cjs.development.js +55 -21
- package/dist/stxer.cjs.development.js.map +1 -1
- package/dist/stxer.cjs.production.min.js +1 -1
- package/dist/stxer.cjs.production.min.js.map +1 -1
- package/dist/stxer.esm.js +55 -21
- package/dist/stxer.esm.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +64 -26
package/dist/index.d.ts
CHANGED
|
@@ -4,9 +4,16 @@ export interface SimulationEval {
|
|
|
4
4
|
code: string;
|
|
5
5
|
}
|
|
6
6
|
export declare function runEval({ contract_id, code }: SimulationEval): import("@stacks/transactions").TupleCV<import("@stacks/transactions").TupleData<import("@stacks/transactions").BufferCV | import("@stacks/transactions").UIntCV>>;
|
|
7
|
-
export declare function runSimulation(block_hash: string, block_height: number, txs: (StacksTransactionWire | SimulationEval)[]): Promise<string>;
|
|
7
|
+
export declare function runSimulation(apiEndpoint: string, block_hash: string, block_height: number, txs: (StacksTransactionWire | SimulationEval)[]): Promise<string>;
|
|
8
|
+
interface SimulationBuilderOptions {
|
|
9
|
+
apiEndpoint?: string;
|
|
10
|
+
stacksNodeAPI?: string;
|
|
11
|
+
}
|
|
8
12
|
export declare class SimulationBuilder {
|
|
9
|
-
|
|
13
|
+
private apiEndpoint;
|
|
14
|
+
private stacksNodeAPI;
|
|
15
|
+
private constructor();
|
|
16
|
+
static new(options?: SimulationBuilderOptions): SimulationBuilder;
|
|
10
17
|
private block;
|
|
11
18
|
private sender;
|
|
12
19
|
private steps;
|
|
@@ -37,3 +44,4 @@ export declare class SimulationBuilder {
|
|
|
37
44
|
private getBlockInfo;
|
|
38
45
|
run(): Promise<string>;
|
|
39
46
|
}
|
|
47
|
+
export {};
|
|
@@ -372,8 +372,6 @@ function _unsupportedIterableToArray(r, a) {
|
|
|
372
372
|
}
|
|
373
373
|
}
|
|
374
374
|
|
|
375
|
-
// current beta api endpoint
|
|
376
|
-
var SIMULATION_API_ENDPOINT = 'https://api.stxer.xyz/simulations';
|
|
377
375
|
function runTx(tx) {
|
|
378
376
|
// type 0: run transaction
|
|
379
377
|
return transactions.tupleCV({
|
|
@@ -396,23 +394,48 @@ function runEval(_ref) {
|
|
|
396
394
|
})))
|
|
397
395
|
});
|
|
398
396
|
}
|
|
399
|
-
function runSimulation(_x, _x2, _x3) {
|
|
397
|
+
function runSimulation(_x, _x2, _x3, _x4) {
|
|
400
398
|
return _runSimulation.apply(this, arguments);
|
|
401
399
|
}
|
|
402
400
|
function _runSimulation() {
|
|
403
|
-
_runSimulation = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5(block_hash, block_height, txs) {
|
|
404
|
-
var body, rs;
|
|
401
|
+
_runSimulation = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5(apiEndpoint, block_hash, block_height, txs) {
|
|
402
|
+
var header, heightBytes, view, hashHex, hashBytes, txBytes, totalLength, body, offset, _iterator2, _step2, tx, rs;
|
|
405
403
|
return _regeneratorRuntime().wrap(function _callee5$(_context5) {
|
|
406
404
|
while (1) switch (_context5.prev = _context5.next) {
|
|
407
405
|
case 0:
|
|
408
|
-
|
|
406
|
+
// Convert 'sim-v1' to Uint8Array
|
|
407
|
+
header = new TextEncoder().encode('sim-v1'); // Create 8 bytes for block height
|
|
408
|
+
heightBytes = new Uint8Array(8); // Convert block height to bytes
|
|
409
|
+
view = new DataView(heightBytes.buffer);
|
|
410
|
+
view.setBigUint64(0, BigInt(block_height), false); // false for big-endian
|
|
411
|
+
// Convert block hash to bytes
|
|
412
|
+
hashHex = block_hash.startsWith('0x') ? block_hash.substring(2) : block_hash; // biome-ignore lint/style/noNonNullAssertion: <explanation>
|
|
413
|
+
hashBytes = new Uint8Array(hashHex.match(/.{1,2}/g).map(function (_byte) {
|
|
414
|
+
return Number.parseInt(_byte, 16);
|
|
415
|
+
})); // Convert transactions to bytes
|
|
416
|
+
txBytes = txs.map(function (t) {
|
|
409
417
|
return 'contract_id' in t && 'code' in t ? runEval(t) : runTx(t);
|
|
410
418
|
}).map(function (t) {
|
|
411
419
|
return transactions.serializeCVBytes(t);
|
|
412
|
-
})
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
420
|
+
}); // Combine all byte arrays
|
|
421
|
+
totalLength = header.length + heightBytes.length + hashBytes.length + txBytes.reduce(function (acc, curr) {
|
|
422
|
+
return acc + curr.length;
|
|
423
|
+
}, 0);
|
|
424
|
+
body = new Uint8Array(totalLength);
|
|
425
|
+
offset = 0;
|
|
426
|
+
body.set(header, offset);
|
|
427
|
+
offset += header.length;
|
|
428
|
+
body.set(heightBytes, offset);
|
|
429
|
+
offset += heightBytes.length;
|
|
430
|
+
body.set(hashBytes, offset);
|
|
431
|
+
offset += hashBytes.length;
|
|
432
|
+
for (_iterator2 = _createForOfIteratorHelperLoose(txBytes); !(_step2 = _iterator2()).done;) {
|
|
433
|
+
tx = _step2.value;
|
|
434
|
+
body.set(tx, offset);
|
|
435
|
+
offset += tx.length;
|
|
436
|
+
}
|
|
437
|
+
_context5.next = 19;
|
|
438
|
+
return fetch(apiEndpoint, {
|
|
416
439
|
method: 'POST',
|
|
417
440
|
body: body
|
|
418
441
|
}).then(/*#__PURE__*/function () {
|
|
@@ -438,14 +461,14 @@ function _runSimulation() {
|
|
|
438
461
|
}
|
|
439
462
|
}, _callee4);
|
|
440
463
|
}));
|
|
441
|
-
return function (
|
|
464
|
+
return function (_x6) {
|
|
442
465
|
return _ref3.apply(this, arguments);
|
|
443
466
|
};
|
|
444
467
|
}());
|
|
445
|
-
case
|
|
468
|
+
case 19:
|
|
446
469
|
rs = _context5.sent;
|
|
447
470
|
return _context5.abrupt("return", rs.id);
|
|
448
|
-
case
|
|
471
|
+
case 21:
|
|
449
472
|
case "end":
|
|
450
473
|
return _context5.stop();
|
|
451
474
|
}
|
|
@@ -454,14 +477,22 @@ function _runSimulation() {
|
|
|
454
477
|
return _runSimulation.apply(this, arguments);
|
|
455
478
|
}
|
|
456
479
|
var SimulationBuilder = /*#__PURE__*/function () {
|
|
457
|
-
function SimulationBuilder() {
|
|
480
|
+
function SimulationBuilder(options) {
|
|
481
|
+
var _options$apiEndpoint, _options$stacksNodeAP;
|
|
482
|
+
if (options === void 0) {
|
|
483
|
+
options = {};
|
|
484
|
+
}
|
|
485
|
+
this.apiEndpoint = void 0;
|
|
486
|
+
this.stacksNodeAPI = void 0;
|
|
458
487
|
// biome-ignore lint/style/useNumberNamespace: <explanation>
|
|
459
488
|
this.block = NaN;
|
|
460
489
|
this.sender = '';
|
|
461
490
|
this.steps = [];
|
|
491
|
+
this.apiEndpoint = (_options$apiEndpoint = options.apiEndpoint) != null ? _options$apiEndpoint : 'https://api.stxer.xyz';
|
|
492
|
+
this.stacksNodeAPI = (_options$stacksNodeAP = options.stacksNodeAPI) != null ? _options$stacksNodeAP : 'https://api.hiro.so';
|
|
462
493
|
}
|
|
463
|
-
SimulationBuilder["new"] = function _new() {
|
|
464
|
-
return new SimulationBuilder();
|
|
494
|
+
SimulationBuilder["new"] = function _new(options) {
|
|
495
|
+
return new SimulationBuilder(options);
|
|
465
496
|
};
|
|
466
497
|
var _proto = SimulationBuilder.prototype;
|
|
467
498
|
_proto.useBlockHeight = function useBlockHeight(block) {
|
|
@@ -537,14 +568,16 @@ var SimulationBuilder = /*#__PURE__*/function () {
|
|
|
537
568
|
break;
|
|
538
569
|
}
|
|
539
570
|
_context.next = 3;
|
|
540
|
-
return tsClarity.getNodeInfo(
|
|
571
|
+
return tsClarity.getNodeInfo({
|
|
572
|
+
stacksEndpoint: this.stacksNodeAPI
|
|
573
|
+
});
|
|
541
574
|
case 3:
|
|
542
575
|
_yield$getNodeInfo = _context.sent;
|
|
543
576
|
stacks_tip_height = _yield$getNodeInfo.stacks_tip_height;
|
|
544
577
|
this.block = stacks_tip_height;
|
|
545
578
|
case 6:
|
|
546
579
|
_context.next = 8;
|
|
547
|
-
return tsClarity.richFetch("
|
|
580
|
+
return tsClarity.richFetch(this.stacksNodeAPI + "/extended/v1/block/by_height/" + this.block + "?unanchored=true").then(function (r) {
|
|
548
581
|
return r.json();
|
|
549
582
|
});
|
|
550
583
|
case 8:
|
|
@@ -573,6 +606,7 @@ var SimulationBuilder = /*#__PURE__*/function () {
|
|
|
573
606
|
}();
|
|
574
607
|
_proto.run = /*#__PURE__*/function () {
|
|
575
608
|
var _run = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
|
|
609
|
+
var _this = this;
|
|
576
610
|
var block, txs, nonce_by_address, nextNonce, _iterator, _step, step, _step$function_args, nonce, _step$contract_id$spl, contractAddress, contractName, tx, _nonce, _tx, _nonce2, _tx2, id;
|
|
577
611
|
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
|
|
578
612
|
while (1) switch (_context3.prev = _context3.next) {
|
|
@@ -596,7 +630,7 @@ var SimulationBuilder = /*#__PURE__*/function () {
|
|
|
596
630
|
_context2.next = 8;
|
|
597
631
|
break;
|
|
598
632
|
}
|
|
599
|
-
url = "
|
|
633
|
+
url = _this.stacksNodeAPI + "/v2/accounts/" + sender + "?proof=" + false + "&tip=" + block.index_block_hash;
|
|
600
634
|
_context2.next = 5;
|
|
601
635
|
return tsClarity.richFetch(url).then(function (r) {
|
|
602
636
|
return r.json();
|
|
@@ -614,7 +648,7 @@ var SimulationBuilder = /*#__PURE__*/function () {
|
|
|
614
648
|
}
|
|
615
649
|
}, _callee2);
|
|
616
650
|
}));
|
|
617
|
-
return function nextNonce(
|
|
651
|
+
return function nextNonce(_x5) {
|
|
618
652
|
return _ref2.apply(this, arguments);
|
|
619
653
|
};
|
|
620
654
|
}();
|
|
@@ -713,7 +747,7 @@ var SimulationBuilder = /*#__PURE__*/function () {
|
|
|
713
747
|
break;
|
|
714
748
|
case 48:
|
|
715
749
|
_context3.next = 50;
|
|
716
|
-
return runSimulation(block.block_hash, block.block_height, txs);
|
|
750
|
+
return runSimulation(this.apiEndpoint + "/simulations", block.block_hash, block.block_height, txs);
|
|
717
751
|
case 50:
|
|
718
752
|
id = _context3.sent;
|
|
719
753
|
console.log("Simulation will be available at: https://stxer.xyz/simulations/mainnet/" + id);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stxer.cjs.development.js","sources":["../src/index.ts"],"sourcesContent":["import { type AccountDataResponse, getNodeInfo, richFetch } from 'ts-clarity';\nimport type { Block } from '@stacks/stacks-blockchain-api-types';\nimport { STACKS_MAINNET } from '@stacks/network';\nimport {\n AnchorMode,\n type ClarityValue,\n PostConditionMode,\n type StacksTransactionWire,\n bufferCV,\n contractPrincipalCV,\n makeUnsignedContractCall,\n makeUnsignedContractDeploy,\n makeUnsignedSTXTokenTransfer,\n serializeCV,\n serializeCVBytes,\n stringAsciiCV,\n tupleCV,\n uintCV,\n} from '@stacks/transactions';\nimport { c32addressDecode } from 'c32check';\n\n// current beta api endpoint\nconst SIMULATION_API_ENDPOINT = 'https://api.stxer.xyz/simulations';\n\nfunction runTx(tx: StacksTransactionWire) {\n // type 0: run transaction\n return tupleCV({ type: uintCV(0), data: bufferCV(tx.serializeBytes()) });\n}\n\nexport interface SimulationEval {\n contract_id: string;\n code: string;\n}\n\nexport function runEval({ contract_id, code }: SimulationEval) {\n const [contract_address, contract_name] = contract_id.split('.');\n // type 1: eval arbitrary code inside a contract\n return tupleCV({\n type: uintCV(1),\n data: bufferCV(\n serializeCVBytes(\n tupleCV({\n contract: contractPrincipalCV(contract_address, contract_name),\n code: stringAsciiCV(code),\n })\n )\n ),\n });\n}\n\nexport async function runSimulation(\n block_hash: string,\n block_height: number,\n txs: (StacksTransactionWire | SimulationEval)[]\n) {\n const body = Buffer.concat([\n Buffer.from('sim-v1'),\n Buffer.alloc(8),\n Buffer.from(\n block_hash.startsWith('0x') ? block_hash.substring(2) : block_hash,\n 'hex'\n ),\n ...txs\n .map((t) => {\n return 'contract_id' in t && 'code' in t ? runEval(t) : runTx(t);\n })\n .map((t) => serializeCVBytes(t)),\n ]);\n body.writeBigUInt64BE(BigInt(block_height), 6);\n const rs = await fetch(SIMULATION_API_ENDPOINT, {\n method: 'POST',\n body,\n }).then(async (rs) => {\n const response = await rs.text();\n if (!response.startsWith('{')) {\n throw new Error(`failed to submit simulation: ${response}`);\n }\n // console.log(response);\n return JSON.parse(response) as { id: string };\n });\n return rs.id;\n}\n\nexport class SimulationBuilder {\n public static new() {\n return new SimulationBuilder();\n }\n // biome-ignore lint/style/useNumberNamespace: <explanation>\n private block = NaN;\n private sender = '';\n private steps: (\n | {\n // contract call\n contract_id: string;\n function_name: string;\n function_args?: ClarityValue[];\n sender: string;\n fee: number;\n }\n | {\n // contract deploy\n contract_name: string;\n source_code: string;\n deployer: string;\n fee: number;\n }\n | {\n // STX transfer\n recipient: string;\n amount: number;\n sender: string;\n fee: number;\n }\n | SimulationEval\n )[] = [];\n\n public useBlockHeight(block: number) {\n this.block = block;\n return this;\n }\n public withSender(address: string) {\n this.sender = address;\n return this;\n }\n public addSTXTransfer(params: {\n recipient: string;\n amount: number;\n sender?: string;\n fee?: number;\n }) {\n if (params.sender == null && this.sender === '') {\n throw new Error(\n 'Please specify a sender with useSender or adding a sender paramenter'\n );\n }\n this.steps.push({\n ...params,\n sender: params.sender ?? this.sender,\n fee: params.fee ?? 0,\n });\n return this;\n }\n public addContractCall(params: {\n contract_id: string;\n function_name: string;\n function_args?: ClarityValue[];\n sender?: string;\n fee?: number;\n }) {\n if (params.sender == null && this.sender === '') {\n throw new Error(\n 'Please specify a sender with useSender or adding a sender paramenter'\n );\n }\n this.steps.push({\n ...params,\n sender: params.sender ?? this.sender,\n fee: params.fee ?? 0,\n });\n return this;\n }\n public addContractDeploy(params: {\n contract_name: string;\n source_code: string;\n deployer?: string;\n fee?: number;\n }) {\n if (params.deployer == null && this.sender === '') {\n throw new Error(\n 'Please specify a deployer with useSender or adding a deployer paramenter'\n );\n }\n this.steps.push({\n ...params,\n deployer: params.deployer ?? this.sender,\n fee: params.fee ?? 0,\n });\n return this;\n }\n public addEvalCode(inside_contract_id: string, code: string) {\n this.steps.push({\n contract_id: inside_contract_id,\n code,\n });\n return this;\n }\n public addMapRead(contract_id: string, map: string, key: string) {\n this.steps.push({\n contract_id,\n code: `(map-get ${map} ${key})`,\n });\n return this;\n }\n public addVarRead(contract_id: string, variable: string) {\n this.steps.push({\n contract_id,\n code: `(var-get ${variable})`,\n });\n return this;\n }\n\n private async getBlockInfo() {\n if (Number.isNaN(this.block)) {\n const { stacks_tip_height } = await getNodeInfo();\n this.block = stacks_tip_height;\n }\n const info: Block = await richFetch(\n `https://api.hiro.so/extended/v1/block/by_height/${this.block}?unanchored=true`\n ).then((r) => r.json());\n if (\n info.height !== this.block ||\n typeof info.hash !== 'string' ||\n !info.hash.startsWith('0x')\n ) {\n throw new Error(\n `failed to get block info for block height ${this.block}`\n );\n }\n return {\n block_height: this.block,\n block_hash: info.hash.substring(2),\n index_block_hash: info.index_block_hash.substring(2),\n };\n }\n\n public async run() {\n console.log(\n `--------------------------------\nThis product can never exist without your support!\n\nWe receive sponsorship funds with:\nSP212Y5JKN59YP3GYG07K3S8W5SSGE4KH6B5STXER\n\nFeedbacks and feature requests are welcome.\nTo get in touch: contact@stxer.xyz\n--------------------------------`\n );\n const block = await this.getBlockInfo();\n console.log(\n `Using block height ${block.block_height} hash 0x${block.block_hash} to run simulation.`\n );\n const txs: (StacksTransactionWire | SimulationEval)[] = [];\n const nonce_by_address = new Map<string, number>();\n const nextNonce = async (sender: string) => {\n const nonce = nonce_by_address.get(sender);\n if (nonce == null) {\n const url = `https://api.hiro.so/v2/accounts/${sender}?proof=${false}&tip=${\n block.index_block_hash\n }`;\n const account: AccountDataResponse = await richFetch(url).then((r) =>\n r.json()\n );\n nonce_by_address.set(sender, account.nonce + 1);\n return account.nonce;\n }\n nonce_by_address.set(sender, nonce + 1);\n return nonce;\n };\n for (const step of this.steps) {\n if ('sender' in step && 'function_name' in step) {\n const nonce = await nextNonce(step.sender);\n const [contractAddress, contractName] = step.contract_id.split('.');\n const tx = await makeUnsignedContractCall({\n contractAddress,\n contractName,\n functionName: step.function_name,\n functionArgs: step.function_args ?? [],\n nonce,\n network: STACKS_MAINNET,\n publicKey: '',\n postConditionMode: PostConditionMode.Allow,\n fee: step.fee,\n });\n tx.auth.spendingCondition.signer = c32addressDecode(step.sender)[1];\n txs.push(tx);\n } else if ('sender' in step && 'recipient' in step) {\n const nonce = await nextNonce(step.sender);\n const tx = await makeUnsignedSTXTokenTransfer({\n recipient: step.recipient,\n amount: step.amount,\n nonce,\n network: STACKS_MAINNET,\n publicKey: '',\n fee: step.fee,\n });\n tx.auth.spendingCondition.signer = c32addressDecode(step.sender)[1];\n txs.push(tx);\n } else if ('deployer' in step) {\n const nonce = await nextNonce(step.deployer);\n const tx = await makeUnsignedContractDeploy({\n contractName: step.contract_name,\n codeBody: step.source_code,\n nonce,\n network: STACKS_MAINNET,\n publicKey: '',\n postConditionMode: PostConditionMode.Allow,\n fee: step.fee,\n });\n tx.auth.spendingCondition.signer = c32addressDecode(step.deployer)[1];\n txs.push(tx);\n } else if ('code' in step) {\n txs.push(step);\n } else {\n // biome-ignore lint/style/noUnusedTemplateLiteral: <explanation>\n console.log(`Invalid simulation step:`, step);\n }\n }\n const id = await runSimulation(block.block_hash, block.block_height, txs);\n console.log(\n `Simulation will be available at: https://stxer.xyz/simulations/mainnet/${id}`\n );\n return id;\n }\n}\n"],"names":["SIMULATION_API_ENDPOINT","runTx","tx","tupleCV","type","uintCV","data","bufferCV","serializeBytes","runEval","_ref","contract_id","code","_contract_id$split","split","contract_address","contract_name","serializeCVBytes","contract","contractPrincipalCV","stringAsciiCV","runSimulation","_x","_x2","_x3","_runSimulation","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee5","block_hash","block_height","txs","body","rs","wrap","_callee5$","_context5","prev","next","Buffer","concat","from","alloc","startsWith","substring","map","t","writeBigUInt64BE","BigInt","fetch","method","then","_ref3","_callee4","response","_callee4$","_context4","text","sent","Error","abrupt","JSON","parse","stop","_x5","id","SimulationBuilder","block","NaN","sender","steps","new","_proto","prototype","useBlockHeight","withSender","address","addSTXTransfer","params","_params$sender","_params$fee","push","_extends","fee","addContractCall","_params$sender2","_params$fee2","addContractDeploy","_params$deployer","_params$fee3","deployer","addEvalCode","inside_contract_id","addMapRead","key","addVarRead","variable","getBlockInfo","_getBlockInfo","_callee","_yield$getNodeInfo","stacks_tip_height","info","_callee$","_context","Number","isNaN","getNodeInfo","richFetch","r","json","height","hash","index_block_hash","run","_run","_callee3","nonce_by_address","nextNonce","_iterator","_step","step","_step$function_args","nonce","_step$contract_id$spl","contractAddress","contractName","_nonce","_tx","_nonce2","_tx2","_callee3$","_context3","console","log","Map","_ref2","_callee2","url","account","_callee2$","_context2","get","set","_x4","_createForOfIteratorHelperLoose","done","value","makeUnsignedContractCall","functionName","function_name","functionArgs","function_args","network","STACKS_MAINNET","publicKey","postConditionMode","PostConditionMode","Allow","auth","spendingCondition","signer","c32addressDecode","makeUnsignedSTXTokenTransfer","recipient","amount","makeUnsignedContractDeploy","codeBody","source_code"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqBA;AACA,IAAMA,uBAAuB,GAAG,mCAAmC,CAAA;AAEnE,SAASC,KAAKA,CAACC,EAAyB,EAAA;AACtC;AACA,EAAA,OAAOC,oBAAO,CAAC;AAAEC,IAAAA,IAAI,EAAEC,mBAAM,CAAC,CAAC,CAAC;AAAEC,IAAAA,IAAI,EAAEC,qBAAQ,CAACL,EAAE,CAACM,cAAc,EAAE,CAAA;AAAG,GAAA,CAAC,CAAA;AAC1E,CAAA;SAOgBC,OAAOA,CAAAC,IAAA,EAAsC;AAAA,EAAA,IAAnCC,WAAW,GAAAD,IAAA,CAAXC,WAAW;IAAEC,IAAI,GAAAF,IAAA,CAAJE,IAAI,CAAA;AACzC,EAAA,IAAAC,kBAAA,GAA0CF,WAAW,CAACG,KAAK,CAAC,GAAG,CAAC;AAAzDC,IAAAA,gBAAgB,GAAAF,kBAAA,CAAA,CAAA,CAAA;AAAEG,IAAAA,aAAa,GAAAH,kBAAA,CAAA,CAAA,CAAA,CAAA;AACtC;AACA,EAAA,OAAOV,oBAAO,CAAC;AACbC,IAAAA,IAAI,EAAEC,mBAAM,CAAC,CAAC,CAAC;AACfC,IAAAA,IAAI,EAAEC,qBAAQ,CACZU,6BAAgB,CACdd,oBAAO,CAAC;AACNe,MAAAA,QAAQ,EAAEC,gCAAmB,CAACJ,gBAAgB,EAAEC,aAAa,CAAC;MAC9DJ,IAAI,EAAEQ,0BAAa,CAACR,IAAI,CAAA;AACzB,KAAA,CAAC,CACH,CAAA;AAEJ,GAAA,CAAC,CAAA;AACJ,CAAA;AAEA,SAAsBS,aAAaA,CAAAC,EAAA,EAAAC,GAAA,EAAAC,GAAA,EAAA;AAAA,EAAA,OAAAC,cAAA,CAAAC,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,CAAA;AA+BlC,SAAAF,cAAA,GAAA;AAAAA,EAAAA,cAAA,GAAAG,iBAAA,cAAAC,mBAAA,EAAAC,CAAAA,IAAA,CA/BM,SAAAC,QACLC,CAAAA,UAAkB,EAClBC,YAAoB,EACpBC,GAA+C,EAAA;IAAA,IAAAC,IAAA,EAAAC,EAAA,CAAA;AAAA,IAAA,OAAAP,mBAAA,EAAA,CAAAQ,IAAA,CAAA,SAAAC,UAAAC,SAAA,EAAA;AAAA,MAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAAC,IAAA,GAAAD,SAAA,CAAAE,IAAA;AAAA,QAAA,KAAA,CAAA;UAEzCN,IAAI,GAAGO,MAAM,CAACC,MAAM,EACxBD,MAAM,CAACE,IAAI,CAAC,QAAQ,CAAC,EACrBF,MAAM,CAACG,KAAK,CAAC,CAAC,CAAC,EACfH,MAAM,CAACE,IAAI,CACTZ,UAAU,CAACc,UAAU,CAAC,IAAI,CAAC,GAAGd,UAAU,CAACe,SAAS,CAAC,CAAC,CAAC,GAAGf,UAAU,EAClE,KAAK,CACN,CAAAW,CAAAA,MAAA,CACET,GAAG,CACHc,GAAG,CAAC,UAACC,CAAC,EAAI;AACT,YAAA,OAAO,aAAa,IAAIA,CAAC,IAAI,MAAM,IAAIA,CAAC,GAAGxC,OAAO,CAACwC,CAAC,CAAC,GAAGhD,KAAK,CAACgD,CAAC,CAAC,CAAA;AAClE,WAAC,CAAC,CACDD,GAAG,CAAC,UAACC,CAAC,EAAA;YAAA,OAAKhC,6BAAgB,CAACgC,CAAC,CAAC,CAAA;AAAA,WAAA,CAAC,CACnC,CAAC,CAAA;UACFd,IAAI,CAACe,gBAAgB,CAACC,MAAM,CAAClB,YAAY,CAAC,EAAE,CAAC,CAAC,CAAA;AAACM,UAAAA,SAAA,CAAAE,IAAA,GAAA,CAAA,CAAA;UAAA,OAC9BW,KAAK,CAACpD,uBAAuB,EAAE;AAC9CqD,YAAAA,MAAM,EAAE,MAAM;AACdlB,YAAAA,IAAI,EAAJA,IAAAA;WACD,CAAC,CAACmB,IAAI,cAAA,YAAA;YAAA,IAAAC,KAAA,GAAA3B,iBAAA,cAAAC,mBAAA,GAAAC,IAAA,CAAC,SAAA0B,QAAAA,CAAOpB,EAAE,EAAA;AAAA,cAAA,IAAAqB,QAAA,CAAA;AAAA,cAAA,OAAA5B,mBAAA,EAAA,CAAAQ,IAAA,CAAA,SAAAqB,UAAAC,SAAA,EAAA;AAAA,gBAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAAnB,IAAA,GAAAmB,SAAA,CAAAlB,IAAA;AAAA,kBAAA,KAAA,CAAA;AAAAkB,oBAAAA,SAAA,CAAAlB,IAAA,GAAA,CAAA,CAAA;AAAA,oBAAA,OACQL,EAAE,CAACwB,IAAI,EAAE,CAAA;AAAA,kBAAA,KAAA,CAAA;oBAA1BH,QAAQ,GAAAE,SAAA,CAAAE,IAAA,CAAA;AAAA,oBAAA,IACTJ,QAAQ,CAACX,UAAU,CAAC,GAAG,CAAC,EAAA;AAAAa,sBAAAA,SAAA,CAAAlB,IAAA,GAAA,CAAA,CAAA;AAAA,sBAAA,MAAA;AAAA,qBAAA;AAAA,oBAAA,MACrB,IAAIqB,KAAK,CAAiCL,+BAAAA,GAAAA,QAAU,CAAC,CAAA;AAAA,kBAAA,KAAA,CAAA;oBAAA,OAAAE,SAAA,CAAAI,MAAA,CAAA,QAAA,EAGtDC,IAAI,CAACC,KAAK,CAACR,QAAQ,CAAmB,CAAA,CAAA;AAAA,kBAAA,KAAA,CAAA,CAAA;AAAA,kBAAA,KAAA,KAAA;oBAAA,OAAAE,SAAA,CAAAO,IAAA,EAAA,CAAA;AAAA,iBAAA;AAAA,eAAA,EAAAV,QAAA,CAAA,CAAA;aAC9C,CAAA,CAAA,CAAA;AAAA,YAAA,OAAA,UAAAW,GAAA,EAAA;AAAA,cAAA,OAAAZ,KAAA,CAAA7B,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,aAAA,CAAA;WAAC,EAAA,CAAA,CAAA;AAAA,QAAA,KAAA,CAAA;UAVIS,EAAE,GAAAG,SAAA,CAAAsB,IAAA,CAAA;AAAA,UAAA,OAAAtB,SAAA,CAAAwB,MAAA,CAWD3B,QAAAA,EAAAA,EAAE,CAACgC,EAAE,CAAA,CAAA;AAAA,QAAA,KAAA,CAAA,CAAA;AAAA,QAAA,KAAA,KAAA;UAAA,OAAA7B,SAAA,CAAA2B,IAAA,EAAA,CAAA;AAAA,OAAA;AAAA,KAAA,EAAAnC,QAAA,CAAA,CAAA;GACb,CAAA,CAAA,CAAA;AAAA,EAAA,OAAAN,cAAA,CAAAC,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,CAAA;AAED,IAAa0C,iBAAiB,gBAAA,YAAA;AAAA,EAAA,SAAAA,iBAAA,GAAA;AAI5B;IAAA,IACQC,CAAAA,KAAK,GAAGC,GAAG,CAAA;IAAA,IACXC,CAAAA,MAAM,GAAG,EAAE,CAAA;IAAA,IACXC,CAAAA,KAAK,GAwBP,EAAE,CAAA;AAAA,GAAA;AAAAJ,EAAAA,iBAAA,CA9BD,KAAA,CAAA,GAAA,SAAOK,IAAGA,GAAA;IACf,OAAO,IAAIL,iBAAiB,EAAE,CAAA;GAC/B,CAAA;AAAA,EAAA,IAAAM,MAAA,GAAAN,iBAAA,CAAAO,SAAA,CAAA;AAAAD,EAAAA,MAAA,CA8BME,cAAc,GAAd,SAAAA,cAAcA,CAACP,KAAa,EAAA;IACjC,IAAI,CAACA,KAAK,GAAGA,KAAK,CAAA;AAClB,IAAA,OAAO,IAAI,CAAA;GACZ,CAAA;AAAAK,EAAAA,MAAA,CACMG,UAAU,GAAV,SAAAA,UAAUA,CAACC,OAAe,EAAA;IAC/B,IAAI,CAACP,MAAM,GAAGO,OAAO,CAAA;AACrB,IAAA,OAAO,IAAI,CAAA;GACZ,CAAA;AAAAJ,EAAAA,MAAA,CACMK,cAAc,GAAd,SAAAA,cAAcA,CAACC,MAKrB,EAAA;IAAA,IAAAC,cAAA,EAAAC,WAAA,CAAA;IACC,IAAIF,MAAM,CAACT,MAAM,IAAI,IAAI,IAAI,IAAI,CAACA,MAAM,KAAK,EAAE,EAAE;AAC/C,MAAA,MAAM,IAAIV,KAAK,CACb,sEAAsE,CACvE,CAAA;AACH,KAAA;AACA,IAAA,IAAI,CAACW,KAAK,CAACW,IAAI,CAAAC,QAAA,KACVJ,MAAM,EAAA;MACTT,MAAM,EAAA,CAAAU,cAAA,GAAED,MAAM,CAACT,MAAM,KAAA,IAAA,GAAAU,cAAA,GAAI,IAAI,CAACV,MAAM;MACpCc,GAAG,EAAA,CAAAH,WAAA,GAAEF,MAAM,CAACK,GAAG,KAAA,IAAA,GAAAH,WAAA,GAAI,CAAA;AAAC,KAAA,CACrB,CAAC,CAAA;AACF,IAAA,OAAO,IAAI,CAAA;GACZ,CAAA;AAAAR,EAAAA,MAAA,CACMY,eAAe,GAAf,SAAAA,eAAeA,CAACN,MAMtB,EAAA;IAAA,IAAAO,eAAA,EAAAC,YAAA,CAAA;IACC,IAAIR,MAAM,CAACT,MAAM,IAAI,IAAI,IAAI,IAAI,CAACA,MAAM,KAAK,EAAE,EAAE;AAC/C,MAAA,MAAM,IAAIV,KAAK,CACb,sEAAsE,CACvE,CAAA;AACH,KAAA;AACA,IAAA,IAAI,CAACW,KAAK,CAACW,IAAI,CAAAC,QAAA,KACVJ,MAAM,EAAA;MACTT,MAAM,EAAA,CAAAgB,eAAA,GAAEP,MAAM,CAACT,MAAM,KAAA,IAAA,GAAAgB,eAAA,GAAI,IAAI,CAAChB,MAAM;MACpCc,GAAG,EAAA,CAAAG,YAAA,GAAER,MAAM,CAACK,GAAG,KAAA,IAAA,GAAAG,YAAA,GAAI,CAAA;AAAC,KAAA,CACrB,CAAC,CAAA;AACF,IAAA,OAAO,IAAI,CAAA;GACZ,CAAA;AAAAd,EAAAA,MAAA,CACMe,iBAAiB,GAAjB,SAAAA,iBAAiBA,CAACT,MAKxB,EAAA;IAAA,IAAAU,gBAAA,EAAAC,YAAA,CAAA;IACC,IAAIX,MAAM,CAACY,QAAQ,IAAI,IAAI,IAAI,IAAI,CAACrB,MAAM,KAAK,EAAE,EAAE;AACjD,MAAA,MAAM,IAAIV,KAAK,CACb,0EAA0E,CAC3E,CAAA;AACH,KAAA;AACA,IAAA,IAAI,CAACW,KAAK,CAACW,IAAI,CAAAC,QAAA,KACVJ,MAAM,EAAA;MACTY,QAAQ,EAAA,CAAAF,gBAAA,GAAEV,MAAM,CAACY,QAAQ,KAAA,IAAA,GAAAF,gBAAA,GAAI,IAAI,CAACnB,MAAM;MACxCc,GAAG,EAAA,CAAAM,YAAA,GAAEX,MAAM,CAACK,GAAG,KAAA,IAAA,GAAAM,YAAA,GAAI,CAAA;AAAC,KAAA,CACrB,CAAC,CAAA;AACF,IAAA,OAAO,IAAI,CAAA;GACZ,CAAA;EAAAjB,MAAA,CACMmB,WAAW,GAAX,SAAAA,WAAWA,CAACC,kBAA0B,EAAEnF,IAAY,EAAA;AACzD,IAAA,IAAI,CAAC6D,KAAK,CAACW,IAAI,CAAC;AACdzE,MAAAA,WAAW,EAAEoF,kBAAkB;AAC/BnF,MAAAA,IAAI,EAAJA,IAAAA;AACD,KAAA,CAAC,CAAA;AACF,IAAA,OAAO,IAAI,CAAA;GACZ,CAAA;EAAA+D,MAAA,CACMqB,UAAU,GAAV,SAAAA,UAAUA,CAACrF,WAAmB,EAAEqC,GAAW,EAAEiD,GAAW,EAAA;AAC7D,IAAA,IAAI,CAACxB,KAAK,CAACW,IAAI,CAAC;AACdzE,MAAAA,WAAW,EAAXA,WAAW;MACXC,IAAI,EAAA,WAAA,GAAcoC,GAAG,GAAA,GAAA,GAAIiD,GAAG,GAAA,GAAA;AAC7B,KAAA,CAAC,CAAA;AACF,IAAA,OAAO,IAAI,CAAA;GACZ,CAAA;EAAAtB,MAAA,CACMuB,UAAU,GAAV,SAAAA,UAAUA,CAACvF,WAAmB,EAAEwF,QAAgB,EAAA;AACrD,IAAA,IAAI,CAAC1B,KAAK,CAACW,IAAI,CAAC;AACdzE,MAAAA,WAAW,EAAXA,WAAW;AACXC,MAAAA,IAAI,gBAAcuF,QAAQ,GAAA,GAAA;AAC3B,KAAA,CAAC,CAAA;AACF,IAAA,OAAO,IAAI,CAAA;GACZ,CAAA;AAAAxB,EAAAA,MAAA,CAEayB,YAAY,gBAAA,YAAA;IAAA,IAAAC,aAAA,gBAAAzE,iBAAA,cAAAC,mBAAA,EAAAC,CAAAA,IAAA,CAAlB,SAAAwE,OAAA,GAAA;AAAA,MAAA,IAAAC,kBAAA,EAAAC,iBAAA,EAAAC,IAAA,CAAA;AAAA,MAAA,OAAA5E,mBAAA,EAAA,CAAAQ,IAAA,CAAA,SAAAqE,SAAAC,QAAA,EAAA;AAAA,QAAA,OAAA,CAAA,EAAA,QAAAA,QAAA,CAAAnE,IAAA,GAAAmE,QAAA,CAAAlE,IAAA;AAAA,UAAA,KAAA,CAAA;AAAA,YAAA,IAAA,CACFmE,MAAM,CAACC,KAAK,CAAC,IAAI,CAACvC,KAAK,CAAC,EAAA;AAAAqC,cAAAA,QAAA,CAAAlE,IAAA,GAAA,CAAA,CAAA;AAAA,cAAA,MAAA;AAAA,aAAA;AAAAkE,YAAAA,QAAA,CAAAlE,IAAA,GAAA,CAAA,CAAA;YAAA,OACUqE,qBAAW,EAAE,CAAA;AAAA,UAAA,KAAA,CAAA;YAAAP,kBAAA,GAAAI,QAAA,CAAA9C,IAAA,CAAA;YAAzC2C,iBAAiB,GAAAD,kBAAA,CAAjBC,iBAAiB,CAAA;YACzB,IAAI,CAAClC,KAAK,GAAGkC,iBAAiB,CAAA;AAAC,UAAA,KAAA,CAAA;AAAAG,YAAAA,QAAA,CAAAlE,IAAA,GAAA,CAAA,CAAA;YAAA,OAEPsE,mBAAS,CACkB,kDAAA,GAAA,IAAI,CAACzC,KAAK,GAAkB,kBAAA,CAChF,CAAChB,IAAI,CAAC,UAAC0D,CAAC,EAAA;AAAA,cAAA,OAAKA,CAAC,CAACC,IAAI,EAAE,CAAA;aAAC,CAAA,CAAA;AAAA,UAAA,KAAA,CAAA;YAFjBR,IAAI,GAAAE,QAAA,CAAA9C,IAAA,CAAA;YAAA,IAIR4C,EAAAA,IAAI,CAACS,MAAM,KAAK,IAAI,CAAC5C,KAAK,IAC1B,OAAOmC,IAAI,CAACU,IAAI,KAAK,QAAQ,IAC7B,CAACV,IAAI,CAACU,IAAI,CAACrE,UAAU,CAAC,IAAI,CAAC,CAAA,EAAA;AAAA6D,cAAAA,QAAA,CAAAlE,IAAA,GAAA,EAAA,CAAA;AAAA,cAAA,MAAA;AAAA,aAAA;AAAA,YAAA,MAErB,IAAIqB,KAAK,CAAA,4CAAA,GACgC,IAAI,CAACQ,KAAO,CAC1D,CAAA;AAAA,UAAA,KAAA,EAAA;YAAA,OAAAqC,QAAA,CAAA5C,MAAA,CAEI,QAAA,EAAA;cACL9B,YAAY,EAAE,IAAI,CAACqC,KAAK;cACxBtC,UAAU,EAAEyE,IAAI,CAACU,IAAI,CAACpE,SAAS,CAAC,CAAC,CAAC;AAClCqE,cAAAA,gBAAgB,EAAEX,IAAI,CAACW,gBAAgB,CAACrE,SAAS,CAAC,CAAC,CAAA;aACpD,CAAA,CAAA;AAAA,UAAA,KAAA,EAAA,CAAA;AAAA,UAAA,KAAA,KAAA;YAAA,OAAA4D,QAAA,CAAAzC,IAAA,EAAA,CAAA;AAAA,SAAA;AAAA,OAAA,EAAAoC,OAAA,EAAA,IAAA,CAAA,CAAA;KACF,CAAA,CAAA,CAAA;AAAA,IAAA,SAtBaF,YAAYA,GAAA;AAAA,MAAA,OAAAC,aAAA,CAAA3E,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,KAAA;AAAA,IAAA,OAAZyE,YAAY,CAAA;AAAA,GAAA,EAAA,CAAA;AAAAzB,EAAAA,MAAA,CAwBb0C,GAAG,gBAAA,YAAA;IAAA,IAAAC,IAAA,gBAAA1F,iBAAA,cAAAC,mBAAA,EAAAC,CAAAA,IAAA,CAAT,SAAAyF,QAAA,GAAA;AAAA,MAAA,IAAAjD,KAAA,EAAApC,GAAA,EAAAsF,gBAAA,EAAAC,SAAA,EAAAC,SAAA,EAAAC,KAAA,EAAAC,IAAA,EAAAC,mBAAA,EAAAC,KAAA,EAAAC,qBAAA,EAAAC,eAAA,EAAAC,YAAA,EAAA/H,EAAA,EAAAgI,MAAA,EAAAC,GAAA,EAAAC,OAAA,EAAAC,IAAA,EAAAjE,EAAA,CAAA;AAAA,MAAA,OAAAvC,mBAAA,EAAA,CAAAQ,IAAA,CAAA,SAAAiG,UAAAC,SAAA,EAAA;AAAA,QAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAA/F,IAAA,GAAA+F,SAAA,CAAA9F,IAAA;AAAA,UAAA,KAAA,CAAA;YACL+F,OAAO,CAACC,GAAG,CAAA,4RASkB,CAC5B,CAAA;AAACF,YAAAA,SAAA,CAAA9F,IAAA,GAAA,CAAA,CAAA;AAAA,YAAA,OACkB,IAAI,CAAC2D,YAAY,EAAE,CAAA;AAAA,UAAA,KAAA,CAAA;YAAjC9B,KAAK,GAAAiE,SAAA,CAAA1E,IAAA,CAAA;YACX2E,OAAO,CAACC,GAAG,CAAA,qBAAA,GACanE,KAAK,CAACrC,YAAY,GAAA,UAAA,GAAWqC,KAAK,CAACtC,UAAU,GAAA,qBAAqB,CACzF,CAAA;AACKE,YAAAA,GAAG,GAA+C,EAAE,CAAA;AACpDsF,YAAAA,gBAAgB,GAAG,IAAIkB,GAAG,EAAkB,CAAA;YAC5CjB,SAAS,gBAAA,YAAA;cAAA,IAAAkB,KAAA,GAAA/G,iBAAA,cAAAC,mBAAA,GAAAC,IAAA,CAAG,SAAA8G,QAAAA,CAAOpE,MAAc,EAAA;AAAA,gBAAA,IAAAsD,KAAA,EAAAe,GAAA,EAAAC,OAAA,CAAA;AAAA,gBAAA,OAAAjH,mBAAA,EAAA,CAAAQ,IAAA,CAAA,SAAA0G,UAAAC,SAAA,EAAA;AAAA,kBAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAAxG,IAAA,GAAAwG,SAAA,CAAAvG,IAAA;AAAA,oBAAA,KAAA,CAAA;AAC/BqF,sBAAAA,KAAK,GAAGN,gBAAgB,CAACyB,GAAG,CAACzE,MAAM,CAAC,CAAA;sBAAA,IACtCsD,EAAAA,KAAK,IAAI,IAAI,CAAA,EAAA;AAAAkB,wBAAAA,SAAA,CAAAvG,IAAA,GAAA,CAAA,CAAA;AAAA,wBAAA,MAAA;AAAA,uBAAA;AACToG,sBAAAA,GAAG,wCAAsCrE,MAAM,GAAA,SAAA,GAAU,KAAK,GAClEF,OAAAA,GAAAA,KAAK,CAAC8C,gBACR,CAAA;AAAA4B,sBAAAA,SAAA,CAAAvG,IAAA,GAAA,CAAA,CAAA;sBAAA,OAC2CsE,mBAAS,CAAC8B,GAAG,CAAC,CAACvF,IAAI,CAAC,UAAC0D,CAAC,EAAA;AAAA,wBAAA,OAC/DA,CAAC,CAACC,IAAI,EAAE,CAAA;uBACT,CAAA,CAAA;AAAA,oBAAA,KAAA,CAAA;sBAFK6B,OAAO,GAAAE,SAAA,CAAAnF,IAAA,CAAA;sBAGb2D,gBAAgB,CAAC0B,GAAG,CAAC1E,MAAM,EAAEsE,OAAO,CAAChB,KAAK,GAAG,CAAC,CAAC,CAAA;AAAC,sBAAA,OAAAkB,SAAA,CAAAjF,MAAA,CACzC+E,QAAAA,EAAAA,OAAO,CAAChB,KAAK,CAAA,CAAA;AAAA,oBAAA,KAAA,CAAA;sBAEtBN,gBAAgB,CAAC0B,GAAG,CAAC1E,MAAM,EAAEsD,KAAK,GAAG,CAAC,CAAC,CAAA;AAAC,sBAAA,OAAAkB,SAAA,CAAAjF,MAAA,CAAA,QAAA,EACjC+D,KAAK,CAAA,CAAA;AAAA,oBAAA,KAAA,EAAA,CAAA;AAAA,oBAAA,KAAA,KAAA;sBAAA,OAAAkB,SAAA,CAAA9E,IAAA,EAAA,CAAA;AAAA,mBAAA;AAAA,iBAAA,EAAA0E,QAAA,CAAA,CAAA;eACb,CAAA,CAAA,CAAA;cAAA,OAdKnB,SAAAA,SAASA,CAAA0B,GAAA,EAAA;AAAA,gBAAA,OAAAR,KAAA,CAAAjH,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,eAAA,CAAA;AAAA,aAAA,EAAA,CAAA;AAAA+F,YAAAA,SAAA,GAAA0B,+BAAA,CAeI,IAAI,CAAC3E,KAAK,CAAA,CAAA;AAAA,UAAA,KAAA,CAAA;AAAA,YAAA,IAAA,CAAAkD,KAAA,GAAAD,SAAA,EAAA,EAAA2B,IAAA,EAAA;AAAAd,cAAAA,SAAA,CAAA9F,IAAA,GAAA,EAAA,CAAA;AAAA,cAAA,MAAA;AAAA,aAAA;YAAlBmF,IAAI,GAAAD,KAAA,CAAA2B,KAAA,CAAA;AAAA,YAAA,IAAA,EACT,QAAQ,IAAI1B,IAAI,IAAI,eAAe,IAAIA,IAAI,CAAA,EAAA;AAAAW,cAAAA,SAAA,CAAA9F,IAAA,GAAA,EAAA,CAAA;AAAA,cAAA,MAAA;AAAA,aAAA;AAAA8F,YAAAA,SAAA,CAAA9F,IAAA,GAAA,EAAA,CAAA;AAAA,YAAA,OACzBgF,SAAS,CAACG,IAAI,CAACpD,MAAM,CAAC,CAAA;AAAA,UAAA,KAAA,EAAA;YAApCsD,KAAK,GAAAS,SAAA,CAAA1E,IAAA,CAAA;AAAAkE,YAAAA,qBAAA,GAC6BH,IAAI,CAACjH,WAAW,CAACG,KAAK,CAAC,GAAG,CAAC,EAA5DkH,eAAe,GAAAD,qBAAA,CAAEE,CAAAA,CAAAA,EAAAA,YAAY,GAAAF,qBAAA,CAAA,CAAA,CAAA,CAAA;AAAAQ,YAAAA,SAAA,CAAA9F,IAAA,GAAA,EAAA,CAAA;AAAA,YAAA,OACnB8G,qCAAwB,CAAC;AACxCvB,cAAAA,eAAe,EAAfA,eAAe;AACfC,cAAAA,YAAY,EAAZA,YAAY;cACZuB,YAAY,EAAE5B,IAAI,CAAC6B,aAAa;cAChCC,YAAY,EAAA,CAAA7B,mBAAA,GAAED,IAAI,CAAC+B,aAAa,KAAA,IAAA,GAAA9B,mBAAA,GAAI,EAAE;AACtCC,cAAAA,KAAK,EAALA,KAAK;AACL8B,cAAAA,OAAO,EAAEC,sBAAc;AACvBC,cAAAA,SAAS,EAAE,EAAE;cACbC,iBAAiB,EAAEC,8BAAiB,CAACC,KAAK;cAC1C3E,GAAG,EAAEsC,IAAI,CAACtC,GAAAA;AACX,aAAA,CAAC,CAAA;AAAA,UAAA,KAAA,EAAA;YAVIpF,EAAE,GAAAqI,SAAA,CAAA1E,IAAA,CAAA;AAWR3D,YAAAA,EAAE,CAACgK,IAAI,CAACC,iBAAiB,CAACC,MAAM,GAAGC,yBAAgB,CAACzC,IAAI,CAACpD,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;AACnEtC,YAAAA,GAAG,CAACkD,IAAI,CAAClF,EAAE,CAAC,CAAA;AAACqI,YAAAA,SAAA,CAAA9F,IAAA,GAAA,EAAA,CAAA;AAAA,YAAA,MAAA;AAAA,UAAA,KAAA,EAAA;AAAA,YAAA,IAAA,EACJ,QAAQ,IAAImF,IAAI,IAAI,WAAW,IAAIA,IAAI,CAAA,EAAA;AAAAW,cAAAA,SAAA,CAAA9F,IAAA,GAAA,EAAA,CAAA;AAAA,cAAA,MAAA;AAAA,aAAA;AAAA8F,YAAAA,SAAA,CAAA9F,IAAA,GAAA,EAAA,CAAA;AAAA,YAAA,OAC5BgF,SAAS,CAACG,IAAI,CAACpD,MAAM,CAAC,CAAA;AAAA,UAAA,KAAA,EAAA;YAApCsD,MAAK,GAAAS,SAAA,CAAA1E,IAAA,CAAA;AAAA0E,YAAAA,SAAA,CAAA9F,IAAA,GAAA,EAAA,CAAA;AAAA,YAAA,OACM6H,yCAA4B,CAAC;cAC5CC,SAAS,EAAE3C,IAAI,CAAC2C,SAAS;cACzBC,MAAM,EAAE5C,IAAI,CAAC4C,MAAM;AACnB1C,cAAAA,KAAK,EAALA,MAAK;AACL8B,cAAAA,OAAO,EAAEC,sBAAc;AACvBC,cAAAA,SAAS,EAAE,EAAE;cACbxE,GAAG,EAAEsC,IAAI,CAACtC,GAAAA;AACX,aAAA,CAAC,CAAA;AAAA,UAAA,KAAA,EAAA;YAPIpF,GAAE,GAAAqI,SAAA,CAAA1E,IAAA,CAAA;AAQR3D,YAAAA,GAAE,CAACgK,IAAI,CAACC,iBAAiB,CAACC,MAAM,GAAGC,yBAAgB,CAACzC,IAAI,CAACpD,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;AACnEtC,YAAAA,GAAG,CAACkD,IAAI,CAAClF,GAAE,CAAC,CAAA;AAACqI,YAAAA,SAAA,CAAA9F,IAAA,GAAA,EAAA,CAAA;AAAA,YAAA,MAAA;AAAA,UAAA,KAAA,EAAA;YAAA,IACJ,EAAA,UAAU,IAAImF,IAAI,CAAA,EAAA;AAAAW,cAAAA,SAAA,CAAA9F,IAAA,GAAA,EAAA,CAAA;AAAA,cAAA,MAAA;AAAA,aAAA;AAAA8F,YAAAA,SAAA,CAAA9F,IAAA,GAAA,EAAA,CAAA;AAAA,YAAA,OACPgF,SAAS,CAACG,IAAI,CAAC/B,QAAQ,CAAC,CAAA;AAAA,UAAA,KAAA,EAAA;YAAtCiC,OAAK,GAAAS,SAAA,CAAA1E,IAAA,CAAA;AAAA0E,YAAAA,SAAA,CAAA9F,IAAA,GAAA,EAAA,CAAA;AAAA,YAAA,OACMgI,uCAA0B,CAAC;cAC1CxC,YAAY,EAAEL,IAAI,CAAC5G,aAAa;cAChC0J,QAAQ,EAAE9C,IAAI,CAAC+C,WAAW;AAC1B7C,cAAAA,KAAK,EAALA,OAAK;AACL8B,cAAAA,OAAO,EAAEC,sBAAc;AACvBC,cAAAA,SAAS,EAAE,EAAE;cACbC,iBAAiB,EAAEC,8BAAiB,CAACC,KAAK;cAC1C3E,GAAG,EAAEsC,IAAI,CAACtC,GAAAA;AACX,aAAA,CAAC,CAAA;AAAA,UAAA,KAAA,EAAA;YARIpF,IAAE,GAAAqI,SAAA,CAAA1E,IAAA,CAAA;AASR3D,YAAAA,IAAE,CAACgK,IAAI,CAACC,iBAAiB,CAACC,MAAM,GAAGC,yBAAgB,CAACzC,IAAI,CAAC/B,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;AACrE3D,YAAAA,GAAG,CAACkD,IAAI,CAAClF,IAAE,CAAC,CAAA;AAACqI,YAAAA,SAAA,CAAA9F,IAAA,GAAA,EAAA,CAAA;AAAA,YAAA,MAAA;AAAA,UAAA,KAAA,EAAA;YACR,IAAI,MAAM,IAAImF,IAAI,EAAE;AACzB1F,cAAAA,GAAG,CAACkD,IAAI,CAACwC,IAAI,CAAC,CAAA;AAChB,aAAC,MAAM;AACL;AACAY,cAAAA,OAAO,CAACC,GAAG,CAA6Bb,0BAAAA,EAAAA,IAAI,CAAC,CAAA;AAC/C,aAAA;AAAC,UAAA,KAAA,EAAA;AAAAW,YAAAA,SAAA,CAAA9F,IAAA,GAAA,CAAA,CAAA;AAAA,YAAA,MAAA;AAAA,UAAA,KAAA,EAAA;AAAA8F,YAAAA,SAAA,CAAA9F,IAAA,GAAA,EAAA,CAAA;YAAA,OAEcpB,aAAa,CAACiD,KAAK,CAACtC,UAAU,EAAEsC,KAAK,CAACrC,YAAY,EAAEC,GAAG,CAAC,CAAA;AAAA,UAAA,KAAA,EAAA;YAAnEkC,EAAE,GAAAmE,SAAA,CAAA1E,IAAA,CAAA;AACR2E,YAAAA,OAAO,CAACC,GAAG,CACiErE,yEAAAA,GAAAA,EAAI,CAC/E,CAAA;AAAC,YAAA,OAAAmE,SAAA,CAAAxE,MAAA,CAAA,QAAA,EACKK,EAAE,CAAA,CAAA;AAAA,UAAA,KAAA,EAAA,CAAA;AAAA,UAAA,KAAA,KAAA;YAAA,OAAAmE,SAAA,CAAArE,IAAA,EAAA,CAAA;AAAA,SAAA;AAAA,OAAA,EAAAqD,QAAA,EAAA,IAAA,CAAA,CAAA;KACV,CAAA,CAAA,CAAA;AAAA,IAAA,SAvFYF,GAAGA,GAAA;AAAA,MAAA,OAAAC,IAAA,CAAA5F,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,KAAA;AAAA,IAAA,OAAH0F,GAAG,CAAA;AAAA,GAAA,EAAA,CAAA;AAAA,EAAA,OAAAhD,iBAAA,CAAA;AAAA,CAAA;;;;;;"}
|
|
1
|
+
{"version":3,"file":"stxer.cjs.development.js","sources":["../src/index.ts"],"sourcesContent":["import { type AccountDataResponse, getNodeInfo, richFetch } from 'ts-clarity';\nimport type { Block } from '@stacks/stacks-blockchain-api-types';\nimport { STACKS_MAINNET } from '@stacks/network';\nimport {\n AnchorMode,\n type ClarityValue,\n PostConditionMode,\n type StacksTransactionWire,\n bufferCV,\n contractPrincipalCV,\n makeUnsignedContractCall,\n makeUnsignedContractDeploy,\n makeUnsignedSTXTokenTransfer,\n serializeCVBytes,\n stringAsciiCV,\n tupleCV,\n uintCV,\n} from '@stacks/transactions';\nimport { c32addressDecode } from 'c32check';\n\nfunction runTx(tx: StacksTransactionWire) {\n // type 0: run transaction\n return tupleCV({ type: uintCV(0), data: bufferCV(tx.serializeBytes()) });\n}\n\nexport interface SimulationEval {\n contract_id: string;\n code: string;\n}\n\nexport function runEval({ contract_id, code }: SimulationEval) {\n const [contract_address, contract_name] = contract_id.split('.');\n // type 1: eval arbitrary code inside a contract\n return tupleCV({\n type: uintCV(1),\n data: bufferCV(\n serializeCVBytes(\n tupleCV({\n contract: contractPrincipalCV(contract_address, contract_name),\n code: stringAsciiCV(code),\n })\n )\n ),\n });\n}\n\nexport async function runSimulation(\n apiEndpoint: string,\n block_hash: string,\n block_height: number,\n txs: (StacksTransactionWire | SimulationEval)[]\n) {\n // Convert 'sim-v1' to Uint8Array\n const header = new TextEncoder().encode('sim-v1');\n // Create 8 bytes for block height\n const heightBytes = new Uint8Array(8);\n // Convert block height to bytes\n const view = new DataView(heightBytes.buffer);\n view.setBigUint64(0, BigInt(block_height), false); // false for big-endian\n\n // Convert block hash to bytes\n const hashHex = block_hash.startsWith('0x') ? block_hash.substring(2) : block_hash;\n // biome-ignore lint/style/noNonNullAssertion: <explanation>\n const hashBytes = new Uint8Array(hashHex.match(/.{1,2}/g)!.map(byte => Number.parseInt(byte, 16)));\n\n // Convert transactions to bytes\n const txBytes = txs\n .map((t) => 'contract_id' in t && 'code' in t ? runEval(t) : runTx(t))\n .map((t) => serializeCVBytes(t));\n\n // Combine all byte arrays\n const totalLength = header.length + heightBytes.length + hashBytes.length + \n txBytes.reduce((acc, curr) => acc + curr.length, 0);\n const body = new Uint8Array(totalLength);\n\n let offset = 0;\n body.set(header, offset);\n offset += header.length;\n body.set(heightBytes, offset);\n offset += heightBytes.length;\n body.set(hashBytes, offset);\n offset += hashBytes.length;\n for (const tx of txBytes) {\n body.set(tx, offset);\n offset += tx.length;\n }\n\n const rs = await fetch(apiEndpoint, {\n method: 'POST',\n body,\n }).then(async (rs) => {\n const response = await rs.text();\n if (!response.startsWith('{')) {\n throw new Error(`failed to submit simulation: ${response}`);\n }\n return JSON.parse(response) as { id: string };\n });\n return rs.id;\n}\n\ninterface SimulationBuilderOptions {\n apiEndpoint?: string;\n stacksNodeAPI?: string;\n}\n\nexport class SimulationBuilder {\n private apiEndpoint: string;\n private stacksNodeAPI: string;\n\n private constructor(options: SimulationBuilderOptions = {}) {\n this.apiEndpoint = options.apiEndpoint ?? 'https://api.stxer.xyz';\n this.stacksNodeAPI = options.stacksNodeAPI ?? 'https://api.hiro.so';\n }\n\n public static new(options?: SimulationBuilderOptions) {\n return new SimulationBuilder(options);\n }\n\n // biome-ignore lint/style/useNumberNamespace: <explanation>\n private block = NaN;\n private sender = '';\n private steps: (\n | {\n // contract call\n contract_id: string;\n function_name: string;\n function_args?: ClarityValue[];\n sender: string;\n fee: number;\n }\n | {\n // contract deploy\n contract_name: string;\n source_code: string;\n deployer: string;\n fee: number;\n }\n | {\n // STX transfer\n recipient: string;\n amount: number;\n sender: string;\n fee: number;\n }\n | SimulationEval\n )[] = [];\n\n public useBlockHeight(block: number) {\n this.block = block;\n return this;\n }\n public withSender(address: string) {\n this.sender = address;\n return this;\n }\n public addSTXTransfer(params: {\n recipient: string;\n amount: number;\n sender?: string;\n fee?: number;\n }) {\n if (params.sender == null && this.sender === '') {\n throw new Error(\n 'Please specify a sender with useSender or adding a sender paramenter'\n );\n }\n this.steps.push({\n ...params,\n sender: params.sender ?? this.sender,\n fee: params.fee ?? 0,\n });\n return this;\n }\n public addContractCall(params: {\n contract_id: string;\n function_name: string;\n function_args?: ClarityValue[];\n sender?: string;\n fee?: number;\n }) {\n if (params.sender == null && this.sender === '') {\n throw new Error(\n 'Please specify a sender with useSender or adding a sender paramenter'\n );\n }\n this.steps.push({\n ...params,\n sender: params.sender ?? this.sender,\n fee: params.fee ?? 0,\n });\n return this;\n }\n public addContractDeploy(params: {\n contract_name: string;\n source_code: string;\n deployer?: string;\n fee?: number;\n }) {\n if (params.deployer == null && this.sender === '') {\n throw new Error(\n 'Please specify a deployer with useSender or adding a deployer paramenter'\n );\n }\n this.steps.push({\n ...params,\n deployer: params.deployer ?? this.sender,\n fee: params.fee ?? 0,\n });\n return this;\n }\n public addEvalCode(inside_contract_id: string, code: string) {\n this.steps.push({\n contract_id: inside_contract_id,\n code,\n });\n return this;\n }\n public addMapRead(contract_id: string, map: string, key: string) {\n this.steps.push({\n contract_id,\n code: `(map-get ${map} ${key})`,\n });\n return this;\n }\n public addVarRead(contract_id: string, variable: string) {\n this.steps.push({\n contract_id,\n code: `(var-get ${variable})`,\n });\n return this;\n }\n\n private async getBlockInfo() {\n if (Number.isNaN(this.block)) {\n const { stacks_tip_height } = await getNodeInfo({\n stacksEndpoint: this.stacksNodeAPI,\n });\n this.block = stacks_tip_height;\n }\n const info: Block = await richFetch(\n `${this.stacksNodeAPI}/extended/v1/block/by_height/${this.block}?unanchored=true`\n ).then((r) => r.json());\n if (\n info.height !== this.block ||\n typeof info.hash !== 'string' ||\n !info.hash.startsWith('0x')\n ) {\n throw new Error(\n `failed to get block info for block height ${this.block}`\n );\n }\n return {\n block_height: this.block,\n block_hash: info.hash.substring(2),\n index_block_hash: info.index_block_hash.substring(2),\n };\n }\n\n public async run() {\n console.log(\n `--------------------------------\nThis product can never exist without your support!\n\nWe receive sponsorship funds with:\nSP212Y5JKN59YP3GYG07K3S8W5SSGE4KH6B5STXER\n\nFeedbacks and feature requests are welcome.\nTo get in touch: contact@stxer.xyz\n--------------------------------`\n );\n const block = await this.getBlockInfo();\n console.log(\n `Using block height ${block.block_height} hash 0x${block.block_hash} to run simulation.`\n );\n const txs: (StacksTransactionWire | SimulationEval)[] = [];\n const nonce_by_address = new Map<string, number>();\n const nextNonce = async (sender: string) => {\n const nonce = nonce_by_address.get(sender);\n if (nonce == null) {\n const url = `${this.stacksNodeAPI}/v2/accounts/${sender}?proof=${false}&tip=${\n block.index_block_hash\n }`;\n const account: AccountDataResponse = await richFetch(url).then((r) =>\n r.json()\n );\n nonce_by_address.set(sender, account.nonce + 1);\n return account.nonce;\n }\n nonce_by_address.set(sender, nonce + 1);\n return nonce;\n };\n for (const step of this.steps) {\n if ('sender' in step && 'function_name' in step) {\n const nonce = await nextNonce(step.sender);\n const [contractAddress, contractName] = step.contract_id.split('.');\n const tx = await makeUnsignedContractCall({\n contractAddress,\n contractName,\n functionName: step.function_name,\n functionArgs: step.function_args ?? [],\n nonce,\n network: STACKS_MAINNET,\n publicKey: '',\n postConditionMode: PostConditionMode.Allow,\n fee: step.fee,\n });\n tx.auth.spendingCondition.signer = c32addressDecode(step.sender)[1];\n txs.push(tx);\n } else if ('sender' in step && 'recipient' in step) {\n const nonce = await nextNonce(step.sender);\n const tx = await makeUnsignedSTXTokenTransfer({\n recipient: step.recipient,\n amount: step.amount,\n nonce,\n network: STACKS_MAINNET,\n publicKey: '',\n fee: step.fee,\n });\n tx.auth.spendingCondition.signer = c32addressDecode(step.sender)[1];\n txs.push(tx);\n } else if ('deployer' in step) {\n const nonce = await nextNonce(step.deployer);\n const tx = await makeUnsignedContractDeploy({\n contractName: step.contract_name,\n codeBody: step.source_code,\n nonce,\n network: STACKS_MAINNET,\n publicKey: '',\n postConditionMode: PostConditionMode.Allow,\n fee: step.fee,\n });\n tx.auth.spendingCondition.signer = c32addressDecode(step.deployer)[1];\n txs.push(tx);\n } else if ('code' in step) {\n txs.push(step);\n } else {\n // biome-ignore lint/style/noUnusedTemplateLiteral: <explanation>\n console.log(`Invalid simulation step:`, step);\n }\n }\n const id = await runSimulation(\n `${this.apiEndpoint}/simulations`,\n block.block_hash, \n block.block_height, \n txs\n );\n console.log(\n `Simulation will be available at: https://stxer.xyz/simulations/mainnet/${id}`\n );\n return id;\n }\n}\n"],"names":["runTx","tx","tupleCV","type","uintCV","data","bufferCV","serializeBytes","runEval","_ref","contract_id","code","_contract_id$split","split","contract_address","contract_name","serializeCVBytes","contract","contractPrincipalCV","stringAsciiCV","runSimulation","_x","_x2","_x3","_x4","_runSimulation","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee5","apiEndpoint","block_hash","block_height","txs","header","heightBytes","view","hashHex","hashBytes","txBytes","totalLength","body","offset","_iterator2","_step2","rs","wrap","_callee5$","_context5","prev","next","TextEncoder","encode","Uint8Array","DataView","buffer","setBigUint64","BigInt","startsWith","substring","match","map","byte","Number","parseInt","t","length","reduce","acc","curr","set","_createForOfIteratorHelperLoose","done","value","fetch","method","then","_ref3","_callee4","response","_callee4$","_context4","text","sent","Error","abrupt","JSON","parse","stop","_x6","id","SimulationBuilder","options","_options$apiEndpoint","_options$stacksNodeAP","stacksNodeAPI","block","NaN","sender","steps","new","_proto","prototype","useBlockHeight","withSender","address","addSTXTransfer","params","_params$sender","_params$fee","push","_extends","fee","addContractCall","_params$sender2","_params$fee2","addContractDeploy","_params$deployer","_params$fee3","deployer","addEvalCode","inside_contract_id","addMapRead","key","addVarRead","variable","getBlockInfo","_getBlockInfo","_callee","_yield$getNodeInfo","stacks_tip_height","info","_callee$","_context","isNaN","getNodeInfo","stacksEndpoint","richFetch","r","json","height","hash","index_block_hash","run","_run","_callee3","_this","nonce_by_address","nextNonce","_iterator","_step","step","_step$function_args","nonce","_step$contract_id$spl","contractAddress","contractName","_nonce","_tx","_nonce2","_tx2","_callee3$","_context3","console","log","Map","_ref2","_callee2","url","account","_callee2$","_context2","get","_x5","makeUnsignedContractCall","functionName","function_name","functionArgs","function_args","network","STACKS_MAINNET","publicKey","postConditionMode","PostConditionMode","Allow","auth","spendingCondition","signer","c32addressDecode","makeUnsignedSTXTokenTransfer","recipient","amount","makeUnsignedContractDeploy","codeBody","source_code"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t=require("ts-clarity"),e=require("@stacks/network"),r=require("@stacks/transactions"),n=require("c32check");function o(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}function i(t,e,r,n,o,i,a){try{var s=t[i](a),c=s.value}catch(t){return void r(t)}s.done?e(c):Promise.resolve(c).then(n,o)}function a(t){return function(){var e=this,r=arguments;return new Promise((function(n,o){var a=t.apply(e,r);function s(t){i(a,n,o,s,c,"next",t)}function c(t){i(a,n,o,s,c,"throw",t)}s(void 0)}))}}function s(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(r)return(r=r.call(t)).next.bind(r);if(Array.isArray(t)||(r=function(t,e){if(t){if("string"==typeof t)return o(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?o(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0;return function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function c(){return c=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var r=arguments[e];for(var n in r)({}).hasOwnProperty.call(r,n)&&(t[n]=r[n])}return t},c.apply(null,arguments)}function u(){u=function(){return e};var t,e={},r=Object.prototype,n=r.hasOwnProperty,o=Object.defineProperty||function(t,e,r){t[e]=r.value},i="function"==typeof Symbol?Symbol:{},a=i.iterator||"@@iterator",s=i.asyncIterator||"@@asyncIterator",c=i.toStringTag||"@@toStringTag";function h(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{h({},"")}catch(t){h=function(t,e,r){return t[e]=r}}function l(t,e,r,n){var i=Object.create((e&&e.prototype instanceof m?e:m).prototype),a=new j(n||[]);return o(i,"_invoke",{value:L(t,r,a)}),i}function f(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}e.wrap=l;var p="suspendedStart",d="suspendedYield",y="executing",v="completed",g={};function m(){}function b(){}function w(){}var x={};h(x,a,(function(){return this}));var k=Object.getPrototypeOf,_=k&&k(k(P([])));_&&_!==r&&n.call(_,a)&&(x=_);var E=w.prototype=m.prototype=Object.create(x);function S(t){["next","throw","return"].forEach((function(e){h(t,e,(function(t){return this._invoke(e,t)}))}))}function C(t,e){function r(o,i,a,s){var c=f(t[o],t,i);if("throw"!==c.type){var u=c.arg,h=u.value;return h&&"object"==typeof h&&n.call(h,"__await")?e.resolve(h.__await).then((function(t){r("next",t,a,s)}),(function(t){r("throw",t,a,s)})):e.resolve(h).then((function(t){u.value=t,a(u)}),(function(t){return r("throw",t,a,s)}))}s(c.arg)}var i;o(this,"_invoke",{value:function(t,n){function o(){return new e((function(e,o){r(t,n,e,o)}))}return i=i?i.then(o,o):o()}})}function L(e,r,n){var o=p;return function(i,a){if(o===y)throw Error("Generator is already running");if(o===v){if("throw"===i)throw a;return{value:t,done:!0}}for(n.method=i,n.arg=a;;){var s=n.delegate;if(s){var c=N(s,n);if(c){if(c===g)continue;return c}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(o===p)throw o=v,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);o=y;var u=f(e,r,n);if("normal"===u.type){if(o=n.done?v:d,u.arg===g)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(o=v,n.method="throw",n.arg=u.arg)}}}function N(e,r){var n=r.method,o=e.iterator[n];if(o===t)return r.delegate=null,"throw"===n&&e.iterator.return&&(r.method="return",r.arg=t,N(e,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),g;var i=f(o,e.iterator,r.arg);if("throw"===i.type)return r.method="throw",r.arg=i.arg,r.delegate=null,g;var a=i.arg;return a?a.done?(r[e.resultName]=a.value,r.next=e.nextLoc,"return"!==r.method&&(r.method="next",r.arg=t),r.delegate=null,g):a:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,g)}function T(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function O(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function j(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(T,this),this.reset(!0)}function P(e){if(e||""===e){var r=e[a];if(r)return r.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var o=-1,i=function r(){for(;++o<e.length;)if(n.call(e,o))return r.value=e[o],r.done=!1,r;return r.value=t,r.done=!0,r};return i.next=i}}throw new TypeError(typeof e+" is not iterable")}return b.prototype=w,o(E,"constructor",{value:w,configurable:!0}),o(w,"constructor",{value:b,configurable:!0}),b.displayName=h(w,c,"GeneratorFunction"),e.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===b||"GeneratorFunction"===(e.displayName||e.name))},e.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,w):(t.__proto__=w,h(t,c,"GeneratorFunction")),t.prototype=Object.create(E),t},e.awrap=function(t){return{__await:t}},S(C.prototype),h(C.prototype,s,(function(){return this})),e.AsyncIterator=C,e.async=function(t,r,n,o,i){void 0===i&&(i=Promise);var a=new C(l(t,r,n,o),i);return e.isGeneratorFunction(r)?a:a.next().then((function(t){return t.done?t.value:a.next()}))},S(E),h(E,c,"Generator"),h(E,a,(function(){return this})),h(E,"toString",(function(){return"[object Generator]"})),e.keys=function(t){var e=Object(t),r=[];for(var n in e)r.push(n);return r.reverse(),function t(){for(;r.length;){var n=r.pop();if(n in e)return t.value=n,t.done=!1,t}return t.done=!0,t}},e.values=P,j.prototype={constructor:j,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=t,this.done=!1,this.delegate=null,this.method="next",this.arg=t,this.tryEntries.forEach(O),!e)for(var r in this)"t"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=t)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var r=this;function o(n,o){return s.type="throw",s.arg=e,r.next=n,o&&(r.method="next",r.arg=t),!!o}for(var i=this.tryEntries.length-1;i>=0;--i){var a=this.tryEntries[i],s=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var c=n.call(a,"catchLoc"),u=n.call(a,"finallyLoc");if(c&&u){if(this.prev<a.catchLoc)return o(a.catchLoc,!0);if(this.prev<a.finallyLoc)return o(a.finallyLoc)}else if(c){if(this.prev<a.catchLoc)return o(a.catchLoc,!0)}else{if(!u)throw Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return o(a.finallyLoc)}}}},abrupt:function(t,e){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===t||"continue"===t)&&i.tryLoc<=e&&e<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=t,a.arg=e,i?(this.method="next",this.next=i.finallyLoc,g):this.complete(a)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),g},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),O(r),g}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var o=n.arg;O(r)}return o}}throw Error("illegal catch attempt")},delegateYield:function(e,r,n){return this.delegate={iterator:P(e),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=t),g}},e}function h(t){var e=t.code,n=t.contract_id.split("."),o=n[0],i=n[1];return r.tupleCV({type:r.uintCV(1),data:r.bufferCV(r.serializeCVBytes(r.tupleCV({contract:r.contractPrincipalCV(o,i),code:r.stringAsciiCV(e)})))})}function l(t,e,r){return f.apply(this,arguments)}function f(){return f=a(u().mark((function t(e,n,o){var i;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return(i=Buffer.concat([Buffer.from("sim-v1"),Buffer.alloc(8),Buffer.from(e.startsWith("0x")?e.substring(2):e,"hex")].concat(o.map((function(t){return"contract_id"in t&&"code"in t?h(t):(e=t,r.tupleCV({type:r.uintCV(0),data:r.bufferCV(e.serializeBytes())}));var e})).map((function(t){return r.serializeCVBytes(t)}))))).writeBigUInt64BE(BigInt(n),6),t.next=4,fetch("https://api.stxer.xyz/simulations",{method:"POST",body:i}).then(function(){var t=a(u().mark((function t(e){var r;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.text();case 2:if((r=t.sent).startsWith("{")){t.next=5;break}throw new Error("failed to submit simulation: "+r);case 5:return t.abrupt("return",JSON.parse(r));case 6:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}());case 4:return t.abrupt("return",t.sent.id);case 6:case"end":return t.stop()}}),t)}))),f.apply(this,arguments)}exports.SimulationBuilder=function(){function o(){this.block=NaN,this.sender="",this.steps=[]}o.new=function(){return new o};var i=o.prototype;return i.useBlockHeight=function(t){return this.block=t,this},i.withSender=function(t){return this.sender=t,this},i.addSTXTransfer=function(t){var e,r;if(null==t.sender&&""===this.sender)throw new Error("Please specify a sender with useSender or adding a sender paramenter");return this.steps.push(c({},t,{sender:null!=(e=t.sender)?e:this.sender,fee:null!=(r=t.fee)?r:0})),this},i.addContractCall=function(t){var e,r;if(null==t.sender&&""===this.sender)throw new Error("Please specify a sender with useSender or adding a sender paramenter");return this.steps.push(c({},t,{sender:null!=(e=t.sender)?e:this.sender,fee:null!=(r=t.fee)?r:0})),this},i.addContractDeploy=function(t){var e,r;if(null==t.deployer&&""===this.sender)throw new Error("Please specify a deployer with useSender or adding a deployer paramenter");return this.steps.push(c({},t,{deployer:null!=(e=t.deployer)?e:this.sender,fee:null!=(r=t.fee)?r:0})),this},i.addEvalCode=function(t,e){return this.steps.push({contract_id:t,code:e}),this},i.addMapRead=function(t,e,r){return this.steps.push({contract_id:t,code:"(map-get "+e+" "+r+")"}),this},i.addVarRead=function(t,e){return this.steps.push({contract_id:t,code:"(var-get "+e+")"}),this},i.getBlockInfo=function(){var e=a(u().mark((function e(){var r;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!Number.isNaN(this.block)){e.next=6;break}return e.next=3,t.getNodeInfo();case 3:this.block=e.sent.stacks_tip_height;case 6:return e.next=8,t.richFetch("https://api.hiro.so/extended/v1/block/by_height/"+this.block+"?unanchored=true").then((function(t){return t.json()}));case 8:if((r=e.sent).height===this.block&&"string"==typeof r.hash&&r.hash.startsWith("0x")){e.next=11;break}throw new Error("failed to get block info for block height "+this.block);case 11:return e.abrupt("return",{block_height:this.block,block_hash:r.hash.substring(2),index_block_hash:r.index_block_hash.substring(2)});case 12:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),i.run=function(){var o=a(u().mark((function o(){var i,c,h,f,p,d,y,v,g,m,b,w,x,k,_,E,S,C;return u().wrap((function(o){for(;;)switch(o.prev=o.next){case 0:return console.log("--------------------------------\nThis product can never exist without your support!\n\nWe receive sponsorship funds with:\nSP212Y5JKN59YP3GYG07K3S8W5SSGE4KH6B5STXER\n\nFeedbacks and feature requests are welcome.\nTo get in touch: contact@stxer.xyz\n--------------------------------"),o.next=3,this.getBlockInfo();case 3:i=o.sent,console.log("Using block height "+i.block_height+" hash 0x"+i.block_hash+" to run simulation."),c=[],h=new Map,f=function(){var e=a(u().mark((function e(r){var n,o,a;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(null!=(n=h.get(r))){e.next=8;break}return o="https://api.hiro.so/v2/accounts/"+r+"?proof="+!1+"&tip="+i.index_block_hash,e.next=5,t.richFetch(o).then((function(t){return t.json()}));case 5:return h.set(r,(a=e.sent).nonce+1),e.abrupt("return",a.nonce);case 8:return h.set(r,n+1),e.abrupt("return",n);case 10:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),p=s(this.steps);case 9:if((d=p()).done){o.next=48;break}if(!("sender"in(y=d.value))||!("function_name"in y)){o.next=23;break}return o.next=14,f(y.sender);case 14:return g=o.sent,m=y.contract_id.split("."),b=m[0],w=m[1],o.next=18,r.makeUnsignedContractCall({contractAddress:b,contractName:w,functionName:y.function_name,functionArgs:null!=(v=y.function_args)?v:[],nonce:g,network:e.STACKS_MAINNET,publicKey:"",postConditionMode:r.PostConditionMode.Allow,fee:y.fee});case 18:(x=o.sent).auth.spendingCondition.signer=n.c32addressDecode(y.sender)[1],c.push(x),o.next=46;break;case 23:if(!("sender"in y)||!("recipient"in y)){o.next=34;break}return o.next=26,f(y.sender);case 26:return k=o.sent,o.next=29,r.makeUnsignedSTXTokenTransfer({recipient:y.recipient,amount:y.amount,nonce:k,network:e.STACKS_MAINNET,publicKey:"",fee:y.fee});case 29:(_=o.sent).auth.spendingCondition.signer=n.c32addressDecode(y.sender)[1],c.push(_),o.next=46;break;case 34:if(!("deployer"in y)){o.next=45;break}return o.next=37,f(y.deployer);case 37:return E=o.sent,o.next=40,r.makeUnsignedContractDeploy({contractName:y.contract_name,codeBody:y.source_code,nonce:E,network:e.STACKS_MAINNET,publicKey:"",postConditionMode:r.PostConditionMode.Allow,fee:y.fee});case 40:(S=o.sent).auth.spendingCondition.signer=n.c32addressDecode(y.deployer)[1],c.push(S),o.next=46;break;case 45:"code"in y?c.push(y):console.log("Invalid simulation step:",y);case 46:o.next=9;break;case 48:return o.next=50,l(i.block_hash,i.block_height,c);case 50:return C=o.sent,console.log("Simulation will be available at: https://stxer.xyz/simulations/mainnet/"+C),o.abrupt("return",C);case 53:case"end":return o.stop()}}),o,this)})));return function(){return o.apply(this,arguments)}}(),o}(),exports.runEval=h,exports.runSimulation=l;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t=require("ts-clarity"),e=require("@stacks/network"),n=require("@stacks/transactions"),r=require("c32check");function o(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}function i(t,e,n,r,o,i,a){try{var s=t[i](a),c=s.value}catch(t){return void n(t)}s.done?e(c):Promise.resolve(c).then(r,o)}function a(t){return function(){var e=this,n=arguments;return new Promise((function(r,o){var a=t.apply(e,n);function s(t){i(a,r,o,s,c,"next",t)}function c(t){i(a,r,o,s,c,"throw",t)}s(void 0)}))}}function s(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(n)return(n=n.call(t)).next.bind(n);if(Array.isArray(t)||(n=function(t,e){if(t){if("string"==typeof t)return o(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?o(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0;return function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function c(){return c=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)({}).hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},c.apply(null,arguments)}function u(){u=function(){return e};var t,e={},n=Object.prototype,r=n.hasOwnProperty,o=Object.defineProperty||function(t,e,n){t[e]=n.value},i="function"==typeof Symbol?Symbol:{},a=i.iterator||"@@iterator",s=i.asyncIterator||"@@asyncIterator",c=i.toStringTag||"@@toStringTag";function h(t,e,n){return Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{h({},"")}catch(t){h=function(t,e,n){return t[e]=n}}function l(t,e,n,r){var i=Object.create((e&&e.prototype instanceof m?e:m).prototype),a=new T(r||[]);return o(i,"_invoke",{value:C(t,n,a)}),i}function f(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(t){return{type:"throw",arg:t}}}e.wrap=l;var p="suspendedStart",d="suspendedYield",y="executing",v="completed",g={};function m(){}function b(){}function w(){}var x={};h(x,a,(function(){return this}));var k=Object.getPrototypeOf,_=k&&k(k(I([])));_&&_!==n&&r.call(_,a)&&(x=_);var E=w.prototype=m.prototype=Object.create(x);function S(t){["next","throw","return"].forEach((function(e){h(t,e,(function(t){return this._invoke(e,t)}))}))}function N(t,e){function n(o,i,a,s){var c=f(t[o],t,i);if("throw"!==c.type){var u=c.arg,h=u.value;return h&&"object"==typeof h&&r.call(h,"__await")?e.resolve(h.__await).then((function(t){n("next",t,a,s)}),(function(t){n("throw",t,a,s)})):e.resolve(h).then((function(t){u.value=t,a(u)}),(function(t){return n("throw",t,a,s)}))}s(c.arg)}var i;o(this,"_invoke",{value:function(t,r){function o(){return new e((function(e,o){n(t,r,e,o)}))}return i=i?i.then(o,o):o()}})}function C(e,n,r){var o=p;return function(i,a){if(o===y)throw Error("Generator is already running");if(o===v){if("throw"===i)throw a;return{value:t,done:!0}}for(r.method=i,r.arg=a;;){var s=r.delegate;if(s){var c=A(s,r);if(c){if(c===g)continue;return c}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(o===p)throw o=v,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=y;var u=f(e,n,r);if("normal"===u.type){if(o=r.done?v:d,u.arg===g)continue;return{value:u.arg,done:r.done}}"throw"===u.type&&(o=v,r.method="throw",r.arg=u.arg)}}}function A(e,n){var r=n.method,o=e.iterator[r];if(o===t)return n.delegate=null,"throw"===r&&e.iterator.return&&(n.method="return",n.arg=t,A(e,n),"throw"===n.method)||"return"!==r&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+r+"' method")),g;var i=f(o,e.iterator,n.arg);if("throw"===i.type)return n.method="throw",n.arg=i.arg,n.delegate=null,g;var a=i.arg;return a?a.done?(n[e.resultName]=a.value,n.next=e.nextLoc,"return"!==n.method&&(n.method="next",n.arg=t),n.delegate=null,g):a:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,g)}function L(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function P(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function T(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(L,this),this.reset(!0)}function I(e){if(e||""===e){var n=e[a];if(n)return n.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var o=-1,i=function n(){for(;++o<e.length;)if(r.call(e,o))return n.value=e[o],n.done=!1,n;return n.value=t,n.done=!0,n};return i.next=i}}throw new TypeError(typeof e+" is not iterable")}return b.prototype=w,o(E,"constructor",{value:w,configurable:!0}),o(w,"constructor",{value:b,configurable:!0}),b.displayName=h(w,c,"GeneratorFunction"),e.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===b||"GeneratorFunction"===(e.displayName||e.name))},e.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,w):(t.__proto__=w,h(t,c,"GeneratorFunction")),t.prototype=Object.create(E),t},e.awrap=function(t){return{__await:t}},S(N.prototype),h(N.prototype,s,(function(){return this})),e.AsyncIterator=N,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new N(l(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(t){return t.done?t.value:a.next()}))},S(E),h(E,c,"Generator"),h(E,a,(function(){return this})),h(E,"toString",(function(){return"[object Generator]"})),e.keys=function(t){var e=Object(t),n=[];for(var r in e)n.push(r);return n.reverse(),function t(){for(;n.length;){var r=n.pop();if(r in e)return t.value=r,t.done=!1,t}return t.done=!0,t}},e.values=I,T.prototype={constructor:T,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=t,this.done=!1,this.delegate=null,this.method="next",this.arg=t,this.tryEntries.forEach(P),!e)for(var n in this)"t"===n.charAt(0)&&r.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=t)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var n=this;function o(r,o){return s.type="throw",s.arg=e,n.next=r,o&&(n.method="next",n.arg=t),!!o}for(var i=this.tryEntries.length-1;i>=0;--i){var a=this.tryEntries[i],s=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var c=r.call(a,"catchLoc"),u=r.call(a,"finallyLoc");if(c&&u){if(this.prev<a.catchLoc)return o(a.catchLoc,!0);if(this.prev<a.finallyLoc)return o(a.finallyLoc)}else if(c){if(this.prev<a.catchLoc)return o(a.catchLoc,!0)}else{if(!u)throw Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return o(a.finallyLoc)}}}},abrupt:function(t,e){for(var n=this.tryEntries.length-1;n>=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===t||"continue"===t)&&i.tryLoc<=e&&e<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=t,a.arg=e,i?(this.method="next",this.next=i.finallyLoc,g):this.complete(a)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),g},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),P(n),g}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var o=r.arg;P(n)}return o}}throw Error("illegal catch attempt")},delegateYield:function(e,n,r){return this.delegate={iterator:I(e),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=t),g}},e}function h(t){return n.tupleCV({type:n.uintCV(0),data:n.bufferCV(t.serializeBytes())})}function l(t){var e=t.code,r=t.contract_id.split("."),o=r[0],i=r[1];return n.tupleCV({type:n.uintCV(1),data:n.bufferCV(n.serializeCVBytes(n.tupleCV({contract:n.contractPrincipalCV(o,i),code:n.stringAsciiCV(e)})))})}function f(t,e,n,r){return p.apply(this,arguments)}function p(){return p=a(u().mark((function t(e,r,o,i){var c,f,p,d,y,v,g,m,b,w,x;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:for(c=(new TextEncoder).encode("sim-v1"),f=new Uint8Array(8),new DataView(f.buffer).setBigUint64(0,BigInt(o),!1),p=r.startsWith("0x")?r.substring(2):r,d=new Uint8Array(p.match(/.{1,2}/g).map((function(t){return Number.parseInt(t,16)}))),y=i.map((function(t){return"contract_id"in t&&"code"in t?l(t):h(t)})).map((function(t){return n.serializeCVBytes(t)})),v=c.length+f.length+d.length+y.reduce((function(t,e){return t+e.length}),0),(g=new Uint8Array(v)).set(c,m=0),g.set(f,m+=c.length),g.set(d,m+=f.length),m+=d.length,b=s(y);!(w=b()).done;)g.set(x=w.value,m),m+=x.length;return t.next=19,fetch(e,{method:"POST",body:g}).then(function(){var t=a(u().mark((function t(e){var n;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.text();case 2:if((n=t.sent).startsWith("{")){t.next=5;break}throw new Error("failed to submit simulation: "+n);case 5:return t.abrupt("return",JSON.parse(n));case 6:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}());case 19:return t.abrupt("return",t.sent.id);case 21:case"end":return t.stop()}}),t)}))),p.apply(this,arguments)}exports.SimulationBuilder=function(){function o(t){var e,n;void 0===t&&(t={}),this.apiEndpoint=void 0,this.stacksNodeAPI=void 0,this.block=NaN,this.sender="",this.steps=[],this.apiEndpoint=null!=(e=t.apiEndpoint)?e:"https://api.stxer.xyz",this.stacksNodeAPI=null!=(n=t.stacksNodeAPI)?n:"https://api.hiro.so"}o.new=function(t){return new o(t)};var i=o.prototype;return i.useBlockHeight=function(t){return this.block=t,this},i.withSender=function(t){return this.sender=t,this},i.addSTXTransfer=function(t){var e,n;if(null==t.sender&&""===this.sender)throw new Error("Please specify a sender with useSender or adding a sender paramenter");return this.steps.push(c({},t,{sender:null!=(e=t.sender)?e:this.sender,fee:null!=(n=t.fee)?n:0})),this},i.addContractCall=function(t){var e,n;if(null==t.sender&&""===this.sender)throw new Error("Please specify a sender with useSender or adding a sender paramenter");return this.steps.push(c({},t,{sender:null!=(e=t.sender)?e:this.sender,fee:null!=(n=t.fee)?n:0})),this},i.addContractDeploy=function(t){var e,n;if(null==t.deployer&&""===this.sender)throw new Error("Please specify a deployer with useSender or adding a deployer paramenter");return this.steps.push(c({},t,{deployer:null!=(e=t.deployer)?e:this.sender,fee:null!=(n=t.fee)?n:0})),this},i.addEvalCode=function(t,e){return this.steps.push({contract_id:t,code:e}),this},i.addMapRead=function(t,e,n){return this.steps.push({contract_id:t,code:"(map-get "+e+" "+n+")"}),this},i.addVarRead=function(t,e){return this.steps.push({contract_id:t,code:"(var-get "+e+")"}),this},i.getBlockInfo=function(){var e=a(u().mark((function e(){var n;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!Number.isNaN(this.block)){e.next=6;break}return e.next=3,t.getNodeInfo({stacksEndpoint:this.stacksNodeAPI});case 3:this.block=e.sent.stacks_tip_height;case 6:return e.next=8,t.richFetch(this.stacksNodeAPI+"/extended/v1/block/by_height/"+this.block+"?unanchored=true").then((function(t){return t.json()}));case 8:if((n=e.sent).height===this.block&&"string"==typeof n.hash&&n.hash.startsWith("0x")){e.next=11;break}throw new Error("failed to get block info for block height "+this.block);case 11:return e.abrupt("return",{block_height:this.block,block_hash:n.hash.substring(2),index_block_hash:n.index_block_hash.substring(2)});case 12:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),i.run=function(){var o=a(u().mark((function o(){var i,c,h,l,p,d,y,v,g,m,b,w,x,k,_,E,S,N,C=this;return u().wrap((function(o){for(;;)switch(o.prev=o.next){case 0:return console.log("--------------------------------\nThis product can never exist without your support!\n\nWe receive sponsorship funds with:\nSP212Y5JKN59YP3GYG07K3S8W5SSGE4KH6B5STXER\n\nFeedbacks and feature requests are welcome.\nTo get in touch: contact@stxer.xyz\n--------------------------------"),o.next=3,this.getBlockInfo();case 3:i=o.sent,console.log("Using block height "+i.block_height+" hash 0x"+i.block_hash+" to run simulation."),c=[],h=new Map,l=function(){var e=a(u().mark((function e(n){var r,o,a;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(null!=(r=h.get(n))){e.next=8;break}return o=C.stacksNodeAPI+"/v2/accounts/"+n+"?proof="+!1+"&tip="+i.index_block_hash,e.next=5,t.richFetch(o).then((function(t){return t.json()}));case 5:return h.set(n,(a=e.sent).nonce+1),e.abrupt("return",a.nonce);case 8:return h.set(n,r+1),e.abrupt("return",r);case 10:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),p=s(this.steps);case 9:if((d=p()).done){o.next=48;break}if(!("sender"in(y=d.value))||!("function_name"in y)){o.next=23;break}return o.next=14,l(y.sender);case 14:return g=o.sent,m=y.contract_id.split("."),b=m[0],w=m[1],o.next=18,n.makeUnsignedContractCall({contractAddress:b,contractName:w,functionName:y.function_name,functionArgs:null!=(v=y.function_args)?v:[],nonce:g,network:e.STACKS_MAINNET,publicKey:"",postConditionMode:n.PostConditionMode.Allow,fee:y.fee});case 18:(x=o.sent).auth.spendingCondition.signer=r.c32addressDecode(y.sender)[1],c.push(x),o.next=46;break;case 23:if(!("sender"in y)||!("recipient"in y)){o.next=34;break}return o.next=26,l(y.sender);case 26:return k=o.sent,o.next=29,n.makeUnsignedSTXTokenTransfer({recipient:y.recipient,amount:y.amount,nonce:k,network:e.STACKS_MAINNET,publicKey:"",fee:y.fee});case 29:(_=o.sent).auth.spendingCondition.signer=r.c32addressDecode(y.sender)[1],c.push(_),o.next=46;break;case 34:if(!("deployer"in y)){o.next=45;break}return o.next=37,l(y.deployer);case 37:return E=o.sent,o.next=40,n.makeUnsignedContractDeploy({contractName:y.contract_name,codeBody:y.source_code,nonce:E,network:e.STACKS_MAINNET,publicKey:"",postConditionMode:n.PostConditionMode.Allow,fee:y.fee});case 40:(S=o.sent).auth.spendingCondition.signer=r.c32addressDecode(y.deployer)[1],c.push(S),o.next=46;break;case 45:"code"in y?c.push(y):console.log("Invalid simulation step:",y);case 46:o.next=9;break;case 48:return o.next=50,f(this.apiEndpoint+"/simulations",i.block_hash,i.block_height,c);case 50:return N=o.sent,console.log("Simulation will be available at: https://stxer.xyz/simulations/mainnet/"+N),o.abrupt("return",N);case 53:case"end":return o.stop()}}),o,this)})));return function(){return o.apply(this,arguments)}}(),o}(),exports.runEval=l,exports.runSimulation=f;
|
|
2
2
|
//# sourceMappingURL=stxer.cjs.production.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stxer.cjs.production.min.js","sources":["../src/index.ts"],"sourcesContent":["import { type AccountDataResponse, getNodeInfo, richFetch } from 'ts-clarity';\nimport type { Block } from '@stacks/stacks-blockchain-api-types';\nimport { STACKS_MAINNET } from '@stacks/network';\nimport {\n AnchorMode,\n type ClarityValue,\n PostConditionMode,\n type StacksTransactionWire,\n bufferCV,\n contractPrincipalCV,\n makeUnsignedContractCall,\n makeUnsignedContractDeploy,\n makeUnsignedSTXTokenTransfer,\n serializeCV,\n serializeCVBytes,\n stringAsciiCV,\n tupleCV,\n uintCV,\n} from '@stacks/transactions';\nimport { c32addressDecode } from 'c32check';\n\n// current beta api endpoint\nconst SIMULATION_API_ENDPOINT = 'https://api.stxer.xyz/simulations';\n\nfunction runTx(tx: StacksTransactionWire) {\n // type 0: run transaction\n return tupleCV({ type: uintCV(0), data: bufferCV(tx.serializeBytes()) });\n}\n\nexport interface SimulationEval {\n contract_id: string;\n code: string;\n}\n\nexport function runEval({ contract_id, code }: SimulationEval) {\n const [contract_address, contract_name] = contract_id.split('.');\n // type 1: eval arbitrary code inside a contract\n return tupleCV({\n type: uintCV(1),\n data: bufferCV(\n serializeCVBytes(\n tupleCV({\n contract: contractPrincipalCV(contract_address, contract_name),\n code: stringAsciiCV(code),\n })\n )\n ),\n });\n}\n\nexport async function runSimulation(\n block_hash: string,\n block_height: number,\n txs: (StacksTransactionWire | SimulationEval)[]\n) {\n const body = Buffer.concat([\n Buffer.from('sim-v1'),\n Buffer.alloc(8),\n Buffer.from(\n block_hash.startsWith('0x') ? block_hash.substring(2) : block_hash,\n 'hex'\n ),\n ...txs\n .map((t) => {\n return 'contract_id' in t && 'code' in t ? runEval(t) : runTx(t);\n })\n .map((t) => serializeCVBytes(t)),\n ]);\n body.writeBigUInt64BE(BigInt(block_height), 6);\n const rs = await fetch(SIMULATION_API_ENDPOINT, {\n method: 'POST',\n body,\n }).then(async (rs) => {\n const response = await rs.text();\n if (!response.startsWith('{')) {\n throw new Error(`failed to submit simulation: ${response}`);\n }\n // console.log(response);\n return JSON.parse(response) as { id: string };\n });\n return rs.id;\n}\n\nexport class SimulationBuilder {\n public static new() {\n return new SimulationBuilder();\n }\n // biome-ignore lint/style/useNumberNamespace: <explanation>\n private block = NaN;\n private sender = '';\n private steps: (\n | {\n // contract call\n contract_id: string;\n function_name: string;\n function_args?: ClarityValue[];\n sender: string;\n fee: number;\n }\n | {\n // contract deploy\n contract_name: string;\n source_code: string;\n deployer: string;\n fee: number;\n }\n | {\n // STX transfer\n recipient: string;\n amount: number;\n sender: string;\n fee: number;\n }\n | SimulationEval\n )[] = [];\n\n public useBlockHeight(block: number) {\n this.block = block;\n return this;\n }\n public withSender(address: string) {\n this.sender = address;\n return this;\n }\n public addSTXTransfer(params: {\n recipient: string;\n amount: number;\n sender?: string;\n fee?: number;\n }) {\n if (params.sender == null && this.sender === '') {\n throw new Error(\n 'Please specify a sender with useSender or adding a sender paramenter'\n );\n }\n this.steps.push({\n ...params,\n sender: params.sender ?? this.sender,\n fee: params.fee ?? 0,\n });\n return this;\n }\n public addContractCall(params: {\n contract_id: string;\n function_name: string;\n function_args?: ClarityValue[];\n sender?: string;\n fee?: number;\n }) {\n if (params.sender == null && this.sender === '') {\n throw new Error(\n 'Please specify a sender with useSender or adding a sender paramenter'\n );\n }\n this.steps.push({\n ...params,\n sender: params.sender ?? this.sender,\n fee: params.fee ?? 0,\n });\n return this;\n }\n public addContractDeploy(params: {\n contract_name: string;\n source_code: string;\n deployer?: string;\n fee?: number;\n }) {\n if (params.deployer == null && this.sender === '') {\n throw new Error(\n 'Please specify a deployer with useSender or adding a deployer paramenter'\n );\n }\n this.steps.push({\n ...params,\n deployer: params.deployer ?? this.sender,\n fee: params.fee ?? 0,\n });\n return this;\n }\n public addEvalCode(inside_contract_id: string, code: string) {\n this.steps.push({\n contract_id: inside_contract_id,\n code,\n });\n return this;\n }\n public addMapRead(contract_id: string, map: string, key: string) {\n this.steps.push({\n contract_id,\n code: `(map-get ${map} ${key})`,\n });\n return this;\n }\n public addVarRead(contract_id: string, variable: string) {\n this.steps.push({\n contract_id,\n code: `(var-get ${variable})`,\n });\n return this;\n }\n\n private async getBlockInfo() {\n if (Number.isNaN(this.block)) {\n const { stacks_tip_height } = await getNodeInfo();\n this.block = stacks_tip_height;\n }\n const info: Block = await richFetch(\n `https://api.hiro.so/extended/v1/block/by_height/${this.block}?unanchored=true`\n ).then((r) => r.json());\n if (\n info.height !== this.block ||\n typeof info.hash !== 'string' ||\n !info.hash.startsWith('0x')\n ) {\n throw new Error(\n `failed to get block info for block height ${this.block}`\n );\n }\n return {\n block_height: this.block,\n block_hash: info.hash.substring(2),\n index_block_hash: info.index_block_hash.substring(2),\n };\n }\n\n public async run() {\n console.log(\n `--------------------------------\nThis product can never exist without your support!\n\nWe receive sponsorship funds with:\nSP212Y5JKN59YP3GYG07K3S8W5SSGE4KH6B5STXER\n\nFeedbacks and feature requests are welcome.\nTo get in touch: contact@stxer.xyz\n--------------------------------`\n );\n const block = await this.getBlockInfo();\n console.log(\n `Using block height ${block.block_height} hash 0x${block.block_hash} to run simulation.`\n );\n const txs: (StacksTransactionWire | SimulationEval)[] = [];\n const nonce_by_address = new Map<string, number>();\n const nextNonce = async (sender: string) => {\n const nonce = nonce_by_address.get(sender);\n if (nonce == null) {\n const url = `https://api.hiro.so/v2/accounts/${sender}?proof=${false}&tip=${\n block.index_block_hash\n }`;\n const account: AccountDataResponse = await richFetch(url).then((r) =>\n r.json()\n );\n nonce_by_address.set(sender, account.nonce + 1);\n return account.nonce;\n }\n nonce_by_address.set(sender, nonce + 1);\n return nonce;\n };\n for (const step of this.steps) {\n if ('sender' in step && 'function_name' in step) {\n const nonce = await nextNonce(step.sender);\n const [contractAddress, contractName] = step.contract_id.split('.');\n const tx = await makeUnsignedContractCall({\n contractAddress,\n contractName,\n functionName: step.function_name,\n functionArgs: step.function_args ?? [],\n nonce,\n network: STACKS_MAINNET,\n publicKey: '',\n postConditionMode: PostConditionMode.Allow,\n fee: step.fee,\n });\n tx.auth.spendingCondition.signer = c32addressDecode(step.sender)[1];\n txs.push(tx);\n } else if ('sender' in step && 'recipient' in step) {\n const nonce = await nextNonce(step.sender);\n const tx = await makeUnsignedSTXTokenTransfer({\n recipient: step.recipient,\n amount: step.amount,\n nonce,\n network: STACKS_MAINNET,\n publicKey: '',\n fee: step.fee,\n });\n tx.auth.spendingCondition.signer = c32addressDecode(step.sender)[1];\n txs.push(tx);\n } else if ('deployer' in step) {\n const nonce = await nextNonce(step.deployer);\n const tx = await makeUnsignedContractDeploy({\n contractName: step.contract_name,\n codeBody: step.source_code,\n nonce,\n network: STACKS_MAINNET,\n publicKey: '',\n postConditionMode: PostConditionMode.Allow,\n fee: step.fee,\n });\n tx.auth.spendingCondition.signer = c32addressDecode(step.deployer)[1];\n txs.push(tx);\n } else if ('code' in step) {\n txs.push(step);\n } else {\n // biome-ignore lint/style/noUnusedTemplateLiteral: <explanation>\n console.log(`Invalid simulation step:`, step);\n }\n }\n const id = await runSimulation(block.block_hash, block.block_height, txs);\n console.log(\n `Simulation will be available at: https://stxer.xyz/simulations/mainnet/${id}`\n );\n return id;\n }\n}\n"],"names":["runEval","_ref","code","_contract_id$split","contract_id","split","contract_address","contract_name","tupleCV","type","uintCV","data","bufferCV","serializeCVBytes","contract","contractPrincipalCV","stringAsciiCV","runSimulation","_x","_x2","_x3","_runSimulation","apply","this","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee5","block_hash","block_height","txs","body","wrap","_context5","prev","next","Buffer","concat","from","alloc","startsWith","substring","map","t","tx","serializeBytes","writeBigUInt64BE","BigInt","fetch","method","then","_ref3","_callee4","rs","response","_context4","text","sent","Error","abrupt","JSON","parse","stop","_x5","id","SimulationBuilder","block","NaN","sender","steps","_proto","prototype","useBlockHeight","withSender","address","addSTXTransfer","params","_params$sender","_params$fee","push","_extends","fee","addContractCall","_params$sender2","_params$fee2","addContractDeploy","_params$deployer","_params$fee3","deployer","addEvalCode","inside_contract_id","addMapRead","key","addVarRead","variable","getBlockInfo","_getBlockInfo","_callee","info","_context","Number","isNaN","getNodeInfo","stacks_tip_height","richFetch","r","json","height","hash","index_block_hash","run","_run","_callee3","nonce_by_address","nextNonce","_iterator","_step","step","_step$function_args","nonce","_step$contract_id$spl","contractAddress","contractName","_nonce","_tx","_nonce2","_tx2","_context3","console","log","Map","_ref2","_callee2","url","account","_context2","get","set","_x4","_createForOfIteratorHelperLoose","done","value","makeUnsignedContractCall","functionName","function_name","functionArgs","function_args","network","STACKS_MAINNET","publicKey","postConditionMode","PostConditionMode","Allow","auth","spendingCondition","signer","c32addressDecode","makeUnsignedSTXTokenTransfer","recipient","amount","makeUnsignedContractDeploy","codeBody","source_code"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"stxer.cjs.production.min.js","sources":["../src/index.ts"],"sourcesContent":["import { type AccountDataResponse, getNodeInfo, richFetch } from 'ts-clarity';\nimport type { Block } from '@stacks/stacks-blockchain-api-types';\nimport { STACKS_MAINNET } from '@stacks/network';\nimport {\n AnchorMode,\n type ClarityValue,\n PostConditionMode,\n type StacksTransactionWire,\n bufferCV,\n contractPrincipalCV,\n makeUnsignedContractCall,\n makeUnsignedContractDeploy,\n makeUnsignedSTXTokenTransfer,\n serializeCVBytes,\n stringAsciiCV,\n tupleCV,\n uintCV,\n} from '@stacks/transactions';\nimport { c32addressDecode } from 'c32check';\n\nfunction runTx(tx: StacksTransactionWire) {\n // type 0: run transaction\n return tupleCV({ type: uintCV(0), data: bufferCV(tx.serializeBytes()) });\n}\n\nexport interface SimulationEval {\n contract_id: string;\n code: string;\n}\n\nexport function runEval({ contract_id, code }: SimulationEval) {\n const [contract_address, contract_name] = contract_id.split('.');\n // type 1: eval arbitrary code inside a contract\n return tupleCV({\n type: uintCV(1),\n data: bufferCV(\n serializeCVBytes(\n tupleCV({\n contract: contractPrincipalCV(contract_address, contract_name),\n code: stringAsciiCV(code),\n })\n )\n ),\n });\n}\n\nexport async function runSimulation(\n apiEndpoint: string,\n block_hash: string,\n block_height: number,\n txs: (StacksTransactionWire | SimulationEval)[]\n) {\n // Convert 'sim-v1' to Uint8Array\n const header = new TextEncoder().encode('sim-v1');\n // Create 8 bytes for block height\n const heightBytes = new Uint8Array(8);\n // Convert block height to bytes\n const view = new DataView(heightBytes.buffer);\n view.setBigUint64(0, BigInt(block_height), false); // false for big-endian\n\n // Convert block hash to bytes\n const hashHex = block_hash.startsWith('0x') ? block_hash.substring(2) : block_hash;\n // biome-ignore lint/style/noNonNullAssertion: <explanation>\n const hashBytes = new Uint8Array(hashHex.match(/.{1,2}/g)!.map(byte => Number.parseInt(byte, 16)));\n\n // Convert transactions to bytes\n const txBytes = txs\n .map((t) => 'contract_id' in t && 'code' in t ? runEval(t) : runTx(t))\n .map((t) => serializeCVBytes(t));\n\n // Combine all byte arrays\n const totalLength = header.length + heightBytes.length + hashBytes.length + \n txBytes.reduce((acc, curr) => acc + curr.length, 0);\n const body = new Uint8Array(totalLength);\n\n let offset = 0;\n body.set(header, offset);\n offset += header.length;\n body.set(heightBytes, offset);\n offset += heightBytes.length;\n body.set(hashBytes, offset);\n offset += hashBytes.length;\n for (const tx of txBytes) {\n body.set(tx, offset);\n offset += tx.length;\n }\n\n const rs = await fetch(apiEndpoint, {\n method: 'POST',\n body,\n }).then(async (rs) => {\n const response = await rs.text();\n if (!response.startsWith('{')) {\n throw new Error(`failed to submit simulation: ${response}`);\n }\n return JSON.parse(response) as { id: string };\n });\n return rs.id;\n}\n\ninterface SimulationBuilderOptions {\n apiEndpoint?: string;\n stacksNodeAPI?: string;\n}\n\nexport class SimulationBuilder {\n private apiEndpoint: string;\n private stacksNodeAPI: string;\n\n private constructor(options: SimulationBuilderOptions = {}) {\n this.apiEndpoint = options.apiEndpoint ?? 'https://api.stxer.xyz';\n this.stacksNodeAPI = options.stacksNodeAPI ?? 'https://api.hiro.so';\n }\n\n public static new(options?: SimulationBuilderOptions) {\n return new SimulationBuilder(options);\n }\n\n // biome-ignore lint/style/useNumberNamespace: <explanation>\n private block = NaN;\n private sender = '';\n private steps: (\n | {\n // contract call\n contract_id: string;\n function_name: string;\n function_args?: ClarityValue[];\n sender: string;\n fee: number;\n }\n | {\n // contract deploy\n contract_name: string;\n source_code: string;\n deployer: string;\n fee: number;\n }\n | {\n // STX transfer\n recipient: string;\n amount: number;\n sender: string;\n fee: number;\n }\n | SimulationEval\n )[] = [];\n\n public useBlockHeight(block: number) {\n this.block = block;\n return this;\n }\n public withSender(address: string) {\n this.sender = address;\n return this;\n }\n public addSTXTransfer(params: {\n recipient: string;\n amount: number;\n sender?: string;\n fee?: number;\n }) {\n if (params.sender == null && this.sender === '') {\n throw new Error(\n 'Please specify a sender with useSender or adding a sender paramenter'\n );\n }\n this.steps.push({\n ...params,\n sender: params.sender ?? this.sender,\n fee: params.fee ?? 0,\n });\n return this;\n }\n public addContractCall(params: {\n contract_id: string;\n function_name: string;\n function_args?: ClarityValue[];\n sender?: string;\n fee?: number;\n }) {\n if (params.sender == null && this.sender === '') {\n throw new Error(\n 'Please specify a sender with useSender or adding a sender paramenter'\n );\n }\n this.steps.push({\n ...params,\n sender: params.sender ?? this.sender,\n fee: params.fee ?? 0,\n });\n return this;\n }\n public addContractDeploy(params: {\n contract_name: string;\n source_code: string;\n deployer?: string;\n fee?: number;\n }) {\n if (params.deployer == null && this.sender === '') {\n throw new Error(\n 'Please specify a deployer with useSender or adding a deployer paramenter'\n );\n }\n this.steps.push({\n ...params,\n deployer: params.deployer ?? this.sender,\n fee: params.fee ?? 0,\n });\n return this;\n }\n public addEvalCode(inside_contract_id: string, code: string) {\n this.steps.push({\n contract_id: inside_contract_id,\n code,\n });\n return this;\n }\n public addMapRead(contract_id: string, map: string, key: string) {\n this.steps.push({\n contract_id,\n code: `(map-get ${map} ${key})`,\n });\n return this;\n }\n public addVarRead(contract_id: string, variable: string) {\n this.steps.push({\n contract_id,\n code: `(var-get ${variable})`,\n });\n return this;\n }\n\n private async getBlockInfo() {\n if (Number.isNaN(this.block)) {\n const { stacks_tip_height } = await getNodeInfo({\n stacksEndpoint: this.stacksNodeAPI,\n });\n this.block = stacks_tip_height;\n }\n const info: Block = await richFetch(\n `${this.stacksNodeAPI}/extended/v1/block/by_height/${this.block}?unanchored=true`\n ).then((r) => r.json());\n if (\n info.height !== this.block ||\n typeof info.hash !== 'string' ||\n !info.hash.startsWith('0x')\n ) {\n throw new Error(\n `failed to get block info for block height ${this.block}`\n );\n }\n return {\n block_height: this.block,\n block_hash: info.hash.substring(2),\n index_block_hash: info.index_block_hash.substring(2),\n };\n }\n\n public async run() {\n console.log(\n `--------------------------------\nThis product can never exist without your support!\n\nWe receive sponsorship funds with:\nSP212Y5JKN59YP3GYG07K3S8W5SSGE4KH6B5STXER\n\nFeedbacks and feature requests are welcome.\nTo get in touch: contact@stxer.xyz\n--------------------------------`\n );\n const block = await this.getBlockInfo();\n console.log(\n `Using block height ${block.block_height} hash 0x${block.block_hash} to run simulation.`\n );\n const txs: (StacksTransactionWire | SimulationEval)[] = [];\n const nonce_by_address = new Map<string, number>();\n const nextNonce = async (sender: string) => {\n const nonce = nonce_by_address.get(sender);\n if (nonce == null) {\n const url = `${this.stacksNodeAPI}/v2/accounts/${sender}?proof=${false}&tip=${\n block.index_block_hash\n }`;\n const account: AccountDataResponse = await richFetch(url).then((r) =>\n r.json()\n );\n nonce_by_address.set(sender, account.nonce + 1);\n return account.nonce;\n }\n nonce_by_address.set(sender, nonce + 1);\n return nonce;\n };\n for (const step of this.steps) {\n if ('sender' in step && 'function_name' in step) {\n const nonce = await nextNonce(step.sender);\n const [contractAddress, contractName] = step.contract_id.split('.');\n const tx = await makeUnsignedContractCall({\n contractAddress,\n contractName,\n functionName: step.function_name,\n functionArgs: step.function_args ?? [],\n nonce,\n network: STACKS_MAINNET,\n publicKey: '',\n postConditionMode: PostConditionMode.Allow,\n fee: step.fee,\n });\n tx.auth.spendingCondition.signer = c32addressDecode(step.sender)[1];\n txs.push(tx);\n } else if ('sender' in step && 'recipient' in step) {\n const nonce = await nextNonce(step.sender);\n const tx = await makeUnsignedSTXTokenTransfer({\n recipient: step.recipient,\n amount: step.amount,\n nonce,\n network: STACKS_MAINNET,\n publicKey: '',\n fee: step.fee,\n });\n tx.auth.spendingCondition.signer = c32addressDecode(step.sender)[1];\n txs.push(tx);\n } else if ('deployer' in step) {\n const nonce = await nextNonce(step.deployer);\n const tx = await makeUnsignedContractDeploy({\n contractName: step.contract_name,\n codeBody: step.source_code,\n nonce,\n network: STACKS_MAINNET,\n publicKey: '',\n postConditionMode: PostConditionMode.Allow,\n fee: step.fee,\n });\n tx.auth.spendingCondition.signer = c32addressDecode(step.deployer)[1];\n txs.push(tx);\n } else if ('code' in step) {\n txs.push(step);\n } else {\n // biome-ignore lint/style/noUnusedTemplateLiteral: <explanation>\n console.log(`Invalid simulation step:`, step);\n }\n }\n const id = await runSimulation(\n `${this.apiEndpoint}/simulations`,\n block.block_hash, \n block.block_height, \n txs\n );\n console.log(\n `Simulation will be available at: https://stxer.xyz/simulations/mainnet/${id}`\n );\n return id;\n }\n}\n"],"names":["runTx","tx","tupleCV","type","uintCV","data","bufferCV","serializeBytes","runEval","_ref","code","_contract_id$split","contract_id","split","contract_address","contract_name","serializeCVBytes","contract","contractPrincipalCV","stringAsciiCV","runSimulation","_x","_x2","_x3","_x4","_runSimulation","apply","this","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee5","apiEndpoint","block_hash","block_height","txs","header","heightBytes","hashHex","hashBytes","txBytes","totalLength","body","offset","_iterator2","_step2","wrap","_context5","prev","next","TextEncoder","encode","Uint8Array","DataView","buffer","setBigUint64","BigInt","startsWith","substring","match","map","byte","Number","parseInt","t","length","reduce","acc","curr","set","_createForOfIteratorHelperLoose","done","value","fetch","method","then","_ref3","_callee4","rs","response","_context4","text","sent","Error","abrupt","JSON","parse","stop","_x6","id","SimulationBuilder","options","_options$apiEndpoint","_options$stacksNodeAP","stacksNodeAPI","block","NaN","sender","steps","_proto","prototype","useBlockHeight","withSender","address","addSTXTransfer","params","_params$sender","_params$fee","push","_extends","fee","addContractCall","_params$sender2","_params$fee2","addContractDeploy","_params$deployer","_params$fee3","deployer","addEvalCode","inside_contract_id","addMapRead","key","addVarRead","variable","getBlockInfo","_getBlockInfo","_callee","info","_context","isNaN","getNodeInfo","stacksEndpoint","stacks_tip_height","richFetch","r","json","height","hash","index_block_hash","run","_run","_callee3","nonce_by_address","nextNonce","_iterator","_step","step","_step$function_args","nonce","_step$contract_id$spl","contractAddress","contractName","_nonce","_tx","_nonce2","_tx2","_this","_context3","console","log","Map","_ref2","_callee2","url","account","_context2","get","_x5","makeUnsignedContractCall","functionName","function_name","functionArgs","function_args","network","STACKS_MAINNET","publicKey","postConditionMode","PostConditionMode","Allow","auth","spendingCondition","signer","c32addressDecode","makeUnsignedSTXTokenTransfer","recipient","amount","makeUnsignedContractDeploy","codeBody","source_code"],"mappings":"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"}
|
package/dist/stxer.esm.js
CHANGED
|
@@ -368,8 +368,6 @@ function _unsupportedIterableToArray(r, a) {
|
|
|
368
368
|
}
|
|
369
369
|
}
|
|
370
370
|
|
|
371
|
-
// current beta api endpoint
|
|
372
|
-
var SIMULATION_API_ENDPOINT = 'https://api.stxer.xyz/simulations';
|
|
373
371
|
function runTx(tx) {
|
|
374
372
|
// type 0: run transaction
|
|
375
373
|
return tupleCV({
|
|
@@ -392,23 +390,48 @@ function runEval(_ref) {
|
|
|
392
390
|
})))
|
|
393
391
|
});
|
|
394
392
|
}
|
|
395
|
-
function runSimulation(_x, _x2, _x3) {
|
|
393
|
+
function runSimulation(_x, _x2, _x3, _x4) {
|
|
396
394
|
return _runSimulation.apply(this, arguments);
|
|
397
395
|
}
|
|
398
396
|
function _runSimulation() {
|
|
399
|
-
_runSimulation = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5(block_hash, block_height, txs) {
|
|
400
|
-
var body, rs;
|
|
397
|
+
_runSimulation = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5(apiEndpoint, block_hash, block_height, txs) {
|
|
398
|
+
var header, heightBytes, view, hashHex, hashBytes, txBytes, totalLength, body, offset, _iterator2, _step2, tx, rs;
|
|
401
399
|
return _regeneratorRuntime().wrap(function _callee5$(_context5) {
|
|
402
400
|
while (1) switch (_context5.prev = _context5.next) {
|
|
403
401
|
case 0:
|
|
404
|
-
|
|
402
|
+
// Convert 'sim-v1' to Uint8Array
|
|
403
|
+
header = new TextEncoder().encode('sim-v1'); // Create 8 bytes for block height
|
|
404
|
+
heightBytes = new Uint8Array(8); // Convert block height to bytes
|
|
405
|
+
view = new DataView(heightBytes.buffer);
|
|
406
|
+
view.setBigUint64(0, BigInt(block_height), false); // false for big-endian
|
|
407
|
+
// Convert block hash to bytes
|
|
408
|
+
hashHex = block_hash.startsWith('0x') ? block_hash.substring(2) : block_hash; // biome-ignore lint/style/noNonNullAssertion: <explanation>
|
|
409
|
+
hashBytes = new Uint8Array(hashHex.match(/.{1,2}/g).map(function (_byte) {
|
|
410
|
+
return Number.parseInt(_byte, 16);
|
|
411
|
+
})); // Convert transactions to bytes
|
|
412
|
+
txBytes = txs.map(function (t) {
|
|
405
413
|
return 'contract_id' in t && 'code' in t ? runEval(t) : runTx(t);
|
|
406
414
|
}).map(function (t) {
|
|
407
415
|
return serializeCVBytes(t);
|
|
408
|
-
})
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
416
|
+
}); // Combine all byte arrays
|
|
417
|
+
totalLength = header.length + heightBytes.length + hashBytes.length + txBytes.reduce(function (acc, curr) {
|
|
418
|
+
return acc + curr.length;
|
|
419
|
+
}, 0);
|
|
420
|
+
body = new Uint8Array(totalLength);
|
|
421
|
+
offset = 0;
|
|
422
|
+
body.set(header, offset);
|
|
423
|
+
offset += header.length;
|
|
424
|
+
body.set(heightBytes, offset);
|
|
425
|
+
offset += heightBytes.length;
|
|
426
|
+
body.set(hashBytes, offset);
|
|
427
|
+
offset += hashBytes.length;
|
|
428
|
+
for (_iterator2 = _createForOfIteratorHelperLoose(txBytes); !(_step2 = _iterator2()).done;) {
|
|
429
|
+
tx = _step2.value;
|
|
430
|
+
body.set(tx, offset);
|
|
431
|
+
offset += tx.length;
|
|
432
|
+
}
|
|
433
|
+
_context5.next = 19;
|
|
434
|
+
return fetch(apiEndpoint, {
|
|
412
435
|
method: 'POST',
|
|
413
436
|
body: body
|
|
414
437
|
}).then(/*#__PURE__*/function () {
|
|
@@ -434,14 +457,14 @@ function _runSimulation() {
|
|
|
434
457
|
}
|
|
435
458
|
}, _callee4);
|
|
436
459
|
}));
|
|
437
|
-
return function (
|
|
460
|
+
return function (_x6) {
|
|
438
461
|
return _ref3.apply(this, arguments);
|
|
439
462
|
};
|
|
440
463
|
}());
|
|
441
|
-
case
|
|
464
|
+
case 19:
|
|
442
465
|
rs = _context5.sent;
|
|
443
466
|
return _context5.abrupt("return", rs.id);
|
|
444
|
-
case
|
|
467
|
+
case 21:
|
|
445
468
|
case "end":
|
|
446
469
|
return _context5.stop();
|
|
447
470
|
}
|
|
@@ -450,14 +473,22 @@ function _runSimulation() {
|
|
|
450
473
|
return _runSimulation.apply(this, arguments);
|
|
451
474
|
}
|
|
452
475
|
var SimulationBuilder = /*#__PURE__*/function () {
|
|
453
|
-
function SimulationBuilder() {
|
|
476
|
+
function SimulationBuilder(options) {
|
|
477
|
+
var _options$apiEndpoint, _options$stacksNodeAP;
|
|
478
|
+
if (options === void 0) {
|
|
479
|
+
options = {};
|
|
480
|
+
}
|
|
481
|
+
this.apiEndpoint = void 0;
|
|
482
|
+
this.stacksNodeAPI = void 0;
|
|
454
483
|
// biome-ignore lint/style/useNumberNamespace: <explanation>
|
|
455
484
|
this.block = NaN;
|
|
456
485
|
this.sender = '';
|
|
457
486
|
this.steps = [];
|
|
487
|
+
this.apiEndpoint = (_options$apiEndpoint = options.apiEndpoint) != null ? _options$apiEndpoint : 'https://api.stxer.xyz';
|
|
488
|
+
this.stacksNodeAPI = (_options$stacksNodeAP = options.stacksNodeAPI) != null ? _options$stacksNodeAP : 'https://api.hiro.so';
|
|
458
489
|
}
|
|
459
|
-
SimulationBuilder["new"] = function _new() {
|
|
460
|
-
return new SimulationBuilder();
|
|
490
|
+
SimulationBuilder["new"] = function _new(options) {
|
|
491
|
+
return new SimulationBuilder(options);
|
|
461
492
|
};
|
|
462
493
|
var _proto = SimulationBuilder.prototype;
|
|
463
494
|
_proto.useBlockHeight = function useBlockHeight(block) {
|
|
@@ -533,14 +564,16 @@ var SimulationBuilder = /*#__PURE__*/function () {
|
|
|
533
564
|
break;
|
|
534
565
|
}
|
|
535
566
|
_context.next = 3;
|
|
536
|
-
return getNodeInfo(
|
|
567
|
+
return getNodeInfo({
|
|
568
|
+
stacksEndpoint: this.stacksNodeAPI
|
|
569
|
+
});
|
|
537
570
|
case 3:
|
|
538
571
|
_yield$getNodeInfo = _context.sent;
|
|
539
572
|
stacks_tip_height = _yield$getNodeInfo.stacks_tip_height;
|
|
540
573
|
this.block = stacks_tip_height;
|
|
541
574
|
case 6:
|
|
542
575
|
_context.next = 8;
|
|
543
|
-
return richFetch("
|
|
576
|
+
return richFetch(this.stacksNodeAPI + "/extended/v1/block/by_height/" + this.block + "?unanchored=true").then(function (r) {
|
|
544
577
|
return r.json();
|
|
545
578
|
});
|
|
546
579
|
case 8:
|
|
@@ -569,6 +602,7 @@ var SimulationBuilder = /*#__PURE__*/function () {
|
|
|
569
602
|
}();
|
|
570
603
|
_proto.run = /*#__PURE__*/function () {
|
|
571
604
|
var _run = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
|
|
605
|
+
var _this = this;
|
|
572
606
|
var block, txs, nonce_by_address, nextNonce, _iterator, _step, step, _step$function_args, nonce, _step$contract_id$spl, contractAddress, contractName, tx, _nonce, _tx, _nonce2, _tx2, id;
|
|
573
607
|
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
|
|
574
608
|
while (1) switch (_context3.prev = _context3.next) {
|
|
@@ -592,7 +626,7 @@ var SimulationBuilder = /*#__PURE__*/function () {
|
|
|
592
626
|
_context2.next = 8;
|
|
593
627
|
break;
|
|
594
628
|
}
|
|
595
|
-
url = "
|
|
629
|
+
url = _this.stacksNodeAPI + "/v2/accounts/" + sender + "?proof=" + false + "&tip=" + block.index_block_hash;
|
|
596
630
|
_context2.next = 5;
|
|
597
631
|
return richFetch(url).then(function (r) {
|
|
598
632
|
return r.json();
|
|
@@ -610,7 +644,7 @@ var SimulationBuilder = /*#__PURE__*/function () {
|
|
|
610
644
|
}
|
|
611
645
|
}, _callee2);
|
|
612
646
|
}));
|
|
613
|
-
return function nextNonce(
|
|
647
|
+
return function nextNonce(_x5) {
|
|
614
648
|
return _ref2.apply(this, arguments);
|
|
615
649
|
};
|
|
616
650
|
}();
|
|
@@ -709,7 +743,7 @@ var SimulationBuilder = /*#__PURE__*/function () {
|
|
|
709
743
|
break;
|
|
710
744
|
case 48:
|
|
711
745
|
_context3.next = 50;
|
|
712
|
-
return runSimulation(block.block_hash, block.block_height, txs);
|
|
746
|
+
return runSimulation(this.apiEndpoint + "/simulations", block.block_hash, block.block_height, txs);
|
|
713
747
|
case 50:
|
|
714
748
|
id = _context3.sent;
|
|
715
749
|
console.log("Simulation will be available at: https://stxer.xyz/simulations/mainnet/" + id);
|
package/dist/stxer.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stxer.esm.js","sources":["../src/index.ts"],"sourcesContent":["import { type AccountDataResponse, getNodeInfo, richFetch } from 'ts-clarity';\nimport type { Block } from '@stacks/stacks-blockchain-api-types';\nimport { STACKS_MAINNET } from '@stacks/network';\nimport {\n AnchorMode,\n type ClarityValue,\n PostConditionMode,\n type StacksTransactionWire,\n bufferCV,\n contractPrincipalCV,\n makeUnsignedContractCall,\n makeUnsignedContractDeploy,\n makeUnsignedSTXTokenTransfer,\n serializeCV,\n serializeCVBytes,\n stringAsciiCV,\n tupleCV,\n uintCV,\n} from '@stacks/transactions';\nimport { c32addressDecode } from 'c32check';\n\n// current beta api endpoint\nconst SIMULATION_API_ENDPOINT = 'https://api.stxer.xyz/simulations';\n\nfunction runTx(tx: StacksTransactionWire) {\n // type 0: run transaction\n return tupleCV({ type: uintCV(0), data: bufferCV(tx.serializeBytes()) });\n}\n\nexport interface SimulationEval {\n contract_id: string;\n code: string;\n}\n\nexport function runEval({ contract_id, code }: SimulationEval) {\n const [contract_address, contract_name] = contract_id.split('.');\n // type 1: eval arbitrary code inside a contract\n return tupleCV({\n type: uintCV(1),\n data: bufferCV(\n serializeCVBytes(\n tupleCV({\n contract: contractPrincipalCV(contract_address, contract_name),\n code: stringAsciiCV(code),\n })\n )\n ),\n });\n}\n\nexport async function runSimulation(\n block_hash: string,\n block_height: number,\n txs: (StacksTransactionWire | SimulationEval)[]\n) {\n const body = Buffer.concat([\n Buffer.from('sim-v1'),\n Buffer.alloc(8),\n Buffer.from(\n block_hash.startsWith('0x') ? block_hash.substring(2) : block_hash,\n 'hex'\n ),\n ...txs\n .map((t) => {\n return 'contract_id' in t && 'code' in t ? runEval(t) : runTx(t);\n })\n .map((t) => serializeCVBytes(t)),\n ]);\n body.writeBigUInt64BE(BigInt(block_height), 6);\n const rs = await fetch(SIMULATION_API_ENDPOINT, {\n method: 'POST',\n body,\n }).then(async (rs) => {\n const response = await rs.text();\n if (!response.startsWith('{')) {\n throw new Error(`failed to submit simulation: ${response}`);\n }\n // console.log(response);\n return JSON.parse(response) as { id: string };\n });\n return rs.id;\n}\n\nexport class SimulationBuilder {\n public static new() {\n return new SimulationBuilder();\n }\n // biome-ignore lint/style/useNumberNamespace: <explanation>\n private block = NaN;\n private sender = '';\n private steps: (\n | {\n // contract call\n contract_id: string;\n function_name: string;\n function_args?: ClarityValue[];\n sender: string;\n fee: number;\n }\n | {\n // contract deploy\n contract_name: string;\n source_code: string;\n deployer: string;\n fee: number;\n }\n | {\n // STX transfer\n recipient: string;\n amount: number;\n sender: string;\n fee: number;\n }\n | SimulationEval\n )[] = [];\n\n public useBlockHeight(block: number) {\n this.block = block;\n return this;\n }\n public withSender(address: string) {\n this.sender = address;\n return this;\n }\n public addSTXTransfer(params: {\n recipient: string;\n amount: number;\n sender?: string;\n fee?: number;\n }) {\n if (params.sender == null && this.sender === '') {\n throw new Error(\n 'Please specify a sender with useSender or adding a sender paramenter'\n );\n }\n this.steps.push({\n ...params,\n sender: params.sender ?? this.sender,\n fee: params.fee ?? 0,\n });\n return this;\n }\n public addContractCall(params: {\n contract_id: string;\n function_name: string;\n function_args?: ClarityValue[];\n sender?: string;\n fee?: number;\n }) {\n if (params.sender == null && this.sender === '') {\n throw new Error(\n 'Please specify a sender with useSender or adding a sender paramenter'\n );\n }\n this.steps.push({\n ...params,\n sender: params.sender ?? this.sender,\n fee: params.fee ?? 0,\n });\n return this;\n }\n public addContractDeploy(params: {\n contract_name: string;\n source_code: string;\n deployer?: string;\n fee?: number;\n }) {\n if (params.deployer == null && this.sender === '') {\n throw new Error(\n 'Please specify a deployer with useSender or adding a deployer paramenter'\n );\n }\n this.steps.push({\n ...params,\n deployer: params.deployer ?? this.sender,\n fee: params.fee ?? 0,\n });\n return this;\n }\n public addEvalCode(inside_contract_id: string, code: string) {\n this.steps.push({\n contract_id: inside_contract_id,\n code,\n });\n return this;\n }\n public addMapRead(contract_id: string, map: string, key: string) {\n this.steps.push({\n contract_id,\n code: `(map-get ${map} ${key})`,\n });\n return this;\n }\n public addVarRead(contract_id: string, variable: string) {\n this.steps.push({\n contract_id,\n code: `(var-get ${variable})`,\n });\n return this;\n }\n\n private async getBlockInfo() {\n if (Number.isNaN(this.block)) {\n const { stacks_tip_height } = await getNodeInfo();\n this.block = stacks_tip_height;\n }\n const info: Block = await richFetch(\n `https://api.hiro.so/extended/v1/block/by_height/${this.block}?unanchored=true`\n ).then((r) => r.json());\n if (\n info.height !== this.block ||\n typeof info.hash !== 'string' ||\n !info.hash.startsWith('0x')\n ) {\n throw new Error(\n `failed to get block info for block height ${this.block}`\n );\n }\n return {\n block_height: this.block,\n block_hash: info.hash.substring(2),\n index_block_hash: info.index_block_hash.substring(2),\n };\n }\n\n public async run() {\n console.log(\n `--------------------------------\nThis product can never exist without your support!\n\nWe receive sponsorship funds with:\nSP212Y5JKN59YP3GYG07K3S8W5SSGE4KH6B5STXER\n\nFeedbacks and feature requests are welcome.\nTo get in touch: contact@stxer.xyz\n--------------------------------`\n );\n const block = await this.getBlockInfo();\n console.log(\n `Using block height ${block.block_height} hash 0x${block.block_hash} to run simulation.`\n );\n const txs: (StacksTransactionWire | SimulationEval)[] = [];\n const nonce_by_address = new Map<string, number>();\n const nextNonce = async (sender: string) => {\n const nonce = nonce_by_address.get(sender);\n if (nonce == null) {\n const url = `https://api.hiro.so/v2/accounts/${sender}?proof=${false}&tip=${\n block.index_block_hash\n }`;\n const account: AccountDataResponse = await richFetch(url).then((r) =>\n r.json()\n );\n nonce_by_address.set(sender, account.nonce + 1);\n return account.nonce;\n }\n nonce_by_address.set(sender, nonce + 1);\n return nonce;\n };\n for (const step of this.steps) {\n if ('sender' in step && 'function_name' in step) {\n const nonce = await nextNonce(step.sender);\n const [contractAddress, contractName] = step.contract_id.split('.');\n const tx = await makeUnsignedContractCall({\n contractAddress,\n contractName,\n functionName: step.function_name,\n functionArgs: step.function_args ?? [],\n nonce,\n network: STACKS_MAINNET,\n publicKey: '',\n postConditionMode: PostConditionMode.Allow,\n fee: step.fee,\n });\n tx.auth.spendingCondition.signer = c32addressDecode(step.sender)[1];\n txs.push(tx);\n } else if ('sender' in step && 'recipient' in step) {\n const nonce = await nextNonce(step.sender);\n const tx = await makeUnsignedSTXTokenTransfer({\n recipient: step.recipient,\n amount: step.amount,\n nonce,\n network: STACKS_MAINNET,\n publicKey: '',\n fee: step.fee,\n });\n tx.auth.spendingCondition.signer = c32addressDecode(step.sender)[1];\n txs.push(tx);\n } else if ('deployer' in step) {\n const nonce = await nextNonce(step.deployer);\n const tx = await makeUnsignedContractDeploy({\n contractName: step.contract_name,\n codeBody: step.source_code,\n nonce,\n network: STACKS_MAINNET,\n publicKey: '',\n postConditionMode: PostConditionMode.Allow,\n fee: step.fee,\n });\n tx.auth.spendingCondition.signer = c32addressDecode(step.deployer)[1];\n txs.push(tx);\n } else if ('code' in step) {\n txs.push(step);\n } else {\n // biome-ignore lint/style/noUnusedTemplateLiteral: <explanation>\n console.log(`Invalid simulation step:`, step);\n }\n }\n const id = await runSimulation(block.block_hash, block.block_height, txs);\n console.log(\n `Simulation will be available at: https://stxer.xyz/simulations/mainnet/${id}`\n );\n return id;\n }\n}\n"],"names":["SIMULATION_API_ENDPOINT","runTx","tx","tupleCV","type","uintCV","data","bufferCV","serializeBytes","runEval","_ref","contract_id","code","_contract_id$split","split","contract_address","contract_name","serializeCVBytes","contract","contractPrincipalCV","stringAsciiCV","runSimulation","_x","_x2","_x3","_runSimulation","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee5","block_hash","block_height","txs","body","rs","wrap","_callee5$","_context5","prev","next","Buffer","concat","from","alloc","startsWith","substring","map","t","writeBigUInt64BE","BigInt","fetch","method","then","_ref3","_callee4","response","_callee4$","_context4","text","sent","Error","abrupt","JSON","parse","stop","_x5","id","SimulationBuilder","block","NaN","sender","steps","new","_proto","prototype","useBlockHeight","withSender","address","addSTXTransfer","params","_params$sender","_params$fee","push","_extends","fee","addContractCall","_params$sender2","_params$fee2","addContractDeploy","_params$deployer","_params$fee3","deployer","addEvalCode","inside_contract_id","addMapRead","key","addVarRead","variable","getBlockInfo","_getBlockInfo","_callee","_yield$getNodeInfo","stacks_tip_height","info","_callee$","_context","Number","isNaN","getNodeInfo","richFetch","r","json","height","hash","index_block_hash","run","_run","_callee3","nonce_by_address","nextNonce","_iterator","_step","step","_step$function_args","nonce","_step$contract_id$spl","contractAddress","contractName","_nonce","_tx","_nonce2","_tx2","_callee3$","_context3","console","log","Map","_ref2","_callee2","url","account","_callee2$","_context2","get","set","_x4","_createForOfIteratorHelperLoose","done","value","makeUnsignedContractCall","functionName","function_name","functionArgs","function_args","network","STACKS_MAINNET","publicKey","postConditionMode","PostConditionMode","Allow","auth","spendingCondition","signer","c32addressDecode","makeUnsignedSTXTokenTransfer","recipient","amount","makeUnsignedContractDeploy","codeBody","source_code"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"stxer.esm.js","sources":["../src/index.ts"],"sourcesContent":["import { type AccountDataResponse, getNodeInfo, richFetch } from 'ts-clarity';\nimport type { Block } from '@stacks/stacks-blockchain-api-types';\nimport { STACKS_MAINNET } from '@stacks/network';\nimport {\n AnchorMode,\n type ClarityValue,\n PostConditionMode,\n type StacksTransactionWire,\n bufferCV,\n contractPrincipalCV,\n makeUnsignedContractCall,\n makeUnsignedContractDeploy,\n makeUnsignedSTXTokenTransfer,\n serializeCVBytes,\n stringAsciiCV,\n tupleCV,\n uintCV,\n} from '@stacks/transactions';\nimport { c32addressDecode } from 'c32check';\n\nfunction runTx(tx: StacksTransactionWire) {\n // type 0: run transaction\n return tupleCV({ type: uintCV(0), data: bufferCV(tx.serializeBytes()) });\n}\n\nexport interface SimulationEval {\n contract_id: string;\n code: string;\n}\n\nexport function runEval({ contract_id, code }: SimulationEval) {\n const [contract_address, contract_name] = contract_id.split('.');\n // type 1: eval arbitrary code inside a contract\n return tupleCV({\n type: uintCV(1),\n data: bufferCV(\n serializeCVBytes(\n tupleCV({\n contract: contractPrincipalCV(contract_address, contract_name),\n code: stringAsciiCV(code),\n })\n )\n ),\n });\n}\n\nexport async function runSimulation(\n apiEndpoint: string,\n block_hash: string,\n block_height: number,\n txs: (StacksTransactionWire | SimulationEval)[]\n) {\n // Convert 'sim-v1' to Uint8Array\n const header = new TextEncoder().encode('sim-v1');\n // Create 8 bytes for block height\n const heightBytes = new Uint8Array(8);\n // Convert block height to bytes\n const view = new DataView(heightBytes.buffer);\n view.setBigUint64(0, BigInt(block_height), false); // false for big-endian\n\n // Convert block hash to bytes\n const hashHex = block_hash.startsWith('0x') ? block_hash.substring(2) : block_hash;\n // biome-ignore lint/style/noNonNullAssertion: <explanation>\n const hashBytes = new Uint8Array(hashHex.match(/.{1,2}/g)!.map(byte => Number.parseInt(byte, 16)));\n\n // Convert transactions to bytes\n const txBytes = txs\n .map((t) => 'contract_id' in t && 'code' in t ? runEval(t) : runTx(t))\n .map((t) => serializeCVBytes(t));\n\n // Combine all byte arrays\n const totalLength = header.length + heightBytes.length + hashBytes.length + \n txBytes.reduce((acc, curr) => acc + curr.length, 0);\n const body = new Uint8Array(totalLength);\n\n let offset = 0;\n body.set(header, offset);\n offset += header.length;\n body.set(heightBytes, offset);\n offset += heightBytes.length;\n body.set(hashBytes, offset);\n offset += hashBytes.length;\n for (const tx of txBytes) {\n body.set(tx, offset);\n offset += tx.length;\n }\n\n const rs = await fetch(apiEndpoint, {\n method: 'POST',\n body,\n }).then(async (rs) => {\n const response = await rs.text();\n if (!response.startsWith('{')) {\n throw new Error(`failed to submit simulation: ${response}`);\n }\n return JSON.parse(response) as { id: string };\n });\n return rs.id;\n}\n\ninterface SimulationBuilderOptions {\n apiEndpoint?: string;\n stacksNodeAPI?: string;\n}\n\nexport class SimulationBuilder {\n private apiEndpoint: string;\n private stacksNodeAPI: string;\n\n private constructor(options: SimulationBuilderOptions = {}) {\n this.apiEndpoint = options.apiEndpoint ?? 'https://api.stxer.xyz';\n this.stacksNodeAPI = options.stacksNodeAPI ?? 'https://api.hiro.so';\n }\n\n public static new(options?: SimulationBuilderOptions) {\n return new SimulationBuilder(options);\n }\n\n // biome-ignore lint/style/useNumberNamespace: <explanation>\n private block = NaN;\n private sender = '';\n private steps: (\n | {\n // contract call\n contract_id: string;\n function_name: string;\n function_args?: ClarityValue[];\n sender: string;\n fee: number;\n }\n | {\n // contract deploy\n contract_name: string;\n source_code: string;\n deployer: string;\n fee: number;\n }\n | {\n // STX transfer\n recipient: string;\n amount: number;\n sender: string;\n fee: number;\n }\n | SimulationEval\n )[] = [];\n\n public useBlockHeight(block: number) {\n this.block = block;\n return this;\n }\n public withSender(address: string) {\n this.sender = address;\n return this;\n }\n public addSTXTransfer(params: {\n recipient: string;\n amount: number;\n sender?: string;\n fee?: number;\n }) {\n if (params.sender == null && this.sender === '') {\n throw new Error(\n 'Please specify a sender with useSender or adding a sender paramenter'\n );\n }\n this.steps.push({\n ...params,\n sender: params.sender ?? this.sender,\n fee: params.fee ?? 0,\n });\n return this;\n }\n public addContractCall(params: {\n contract_id: string;\n function_name: string;\n function_args?: ClarityValue[];\n sender?: string;\n fee?: number;\n }) {\n if (params.sender == null && this.sender === '') {\n throw new Error(\n 'Please specify a sender with useSender or adding a sender paramenter'\n );\n }\n this.steps.push({\n ...params,\n sender: params.sender ?? this.sender,\n fee: params.fee ?? 0,\n });\n return this;\n }\n public addContractDeploy(params: {\n contract_name: string;\n source_code: string;\n deployer?: string;\n fee?: number;\n }) {\n if (params.deployer == null && this.sender === '') {\n throw new Error(\n 'Please specify a deployer with useSender or adding a deployer paramenter'\n );\n }\n this.steps.push({\n ...params,\n deployer: params.deployer ?? this.sender,\n fee: params.fee ?? 0,\n });\n return this;\n }\n public addEvalCode(inside_contract_id: string, code: string) {\n this.steps.push({\n contract_id: inside_contract_id,\n code,\n });\n return this;\n }\n public addMapRead(contract_id: string, map: string, key: string) {\n this.steps.push({\n contract_id,\n code: `(map-get ${map} ${key})`,\n });\n return this;\n }\n public addVarRead(contract_id: string, variable: string) {\n this.steps.push({\n contract_id,\n code: `(var-get ${variable})`,\n });\n return this;\n }\n\n private async getBlockInfo() {\n if (Number.isNaN(this.block)) {\n const { stacks_tip_height } = await getNodeInfo({\n stacksEndpoint: this.stacksNodeAPI,\n });\n this.block = stacks_tip_height;\n }\n const info: Block = await richFetch(\n `${this.stacksNodeAPI}/extended/v1/block/by_height/${this.block}?unanchored=true`\n ).then((r) => r.json());\n if (\n info.height !== this.block ||\n typeof info.hash !== 'string' ||\n !info.hash.startsWith('0x')\n ) {\n throw new Error(\n `failed to get block info for block height ${this.block}`\n );\n }\n return {\n block_height: this.block,\n block_hash: info.hash.substring(2),\n index_block_hash: info.index_block_hash.substring(2),\n };\n }\n\n public async run() {\n console.log(\n `--------------------------------\nThis product can never exist without your support!\n\nWe receive sponsorship funds with:\nSP212Y5JKN59YP3GYG07K3S8W5SSGE4KH6B5STXER\n\nFeedbacks and feature requests are welcome.\nTo get in touch: contact@stxer.xyz\n--------------------------------`\n );\n const block = await this.getBlockInfo();\n console.log(\n `Using block height ${block.block_height} hash 0x${block.block_hash} to run simulation.`\n );\n const txs: (StacksTransactionWire | SimulationEval)[] = [];\n const nonce_by_address = new Map<string, number>();\n const nextNonce = async (sender: string) => {\n const nonce = nonce_by_address.get(sender);\n if (nonce == null) {\n const url = `${this.stacksNodeAPI}/v2/accounts/${sender}?proof=${false}&tip=${\n block.index_block_hash\n }`;\n const account: AccountDataResponse = await richFetch(url).then((r) =>\n r.json()\n );\n nonce_by_address.set(sender, account.nonce + 1);\n return account.nonce;\n }\n nonce_by_address.set(sender, nonce + 1);\n return nonce;\n };\n for (const step of this.steps) {\n if ('sender' in step && 'function_name' in step) {\n const nonce = await nextNonce(step.sender);\n const [contractAddress, contractName] = step.contract_id.split('.');\n const tx = await makeUnsignedContractCall({\n contractAddress,\n contractName,\n functionName: step.function_name,\n functionArgs: step.function_args ?? [],\n nonce,\n network: STACKS_MAINNET,\n publicKey: '',\n postConditionMode: PostConditionMode.Allow,\n fee: step.fee,\n });\n tx.auth.spendingCondition.signer = c32addressDecode(step.sender)[1];\n txs.push(tx);\n } else if ('sender' in step && 'recipient' in step) {\n const nonce = await nextNonce(step.sender);\n const tx = await makeUnsignedSTXTokenTransfer({\n recipient: step.recipient,\n amount: step.amount,\n nonce,\n network: STACKS_MAINNET,\n publicKey: '',\n fee: step.fee,\n });\n tx.auth.spendingCondition.signer = c32addressDecode(step.sender)[1];\n txs.push(tx);\n } else if ('deployer' in step) {\n const nonce = await nextNonce(step.deployer);\n const tx = await makeUnsignedContractDeploy({\n contractName: step.contract_name,\n codeBody: step.source_code,\n nonce,\n network: STACKS_MAINNET,\n publicKey: '',\n postConditionMode: PostConditionMode.Allow,\n fee: step.fee,\n });\n tx.auth.spendingCondition.signer = c32addressDecode(step.deployer)[1];\n txs.push(tx);\n } else if ('code' in step) {\n txs.push(step);\n } else {\n // biome-ignore lint/style/noUnusedTemplateLiteral: <explanation>\n console.log(`Invalid simulation step:`, step);\n }\n }\n const id = await runSimulation(\n `${this.apiEndpoint}/simulations`,\n block.block_hash, \n block.block_height, \n txs\n );\n console.log(\n `Simulation will be available at: https://stxer.xyz/simulations/mainnet/${id}`\n );\n return id;\n }\n}\n"],"names":["runTx","tx","tupleCV","type","uintCV","data","bufferCV","serializeBytes","runEval","_ref","contract_id","code","_contract_id$split","split","contract_address","contract_name","serializeCVBytes","contract","contractPrincipalCV","stringAsciiCV","runSimulation","_x","_x2","_x3","_x4","_runSimulation","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee5","apiEndpoint","block_hash","block_height","txs","header","heightBytes","view","hashHex","hashBytes","txBytes","totalLength","body","offset","_iterator2","_step2","rs","wrap","_callee5$","_context5","prev","next","TextEncoder","encode","Uint8Array","DataView","buffer","setBigUint64","BigInt","startsWith","substring","match","map","byte","Number","parseInt","t","length","reduce","acc","curr","set","_createForOfIteratorHelperLoose","done","value","fetch","method","then","_ref3","_callee4","response","_callee4$","_context4","text","sent","Error","abrupt","JSON","parse","stop","_x6","id","SimulationBuilder","options","_options$apiEndpoint","_options$stacksNodeAP","stacksNodeAPI","block","NaN","sender","steps","new","_proto","prototype","useBlockHeight","withSender","address","addSTXTransfer","params","_params$sender","_params$fee","push","_extends","fee","addContractCall","_params$sender2","_params$fee2","addContractDeploy","_params$deployer","_params$fee3","deployer","addEvalCode","inside_contract_id","addMapRead","key","addVarRead","variable","getBlockInfo","_getBlockInfo","_callee","_yield$getNodeInfo","stacks_tip_height","info","_callee$","_context","isNaN","getNodeInfo","stacksEndpoint","richFetch","r","json","height","hash","index_block_hash","run","_run","_callee3","_this","nonce_by_address","nextNonce","_iterator","_step","step","_step$function_args","nonce","_step$contract_id$spl","contractAddress","contractName","_nonce","_tx","_nonce2","_tx2","_callee3$","_context3","console","log","Map","_ref2","_callee2","url","account","_callee2$","_context2","get","_x5","makeUnsignedContractCall","functionName","function_name","functionArgs","function_args","network","STACKS_MAINNET","publicKey","postConditionMode","PostConditionMode","Allow","auth","spendingCondition","signer","c32addressDecode","makeUnsignedSTXTokenTransfer","recipient","amount","makeUnsignedContractDeploy","codeBody","source_code"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBA,SAASA,KAAKA,CAACC,EAAyB,EAAA;AACtC;AACA,EAAA,OAAOC,OAAO,CAAC;AAAEC,IAAAA,IAAI,EAAEC,MAAM,CAAC,CAAC,CAAC;AAAEC,IAAAA,IAAI,EAAEC,QAAQ,CAACL,EAAE,CAACM,cAAc,EAAE,CAAA;AAAG,GAAA,CAAC,CAAA;AAC1E,CAAA;SAOgBC,OAAOA,CAAAC,IAAA,EAAsC;AAAA,EAAA,IAAnCC,WAAW,GAAAD,IAAA,CAAXC,WAAW;IAAEC,IAAI,GAAAF,IAAA,CAAJE,IAAI,CAAA;AACzC,EAAA,IAAAC,kBAAA,GAA0CF,WAAW,CAACG,KAAK,CAAC,GAAG,CAAC;AAAzDC,IAAAA,gBAAgB,GAAAF,kBAAA,CAAA,CAAA,CAAA;AAAEG,IAAAA,aAAa,GAAAH,kBAAA,CAAA,CAAA,CAAA,CAAA;AACtC;AACA,EAAA,OAAOV,OAAO,CAAC;AACbC,IAAAA,IAAI,EAAEC,MAAM,CAAC,CAAC,CAAC;AACfC,IAAAA,IAAI,EAAEC,QAAQ,CACZU,gBAAgB,CACdd,OAAO,CAAC;AACNe,MAAAA,QAAQ,EAAEC,mBAAmB,CAACJ,gBAAgB,EAAEC,aAAa,CAAC;MAC9DJ,IAAI,EAAEQ,aAAa,CAACR,IAAI,CAAA;AACzB,KAAA,CAAC,CACH,CAAA;AAEJ,GAAA,CAAC,CAAA;AACJ,CAAA;AAEsBS,SAAAA,aAAaA,CAAAC,EAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA,EAAA;AAAA,EAAA,OAAAC,cAAA,CAAAC,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,CAAA;AAoDlC,SAAAF,cAAA,GAAA;AAAAA,EAAAA,cAAA,GAAAG,iBAAA,cAAAC,mBAAA,GAAAC,IAAA,CApDM,SAAAC,QAAAA,CACLC,WAAmB,EACnBC,UAAkB,EAClBC,YAAoB,EACpBC,GAA+C,EAAA;IAAA,IAAAC,MAAA,EAAAC,WAAA,EAAAC,IAAA,EAAAC,OAAA,EAAAC,SAAA,EAAAC,OAAA,EAAAC,WAAA,EAAAC,IAAA,EAAAC,MAAA,EAAAC,UAAA,EAAAC,MAAA,EAAA7C,EAAA,EAAA8C,EAAA,CAAA;AAAA,IAAA,OAAAlB,mBAAA,EAAA,CAAAmB,IAAA,CAAA,SAAAC,UAAAC,SAAA,EAAA;AAAA,MAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAAC,IAAA,GAAAD,SAAA,CAAAE,IAAA;AAAA,QAAA,KAAA,CAAA;AAE/C;UACMhB,MAAM,GAAG,IAAIiB,WAAW,EAAE,CAACC,MAAM,CAAC,QAAQ,CAAC,CACjD;AACMjB,UAAAA,WAAW,GAAG,IAAIkB,UAAU,CAAC,CAAC,CAAC,CACrC;AACMjB,UAAAA,IAAI,GAAG,IAAIkB,QAAQ,CAACnB,WAAW,CAACoB,MAAM,CAAC,CAAA;AAC7CnB,UAAAA,IAAI,CAACoB,YAAY,CAAC,CAAC,EAAEC,MAAM,CAACzB,YAAY,CAAC,EAAE,KAAK,CAAC,CAAC;AAElD;AACMK,UAAAA,OAAO,GAAGN,UAAU,CAAC2B,UAAU,CAAC,IAAI,CAAC,GAAG3B,UAAU,CAAC4B,SAAS,CAAC,CAAC,CAAC,GAAG5B,UAAU,CAClF;AACMO,UAAAA,SAAS,GAAG,IAAIe,UAAU,CAAChB,OAAO,CAACuB,KAAK,CAAC,SAAS,CAAE,CAACC,GAAG,CAAC,UAAAC,KAAI,EAAA;AAAA,YAAA,OAAIC,MAAM,CAACC,QAAQ,CAACF,KAAI,EAAE,EAAE,CAAC,CAAA;AAAA,WAAA,CAAC,CAAC,CAElG;AACMvB,UAAAA,OAAO,GAAGN,GAAG,CAChB4B,GAAG,CAAC,UAACI,CAAC,EAAA;AAAA,YAAA,OAAK,aAAa,IAAIA,CAAC,IAAI,MAAM,IAAIA,CAAC,GAAG3D,OAAO,CAAC2D,CAAC,CAAC,GAAGnE,KAAK,CAACmE,CAAC,CAAC,CAAA;AAAA,WAAA,CAAC,CACrEJ,GAAG,CAAC,UAACI,CAAC,EAAA;YAAA,OAAKnD,gBAAgB,CAACmD,CAAC,CAAC,CAAA;AAAA,WAAA,CAAC,CAElC;UACMzB,WAAW,GAAGN,MAAM,CAACgC,MAAM,GAAG/B,WAAW,CAAC+B,MAAM,GAAG5B,SAAS,CAAC4B,MAAM,GACvE3B,OAAO,CAAC4B,MAAM,CAAC,UAACC,GAAG,EAAEC,IAAI,EAAA;AAAA,YAAA,OAAKD,GAAG,GAAGC,IAAI,CAACH,MAAM,CAAA;AAAA,WAAA,EAAE,CAAC,CAAC,CAAA;AAC/CzB,UAAAA,IAAI,GAAG,IAAIY,UAAU,CAACb,WAAW,CAAC,CAAA;AAEpCE,UAAAA,MAAM,GAAG,CAAC,CAAA;AACdD,UAAAA,IAAI,CAAC6B,GAAG,CAACpC,MAAM,EAAEQ,MAAM,CAAC,CAAA;UACxBA,MAAM,IAAIR,MAAM,CAACgC,MAAM,CAAA;AACvBzB,UAAAA,IAAI,CAAC6B,GAAG,CAACnC,WAAW,EAAEO,MAAM,CAAC,CAAA;UAC7BA,MAAM,IAAIP,WAAW,CAAC+B,MAAM,CAAA;AAC5BzB,UAAAA,IAAI,CAAC6B,GAAG,CAAChC,SAAS,EAAEI,MAAM,CAAC,CAAA;UAC3BA,MAAM,IAAIJ,SAAS,CAAC4B,MAAM,CAAA;UAC1B,KAAAvB,UAAA,GAAA4B,+BAAA,CAAiBhC,OAAO,CAAAK,EAAAA,CAAAA,CAAAA,MAAA,GAAAD,UAAA,EAAA6B,EAAAA,IAAA,GAAE;YAAfzE,EAAE,GAAA6C,MAAA,CAAA6B,KAAA,CAAA;AACXhC,YAAAA,IAAI,CAAC6B,GAAG,CAACvE,EAAE,EAAE2C,MAAM,CAAC,CAAA;YACpBA,MAAM,IAAI3C,EAAE,CAACmE,MAAM,CAAA;AACrB,WAAA;AAAClB,UAAAA,SAAA,CAAAE,IAAA,GAAA,EAAA,CAAA;UAAA,OAEgBwB,KAAK,CAAC5C,WAAW,EAAE;AAClC6C,YAAAA,MAAM,EAAE,MAAM;AACdlC,YAAAA,IAAI,EAAJA,IAAAA;WACD,CAAC,CAACmC,IAAI,cAAA,YAAA;YAAA,IAAAC,KAAA,GAAAnD,iBAAA,cAAAC,mBAAA,GAAAC,IAAA,CAAC,SAAAkD,QAAAA,CAAOjC,EAAE,EAAA;AAAA,cAAA,IAAAkC,QAAA,CAAA;AAAA,cAAA,OAAApD,mBAAA,EAAA,CAAAmB,IAAA,CAAA,SAAAkC,UAAAC,SAAA,EAAA;AAAA,gBAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAAhC,IAAA,GAAAgC,SAAA,CAAA/B,IAAA;AAAA,kBAAA,KAAA,CAAA;AAAA+B,oBAAAA,SAAA,CAAA/B,IAAA,GAAA,CAAA,CAAA;AAAA,oBAAA,OACQL,EAAE,CAACqC,IAAI,EAAE,CAAA;AAAA,kBAAA,KAAA,CAAA;oBAA1BH,QAAQ,GAAAE,SAAA,CAAAE,IAAA,CAAA;AAAA,oBAAA,IACTJ,QAAQ,CAACrB,UAAU,CAAC,GAAG,CAAC,EAAA;AAAAuB,sBAAAA,SAAA,CAAA/B,IAAA,GAAA,CAAA,CAAA;AAAA,sBAAA,MAAA;AAAA,qBAAA;AAAA,oBAAA,MACrB,IAAIkC,KAAK,CAAiCL,+BAAAA,GAAAA,QAAU,CAAC,CAAA;AAAA,kBAAA,KAAA,CAAA;oBAAA,OAAAE,SAAA,CAAAI,MAAA,CAAA,QAAA,EAEtDC,IAAI,CAACC,KAAK,CAACR,QAAQ,CAAmB,CAAA,CAAA;AAAA,kBAAA,KAAA,CAAA,CAAA;AAAA,kBAAA,KAAA,KAAA;oBAAA,OAAAE,SAAA,CAAAO,IAAA,EAAA,CAAA;AAAA,iBAAA;AAAA,eAAA,EAAAV,QAAA,CAAA,CAAA;aAC9C,CAAA,CAAA,CAAA;AAAA,YAAA,OAAA,UAAAW,GAAA,EAAA;AAAA,cAAA,OAAAZ,KAAA,CAAArD,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,aAAA,CAAA;WAAC,EAAA,CAAA,CAAA;AAAA,QAAA,KAAA,EAAA;UATIoB,EAAE,GAAAG,SAAA,CAAAmC,IAAA,CAAA;AAAA,UAAA,OAAAnC,SAAA,CAAAqC,MAAA,CAUDxC,QAAAA,EAAAA,EAAE,CAAC6C,EAAE,CAAA,CAAA;AAAA,QAAA,KAAA,EAAA,CAAA;AAAA,QAAA,KAAA,KAAA;UAAA,OAAA1C,SAAA,CAAAwC,IAAA,EAAA,CAAA;AAAA,OAAA;AAAA,KAAA,EAAA3D,QAAA,CAAA,CAAA;GACb,CAAA,CAAA,CAAA;AAAA,EAAA,OAAAN,cAAA,CAAAC,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,CAAA;AAOD,IAAakE,iBAAiB,gBAAA,YAAA;EAI5B,SAAAA,iBAAAA,CAAoBC,SAAsC;IAAA,IAAAC,oBAAA,EAAAC,qBAAA,CAAA;AAAA,IAAA,IAAtCF;MAAAA,UAAoC,EAAE,CAAA;AAAA,KAAA;AAAA,IAAA,IAAA,CAHlD9D,WAAW,GAAA,KAAA,CAAA,CAAA;AAAA,IAAA,IAAA,CACXiE,aAAa,GAAA,KAAA,CAAA,CAAA;AAWrB;IAAA,IACQC,CAAAA,KAAK,GAAGC,GAAG,CAAA;IAAA,IACXC,CAAAA,MAAM,GAAG,EAAE,CAAA;IAAA,IACXC,CAAAA,KAAK,GAwBP,EAAE,CAAA;IAnCN,IAAI,CAACrE,WAAW,GAAA,CAAA+D,oBAAA,GAAGD,OAAO,CAAC9D,WAAW,KAAA,IAAA,GAAA+D,oBAAA,GAAI,uBAAuB,CAAA;IACjE,IAAI,CAACE,aAAa,GAAA,CAAAD,qBAAA,GAAGF,OAAO,CAACG,aAAa,KAAA,IAAA,GAAAD,qBAAA,GAAI,qBAAqB,CAAA;AACrE,GAAA;AAACH,EAAAA,iBAAA,CAEM,KAAA,CAAA,GAAA,SAAOS,IAAGA,CAACR,OAAkC,EAAA;AAClD,IAAA,OAAO,IAAID,iBAAiB,CAACC,OAAO,CAAC,CAAA;GACtC,CAAA;AAAA,EAAA,IAAAS,MAAA,GAAAV,iBAAA,CAAAW,SAAA,CAAA;AAAAD,EAAAA,MAAA,CA+BME,cAAc,GAAd,SAAAA,cAAcA,CAACP,KAAa,EAAA;IACjC,IAAI,CAACA,KAAK,GAAGA,KAAK,CAAA;AAClB,IAAA,OAAO,IAAI,CAAA;GACZ,CAAA;AAAAK,EAAAA,MAAA,CACMG,UAAU,GAAV,SAAAA,UAAUA,CAACC,OAAe,EAAA;IAC/B,IAAI,CAACP,MAAM,GAAGO,OAAO,CAAA;AACrB,IAAA,OAAO,IAAI,CAAA;GACZ,CAAA;AAAAJ,EAAAA,MAAA,CACMK,cAAc,GAAd,SAAAA,cAAcA,CAACC,MAKrB,EAAA;IAAA,IAAAC,cAAA,EAAAC,WAAA,CAAA;IACC,IAAIF,MAAM,CAACT,MAAM,IAAI,IAAI,IAAI,IAAI,CAACA,MAAM,KAAK,EAAE,EAAE;AAC/C,MAAA,MAAM,IAAId,KAAK,CACb,sEAAsE,CACvE,CAAA;AACH,KAAA;AACA,IAAA,IAAI,CAACe,KAAK,CAACW,IAAI,CAAAC,QAAA,KACVJ,MAAM,EAAA;MACTT,MAAM,EAAA,CAAAU,cAAA,GAAED,MAAM,CAACT,MAAM,KAAA,IAAA,GAAAU,cAAA,GAAI,IAAI,CAACV,MAAM;MACpCc,GAAG,EAAA,CAAAH,WAAA,GAAEF,MAAM,CAACK,GAAG,KAAA,IAAA,GAAAH,WAAA,GAAI,CAAA;AAAC,KAAA,CACrB,CAAC,CAAA;AACF,IAAA,OAAO,IAAI,CAAA;GACZ,CAAA;AAAAR,EAAAA,MAAA,CACMY,eAAe,GAAf,SAAAA,eAAeA,CAACN,MAMtB,EAAA;IAAA,IAAAO,eAAA,EAAAC,YAAA,CAAA;IACC,IAAIR,MAAM,CAACT,MAAM,IAAI,IAAI,IAAI,IAAI,CAACA,MAAM,KAAK,EAAE,EAAE;AAC/C,MAAA,MAAM,IAAId,KAAK,CACb,sEAAsE,CACvE,CAAA;AACH,KAAA;AACA,IAAA,IAAI,CAACe,KAAK,CAACW,IAAI,CAAAC,QAAA,KACVJ,MAAM,EAAA;MACTT,MAAM,EAAA,CAAAgB,eAAA,GAAEP,MAAM,CAACT,MAAM,KAAA,IAAA,GAAAgB,eAAA,GAAI,IAAI,CAAChB,MAAM;MACpCc,GAAG,EAAA,CAAAG,YAAA,GAAER,MAAM,CAACK,GAAG,KAAA,IAAA,GAAAG,YAAA,GAAI,CAAA;AAAC,KAAA,CACrB,CAAC,CAAA;AACF,IAAA,OAAO,IAAI,CAAA;GACZ,CAAA;AAAAd,EAAAA,MAAA,CACMe,iBAAiB,GAAjB,SAAAA,iBAAiBA,CAACT,MAKxB,EAAA;IAAA,IAAAU,gBAAA,EAAAC,YAAA,CAAA;IACC,IAAIX,MAAM,CAACY,QAAQ,IAAI,IAAI,IAAI,IAAI,CAACrB,MAAM,KAAK,EAAE,EAAE;AACjD,MAAA,MAAM,IAAId,KAAK,CACb,0EAA0E,CAC3E,CAAA;AACH,KAAA;AACA,IAAA,IAAI,CAACe,KAAK,CAACW,IAAI,CAAAC,QAAA,KACVJ,MAAM,EAAA;MACTY,QAAQ,EAAA,CAAAF,gBAAA,GAAEV,MAAM,CAACY,QAAQ,KAAA,IAAA,GAAAF,gBAAA,GAAI,IAAI,CAACnB,MAAM;MACxCc,GAAG,EAAA,CAAAM,YAAA,GAAEX,MAAM,CAACK,GAAG,KAAA,IAAA,GAAAM,YAAA,GAAI,CAAA;AAAC,KAAA,CACrB,CAAC,CAAA;AACF,IAAA,OAAO,IAAI,CAAA;GACZ,CAAA;EAAAjB,MAAA,CACMmB,WAAW,GAAX,SAAAA,WAAWA,CAACC,kBAA0B,EAAEhH,IAAY,EAAA;AACzD,IAAA,IAAI,CAAC0F,KAAK,CAACW,IAAI,CAAC;AACdtG,MAAAA,WAAW,EAAEiH,kBAAkB;AAC/BhH,MAAAA,IAAI,EAAJA,IAAAA;AACD,KAAA,CAAC,CAAA;AACF,IAAA,OAAO,IAAI,CAAA;GACZ,CAAA;EAAA4F,MAAA,CACMqB,UAAU,GAAV,SAAAA,UAAUA,CAAClH,WAAmB,EAAEqD,GAAW,EAAE8D,GAAW,EAAA;AAC7D,IAAA,IAAI,CAACxB,KAAK,CAACW,IAAI,CAAC;AACdtG,MAAAA,WAAW,EAAXA,WAAW;MACXC,IAAI,EAAA,WAAA,GAAcoD,GAAG,GAAA,GAAA,GAAI8D,GAAG,GAAA,GAAA;AAC7B,KAAA,CAAC,CAAA;AACF,IAAA,OAAO,IAAI,CAAA;GACZ,CAAA;EAAAtB,MAAA,CACMuB,UAAU,GAAV,SAAAA,UAAUA,CAACpH,WAAmB,EAAEqH,QAAgB,EAAA;AACrD,IAAA,IAAI,CAAC1B,KAAK,CAACW,IAAI,CAAC;AACdtG,MAAAA,WAAW,EAAXA,WAAW;AACXC,MAAAA,IAAI,gBAAcoH,QAAQ,GAAA,GAAA;AAC3B,KAAA,CAAC,CAAA;AACF,IAAA,OAAO,IAAI,CAAA;GACZ,CAAA;AAAAxB,EAAAA,MAAA,CAEayB,YAAY,gBAAA,YAAA;IAAA,IAAAC,aAAA,gBAAArG,iBAAA,cAAAC,mBAAA,EAAAC,CAAAA,IAAA,CAAlB,SAAAoG,OAAA,GAAA;AAAA,MAAA,IAAAC,kBAAA,EAAAC,iBAAA,EAAAC,IAAA,CAAA;AAAA,MAAA,OAAAxG,mBAAA,EAAA,CAAAmB,IAAA,CAAA,SAAAsF,SAAAC,QAAA,EAAA;AAAA,QAAA,OAAA,CAAA,EAAA,QAAAA,QAAA,CAAApF,IAAA,GAAAoF,QAAA,CAAAnF,IAAA;AAAA,UAAA,KAAA,CAAA;AAAA,YAAA,IAAA,CACFa,MAAM,CAACuE,KAAK,CAAC,IAAI,CAACtC,KAAK,CAAC,EAAA;AAAAqC,cAAAA,QAAA,CAAAnF,IAAA,GAAA,CAAA,CAAA;AAAA,cAAA,MAAA;AAAA,aAAA;AAAAmF,YAAAA,QAAA,CAAAnF,IAAA,GAAA,CAAA,CAAA;AAAA,YAAA,OACUqF,WAAW,CAAC;cAC9CC,cAAc,EAAE,IAAI,CAACzC,aAAAA;AACtB,aAAA,CAAC,CAAA;AAAA,UAAA,KAAA,CAAA;YAAAkC,kBAAA,GAAAI,QAAA,CAAAlD,IAAA,CAAA;YAFM+C,iBAAiB,GAAAD,kBAAA,CAAjBC,iBAAiB,CAAA;YAGzB,IAAI,CAAClC,KAAK,GAAGkC,iBAAiB,CAAA;AAAC,UAAA,KAAA,CAAA;AAAAG,YAAAA,QAAA,CAAAnF,IAAA,GAAA,CAAA,CAAA;AAAA,YAAA,OAEPuF,SAAS,CAC9B,IAAI,CAAC1C,aAAa,GAAgC,+BAAA,GAAA,IAAI,CAACC,KAAK,qBAAkB,CAClF,CAACpB,IAAI,CAAC,UAAC8D,CAAC,EAAA;AAAA,cAAA,OAAKA,CAAC,CAACC,IAAI,EAAE,CAAA;aAAC,CAAA,CAAA;AAAA,UAAA,KAAA,CAAA;YAFjBR,IAAI,GAAAE,QAAA,CAAAlD,IAAA,CAAA;YAAA,IAIRgD,EAAAA,IAAI,CAACS,MAAM,KAAK,IAAI,CAAC5C,KAAK,IAC1B,OAAOmC,IAAI,CAACU,IAAI,KAAK,QAAQ,IAC7B,CAACV,IAAI,CAACU,IAAI,CAACnF,UAAU,CAAC,IAAI,CAAC,CAAA,EAAA;AAAA2E,cAAAA,QAAA,CAAAnF,IAAA,GAAA,EAAA,CAAA;AAAA,cAAA,MAAA;AAAA,aAAA;AAAA,YAAA,MAErB,IAAIkC,KAAK,CAAA,4CAAA,GACgC,IAAI,CAACY,KAAO,CAC1D,CAAA;AAAA,UAAA,KAAA,EAAA;YAAA,OAAAqC,QAAA,CAAAhD,MAAA,CAEI,QAAA,EAAA;cACLrD,YAAY,EAAE,IAAI,CAACgE,KAAK;cACxBjE,UAAU,EAAEoG,IAAI,CAACU,IAAI,CAAClF,SAAS,CAAC,CAAC,CAAC;AAClCmF,cAAAA,gBAAgB,EAAEX,IAAI,CAACW,gBAAgB,CAACnF,SAAS,CAAC,CAAC,CAAA;aACpD,CAAA,CAAA;AAAA,UAAA,KAAA,EAAA,CAAA;AAAA,UAAA,KAAA,KAAA;YAAA,OAAA0E,QAAA,CAAA7C,IAAA,EAAA,CAAA;AAAA,SAAA;AAAA,OAAA,EAAAwC,OAAA,EAAA,IAAA,CAAA,CAAA;KACF,CAAA,CAAA,CAAA;AAAA,IAAA,SAxBaF,YAAYA,GAAA;AAAA,MAAA,OAAAC,aAAA,CAAAvG,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,KAAA;AAAA,IAAA,OAAZqG,YAAY,CAAA;AAAA,GAAA,EAAA,CAAA;AAAAzB,EAAAA,MAAA,CA0Bb0C,GAAG,gBAAA,YAAA;IAAA,IAAAC,IAAA,gBAAAtH,iBAAA,cAAAC,mBAAA,EAAAC,CAAAA,IAAA,CAAT,SAAAqH,QAAA,GAAA;AAAA,MAAA,IAAAC,KAAA,GAAA,IAAA,CAAA;AAAA,MAAA,IAAAlD,KAAA,EAAA/D,GAAA,EAAAkH,gBAAA,EAAAC,SAAA,EAAAC,SAAA,EAAAC,KAAA,EAAAC,IAAA,EAAAC,mBAAA,EAAAC,KAAA,EAAAC,qBAAA,EAAAC,eAAA,EAAAC,YAAA,EAAA7J,EAAA,EAAA8J,MAAA,EAAAC,GAAA,EAAAC,OAAA,EAAAC,IAAA,EAAAtE,EAAA,CAAA;AAAA,MAAA,OAAA/D,mBAAA,EAAA,CAAAmB,IAAA,CAAA,SAAAmH,UAAAC,SAAA,EAAA;AAAA,QAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAAjH,IAAA,GAAAiH,SAAA,CAAAhH,IAAA;AAAA,UAAA,KAAA,CAAA;YACLiH,OAAO,CAACC,GAAG,CAAA,4RASkB,CAC5B,CAAA;AAACF,YAAAA,SAAA,CAAAhH,IAAA,GAAA,CAAA,CAAA;AAAA,YAAA,OACkB,IAAI,CAAC4E,YAAY,EAAE,CAAA;AAAA,UAAA,KAAA,CAAA;YAAjC9B,KAAK,GAAAkE,SAAA,CAAA/E,IAAA,CAAA;YACXgF,OAAO,CAACC,GAAG,CAAA,qBAAA,GACapE,KAAK,CAAChE,YAAY,GAAA,UAAA,GAAWgE,KAAK,CAACjE,UAAU,GAAA,qBAAqB,CACzF,CAAA;AACKE,YAAAA,GAAG,GAA+C,EAAE,CAAA;AACpDkH,YAAAA,gBAAgB,GAAG,IAAIkB,GAAG,EAAkB,CAAA;YAC5CjB,SAAS,gBAAA,YAAA;cAAA,IAAAkB,KAAA,GAAA5I,iBAAA,cAAAC,mBAAA,GAAAC,IAAA,CAAG,SAAA2I,QAAAA,CAAOrE,MAAc,EAAA;AAAA,gBAAA,IAAAuD,KAAA,EAAAe,GAAA,EAAAC,OAAA,CAAA;AAAA,gBAAA,OAAA9I,mBAAA,EAAA,CAAAmB,IAAA,CAAA,SAAA4H,UAAAC,SAAA,EAAA;AAAA,kBAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAA1H,IAAA,GAAA0H,SAAA,CAAAzH,IAAA;AAAA,oBAAA,KAAA,CAAA;AAC/BuG,sBAAAA,KAAK,GAAGN,gBAAgB,CAACyB,GAAG,CAAC1E,MAAM,CAAC,CAAA;sBAAA,IACtCuD,EAAAA,KAAK,IAAI,IAAI,CAAA,EAAA;AAAAkB,wBAAAA,SAAA,CAAAzH,IAAA,GAAA,CAAA,CAAA;AAAA,wBAAA,MAAA;AAAA,uBAAA;sBACTsH,GAAG,GAAMtB,KAAI,CAACnD,aAAa,GAAA,eAAA,GAAgBG,MAAM,GAAA,SAAA,GAAU,KAAK,GAAA,OAAA,GACpEF,KAAK,CAAC8C,gBACR,CAAA;AAAA6B,sBAAAA,SAAA,CAAAzH,IAAA,GAAA,CAAA,CAAA;sBAAA,OAC2CuF,SAAS,CAAC+B,GAAG,CAAC,CAAC5F,IAAI,CAAC,UAAC8D,CAAC,EAAA;AAAA,wBAAA,OAC/DA,CAAC,CAACC,IAAI,EAAE,CAAA;uBACT,CAAA,CAAA;AAAA,oBAAA,KAAA,CAAA;sBAFK8B,OAAO,GAAAE,SAAA,CAAAxF,IAAA,CAAA;sBAGbgE,gBAAgB,CAAC7E,GAAG,CAAC4B,MAAM,EAAEuE,OAAO,CAAChB,KAAK,GAAG,CAAC,CAAC,CAAA;AAAC,sBAAA,OAAAkB,SAAA,CAAAtF,MAAA,CACzCoF,QAAAA,EAAAA,OAAO,CAAChB,KAAK,CAAA,CAAA;AAAA,oBAAA,KAAA,CAAA;sBAEtBN,gBAAgB,CAAC7E,GAAG,CAAC4B,MAAM,EAAEuD,KAAK,GAAG,CAAC,CAAC,CAAA;AAAC,sBAAA,OAAAkB,SAAA,CAAAtF,MAAA,CAAA,QAAA,EACjCoE,KAAK,CAAA,CAAA;AAAA,oBAAA,KAAA,EAAA,CAAA;AAAA,oBAAA,KAAA,KAAA;sBAAA,OAAAkB,SAAA,CAAAnF,IAAA,EAAA,CAAA;AAAA,mBAAA;AAAA,iBAAA,EAAA+E,QAAA,CAAA,CAAA;eACb,CAAA,CAAA,CAAA;cAAA,OAdKnB,SAAAA,SAASA,CAAAyB,GAAA,EAAA;AAAA,gBAAA,OAAAP,KAAA,CAAA9I,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,eAAA,CAAA;AAAA,aAAA,EAAA,CAAA;AAAA4H,YAAAA,SAAA,GAAA9E,+BAAA,CAeI,IAAI,CAAC4B,KAAK,CAAA,CAAA;AAAA,UAAA,KAAA,CAAA;AAAA,YAAA,IAAA,CAAAmD,KAAA,GAAAD,SAAA,EAAA,EAAA7E,IAAA,EAAA;AAAA0F,cAAAA,SAAA,CAAAhH,IAAA,GAAA,EAAA,CAAA;AAAA,cAAA,MAAA;AAAA,aAAA;YAAlBqG,IAAI,GAAAD,KAAA,CAAA7E,KAAA,CAAA;AAAA,YAAA,IAAA,EACT,QAAQ,IAAI8E,IAAI,IAAI,eAAe,IAAIA,IAAI,CAAA,EAAA;AAAAW,cAAAA,SAAA,CAAAhH,IAAA,GAAA,EAAA,CAAA;AAAA,cAAA,MAAA;AAAA,aAAA;AAAAgH,YAAAA,SAAA,CAAAhH,IAAA,GAAA,EAAA,CAAA;AAAA,YAAA,OACzBkG,SAAS,CAACG,IAAI,CAACrD,MAAM,CAAC,CAAA;AAAA,UAAA,KAAA,EAAA;YAApCuD,KAAK,GAAAS,SAAA,CAAA/E,IAAA,CAAA;AAAAuE,YAAAA,qBAAA,GAC6BH,IAAI,CAAC/I,WAAW,CAACG,KAAK,CAAC,GAAG,CAAC,EAA5DgJ,eAAe,GAAAD,qBAAA,CAAEE,CAAAA,CAAAA,EAAAA,YAAY,GAAAF,qBAAA,CAAA,CAAA,CAAA,CAAA;AAAAQ,YAAAA,SAAA,CAAAhH,IAAA,GAAA,EAAA,CAAA;AAAA,YAAA,OACnB4H,wBAAwB,CAAC;AACxCnB,cAAAA,eAAe,EAAfA,eAAe;AACfC,cAAAA,YAAY,EAAZA,YAAY;cACZmB,YAAY,EAAExB,IAAI,CAACyB,aAAa;cAChCC,YAAY,EAAA,CAAAzB,mBAAA,GAAED,IAAI,CAAC2B,aAAa,KAAA,IAAA,GAAA1B,mBAAA,GAAI,EAAE;AACtCC,cAAAA,KAAK,EAALA,KAAK;AACL0B,cAAAA,OAAO,EAAEC,cAAc;AACvBC,cAAAA,SAAS,EAAE,EAAE;cACbC,iBAAiB,EAAEC,iBAAiB,CAACC,KAAK;cAC1CxE,GAAG,EAAEuC,IAAI,CAACvC,GAAAA;AACX,aAAA,CAAC,CAAA;AAAA,UAAA,KAAA,EAAA;YAVIjH,EAAE,GAAAmK,SAAA,CAAA/E,IAAA,CAAA;AAWRpF,YAAAA,EAAE,CAAC0L,IAAI,CAACC,iBAAiB,CAACC,MAAM,GAAGC,gBAAgB,CAACrC,IAAI,CAACrD,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;AACnEjE,YAAAA,GAAG,CAAC6E,IAAI,CAAC/G,EAAE,CAAC,CAAA;AAACmK,YAAAA,SAAA,CAAAhH,IAAA,GAAA,EAAA,CAAA;AAAA,YAAA,MAAA;AAAA,UAAA,KAAA,EAAA;AAAA,YAAA,IAAA,EACJ,QAAQ,IAAIqG,IAAI,IAAI,WAAW,IAAIA,IAAI,CAAA,EAAA;AAAAW,cAAAA,SAAA,CAAAhH,IAAA,GAAA,EAAA,CAAA;AAAA,cAAA,MAAA;AAAA,aAAA;AAAAgH,YAAAA,SAAA,CAAAhH,IAAA,GAAA,EAAA,CAAA;AAAA,YAAA,OAC5BkG,SAAS,CAACG,IAAI,CAACrD,MAAM,CAAC,CAAA;AAAA,UAAA,KAAA,EAAA;YAApCuD,MAAK,GAAAS,SAAA,CAAA/E,IAAA,CAAA;AAAA+E,YAAAA,SAAA,CAAAhH,IAAA,GAAA,EAAA,CAAA;AAAA,YAAA,OACM2I,4BAA4B,CAAC;cAC5CC,SAAS,EAAEvC,IAAI,CAACuC,SAAS;cACzBC,MAAM,EAAExC,IAAI,CAACwC,MAAM;AACnBtC,cAAAA,KAAK,EAALA,MAAK;AACL0B,cAAAA,OAAO,EAAEC,cAAc;AACvBC,cAAAA,SAAS,EAAE,EAAE;cACbrE,GAAG,EAAEuC,IAAI,CAACvC,GAAAA;AACX,aAAA,CAAC,CAAA;AAAA,UAAA,KAAA,EAAA;YAPIjH,GAAE,GAAAmK,SAAA,CAAA/E,IAAA,CAAA;AAQRpF,YAAAA,GAAE,CAAC0L,IAAI,CAACC,iBAAiB,CAACC,MAAM,GAAGC,gBAAgB,CAACrC,IAAI,CAACrD,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;AACnEjE,YAAAA,GAAG,CAAC6E,IAAI,CAAC/G,GAAE,CAAC,CAAA;AAACmK,YAAAA,SAAA,CAAAhH,IAAA,GAAA,EAAA,CAAA;AAAA,YAAA,MAAA;AAAA,UAAA,KAAA,EAAA;YAAA,IACJ,EAAA,UAAU,IAAIqG,IAAI,CAAA,EAAA;AAAAW,cAAAA,SAAA,CAAAhH,IAAA,GAAA,EAAA,CAAA;AAAA,cAAA,MAAA;AAAA,aAAA;AAAAgH,YAAAA,SAAA,CAAAhH,IAAA,GAAA,EAAA,CAAA;AAAA,YAAA,OACPkG,SAAS,CAACG,IAAI,CAAChC,QAAQ,CAAC,CAAA;AAAA,UAAA,KAAA,EAAA;YAAtCkC,OAAK,GAAAS,SAAA,CAAA/E,IAAA,CAAA;AAAA+E,YAAAA,SAAA,CAAAhH,IAAA,GAAA,EAAA,CAAA;AAAA,YAAA,OACM8I,0BAA0B,CAAC;cAC1CpC,YAAY,EAAEL,IAAI,CAAC1I,aAAa;cAChCoL,QAAQ,EAAE1C,IAAI,CAAC2C,WAAW;AAC1BzC,cAAAA,KAAK,EAALA,OAAK;AACL0B,cAAAA,OAAO,EAAEC,cAAc;AACvBC,cAAAA,SAAS,EAAE,EAAE;cACbC,iBAAiB,EAAEC,iBAAiB,CAACC,KAAK;cAC1CxE,GAAG,EAAEuC,IAAI,CAACvC,GAAAA;AACX,aAAA,CAAC,CAAA;AAAA,UAAA,KAAA,EAAA;YARIjH,IAAE,GAAAmK,SAAA,CAAA/E,IAAA,CAAA;AASRpF,YAAAA,IAAE,CAAC0L,IAAI,CAACC,iBAAiB,CAACC,MAAM,GAAGC,gBAAgB,CAACrC,IAAI,CAAChC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;AACrEtF,YAAAA,GAAG,CAAC6E,IAAI,CAAC/G,IAAE,CAAC,CAAA;AAACmK,YAAAA,SAAA,CAAAhH,IAAA,GAAA,EAAA,CAAA;AAAA,YAAA,MAAA;AAAA,UAAA,KAAA,EAAA;YACR,IAAI,MAAM,IAAIqG,IAAI,EAAE;AACzBtH,cAAAA,GAAG,CAAC6E,IAAI,CAACyC,IAAI,CAAC,CAAA;AAChB,aAAC,MAAM;AACL;AACAY,cAAAA,OAAO,CAACC,GAAG,CAA6Bb,0BAAAA,EAAAA,IAAI,CAAC,CAAA;AAC/C,aAAA;AAAC,UAAA,KAAA,EAAA;AAAAW,YAAAA,SAAA,CAAAhH,IAAA,GAAA,CAAA,CAAA;AAAA,YAAA,MAAA;AAAA,UAAA,KAAA,EAAA;AAAAgH,YAAAA,SAAA,CAAAhH,IAAA,GAAA,EAAA,CAAA;AAAA,YAAA,OAEchC,aAAa,CACzB,IAAI,CAACY,WAAW,GACnBkE,cAAAA,EAAAA,KAAK,CAACjE,UAAU,EAChBiE,KAAK,CAAChE,YAAY,EAClBC,GAAG,CACJ,CAAA;AAAA,UAAA,KAAA,EAAA;YALKyD,EAAE,GAAAwE,SAAA,CAAA/E,IAAA,CAAA;AAMRgF,YAAAA,OAAO,CAACC,GAAG,CACiE1E,yEAAAA,GAAAA,EAAI,CAC/E,CAAA;AAAC,YAAA,OAAAwE,SAAA,CAAA7E,MAAA,CAAA,QAAA,EACKK,EAAE,CAAA,CAAA;AAAA,UAAA,KAAA,EAAA,CAAA;AAAA,UAAA,KAAA,KAAA;YAAA,OAAAwE,SAAA,CAAA1E,IAAA,EAAA,CAAA;AAAA,SAAA;AAAA,OAAA,EAAAyD,QAAA,EAAA,IAAA,CAAA,CAAA;KACV,CAAA,CAAA,CAAA;AAAA,IAAA,SA5FYF,GAAGA,GAAA;AAAA,MAAA,OAAAC,IAAA,CAAAxH,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,KAAA;AAAA,IAAA,OAAHsH,GAAG,CAAA;AAAA,GAAA,EAAA,CAAA;AAAA,EAAA,OAAApD,iBAAA,CAAA;AAAA,CAAA;;;;"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -11,7 +11,6 @@ import {
|
|
|
11
11
|
makeUnsignedContractCall,
|
|
12
12
|
makeUnsignedContractDeploy,
|
|
13
13
|
makeUnsignedSTXTokenTransfer,
|
|
14
|
-
serializeCV,
|
|
15
14
|
serializeCVBytes,
|
|
16
15
|
stringAsciiCV,
|
|
17
16
|
tupleCV,
|
|
@@ -19,9 +18,6 @@ import {
|
|
|
19
18
|
} from '@stacks/transactions';
|
|
20
19
|
import { c32addressDecode } from 'c32check';
|
|
21
20
|
|
|
22
|
-
// current beta api endpoint
|
|
23
|
-
const SIMULATION_API_ENDPOINT = 'https://api.stxer.xyz/simulations';
|
|
24
|
-
|
|
25
21
|
function runTx(tx: StacksTransactionWire) {
|
|
26
22
|
// type 0: run transaction
|
|
27
23
|
return tupleCV({ type: uintCV(0), data: bufferCV(tx.serializeBytes()) });
|
|
@@ -49,25 +45,47 @@ export function runEval({ contract_id, code }: SimulationEval) {
|
|
|
49
45
|
}
|
|
50
46
|
|
|
51
47
|
export async function runSimulation(
|
|
48
|
+
apiEndpoint: string,
|
|
52
49
|
block_hash: string,
|
|
53
50
|
block_height: number,
|
|
54
51
|
txs: (StacksTransactionWire | SimulationEval)[]
|
|
55
52
|
) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
const
|
|
53
|
+
// Convert 'sim-v1' to Uint8Array
|
|
54
|
+
const header = new TextEncoder().encode('sim-v1');
|
|
55
|
+
// Create 8 bytes for block height
|
|
56
|
+
const heightBytes = new Uint8Array(8);
|
|
57
|
+
// Convert block height to bytes
|
|
58
|
+
const view = new DataView(heightBytes.buffer);
|
|
59
|
+
view.setBigUint64(0, BigInt(block_height), false); // false for big-endian
|
|
60
|
+
|
|
61
|
+
// Convert block hash to bytes
|
|
62
|
+
const hashHex = block_hash.startsWith('0x') ? block_hash.substring(2) : block_hash;
|
|
63
|
+
// biome-ignore lint/style/noNonNullAssertion: <explanation>
|
|
64
|
+
const hashBytes = new Uint8Array(hashHex.match(/.{1,2}/g)!.map(byte => Number.parseInt(byte, 16)));
|
|
65
|
+
|
|
66
|
+
// Convert transactions to bytes
|
|
67
|
+
const txBytes = txs
|
|
68
|
+
.map((t) => 'contract_id' in t && 'code' in t ? runEval(t) : runTx(t))
|
|
69
|
+
.map((t) => serializeCVBytes(t));
|
|
70
|
+
|
|
71
|
+
// Combine all byte arrays
|
|
72
|
+
const totalLength = header.length + heightBytes.length + hashBytes.length +
|
|
73
|
+
txBytes.reduce((acc, curr) => acc + curr.length, 0);
|
|
74
|
+
const body = new Uint8Array(totalLength);
|
|
75
|
+
|
|
76
|
+
let offset = 0;
|
|
77
|
+
body.set(header, offset);
|
|
78
|
+
offset += header.length;
|
|
79
|
+
body.set(heightBytes, offset);
|
|
80
|
+
offset += heightBytes.length;
|
|
81
|
+
body.set(hashBytes, offset);
|
|
82
|
+
offset += hashBytes.length;
|
|
83
|
+
for (const tx of txBytes) {
|
|
84
|
+
body.set(tx, offset);
|
|
85
|
+
offset += tx.length;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const rs = await fetch(apiEndpoint, {
|
|
71
89
|
method: 'POST',
|
|
72
90
|
body,
|
|
73
91
|
}).then(async (rs) => {
|
|
@@ -75,16 +93,29 @@ export async function runSimulation(
|
|
|
75
93
|
if (!response.startsWith('{')) {
|
|
76
94
|
throw new Error(`failed to submit simulation: ${response}`);
|
|
77
95
|
}
|
|
78
|
-
// console.log(response);
|
|
79
96
|
return JSON.parse(response) as { id: string };
|
|
80
97
|
});
|
|
81
98
|
return rs.id;
|
|
82
99
|
}
|
|
83
100
|
|
|
101
|
+
interface SimulationBuilderOptions {
|
|
102
|
+
apiEndpoint?: string;
|
|
103
|
+
stacksNodeAPI?: string;
|
|
104
|
+
}
|
|
105
|
+
|
|
84
106
|
export class SimulationBuilder {
|
|
85
|
-
|
|
86
|
-
|
|
107
|
+
private apiEndpoint: string;
|
|
108
|
+
private stacksNodeAPI: string;
|
|
109
|
+
|
|
110
|
+
private constructor(options: SimulationBuilderOptions = {}) {
|
|
111
|
+
this.apiEndpoint = options.apiEndpoint ?? 'https://api.stxer.xyz';
|
|
112
|
+
this.stacksNodeAPI = options.stacksNodeAPI ?? 'https://api.hiro.so';
|
|
87
113
|
}
|
|
114
|
+
|
|
115
|
+
public static new(options?: SimulationBuilderOptions) {
|
|
116
|
+
return new SimulationBuilder(options);
|
|
117
|
+
}
|
|
118
|
+
|
|
88
119
|
// biome-ignore lint/style/useNumberNamespace: <explanation>
|
|
89
120
|
private block = NaN;
|
|
90
121
|
private sender = '';
|
|
@@ -201,11 +232,13 @@ export class SimulationBuilder {
|
|
|
201
232
|
|
|
202
233
|
private async getBlockInfo() {
|
|
203
234
|
if (Number.isNaN(this.block)) {
|
|
204
|
-
const { stacks_tip_height } = await getNodeInfo(
|
|
235
|
+
const { stacks_tip_height } = await getNodeInfo({
|
|
236
|
+
stacksEndpoint: this.stacksNodeAPI,
|
|
237
|
+
});
|
|
205
238
|
this.block = stacks_tip_height;
|
|
206
239
|
}
|
|
207
240
|
const info: Block = await richFetch(
|
|
208
|
-
|
|
241
|
+
`${this.stacksNodeAPI}/extended/v1/block/by_height/${this.block}?unanchored=true`
|
|
209
242
|
).then((r) => r.json());
|
|
210
243
|
if (
|
|
211
244
|
info.height !== this.block ||
|
|
@@ -244,7 +277,7 @@ To get in touch: contact@stxer.xyz
|
|
|
244
277
|
const nextNonce = async (sender: string) => {
|
|
245
278
|
const nonce = nonce_by_address.get(sender);
|
|
246
279
|
if (nonce == null) {
|
|
247
|
-
const url =
|
|
280
|
+
const url = `${this.stacksNodeAPI}/v2/accounts/${sender}?proof=${false}&tip=${
|
|
248
281
|
block.index_block_hash
|
|
249
282
|
}`;
|
|
250
283
|
const account: AccountDataResponse = await richFetch(url).then((r) =>
|
|
@@ -305,7 +338,12 @@ To get in touch: contact@stxer.xyz
|
|
|
305
338
|
console.log(`Invalid simulation step:`, step);
|
|
306
339
|
}
|
|
307
340
|
}
|
|
308
|
-
const id = await runSimulation(
|
|
341
|
+
const id = await runSimulation(
|
|
342
|
+
`${this.apiEndpoint}/simulations`,
|
|
343
|
+
block.block_hash,
|
|
344
|
+
block.block_height,
|
|
345
|
+
txs
|
|
346
|
+
);
|
|
309
347
|
console.log(
|
|
310
348
|
`Simulation will be available at: https://stxer.xyz/simulations/mainnet/${id}`
|
|
311
349
|
);
|