stxer 0.2.1 → 0.2.3
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 +3 -0
- package/dist/stxer.cjs.development.js +41 -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 +42 -15
- package/dist/stxer.esm.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +45 -22
- package/src/sample/counter.ts +37 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type StacksNetworkName } from '@stacks/network';
|
|
1
2
|
import { type ClarityValue, type StacksTransactionWire } from '@stacks/transactions';
|
|
2
3
|
export interface SimulationEval {
|
|
3
4
|
contract_id: string;
|
|
@@ -8,10 +9,12 @@ export declare function runSimulation(apiEndpoint: string, block_hash: string, b
|
|
|
8
9
|
interface SimulationBuilderOptions {
|
|
9
10
|
apiEndpoint?: string;
|
|
10
11
|
stacksNodeAPI?: string;
|
|
12
|
+
network?: StacksNetworkName;
|
|
11
13
|
}
|
|
12
14
|
export declare class SimulationBuilder {
|
|
13
15
|
private apiEndpoint;
|
|
14
16
|
private stacksNodeAPI;
|
|
17
|
+
private network;
|
|
15
18
|
private constructor();
|
|
16
19
|
static new(options?: SimulationBuilderOptions): SimulationBuilder;
|
|
17
20
|
private block;
|
|
@@ -399,17 +399,42 @@ function runSimulation(_x, _x2, _x3, _x4) {
|
|
|
399
399
|
}
|
|
400
400
|
function _runSimulation() {
|
|
401
401
|
_runSimulation = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5(apiEndpoint, block_hash, block_height, txs) {
|
|
402
|
-
var body, rs;
|
|
402
|
+
var header, heightBytes, view, hashHex, hashBytes, txBytes, totalLength, body, offset, _iterator2, _step2, tx, rs;
|
|
403
403
|
return _regeneratorRuntime().wrap(function _callee5$(_context5) {
|
|
404
404
|
while (1) switch (_context5.prev = _context5.next) {
|
|
405
405
|
case 0:
|
|
406
|
-
|
|
406
|
+
// Convert 'sim-v1' to Uint8Array
|
|
407
|
+
header = new TextEncoder().encode('sim-v1'); // Create 8 bytes for block height
|
|
408
|
+
heightBytes = new Uint8Array(8); // Convert block height to bytes
|
|
409
|
+
view = new DataView(heightBytes.buffer);
|
|
410
|
+
view.setBigUint64(0, BigInt(block_height), false); // false for big-endian
|
|
411
|
+
// Convert block hash to bytes
|
|
412
|
+
hashHex = block_hash.startsWith('0x') ? block_hash.substring(2) : block_hash; // biome-ignore lint/style/noNonNullAssertion: <explanation>
|
|
413
|
+
hashBytes = new Uint8Array(hashHex.match(/.{1,2}/g).map(function (_byte) {
|
|
414
|
+
return Number.parseInt(_byte, 16);
|
|
415
|
+
})); // Convert transactions to bytes
|
|
416
|
+
txBytes = txs.map(function (t) {
|
|
407
417
|
return 'contract_id' in t && 'code' in t ? runEval(t) : runTx(t);
|
|
408
418
|
}).map(function (t) {
|
|
409
419
|
return transactions.serializeCVBytes(t);
|
|
410
|
-
})
|
|
411
|
-
|
|
412
|
-
|
|
420
|
+
}); // Combine all byte arrays
|
|
421
|
+
totalLength = header.length + heightBytes.length + hashBytes.length + txBytes.reduce(function (acc, curr) {
|
|
422
|
+
return acc + curr.length;
|
|
423
|
+
}, 0);
|
|
424
|
+
body = new Uint8Array(totalLength);
|
|
425
|
+
offset = 0;
|
|
426
|
+
body.set(header, offset);
|
|
427
|
+
offset += header.length;
|
|
428
|
+
body.set(heightBytes, offset);
|
|
429
|
+
offset += heightBytes.length;
|
|
430
|
+
body.set(hashBytes, offset);
|
|
431
|
+
offset += hashBytes.length;
|
|
432
|
+
for (_iterator2 = _createForOfIteratorHelperLoose(txBytes); !(_step2 = _iterator2()).done;) {
|
|
433
|
+
tx = _step2.value;
|
|
434
|
+
body.set(tx, offset);
|
|
435
|
+
offset += tx.length;
|
|
436
|
+
}
|
|
437
|
+
_context5.next = 19;
|
|
413
438
|
return fetch(apiEndpoint, {
|
|
414
439
|
method: 'POST',
|
|
415
440
|
body: body
|
|
@@ -440,10 +465,10 @@ function _runSimulation() {
|
|
|
440
465
|
return _ref3.apply(this, arguments);
|
|
441
466
|
};
|
|
442
467
|
}());
|
|
443
|
-
case
|
|
468
|
+
case 19:
|
|
444
469
|
rs = _context5.sent;
|
|
445
470
|
return _context5.abrupt("return", rs.id);
|
|
446
|
-
case
|
|
471
|
+
case 21:
|
|
447
472
|
case "end":
|
|
448
473
|
return _context5.stop();
|
|
449
474
|
}
|
|
@@ -453,18 +478,20 @@ function _runSimulation() {
|
|
|
453
478
|
}
|
|
454
479
|
var SimulationBuilder = /*#__PURE__*/function () {
|
|
455
480
|
function SimulationBuilder(options) {
|
|
456
|
-
var _options$apiEndpoint, _options$stacksNodeAP;
|
|
481
|
+
var _options$apiEndpoint, _options$stacksNodeAP, _options$network;
|
|
457
482
|
if (options === void 0) {
|
|
458
483
|
options = {};
|
|
459
484
|
}
|
|
460
485
|
this.apiEndpoint = void 0;
|
|
461
486
|
this.stacksNodeAPI = void 0;
|
|
487
|
+
this.network = void 0;
|
|
462
488
|
// biome-ignore lint/style/useNumberNamespace: <explanation>
|
|
463
489
|
this.block = NaN;
|
|
464
490
|
this.sender = '';
|
|
465
491
|
this.steps = [];
|
|
466
|
-
this.apiEndpoint = (_options$apiEndpoint = options.apiEndpoint) != null ? _options$apiEndpoint : 'https://api.stxer.xyz
|
|
492
|
+
this.apiEndpoint = (_options$apiEndpoint = options.apiEndpoint) != null ? _options$apiEndpoint : 'https://api.stxer.xyz';
|
|
467
493
|
this.stacksNodeAPI = (_options$stacksNodeAP = options.stacksNodeAPI) != null ? _options$stacksNodeAP : 'https://api.hiro.so';
|
|
494
|
+
this.network = (_options$network = options.network) != null ? _options$network : 'mainnet';
|
|
468
495
|
}
|
|
469
496
|
SimulationBuilder["new"] = function _new(options) {
|
|
470
497
|
return new SimulationBuilder(options);
|
|
@@ -650,7 +677,7 @@ var SimulationBuilder = /*#__PURE__*/function () {
|
|
|
650
677
|
functionName: step.function_name,
|
|
651
678
|
functionArgs: (_step$function_args = step.function_args) != null ? _step$function_args : [],
|
|
652
679
|
nonce: nonce,
|
|
653
|
-
network: network.
|
|
680
|
+
network: network.networkFrom(this.network),
|
|
654
681
|
publicKey: '',
|
|
655
682
|
postConditionMode: transactions.PostConditionMode.Allow,
|
|
656
683
|
fee: step.fee
|
|
@@ -675,7 +702,7 @@ var SimulationBuilder = /*#__PURE__*/function () {
|
|
|
675
702
|
recipient: step.recipient,
|
|
676
703
|
amount: step.amount,
|
|
677
704
|
nonce: _nonce,
|
|
678
|
-
network: network.
|
|
705
|
+
network: network.networkFrom(this.network),
|
|
679
706
|
publicKey: '',
|
|
680
707
|
fee: step.fee
|
|
681
708
|
});
|
|
@@ -699,7 +726,7 @@ var SimulationBuilder = /*#__PURE__*/function () {
|
|
|
699
726
|
contractName: step.contract_name,
|
|
700
727
|
codeBody: step.source_code,
|
|
701
728
|
nonce: _nonce2,
|
|
702
|
-
network: network.
|
|
729
|
+
network: network.networkFrom(this.network),
|
|
703
730
|
publicKey: '',
|
|
704
731
|
postConditionMode: transactions.PostConditionMode.Allow,
|
|
705
732
|
fee: step.fee
|
|
@@ -722,10 +749,10 @@ var SimulationBuilder = /*#__PURE__*/function () {
|
|
|
722
749
|
break;
|
|
723
750
|
case 48:
|
|
724
751
|
_context3.next = 50;
|
|
725
|
-
return runSimulation(this.apiEndpoint, block.block_hash, block.block_height, txs);
|
|
752
|
+
return runSimulation(this.apiEndpoint + "/simulations", block.block_hash, block.block_height, txs);
|
|
726
753
|
case 50:
|
|
727
754
|
id = _context3.sent;
|
|
728
|
-
console.log("Simulation will be available at: https://stxer.xyz/simulations/
|
|
755
|
+
console.log("Simulation will be available at: https://stxer.xyz/simulations/" + this.network + "/" + id);
|
|
729
756
|
return _context3.abrupt("return", id);
|
|
730
757
|
case 53:
|
|
731
758
|
case "end":
|
|
@@ -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 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
|
+
{"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 { networkFrom, STACKS_MAINNET, type StacksNetwork, type StacksNetworkName } from '@stacks/network';\nimport {\n AnchorMode,\n type ClarityValue,\n PostConditionMode,\n type StacksTransactionWire,\n bufferCV,\n contractPrincipalCV,\n makeUnsignedContractCall,\n makeUnsignedContractDeploy,\n makeUnsignedSTXTokenTransfer,\n serializeCVBytes,\n stringAsciiCV,\n tupleCV,\n uintCV,\n} from '@stacks/transactions';\nimport { c32addressDecode } from 'c32check';\n\nfunction runTx(tx: StacksTransactionWire) {\n // type 0: run transaction\n return tupleCV({ type: uintCV(0), data: bufferCV(tx.serializeBytes()) });\n}\n\nexport interface SimulationEval {\n contract_id: string;\n code: string;\n}\n\nexport function runEval({ contract_id, code }: SimulationEval) {\n const [contract_address, contract_name] = contract_id.split('.');\n // type 1: eval arbitrary code inside a contract\n return tupleCV({\n type: uintCV(1),\n data: bufferCV(\n serializeCVBytes(\n tupleCV({\n contract: contractPrincipalCV(contract_address, contract_name),\n code: stringAsciiCV(code),\n })\n )\n ),\n });\n}\n\nexport async function runSimulation(\n apiEndpoint: string,\n block_hash: string,\n block_height: number,\n txs: (StacksTransactionWire | SimulationEval)[]\n) {\n // Convert 'sim-v1' to Uint8Array\n const header = new TextEncoder().encode('sim-v1');\n // Create 8 bytes for block height\n const heightBytes = new Uint8Array(8);\n // Convert block height to bytes\n const view = new DataView(heightBytes.buffer);\n view.setBigUint64(0, BigInt(block_height), false); // false for big-endian\n\n // Convert block hash to bytes\n const hashHex = block_hash.startsWith('0x') ? block_hash.substring(2) : block_hash;\n // biome-ignore lint/style/noNonNullAssertion: <explanation>\n const hashBytes = new Uint8Array(hashHex.match(/.{1,2}/g)!.map(byte => Number.parseInt(byte, 16)));\n\n // Convert transactions to bytes\n const txBytes = txs\n .map((t) => 'contract_id' in t && 'code' in t ? runEval(t) : runTx(t))\n .map((t) => serializeCVBytes(t));\n\n // Combine all byte arrays\n const totalLength = header.length + heightBytes.length + hashBytes.length + \n txBytes.reduce((acc, curr) => acc + curr.length, 0);\n const body = new Uint8Array(totalLength);\n\n let offset = 0;\n body.set(header, offset);\n offset += header.length;\n body.set(heightBytes, offset);\n offset += heightBytes.length;\n body.set(hashBytes, offset);\n offset += hashBytes.length;\n for (const tx of txBytes) {\n body.set(tx, offset);\n offset += tx.length;\n }\n\n const rs = await fetch(apiEndpoint, {\n method: 'POST',\n body,\n }).then(async (rs) => {\n const response = await rs.text();\n if (!response.startsWith('{')) {\n throw new Error(`failed to submit simulation: ${response}`);\n }\n return JSON.parse(response) as { id: string };\n });\n return rs.id;\n}\n\ninterface SimulationBuilderOptions {\n apiEndpoint?: string;\n stacksNodeAPI?: string;\n network?: StacksNetworkName;\n}\n\nexport class SimulationBuilder {\n private apiEndpoint: string;\n private stacksNodeAPI: string;\n private network: StacksNetworkName;\n\n private constructor(options: SimulationBuilderOptions = {}) {\n this.apiEndpoint = options.apiEndpoint ?? 'https://api.stxer.xyz';\n this.stacksNodeAPI = options.stacksNodeAPI ?? 'https://api.hiro.so';\n this.network = options.network ?? 'mainnet';\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: networkFrom(this.network),\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: networkFrom(this.network),\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: networkFrom(this.network),\n publicKey: '',\n postConditionMode: PostConditionMode.Allow,\n fee: step.fee,\n });\n tx.auth.spendingCondition.signer = c32addressDecode(step.deployer)[1];\n txs.push(tx);\n } else if ('code' in step) {\n txs.push(step);\n } else {\n // biome-ignore lint/style/noUnusedTemplateLiteral: <explanation>\n console.log(`Invalid simulation step:`, step);\n }\n }\n const id = await runSimulation(\n `${this.apiEndpoint}/simulations`,\n block.block_hash, \n block.block_height, \n txs\n );\n console.log(\n `Simulation will be available at: https://stxer.xyz/simulations/${this.network}/${id}`\n );\n return id;\n }\n}\n"],"names":["runTx","tx","tupleCV","type","uintCV","data","bufferCV","serializeBytes","runEval","_ref","contract_id","code","_contract_id$split","split","contract_address","contract_name","serializeCVBytes","contract","contractPrincipalCV","stringAsciiCV","runSimulation","_x","_x2","_x3","_x4","_runSimulation","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee5","apiEndpoint","block_hash","block_height","txs","header","heightBytes","view","hashHex","hashBytes","txBytes","totalLength","body","offset","_iterator2","_step2","rs","wrap","_callee5$","_context5","prev","next","TextEncoder","encode","Uint8Array","DataView","buffer","setBigUint64","BigInt","startsWith","substring","match","map","byte","Number","parseInt","t","length","reduce","acc","curr","set","_createForOfIteratorHelperLoose","done","value","fetch","method","then","_ref3","_callee4","response","_callee4$","_context4","text","sent","Error","abrupt","JSON","parse","stop","_x6","id","SimulationBuilder","options","_options$apiEndpoint","_options$stacksNodeAP","_options$network","stacksNodeAPI","network","block","NaN","sender","steps","new","_proto","prototype","useBlockHeight","withSender","address","addSTXTransfer","params","_params$sender","_params$fee","push","_extends","fee","addContractCall","_params$sender2","_params$fee2","addContractDeploy","_params$deployer","_params$fee3","deployer","addEvalCode","inside_contract_id","addMapRead","key","addVarRead","variable","getBlockInfo","_getBlockInfo","_callee","_yield$getNodeInfo","stacks_tip_height","info","_callee$","_context","isNaN","getNodeInfo","stacksEndpoint","richFetch","r","json","height","hash","index_block_hash","run","_run","_callee3","_this","nonce_by_address","nextNonce","_iterator","_step","step","_step$function_args","nonce","_step$contract_id$spl","contractAddress","contractName","_nonce","_tx","_nonce2","_tx2","_callee3$","_context3","console","log","Map","_ref2","_callee2","url","account","_callee2$","_context2","get","_x5","makeUnsignedContractCall","functionName","function_name","functionArgs","function_args","networkFrom","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 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;
|
|
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 O(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 w(){}function b(){}var k={};h(k,a,(function(){return this}));var x=Object.getPrototypeOf,_=x&&x(x(j([])));_&&_!==r&&n.call(_,a)&&(k=_);var E=b.prototype=m.prototype=Object.create(k);function L(t){["next","throw","return"].forEach((function(e){h(t,e,(function(t){return this._invoke(e,t)}))}))}function S(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=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 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 O(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(P,this),this.reset(!0)}function j(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 w.prototype=b,o(E,"constructor",{value:b,configurable:!0}),o(b,"constructor",{value:w,configurable:!0}),w.displayName=h(b,c,"GeneratorFunction"),e.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===w||"GeneratorFunction"===(e.displayName||e.name))},e.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,b):(t.__proto__=b,h(t,c,"GeneratorFunction")),t.prototype=Object.create(E),t},e.awrap=function(t){return{__await:t}},L(S.prototype),h(S.prototype,s,(function(){return this})),e.AsyncIterator=S,e.async=function(t,r,n,o,i){void 0===i&&(i=Promise);var a=new S(l(t,r,n,o),i);return e.isGeneratorFunction(r)?a:a.next().then((function(t){return t.done?t.value:a.next()}))},L(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=j,O.prototype={constructor:O,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:j(e),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=t),g}},e}function h(t){return r.tupleCV({type:r.uintCV(0),data:r.bufferCV(t.serializeBytes())})}function l(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 f(t,e,r,n){return p.apply(this,arguments)}function p(){return p=a(u().mark((function t(e,n,o,i){var c,f,p,d,y,v,g,m,w,b,k;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:for(c=(new TextEncoder).encode("sim-v1"),f=new Uint8Array(8),new DataView(f.buffer).setBigUint64(0,BigInt(o),!1),p=n.startsWith("0x")?n.substring(2):n,d=new Uint8Array(p.match(/.{1,2}/g).map((function(t){return Number.parseInt(t,16)}))),y=i.map((function(t){return"contract_id"in t&&"code"in t?l(t):h(t)})).map((function(t){return r.serializeCVBytes(t)})),v=c.length+f.length+d.length+y.reduce((function(t,e){return t+e.length}),0),(g=new Uint8Array(v)).set(c,m=0),g.set(f,m+=c.length),g.set(d,m+=f.length),m+=d.length,w=s(y);!(b=w()).done;)g.set(k=b.value,m),m+=k.length;return t.next=19,fetch(e,{method:"POST",body:g}).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 19:return t.abrupt("return",t.sent.id);case 21:case"end":return t.stop()}}),t)}))),p.apply(this,arguments)}exports.SimulationBuilder=function(){function o(t){var e,r,n;void 0===t&&(t={}),this.apiEndpoint=void 0,this.stacksNodeAPI=void 0,this.network=void 0,this.block=NaN,this.sender="",this.steps=[],this.apiEndpoint=null!=(e=t.apiEndpoint)?e:"https://api.stxer.xyz",this.stacksNodeAPI=null!=(r=t.stacksNodeAPI)?r:"https://api.hiro.so",this.network=null!=(n=t.network)?n:"mainnet"}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,l,p,d,y,v,g,m,w,b,k,x,_,E,L,S,C=this;return u().wrap((function(o){for(;;)switch(o.prev=o.next){case 0:return console.log("--------------------------------\nThis product can never exist without your support!\n\nWe receive sponsorship funds with:\nSP212Y5JKN59YP3GYG07K3S8W5SSGE4KH6B5STXER\n\nFeedbacks and feature requests are welcome.\nTo get in touch: contact@stxer.xyz\n--------------------------------"),o.next=3,this.getBlockInfo();case 3:i=o.sent,console.log("Using block height "+i.block_height+" hash 0x"+i.block_hash+" to run simulation."),c=[],h=new Map,l=function(){var e=a(u().mark((function e(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,l(y.sender);case 14:return g=o.sent,m=y.contract_id.split("."),w=m[0],b=m[1],o.next=18,r.makeUnsignedContractCall({contractAddress:w,contractName:b,functionName:y.function_name,functionArgs:null!=(v=y.function_args)?v:[],nonce:g,network:e.networkFrom(this.network),publicKey:"",postConditionMode:r.PostConditionMode.Allow,fee:y.fee});case 18:(k=o.sent).auth.spendingCondition.signer=n.c32addressDecode(y.sender)[1],c.push(k),o.next=46;break;case 23:if(!("sender"in y)||!("recipient"in y)){o.next=34;break}return o.next=26,l(y.sender);case 26:return x=o.sent,o.next=29,r.makeUnsignedSTXTokenTransfer({recipient:y.recipient,amount:y.amount,nonce:x,network:e.networkFrom(this.network),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,l(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.networkFrom(this.network),publicKey:"",postConditionMode:r.PostConditionMode.Allow,fee:y.fee});case 40:(L=o.sent).auth.spendingCondition.signer=n.c32addressDecode(y.deployer)[1],c.push(L),o.next=46;break;case 45:"code"in y?c.push(y):console.log("Invalid simulation step:",y);case 46:o.next=9;break;case 48:return o.next=50,f(this.apiEndpoint+"/simulations",i.block_hash,i.block_height,c);case 50:return S=o.sent,console.log("Simulation will be available at: https://stxer.xyz/simulations/"+this.network+"/"+S),o.abrupt("return",S);case 53:case"end":return o.stop()}}),o,this)})));return function(){return o.apply(this,arguments)}}(),o}(),exports.runEval=l,exports.runSimulation=f;
|
|
2
2
|
//# sourceMappingURL=stxer.cjs.production.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stxer.cjs.production.min.js","sources":["../src/index.ts"],"sourcesContent":["import { type AccountDataResponse, getNodeInfo, richFetch } from 'ts-clarity';\nimport type { Block } from '@stacks/stacks-blockchain-api-types';\nimport { STACKS_MAINNET } from '@stacks/network';\nimport {\n AnchorMode,\n type ClarityValue,\n PostConditionMode,\n type StacksTransactionWire,\n bufferCV,\n contractPrincipalCV,\n makeUnsignedContractCall,\n makeUnsignedContractDeploy,\n makeUnsignedSTXTokenTransfer,\n 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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"}
|
|
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 { networkFrom, STACKS_MAINNET, type StacksNetwork, type StacksNetworkName } from '@stacks/network';\nimport {\n AnchorMode,\n type ClarityValue,\n PostConditionMode,\n type StacksTransactionWire,\n bufferCV,\n contractPrincipalCV,\n makeUnsignedContractCall,\n makeUnsignedContractDeploy,\n makeUnsignedSTXTokenTransfer,\n serializeCVBytes,\n stringAsciiCV,\n tupleCV,\n uintCV,\n} from '@stacks/transactions';\nimport { c32addressDecode } from 'c32check';\n\nfunction runTx(tx: StacksTransactionWire) {\n // type 0: run transaction\n return tupleCV({ type: uintCV(0), data: bufferCV(tx.serializeBytes()) });\n}\n\nexport interface SimulationEval {\n contract_id: string;\n code: string;\n}\n\nexport function runEval({ contract_id, code }: SimulationEval) {\n const [contract_address, contract_name] = contract_id.split('.');\n // type 1: eval arbitrary code inside a contract\n return tupleCV({\n type: uintCV(1),\n data: bufferCV(\n serializeCVBytes(\n tupleCV({\n contract: contractPrincipalCV(contract_address, contract_name),\n code: stringAsciiCV(code),\n })\n )\n ),\n });\n}\n\nexport async function runSimulation(\n apiEndpoint: string,\n block_hash: string,\n block_height: number,\n txs: (StacksTransactionWire | SimulationEval)[]\n) {\n // Convert 'sim-v1' to Uint8Array\n const header = new TextEncoder().encode('sim-v1');\n // Create 8 bytes for block height\n const heightBytes = new Uint8Array(8);\n // Convert block height to bytes\n const view = new DataView(heightBytes.buffer);\n view.setBigUint64(0, BigInt(block_height), false); // false for big-endian\n\n // Convert block hash to bytes\n const hashHex = block_hash.startsWith('0x') ? block_hash.substring(2) : block_hash;\n // biome-ignore lint/style/noNonNullAssertion: <explanation>\n const hashBytes = new Uint8Array(hashHex.match(/.{1,2}/g)!.map(byte => Number.parseInt(byte, 16)));\n\n // Convert transactions to bytes\n const txBytes = txs\n .map((t) => 'contract_id' in t && 'code' in t ? runEval(t) : runTx(t))\n .map((t) => serializeCVBytes(t));\n\n // Combine all byte arrays\n const totalLength = header.length + heightBytes.length + hashBytes.length + \n txBytes.reduce((acc, curr) => acc + curr.length, 0);\n const body = new Uint8Array(totalLength);\n\n let offset = 0;\n body.set(header, offset);\n offset += header.length;\n body.set(heightBytes, offset);\n offset += heightBytes.length;\n body.set(hashBytes, offset);\n offset += hashBytes.length;\n for (const tx of txBytes) {\n body.set(tx, offset);\n offset += tx.length;\n }\n\n const rs = await fetch(apiEndpoint, {\n method: 'POST',\n body,\n }).then(async (rs) => {\n const response = await rs.text();\n if (!response.startsWith('{')) {\n throw new Error(`failed to submit simulation: ${response}`);\n }\n return JSON.parse(response) as { id: string };\n });\n return rs.id;\n}\n\ninterface SimulationBuilderOptions {\n apiEndpoint?: string;\n stacksNodeAPI?: string;\n network?: StacksNetworkName;\n}\n\nexport class SimulationBuilder {\n private apiEndpoint: string;\n private stacksNodeAPI: string;\n private network: StacksNetworkName;\n\n private constructor(options: SimulationBuilderOptions = {}) {\n this.apiEndpoint = options.apiEndpoint ?? 'https://api.stxer.xyz';\n this.stacksNodeAPI = options.stacksNodeAPI ?? 'https://api.hiro.so';\n this.network = options.network ?? 'mainnet';\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: networkFrom(this.network),\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: networkFrom(this.network),\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: networkFrom(this.network),\n publicKey: '',\n postConditionMode: PostConditionMode.Allow,\n fee: step.fee,\n });\n tx.auth.spendingCondition.signer = c32addressDecode(step.deployer)[1];\n txs.push(tx);\n } else if ('code' in step) {\n txs.push(step);\n } else {\n // biome-ignore lint/style/noUnusedTemplateLiteral: <explanation>\n console.log(`Invalid simulation step:`, step);\n }\n }\n const id = await runSimulation(\n `${this.apiEndpoint}/simulations`,\n block.block_hash, \n block.block_height, \n txs\n );\n console.log(\n `Simulation will be available at: https://stxer.xyz/simulations/${this.network}/${id}`\n );\n return id;\n }\n}\n"],"names":["runTx","tx","tupleCV","type","uintCV","data","bufferCV","serializeBytes","runEval","_ref","code","_contract_id$split","contract_id","split","contract_address","contract_name","serializeCVBytes","contract","contractPrincipalCV","stringAsciiCV","runSimulation","_x","_x2","_x3","_x4","_runSimulation","apply","this","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee5","apiEndpoint","block_hash","block_height","txs","header","heightBytes","hashHex","hashBytes","txBytes","totalLength","body","offset","_iterator2","_step2","wrap","_context5","prev","next","TextEncoder","encode","Uint8Array","DataView","buffer","setBigUint64","BigInt","startsWith","substring","match","map","byte","Number","parseInt","t","length","reduce","acc","curr","set","_createForOfIteratorHelperLoose","done","value","fetch","method","then","_ref3","_callee4","rs","response","_context4","text","sent","Error","abrupt","JSON","parse","stop","_x6","id","SimulationBuilder","options","_options$apiEndpoint","_options$stacksNodeAP","_options$network","stacksNodeAPI","network","block","NaN","sender","steps","_proto","prototype","useBlockHeight","withSender","address","addSTXTransfer","params","_params$sender","_params$fee","push","_extends","fee","addContractCall","_params$sender2","_params$fee2","addContractDeploy","_params$deployer","_params$fee3","deployer","addEvalCode","inside_contract_id","addMapRead","key","addVarRead","variable","getBlockInfo","_getBlockInfo","_callee","info","_context","isNaN","getNodeInfo","stacksEndpoint","stacks_tip_height","richFetch","r","json","height","hash","index_block_hash","run","_run","_callee3","nonce_by_address","nextNonce","_iterator","_step","step","_step$function_args","nonce","_step$contract_id$spl","contractAddress","contractName","_nonce","_tx","_nonce2","_tx2","_this","_context3","console","log","Map","_ref2","_callee2","url","account","_context2","get","_x5","makeUnsignedContractCall","functionName","function_name","functionArgs","function_args","networkFrom","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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { richFetch, getNodeInfo } from 'ts-clarity';
|
|
2
|
-
import {
|
|
2
|
+
import { networkFrom } from '@stacks/network';
|
|
3
3
|
import { tupleCV, uintCV, bufferCV, serializeCVBytes, contractPrincipalCV, stringAsciiCV, makeUnsignedContractDeploy, PostConditionMode, makeUnsignedSTXTokenTransfer, makeUnsignedContractCall } from '@stacks/transactions';
|
|
4
4
|
import { c32addressDecode } from 'c32check';
|
|
5
5
|
|
|
@@ -395,17 +395,42 @@ function runSimulation(_x, _x2, _x3, _x4) {
|
|
|
395
395
|
}
|
|
396
396
|
function _runSimulation() {
|
|
397
397
|
_runSimulation = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5(apiEndpoint, block_hash, block_height, txs) {
|
|
398
|
-
var body, rs;
|
|
398
|
+
var header, heightBytes, view, hashHex, hashBytes, txBytes, totalLength, body, offset, _iterator2, _step2, tx, rs;
|
|
399
399
|
return _regeneratorRuntime().wrap(function _callee5$(_context5) {
|
|
400
400
|
while (1) switch (_context5.prev = _context5.next) {
|
|
401
401
|
case 0:
|
|
402
|
-
|
|
402
|
+
// Convert 'sim-v1' to Uint8Array
|
|
403
|
+
header = new TextEncoder().encode('sim-v1'); // Create 8 bytes for block height
|
|
404
|
+
heightBytes = new Uint8Array(8); // Convert block height to bytes
|
|
405
|
+
view = new DataView(heightBytes.buffer);
|
|
406
|
+
view.setBigUint64(0, BigInt(block_height), false); // false for big-endian
|
|
407
|
+
// Convert block hash to bytes
|
|
408
|
+
hashHex = block_hash.startsWith('0x') ? block_hash.substring(2) : block_hash; // biome-ignore lint/style/noNonNullAssertion: <explanation>
|
|
409
|
+
hashBytes = new Uint8Array(hashHex.match(/.{1,2}/g).map(function (_byte) {
|
|
410
|
+
return Number.parseInt(_byte, 16);
|
|
411
|
+
})); // Convert transactions to bytes
|
|
412
|
+
txBytes = txs.map(function (t) {
|
|
403
413
|
return 'contract_id' in t && 'code' in t ? runEval(t) : runTx(t);
|
|
404
414
|
}).map(function (t) {
|
|
405
415
|
return serializeCVBytes(t);
|
|
406
|
-
})
|
|
407
|
-
|
|
408
|
-
|
|
416
|
+
}); // Combine all byte arrays
|
|
417
|
+
totalLength = header.length + heightBytes.length + hashBytes.length + txBytes.reduce(function (acc, curr) {
|
|
418
|
+
return acc + curr.length;
|
|
419
|
+
}, 0);
|
|
420
|
+
body = new Uint8Array(totalLength);
|
|
421
|
+
offset = 0;
|
|
422
|
+
body.set(header, offset);
|
|
423
|
+
offset += header.length;
|
|
424
|
+
body.set(heightBytes, offset);
|
|
425
|
+
offset += heightBytes.length;
|
|
426
|
+
body.set(hashBytes, offset);
|
|
427
|
+
offset += hashBytes.length;
|
|
428
|
+
for (_iterator2 = _createForOfIteratorHelperLoose(txBytes); !(_step2 = _iterator2()).done;) {
|
|
429
|
+
tx = _step2.value;
|
|
430
|
+
body.set(tx, offset);
|
|
431
|
+
offset += tx.length;
|
|
432
|
+
}
|
|
433
|
+
_context5.next = 19;
|
|
409
434
|
return fetch(apiEndpoint, {
|
|
410
435
|
method: 'POST',
|
|
411
436
|
body: body
|
|
@@ -436,10 +461,10 @@ function _runSimulation() {
|
|
|
436
461
|
return _ref3.apply(this, arguments);
|
|
437
462
|
};
|
|
438
463
|
}());
|
|
439
|
-
case
|
|
464
|
+
case 19:
|
|
440
465
|
rs = _context5.sent;
|
|
441
466
|
return _context5.abrupt("return", rs.id);
|
|
442
|
-
case
|
|
467
|
+
case 21:
|
|
443
468
|
case "end":
|
|
444
469
|
return _context5.stop();
|
|
445
470
|
}
|
|
@@ -449,18 +474,20 @@ function _runSimulation() {
|
|
|
449
474
|
}
|
|
450
475
|
var SimulationBuilder = /*#__PURE__*/function () {
|
|
451
476
|
function SimulationBuilder(options) {
|
|
452
|
-
var _options$apiEndpoint, _options$stacksNodeAP;
|
|
477
|
+
var _options$apiEndpoint, _options$stacksNodeAP, _options$network;
|
|
453
478
|
if (options === void 0) {
|
|
454
479
|
options = {};
|
|
455
480
|
}
|
|
456
481
|
this.apiEndpoint = void 0;
|
|
457
482
|
this.stacksNodeAPI = void 0;
|
|
483
|
+
this.network = void 0;
|
|
458
484
|
// biome-ignore lint/style/useNumberNamespace: <explanation>
|
|
459
485
|
this.block = NaN;
|
|
460
486
|
this.sender = '';
|
|
461
487
|
this.steps = [];
|
|
462
|
-
this.apiEndpoint = (_options$apiEndpoint = options.apiEndpoint) != null ? _options$apiEndpoint : 'https://api.stxer.xyz
|
|
488
|
+
this.apiEndpoint = (_options$apiEndpoint = options.apiEndpoint) != null ? _options$apiEndpoint : 'https://api.stxer.xyz';
|
|
463
489
|
this.stacksNodeAPI = (_options$stacksNodeAP = options.stacksNodeAPI) != null ? _options$stacksNodeAP : 'https://api.hiro.so';
|
|
490
|
+
this.network = (_options$network = options.network) != null ? _options$network : 'mainnet';
|
|
464
491
|
}
|
|
465
492
|
SimulationBuilder["new"] = function _new(options) {
|
|
466
493
|
return new SimulationBuilder(options);
|
|
@@ -646,7 +673,7 @@ var SimulationBuilder = /*#__PURE__*/function () {
|
|
|
646
673
|
functionName: step.function_name,
|
|
647
674
|
functionArgs: (_step$function_args = step.function_args) != null ? _step$function_args : [],
|
|
648
675
|
nonce: nonce,
|
|
649
|
-
network:
|
|
676
|
+
network: networkFrom(this.network),
|
|
650
677
|
publicKey: '',
|
|
651
678
|
postConditionMode: PostConditionMode.Allow,
|
|
652
679
|
fee: step.fee
|
|
@@ -671,7 +698,7 @@ var SimulationBuilder = /*#__PURE__*/function () {
|
|
|
671
698
|
recipient: step.recipient,
|
|
672
699
|
amount: step.amount,
|
|
673
700
|
nonce: _nonce,
|
|
674
|
-
network:
|
|
701
|
+
network: networkFrom(this.network),
|
|
675
702
|
publicKey: '',
|
|
676
703
|
fee: step.fee
|
|
677
704
|
});
|
|
@@ -695,7 +722,7 @@ var SimulationBuilder = /*#__PURE__*/function () {
|
|
|
695
722
|
contractName: step.contract_name,
|
|
696
723
|
codeBody: step.source_code,
|
|
697
724
|
nonce: _nonce2,
|
|
698
|
-
network:
|
|
725
|
+
network: networkFrom(this.network),
|
|
699
726
|
publicKey: '',
|
|
700
727
|
postConditionMode: PostConditionMode.Allow,
|
|
701
728
|
fee: step.fee
|
|
@@ -718,10 +745,10 @@ var SimulationBuilder = /*#__PURE__*/function () {
|
|
|
718
745
|
break;
|
|
719
746
|
case 48:
|
|
720
747
|
_context3.next = 50;
|
|
721
|
-
return runSimulation(this.apiEndpoint, block.block_hash, block.block_height, txs);
|
|
748
|
+
return runSimulation(this.apiEndpoint + "/simulations", block.block_hash, block.block_height, txs);
|
|
722
749
|
case 50:
|
|
723
750
|
id = _context3.sent;
|
|
724
|
-
console.log("Simulation will be available at: https://stxer.xyz/simulations/
|
|
751
|
+
console.log("Simulation will be available at: https://stxer.xyz/simulations/" + this.network + "/" + id);
|
|
725
752
|
return _context3.abrupt("return", id);
|
|
726
753
|
case 53:
|
|
727
754
|
case "end":
|
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 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
|
+
{"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 { networkFrom, STACKS_MAINNET, type StacksNetwork, type StacksNetworkName } from '@stacks/network';\nimport {\n AnchorMode,\n type ClarityValue,\n PostConditionMode,\n type StacksTransactionWire,\n bufferCV,\n contractPrincipalCV,\n makeUnsignedContractCall,\n makeUnsignedContractDeploy,\n makeUnsignedSTXTokenTransfer,\n serializeCVBytes,\n stringAsciiCV,\n tupleCV,\n uintCV,\n} from '@stacks/transactions';\nimport { c32addressDecode } from 'c32check';\n\nfunction runTx(tx: StacksTransactionWire) {\n // type 0: run transaction\n return tupleCV({ type: uintCV(0), data: bufferCV(tx.serializeBytes()) });\n}\n\nexport interface SimulationEval {\n contract_id: string;\n code: string;\n}\n\nexport function runEval({ contract_id, code }: SimulationEval) {\n const [contract_address, contract_name] = contract_id.split('.');\n // type 1: eval arbitrary code inside a contract\n return tupleCV({\n type: uintCV(1),\n data: bufferCV(\n serializeCVBytes(\n tupleCV({\n contract: contractPrincipalCV(contract_address, contract_name),\n code: stringAsciiCV(code),\n })\n )\n ),\n });\n}\n\nexport async function runSimulation(\n apiEndpoint: string,\n block_hash: string,\n block_height: number,\n txs: (StacksTransactionWire | SimulationEval)[]\n) {\n // Convert 'sim-v1' to Uint8Array\n const header = new TextEncoder().encode('sim-v1');\n // Create 8 bytes for block height\n const heightBytes = new Uint8Array(8);\n // Convert block height to bytes\n const view = new DataView(heightBytes.buffer);\n view.setBigUint64(0, BigInt(block_height), false); // false for big-endian\n\n // Convert block hash to bytes\n const hashHex = block_hash.startsWith('0x') ? block_hash.substring(2) : block_hash;\n // biome-ignore lint/style/noNonNullAssertion: <explanation>\n const hashBytes = new Uint8Array(hashHex.match(/.{1,2}/g)!.map(byte => Number.parseInt(byte, 16)));\n\n // Convert transactions to bytes\n const txBytes = txs\n .map((t) => 'contract_id' in t && 'code' in t ? runEval(t) : runTx(t))\n .map((t) => serializeCVBytes(t));\n\n // Combine all byte arrays\n const totalLength = header.length + heightBytes.length + hashBytes.length + \n txBytes.reduce((acc, curr) => acc + curr.length, 0);\n const body = new Uint8Array(totalLength);\n\n let offset = 0;\n body.set(header, offset);\n offset += header.length;\n body.set(heightBytes, offset);\n offset += heightBytes.length;\n body.set(hashBytes, offset);\n offset += hashBytes.length;\n for (const tx of txBytes) {\n body.set(tx, offset);\n offset += tx.length;\n }\n\n const rs = await fetch(apiEndpoint, {\n method: 'POST',\n body,\n }).then(async (rs) => {\n const response = await rs.text();\n if (!response.startsWith('{')) {\n throw new Error(`failed to submit simulation: ${response}`);\n }\n return JSON.parse(response) as { id: string };\n });\n return rs.id;\n}\n\ninterface SimulationBuilderOptions {\n apiEndpoint?: string;\n stacksNodeAPI?: string;\n network?: StacksNetworkName;\n}\n\nexport class SimulationBuilder {\n private apiEndpoint: string;\n private stacksNodeAPI: string;\n private network: StacksNetworkName;\n\n private constructor(options: SimulationBuilderOptions = {}) {\n this.apiEndpoint = options.apiEndpoint ?? 'https://api.stxer.xyz';\n this.stacksNodeAPI = options.stacksNodeAPI ?? 'https://api.hiro.so';\n this.network = options.network ?? 'mainnet';\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: networkFrom(this.network),\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: networkFrom(this.network),\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: networkFrom(this.network),\n publicKey: '',\n postConditionMode: PostConditionMode.Allow,\n fee: step.fee,\n });\n tx.auth.spendingCondition.signer = c32addressDecode(step.deployer)[1];\n txs.push(tx);\n } else if ('code' in step) {\n txs.push(step);\n } else {\n // biome-ignore lint/style/noUnusedTemplateLiteral: <explanation>\n console.log(`Invalid simulation step:`, step);\n }\n }\n const id = await runSimulation(\n `${this.apiEndpoint}/simulations`,\n block.block_hash, \n block.block_height, \n txs\n );\n console.log(\n `Simulation will be available at: https://stxer.xyz/simulations/${this.network}/${id}`\n );\n return id;\n }\n}\n"],"names":["runTx","tx","tupleCV","type","uintCV","data","bufferCV","serializeBytes","runEval","_ref","contract_id","code","_contract_id$split","split","contract_address","contract_name","serializeCVBytes","contract","contractPrincipalCV","stringAsciiCV","runSimulation","_x","_x2","_x3","_x4","_runSimulation","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee5","apiEndpoint","block_hash","block_height","txs","header","heightBytes","view","hashHex","hashBytes","txBytes","totalLength","body","offset","_iterator2","_step2","rs","wrap","_callee5$","_context5","prev","next","TextEncoder","encode","Uint8Array","DataView","buffer","setBigUint64","BigInt","startsWith","substring","match","map","byte","Number","parseInt","t","length","reduce","acc","curr","set","_createForOfIteratorHelperLoose","done","value","fetch","method","then","_ref3","_callee4","response","_callee4$","_context4","text","sent","Error","abrupt","JSON","parse","stop","_x6","id","SimulationBuilder","options","_options$apiEndpoint","_options$stacksNodeAP","_options$network","stacksNodeAPI","network","block","NaN","sender","steps","new","_proto","prototype","useBlockHeight","withSender","address","addSTXTransfer","params","_params$sender","_params$fee","push","_extends","fee","addContractCall","_params$sender2","_params$fee2","addContractDeploy","_params$deployer","_params$fee3","deployer","addEvalCode","inside_contract_id","addMapRead","key","addVarRead","variable","getBlockInfo","_getBlockInfo","_callee","_yield$getNodeInfo","stacks_tip_height","info","_callee$","_context","isNaN","getNodeInfo","stacksEndpoint","richFetch","r","json","height","hash","index_block_hash","run","_run","_callee3","_this","nonce_by_address","nextNonce","_iterator","_step","step","_step$function_args","nonce","_step$contract_id$spl","contractAddress","contractName","_nonce","_tx","_nonce2","_tx2","_callee3$","_context3","console","log","Map","_ref2","_callee2","url","account","_callee2$","_context2","get","_x5","makeUnsignedContractCall","functionName","function_name","functionArgs","function_args","networkFrom","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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type AccountDataResponse, getNodeInfo, richFetch } from 'ts-clarity';
|
|
2
2
|
import type { Block } from '@stacks/stacks-blockchain-api-types';
|
|
3
|
-
import { STACKS_MAINNET } from '@stacks/network';
|
|
3
|
+
import { networkFrom, STACKS_MAINNET, type StacksNetwork, type StacksNetworkName } from '@stacks/network';
|
|
4
4
|
import {
|
|
5
5
|
AnchorMode,
|
|
6
6
|
type ClarityValue,
|
|
@@ -50,20 +50,41 @@ export async function runSimulation(
|
|
|
50
50
|
block_height: number,
|
|
51
51
|
txs: (StacksTransactionWire | SimulationEval)[]
|
|
52
52
|
) {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
53
|
+
// Convert 'sim-v1' to Uint8Array
|
|
54
|
+
const header = new TextEncoder().encode('sim-v1');
|
|
55
|
+
// Create 8 bytes for block height
|
|
56
|
+
const heightBytes = new Uint8Array(8);
|
|
57
|
+
// Convert block height to bytes
|
|
58
|
+
const view = new DataView(heightBytes.buffer);
|
|
59
|
+
view.setBigUint64(0, BigInt(block_height), false); // false for big-endian
|
|
60
|
+
|
|
61
|
+
// Convert block hash to bytes
|
|
62
|
+
const hashHex = block_hash.startsWith('0x') ? block_hash.substring(2) : block_hash;
|
|
63
|
+
// biome-ignore lint/style/noNonNullAssertion: <explanation>
|
|
64
|
+
const hashBytes = new Uint8Array(hashHex.match(/.{1,2}/g)!.map(byte => Number.parseInt(byte, 16)));
|
|
65
|
+
|
|
66
|
+
// Convert transactions to bytes
|
|
67
|
+
const txBytes = txs
|
|
68
|
+
.map((t) => 'contract_id' in t && 'code' in t ? runEval(t) : runTx(t))
|
|
69
|
+
.map((t) => serializeCVBytes(t));
|
|
70
|
+
|
|
71
|
+
// Combine all byte arrays
|
|
72
|
+
const totalLength = header.length + heightBytes.length + hashBytes.length +
|
|
73
|
+
txBytes.reduce((acc, curr) => acc + curr.length, 0);
|
|
74
|
+
const body = new Uint8Array(totalLength);
|
|
75
|
+
|
|
76
|
+
let offset = 0;
|
|
77
|
+
body.set(header, offset);
|
|
78
|
+
offset += header.length;
|
|
79
|
+
body.set(heightBytes, offset);
|
|
80
|
+
offset += heightBytes.length;
|
|
81
|
+
body.set(hashBytes, offset);
|
|
82
|
+
offset += hashBytes.length;
|
|
83
|
+
for (const tx of txBytes) {
|
|
84
|
+
body.set(tx, offset);
|
|
85
|
+
offset += tx.length;
|
|
86
|
+
}
|
|
87
|
+
|
|
67
88
|
const rs = await fetch(apiEndpoint, {
|
|
68
89
|
method: 'POST',
|
|
69
90
|
body,
|
|
@@ -72,7 +93,6 @@ export async function runSimulation(
|
|
|
72
93
|
if (!response.startsWith('{')) {
|
|
73
94
|
throw new Error(`failed to submit simulation: ${response}`);
|
|
74
95
|
}
|
|
75
|
-
// console.log(response);
|
|
76
96
|
return JSON.parse(response) as { id: string };
|
|
77
97
|
});
|
|
78
98
|
return rs.id;
|
|
@@ -81,15 +101,18 @@ export async function runSimulation(
|
|
|
81
101
|
interface SimulationBuilderOptions {
|
|
82
102
|
apiEndpoint?: string;
|
|
83
103
|
stacksNodeAPI?: string;
|
|
104
|
+
network?: StacksNetworkName;
|
|
84
105
|
}
|
|
85
106
|
|
|
86
107
|
export class SimulationBuilder {
|
|
87
108
|
private apiEndpoint: string;
|
|
88
109
|
private stacksNodeAPI: string;
|
|
110
|
+
private network: StacksNetworkName;
|
|
89
111
|
|
|
90
112
|
private constructor(options: SimulationBuilderOptions = {}) {
|
|
91
|
-
this.apiEndpoint = options.apiEndpoint ?? 'https://api.stxer.xyz
|
|
113
|
+
this.apiEndpoint = options.apiEndpoint ?? 'https://api.stxer.xyz';
|
|
92
114
|
this.stacksNodeAPI = options.stacksNodeAPI ?? 'https://api.hiro.so';
|
|
115
|
+
this.network = options.network ?? 'mainnet';
|
|
93
116
|
}
|
|
94
117
|
|
|
95
118
|
public static new(options?: SimulationBuilderOptions) {
|
|
@@ -279,7 +302,7 @@ To get in touch: contact@stxer.xyz
|
|
|
279
302
|
functionName: step.function_name,
|
|
280
303
|
functionArgs: step.function_args ?? [],
|
|
281
304
|
nonce,
|
|
282
|
-
network:
|
|
305
|
+
network: networkFrom(this.network),
|
|
283
306
|
publicKey: '',
|
|
284
307
|
postConditionMode: PostConditionMode.Allow,
|
|
285
308
|
fee: step.fee,
|
|
@@ -292,7 +315,7 @@ To get in touch: contact@stxer.xyz
|
|
|
292
315
|
recipient: step.recipient,
|
|
293
316
|
amount: step.amount,
|
|
294
317
|
nonce,
|
|
295
|
-
network:
|
|
318
|
+
network: networkFrom(this.network),
|
|
296
319
|
publicKey: '',
|
|
297
320
|
fee: step.fee,
|
|
298
321
|
});
|
|
@@ -304,7 +327,7 @@ To get in touch: contact@stxer.xyz
|
|
|
304
327
|
contractName: step.contract_name,
|
|
305
328
|
codeBody: step.source_code,
|
|
306
329
|
nonce,
|
|
307
|
-
network:
|
|
330
|
+
network: networkFrom(this.network),
|
|
308
331
|
publicKey: '',
|
|
309
332
|
postConditionMode: PostConditionMode.Allow,
|
|
310
333
|
fee: step.fee,
|
|
@@ -319,13 +342,13 @@ To get in touch: contact@stxer.xyz
|
|
|
319
342
|
}
|
|
320
343
|
}
|
|
321
344
|
const id = await runSimulation(
|
|
322
|
-
this.apiEndpoint
|
|
345
|
+
`${this.apiEndpoint}/simulations`,
|
|
323
346
|
block.block_hash,
|
|
324
347
|
block.block_height,
|
|
325
348
|
txs
|
|
326
349
|
);
|
|
327
350
|
console.log(
|
|
328
|
-
`Simulation will be available at: https://stxer.xyz/simulations
|
|
351
|
+
`Simulation will be available at: https://stxer.xyz/simulations/${this.network}/${id}`
|
|
329
352
|
);
|
|
330
353
|
return id;
|
|
331
354
|
}
|
package/src/sample/counter.ts
CHANGED
|
@@ -31,4 +31,40 @@ SimulationBuilder.new()
|
|
|
31
31
|
})
|
|
32
32
|
.addEvalCode('SP212Y5JKN59YP3GYG07K3S8W5SSGE4KH6B5STXER.test-simulation', '(get-counter)')
|
|
33
33
|
.run()
|
|
34
|
-
.catch(console.error);
|
|
34
|
+
.catch(console.error);
|
|
35
|
+
|
|
36
|
+
SimulationBuilder.new({
|
|
37
|
+
apiEndpoint: 'https://testnet-api.stxer.xyz',
|
|
38
|
+
stacksNodeAPI: 'https://api.testnet.hiro.so',
|
|
39
|
+
network: 'testnet'
|
|
40
|
+
})
|
|
41
|
+
.withSender('ST3MZM9WJ34Y4311XBJDBKQ41SXX5DY68406J26WJ')
|
|
42
|
+
.addContractDeploy({
|
|
43
|
+
contract_name: 'test-simulation',
|
|
44
|
+
source_code: `
|
|
45
|
+
;; counter example
|
|
46
|
+
(define-data-var counter uint u0)
|
|
47
|
+
|
|
48
|
+
(define-public (increment (delta uint))
|
|
49
|
+
(begin
|
|
50
|
+
(var-set counter (+ (var-get counter) delta))
|
|
51
|
+
(ok (var-get counter))))
|
|
52
|
+
|
|
53
|
+
(define-public (decrement)
|
|
54
|
+
(begin
|
|
55
|
+
(var-set counter (- (var-get counter) u1))
|
|
56
|
+
(ok (var-get counter))))
|
|
57
|
+
|
|
58
|
+
(define-read-only (get-counter)
|
|
59
|
+
(ok (var-get counter)))
|
|
60
|
+
`,
|
|
61
|
+
})
|
|
62
|
+
.addEvalCode('ST3MZM9WJ34Y4311XBJDBKQ41SXX5DY68406J26WJ.test-simulation', '(get-counter)')
|
|
63
|
+
.addContractCall({
|
|
64
|
+
contract_id: 'ST3MZM9WJ34Y4311XBJDBKQ41SXX5DY68406J26WJ.test-simulation',
|
|
65
|
+
function_name: 'increment',
|
|
66
|
+
function_args: [uintCV(10)],
|
|
67
|
+
})
|
|
68
|
+
.addEvalCode('ST3MZM9WJ34Y4311XBJDBKQ41SXX5DY68406J26WJ.test-simulation', '(get-counter)')
|
|
69
|
+
.run()
|
|
70
|
+
.catch(console.error);
|