stxer 0.2.0 → 0.2.1
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 +23 -14
- 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 +23 -14
- package/dist/stxer.esm.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +29 -11
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,11 +394,11 @@ 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) {
|
|
401
|
+
_runSimulation = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5(apiEndpoint, block_hash, block_height, txs) {
|
|
404
402
|
var body, rs;
|
|
405
403
|
return _regeneratorRuntime().wrap(function _callee5$(_context5) {
|
|
406
404
|
while (1) switch (_context5.prev = _context5.next) {
|
|
@@ -412,7 +410,7 @@ function _runSimulation() {
|
|
|
412
410
|
})));
|
|
413
411
|
body.writeBigUInt64BE(BigInt(block_height), 6);
|
|
414
412
|
_context5.next = 4;
|
|
415
|
-
return fetch(
|
|
413
|
+
return fetch(apiEndpoint, {
|
|
416
414
|
method: 'POST',
|
|
417
415
|
body: body
|
|
418
416
|
}).then(/*#__PURE__*/function () {
|
|
@@ -438,7 +436,7 @@ function _runSimulation() {
|
|
|
438
436
|
}
|
|
439
437
|
}, _callee4);
|
|
440
438
|
}));
|
|
441
|
-
return function (
|
|
439
|
+
return function (_x6) {
|
|
442
440
|
return _ref3.apply(this, arguments);
|
|
443
441
|
};
|
|
444
442
|
}());
|
|
@@ -454,14 +452,22 @@ function _runSimulation() {
|
|
|
454
452
|
return _runSimulation.apply(this, arguments);
|
|
455
453
|
}
|
|
456
454
|
var SimulationBuilder = /*#__PURE__*/function () {
|
|
457
|
-
function SimulationBuilder() {
|
|
455
|
+
function SimulationBuilder(options) {
|
|
456
|
+
var _options$apiEndpoint, _options$stacksNodeAP;
|
|
457
|
+
if (options === void 0) {
|
|
458
|
+
options = {};
|
|
459
|
+
}
|
|
460
|
+
this.apiEndpoint = void 0;
|
|
461
|
+
this.stacksNodeAPI = void 0;
|
|
458
462
|
// biome-ignore lint/style/useNumberNamespace: <explanation>
|
|
459
463
|
this.block = NaN;
|
|
460
464
|
this.sender = '';
|
|
461
465
|
this.steps = [];
|
|
466
|
+
this.apiEndpoint = (_options$apiEndpoint = options.apiEndpoint) != null ? _options$apiEndpoint : 'https://api.stxer.xyz/simulations';
|
|
467
|
+
this.stacksNodeAPI = (_options$stacksNodeAP = options.stacksNodeAPI) != null ? _options$stacksNodeAP : 'https://api.hiro.so';
|
|
462
468
|
}
|
|
463
|
-
SimulationBuilder["new"] = function _new() {
|
|
464
|
-
return new SimulationBuilder();
|
|
469
|
+
SimulationBuilder["new"] = function _new(options) {
|
|
470
|
+
return new SimulationBuilder(options);
|
|
465
471
|
};
|
|
466
472
|
var _proto = SimulationBuilder.prototype;
|
|
467
473
|
_proto.useBlockHeight = function useBlockHeight(block) {
|
|
@@ -537,14 +543,16 @@ var SimulationBuilder = /*#__PURE__*/function () {
|
|
|
537
543
|
break;
|
|
538
544
|
}
|
|
539
545
|
_context.next = 3;
|
|
540
|
-
return tsClarity.getNodeInfo(
|
|
546
|
+
return tsClarity.getNodeInfo({
|
|
547
|
+
stacksEndpoint: this.stacksNodeAPI
|
|
548
|
+
});
|
|
541
549
|
case 3:
|
|
542
550
|
_yield$getNodeInfo = _context.sent;
|
|
543
551
|
stacks_tip_height = _yield$getNodeInfo.stacks_tip_height;
|
|
544
552
|
this.block = stacks_tip_height;
|
|
545
553
|
case 6:
|
|
546
554
|
_context.next = 8;
|
|
547
|
-
return tsClarity.richFetch("
|
|
555
|
+
return tsClarity.richFetch(this.stacksNodeAPI + "/extended/v1/block/by_height/" + this.block + "?unanchored=true").then(function (r) {
|
|
548
556
|
return r.json();
|
|
549
557
|
});
|
|
550
558
|
case 8:
|
|
@@ -573,6 +581,7 @@ var SimulationBuilder = /*#__PURE__*/function () {
|
|
|
573
581
|
}();
|
|
574
582
|
_proto.run = /*#__PURE__*/function () {
|
|
575
583
|
var _run = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
|
|
584
|
+
var _this = this;
|
|
576
585
|
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
586
|
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
|
|
578
587
|
while (1) switch (_context3.prev = _context3.next) {
|
|
@@ -596,7 +605,7 @@ var SimulationBuilder = /*#__PURE__*/function () {
|
|
|
596
605
|
_context2.next = 8;
|
|
597
606
|
break;
|
|
598
607
|
}
|
|
599
|
-
url = "
|
|
608
|
+
url = _this.stacksNodeAPI + "/v2/accounts/" + sender + "?proof=" + false + "&tip=" + block.index_block_hash;
|
|
600
609
|
_context2.next = 5;
|
|
601
610
|
return tsClarity.richFetch(url).then(function (r) {
|
|
602
611
|
return r.json();
|
|
@@ -614,7 +623,7 @@ var SimulationBuilder = /*#__PURE__*/function () {
|
|
|
614
623
|
}
|
|
615
624
|
}, _callee2);
|
|
616
625
|
}));
|
|
617
|
-
return function nextNonce(
|
|
626
|
+
return function nextNonce(_x5) {
|
|
618
627
|
return _ref2.apply(this, arguments);
|
|
619
628
|
};
|
|
620
629
|
}();
|
|
@@ -713,7 +722,7 @@ var SimulationBuilder = /*#__PURE__*/function () {
|
|
|
713
722
|
break;
|
|
714
723
|
case 48:
|
|
715
724
|
_context3.next = 50;
|
|
716
|
-
return runSimulation(block.block_hash, block.block_height, txs);
|
|
725
|
+
return runSimulation(this.apiEndpoint, block.block_hash, block.block_height, txs);
|
|
717
726
|
case 50:
|
|
718
727
|
id = _context3.sent;
|
|
719
728
|
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":"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"}
|
|
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 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(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 // console.log(response);\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/simulations';\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,\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","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","_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","Number","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","set","_x5","_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,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"),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 T(n||[]);return o(i,"_invoke",{value:C(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(I([])));_&&_!==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 N(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 C(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=L(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 L(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,L(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 P(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 A(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function T(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(P,this),this.reset(!0)}function I(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(N.prototype),h(N.prototype,s,(function(){return this})),e.AsyncIterator=N,e.async=function(t,r,n,o,i){void 0===i&&(i=Promise);var a=new N(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=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(A),!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),A(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;A(r)}return o}}throw Error("illegal catch attempt")},delegateYield:function(e,r,n){return this.delegate={iterator:I(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,n){return f.apply(this,arguments)}function f(){return f=a(u().mark((function t(e,n,o,i){var s;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return(s=Buffer.concat([Buffer.from("sim-v1"),Buffer.alloc(8),Buffer.from(n.startsWith("0x")?n.substring(2):n,"hex")].concat(i.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(o),6),t.next=4,fetch(e,{method:"POST",body:s}).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(t){var e,r;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/simulations",this.stacksNodeAPI=null!=(r=t.stacksNodeAPI)?r:"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,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({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((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,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,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=C.stacksNodeAPI+"/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(this.apiEndpoint,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=h,exports.runSimulation=l;
|
|
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 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(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 // console.log(response);\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/simulations';\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,\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":["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","_x4","_runSimulation","apply","this","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee5","apiEndpoint","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","_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","Number","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","set","_x5","_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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"}
|
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,11 +390,11 @@ 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) {
|
|
397
|
+
_runSimulation = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5(apiEndpoint, block_hash, block_height, txs) {
|
|
400
398
|
var body, rs;
|
|
401
399
|
return _regeneratorRuntime().wrap(function _callee5$(_context5) {
|
|
402
400
|
while (1) switch (_context5.prev = _context5.next) {
|
|
@@ -408,7 +406,7 @@ function _runSimulation() {
|
|
|
408
406
|
})));
|
|
409
407
|
body.writeBigUInt64BE(BigInt(block_height), 6);
|
|
410
408
|
_context5.next = 4;
|
|
411
|
-
return fetch(
|
|
409
|
+
return fetch(apiEndpoint, {
|
|
412
410
|
method: 'POST',
|
|
413
411
|
body: body
|
|
414
412
|
}).then(/*#__PURE__*/function () {
|
|
@@ -434,7 +432,7 @@ function _runSimulation() {
|
|
|
434
432
|
}
|
|
435
433
|
}, _callee4);
|
|
436
434
|
}));
|
|
437
|
-
return function (
|
|
435
|
+
return function (_x6) {
|
|
438
436
|
return _ref3.apply(this, arguments);
|
|
439
437
|
};
|
|
440
438
|
}());
|
|
@@ -450,14 +448,22 @@ function _runSimulation() {
|
|
|
450
448
|
return _runSimulation.apply(this, arguments);
|
|
451
449
|
}
|
|
452
450
|
var SimulationBuilder = /*#__PURE__*/function () {
|
|
453
|
-
function SimulationBuilder() {
|
|
451
|
+
function SimulationBuilder(options) {
|
|
452
|
+
var _options$apiEndpoint, _options$stacksNodeAP;
|
|
453
|
+
if (options === void 0) {
|
|
454
|
+
options = {};
|
|
455
|
+
}
|
|
456
|
+
this.apiEndpoint = void 0;
|
|
457
|
+
this.stacksNodeAPI = void 0;
|
|
454
458
|
// biome-ignore lint/style/useNumberNamespace: <explanation>
|
|
455
459
|
this.block = NaN;
|
|
456
460
|
this.sender = '';
|
|
457
461
|
this.steps = [];
|
|
462
|
+
this.apiEndpoint = (_options$apiEndpoint = options.apiEndpoint) != null ? _options$apiEndpoint : 'https://api.stxer.xyz/simulations';
|
|
463
|
+
this.stacksNodeAPI = (_options$stacksNodeAP = options.stacksNodeAPI) != null ? _options$stacksNodeAP : 'https://api.hiro.so';
|
|
458
464
|
}
|
|
459
|
-
SimulationBuilder["new"] = function _new() {
|
|
460
|
-
return new SimulationBuilder();
|
|
465
|
+
SimulationBuilder["new"] = function _new(options) {
|
|
466
|
+
return new SimulationBuilder(options);
|
|
461
467
|
};
|
|
462
468
|
var _proto = SimulationBuilder.prototype;
|
|
463
469
|
_proto.useBlockHeight = function useBlockHeight(block) {
|
|
@@ -533,14 +539,16 @@ var SimulationBuilder = /*#__PURE__*/function () {
|
|
|
533
539
|
break;
|
|
534
540
|
}
|
|
535
541
|
_context.next = 3;
|
|
536
|
-
return getNodeInfo(
|
|
542
|
+
return getNodeInfo({
|
|
543
|
+
stacksEndpoint: this.stacksNodeAPI
|
|
544
|
+
});
|
|
537
545
|
case 3:
|
|
538
546
|
_yield$getNodeInfo = _context.sent;
|
|
539
547
|
stacks_tip_height = _yield$getNodeInfo.stacks_tip_height;
|
|
540
548
|
this.block = stacks_tip_height;
|
|
541
549
|
case 6:
|
|
542
550
|
_context.next = 8;
|
|
543
|
-
return richFetch("
|
|
551
|
+
return richFetch(this.stacksNodeAPI + "/extended/v1/block/by_height/" + this.block + "?unanchored=true").then(function (r) {
|
|
544
552
|
return r.json();
|
|
545
553
|
});
|
|
546
554
|
case 8:
|
|
@@ -569,6 +577,7 @@ var SimulationBuilder = /*#__PURE__*/function () {
|
|
|
569
577
|
}();
|
|
570
578
|
_proto.run = /*#__PURE__*/function () {
|
|
571
579
|
var _run = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
|
|
580
|
+
var _this = this;
|
|
572
581
|
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
582
|
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
|
|
574
583
|
while (1) switch (_context3.prev = _context3.next) {
|
|
@@ -592,7 +601,7 @@ var SimulationBuilder = /*#__PURE__*/function () {
|
|
|
592
601
|
_context2.next = 8;
|
|
593
602
|
break;
|
|
594
603
|
}
|
|
595
|
-
url = "
|
|
604
|
+
url = _this.stacksNodeAPI + "/v2/accounts/" + sender + "?proof=" + false + "&tip=" + block.index_block_hash;
|
|
596
605
|
_context2.next = 5;
|
|
597
606
|
return richFetch(url).then(function (r) {
|
|
598
607
|
return r.json();
|
|
@@ -610,7 +619,7 @@ var SimulationBuilder = /*#__PURE__*/function () {
|
|
|
610
619
|
}
|
|
611
620
|
}, _callee2);
|
|
612
621
|
}));
|
|
613
|
-
return function nextNonce(
|
|
622
|
+
return function nextNonce(_x5) {
|
|
614
623
|
return _ref2.apply(this, arguments);
|
|
615
624
|
};
|
|
616
625
|
}();
|
|
@@ -709,7 +718,7 @@ var SimulationBuilder = /*#__PURE__*/function () {
|
|
|
709
718
|
break;
|
|
710
719
|
case 48:
|
|
711
720
|
_context3.next = 50;
|
|
712
|
-
return runSimulation(block.block_hash, block.block_height, txs);
|
|
721
|
+
return runSimulation(this.apiEndpoint, block.block_hash, block.block_height, txs);
|
|
713
722
|
case 50:
|
|
714
723
|
id = _context3.sent;
|
|
715
724
|
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 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(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 // console.log(response);\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/simulations';\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,\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","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","_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","Number","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","set","_x5","_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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"}
|
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,6 +45,7 @@ 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)[]
|
|
@@ -67,7 +64,7 @@ export async function runSimulation(
|
|
|
67
64
|
.map((t) => serializeCVBytes(t)),
|
|
68
65
|
]);
|
|
69
66
|
body.writeBigUInt64BE(BigInt(block_height), 6);
|
|
70
|
-
const rs = await fetch(
|
|
67
|
+
const rs = await fetch(apiEndpoint, {
|
|
71
68
|
method: 'POST',
|
|
72
69
|
body,
|
|
73
70
|
}).then(async (rs) => {
|
|
@@ -81,10 +78,24 @@ export async function runSimulation(
|
|
|
81
78
|
return rs.id;
|
|
82
79
|
}
|
|
83
80
|
|
|
81
|
+
interface SimulationBuilderOptions {
|
|
82
|
+
apiEndpoint?: string;
|
|
83
|
+
stacksNodeAPI?: string;
|
|
84
|
+
}
|
|
85
|
+
|
|
84
86
|
export class SimulationBuilder {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
+
private apiEndpoint: string;
|
|
88
|
+
private stacksNodeAPI: string;
|
|
89
|
+
|
|
90
|
+
private constructor(options: SimulationBuilderOptions = {}) {
|
|
91
|
+
this.apiEndpoint = options.apiEndpoint ?? 'https://api.stxer.xyz/simulations';
|
|
92
|
+
this.stacksNodeAPI = options.stacksNodeAPI ?? 'https://api.hiro.so';
|
|
87
93
|
}
|
|
94
|
+
|
|
95
|
+
public static new(options?: SimulationBuilderOptions) {
|
|
96
|
+
return new SimulationBuilder(options);
|
|
97
|
+
}
|
|
98
|
+
|
|
88
99
|
// biome-ignore lint/style/useNumberNamespace: <explanation>
|
|
89
100
|
private block = NaN;
|
|
90
101
|
private sender = '';
|
|
@@ -201,11 +212,13 @@ export class SimulationBuilder {
|
|
|
201
212
|
|
|
202
213
|
private async getBlockInfo() {
|
|
203
214
|
if (Number.isNaN(this.block)) {
|
|
204
|
-
const { stacks_tip_height } = await getNodeInfo(
|
|
215
|
+
const { stacks_tip_height } = await getNodeInfo({
|
|
216
|
+
stacksEndpoint: this.stacksNodeAPI,
|
|
217
|
+
});
|
|
205
218
|
this.block = stacks_tip_height;
|
|
206
219
|
}
|
|
207
220
|
const info: Block = await richFetch(
|
|
208
|
-
|
|
221
|
+
`${this.stacksNodeAPI}/extended/v1/block/by_height/${this.block}?unanchored=true`
|
|
209
222
|
).then((r) => r.json());
|
|
210
223
|
if (
|
|
211
224
|
info.height !== this.block ||
|
|
@@ -244,7 +257,7 @@ To get in touch: contact@stxer.xyz
|
|
|
244
257
|
const nextNonce = async (sender: string) => {
|
|
245
258
|
const nonce = nonce_by_address.get(sender);
|
|
246
259
|
if (nonce == null) {
|
|
247
|
-
const url =
|
|
260
|
+
const url = `${this.stacksNodeAPI}/v2/accounts/${sender}?proof=${false}&tip=${
|
|
248
261
|
block.index_block_hash
|
|
249
262
|
}`;
|
|
250
263
|
const account: AccountDataResponse = await richFetch(url).then((r) =>
|
|
@@ -305,7 +318,12 @@ To get in touch: contact@stxer.xyz
|
|
|
305
318
|
console.log(`Invalid simulation step:`, step);
|
|
306
319
|
}
|
|
307
320
|
}
|
|
308
|
-
const id = await runSimulation(
|
|
321
|
+
const id = await runSimulation(
|
|
322
|
+
this.apiEndpoint,
|
|
323
|
+
block.block_hash,
|
|
324
|
+
block.block_height,
|
|
325
|
+
txs
|
|
326
|
+
);
|
|
309
327
|
console.log(
|
|
310
328
|
`Simulation will be available at: https://stxer.xyz/simulations/mainnet/${id}`
|
|
311
329
|
);
|