stxer 0.2.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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
- body = Buffer.concat([Buffer.from('sim-v1'), Buffer.alloc(8), Buffer.from(block_hash.startsWith('0x') ? block_hash.substring(2) : block_hash, 'hex')].concat(txs.map(function (t) {
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
- body.writeBigUInt64BE(BigInt(block_height), 6);
412
- _context5.next = 4;
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 4:
468
+ case 19:
444
469
  rs = _context5.sent;
445
470
  return _context5.abrupt("return", rs.id);
446
- case 6:
471
+ case 21:
447
472
  case "end":
448
473
  return _context5.stop();
449
474
  }
@@ -463,7 +488,7 @@ var SimulationBuilder = /*#__PURE__*/function () {
463
488
  this.block = NaN;
464
489
  this.sender = '';
465
490
  this.steps = [];
466
- this.apiEndpoint = (_options$apiEndpoint = options.apiEndpoint) != null ? _options$apiEndpoint : 'https://api.stxer.xyz/simulations';
491
+ this.apiEndpoint = (_options$apiEndpoint = options.apiEndpoint) != null ? _options$apiEndpoint : 'https://api.stxer.xyz';
467
492
  this.stacksNodeAPI = (_options$stacksNodeAP = options.stacksNodeAPI) != null ? _options$stacksNodeAP : 'https://api.hiro.so';
468
493
  }
469
494
  SimulationBuilder["new"] = function _new(options) {
@@ -722,7 +747,7 @@ var SimulationBuilder = /*#__PURE__*/function () {
722
747
  break;
723
748
  case 48:
724
749
  _context3.next = 50;
725
- return runSimulation(this.apiEndpoint, block.block_hash, block.block_height, txs);
750
+ return runSimulation(this.apiEndpoint + "/simulations", block.block_hash, block.block_height, txs);
726
751
  case 50:
727
752
  id = _context3.sent;
728
753
  console.log("Simulation will be available at: https://stxer.xyz/simulations/mainnet/" + id);
@@ -1 +1 @@
1
- {"version":3,"file":"stxer.cjs.development.js","sources":["../src/index.ts"],"sourcesContent":["import { type AccountDataResponse, getNodeInfo, richFetch } from 'ts-clarity';\nimport type { Block } from '@stacks/stacks-blockchain-api-types';\nimport { STACKS_MAINNET } from '@stacks/network';\nimport {\n AnchorMode,\n type ClarityValue,\n PostConditionMode,\n type StacksTransactionWire,\n bufferCV,\n contractPrincipalCV,\n makeUnsignedContractCall,\n makeUnsignedContractDeploy,\n makeUnsignedSTXTokenTransfer,\n 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 { STACKS_MAINNET } from '@stacks/network';\nimport {\n AnchorMode,\n type ClarityValue,\n PostConditionMode,\n type StacksTransactionWire,\n bufferCV,\n contractPrincipalCV,\n makeUnsignedContractCall,\n makeUnsignedContractDeploy,\n makeUnsignedSTXTokenTransfer,\n serializeCVBytes,\n stringAsciiCV,\n tupleCV,\n uintCV,\n} from '@stacks/transactions';\nimport { c32addressDecode } from 'c32check';\n\nfunction runTx(tx: StacksTransactionWire) {\n // type 0: run transaction\n return tupleCV({ type: uintCV(0), data: bufferCV(tx.serializeBytes()) });\n}\n\nexport interface SimulationEval {\n contract_id: string;\n code: string;\n}\n\nexport function runEval({ contract_id, code }: SimulationEval) {\n const [contract_address, contract_name] = contract_id.split('.');\n // type 1: eval arbitrary code inside a contract\n return tupleCV({\n type: uintCV(1),\n data: bufferCV(\n serializeCVBytes(\n tupleCV({\n contract: contractPrincipalCV(contract_address, contract_name),\n code: stringAsciiCV(code),\n })\n )\n ),\n });\n}\n\nexport async function runSimulation(\n apiEndpoint: string,\n block_hash: string,\n block_height: number,\n txs: (StacksTransactionWire | SimulationEval)[]\n) {\n // Convert 'sim-v1' to Uint8Array\n const header = new TextEncoder().encode('sim-v1');\n // Create 8 bytes for block height\n const heightBytes = new Uint8Array(8);\n // Convert block height to bytes\n const view = new DataView(heightBytes.buffer);\n view.setBigUint64(0, BigInt(block_height), false); // false for big-endian\n\n // Convert block hash to bytes\n const hashHex = block_hash.startsWith('0x') ? block_hash.substring(2) : block_hash;\n // biome-ignore lint/style/noNonNullAssertion: <explanation>\n const hashBytes = new Uint8Array(hashHex.match(/.{1,2}/g)!.map(byte => Number.parseInt(byte, 16)));\n\n // Convert transactions to bytes\n const txBytes = txs\n .map((t) => 'contract_id' in t && 'code' in t ? runEval(t) : runTx(t))\n .map((t) => serializeCVBytes(t));\n\n // Combine all byte arrays\n const totalLength = header.length + heightBytes.length + hashBytes.length + \n txBytes.reduce((acc, curr) => acc + curr.length, 0);\n const body = new Uint8Array(totalLength);\n\n let offset = 0;\n body.set(header, offset);\n offset += header.length;\n body.set(heightBytes, offset);\n offset += heightBytes.length;\n body.set(hashBytes, offset);\n offset += hashBytes.length;\n for (const tx of txBytes) {\n body.set(tx, offset);\n offset += tx.length;\n }\n\n const rs = await fetch(apiEndpoint, {\n method: 'POST',\n body,\n }).then(async (rs) => {\n const response = await rs.text();\n if (!response.startsWith('{')) {\n throw new Error(`failed to submit simulation: ${response}`);\n }\n return JSON.parse(response) as { id: string };\n });\n return rs.id;\n}\n\ninterface SimulationBuilderOptions {\n apiEndpoint?: string;\n stacksNodeAPI?: string;\n}\n\nexport class SimulationBuilder {\n private apiEndpoint: string;\n private stacksNodeAPI: string;\n\n private constructor(options: SimulationBuilderOptions = {}) {\n this.apiEndpoint = options.apiEndpoint ?? 'https://api.stxer.xyz';\n this.stacksNodeAPI = options.stacksNodeAPI ?? 'https://api.hiro.so';\n }\n\n public static new(options?: SimulationBuilderOptions) {\n return new SimulationBuilder(options);\n }\n\n // biome-ignore lint/style/useNumberNamespace: <explanation>\n private block = NaN;\n private sender = '';\n private steps: (\n | {\n // contract call\n contract_id: string;\n function_name: string;\n function_args?: ClarityValue[];\n sender: string;\n fee: number;\n }\n | {\n // contract deploy\n contract_name: string;\n source_code: string;\n deployer: string;\n fee: number;\n }\n | {\n // STX transfer\n recipient: string;\n amount: number;\n sender: string;\n fee: number;\n }\n | SimulationEval\n )[] = [];\n\n public useBlockHeight(block: number) {\n this.block = block;\n return this;\n }\n public withSender(address: string) {\n this.sender = address;\n return this;\n }\n public addSTXTransfer(params: {\n recipient: string;\n amount: number;\n sender?: string;\n fee?: number;\n }) {\n if (params.sender == null && this.sender === '') {\n throw new Error(\n 'Please specify a sender with useSender or adding a sender paramenter'\n );\n }\n this.steps.push({\n ...params,\n sender: params.sender ?? this.sender,\n fee: params.fee ?? 0,\n });\n return this;\n }\n public addContractCall(params: {\n contract_id: string;\n function_name: string;\n function_args?: ClarityValue[];\n sender?: string;\n fee?: number;\n }) {\n if (params.sender == null && this.sender === '') {\n throw new Error(\n 'Please specify a sender with useSender or adding a sender paramenter'\n );\n }\n this.steps.push({\n ...params,\n sender: params.sender ?? this.sender,\n fee: params.fee ?? 0,\n });\n return this;\n }\n public addContractDeploy(params: {\n contract_name: string;\n source_code: string;\n deployer?: string;\n fee?: number;\n }) {\n if (params.deployer == null && this.sender === '') {\n throw new Error(\n 'Please specify a deployer with useSender or adding a deployer paramenter'\n );\n }\n this.steps.push({\n ...params,\n deployer: params.deployer ?? this.sender,\n fee: params.fee ?? 0,\n });\n return this;\n }\n public addEvalCode(inside_contract_id: string, code: string) {\n this.steps.push({\n contract_id: inside_contract_id,\n code,\n });\n return this;\n }\n public addMapRead(contract_id: string, map: string, key: string) {\n this.steps.push({\n contract_id,\n code: `(map-get ${map} ${key})`,\n });\n return this;\n }\n public addVarRead(contract_id: string, variable: string) {\n this.steps.push({\n contract_id,\n code: `(var-get ${variable})`,\n });\n return this;\n }\n\n private async getBlockInfo() {\n if (Number.isNaN(this.block)) {\n const { stacks_tip_height } = await getNodeInfo({\n stacksEndpoint: this.stacksNodeAPI,\n });\n this.block = stacks_tip_height;\n }\n const info: Block = await richFetch(\n `${this.stacksNodeAPI}/extended/v1/block/by_height/${this.block}?unanchored=true`\n ).then((r) => r.json());\n if (\n info.height !== this.block ||\n typeof info.hash !== 'string' ||\n !info.hash.startsWith('0x')\n ) {\n throw new Error(\n `failed to get block info for block height ${this.block}`\n );\n }\n return {\n block_height: this.block,\n block_hash: info.hash.substring(2),\n index_block_hash: info.index_block_hash.substring(2),\n };\n }\n\n public async run() {\n console.log(\n `--------------------------------\nThis product can never exist without your support!\n\nWe receive sponsorship funds with:\nSP212Y5JKN59YP3GYG07K3S8W5SSGE4KH6B5STXER\n\nFeedbacks and feature requests are welcome.\nTo get in touch: contact@stxer.xyz\n--------------------------------`\n );\n const block = await this.getBlockInfo();\n console.log(\n `Using block height ${block.block_height} hash 0x${block.block_hash} to run simulation.`\n );\n const txs: (StacksTransactionWire | SimulationEval)[] = [];\n const nonce_by_address = new Map<string, number>();\n const nextNonce = async (sender: string) => {\n const nonce = nonce_by_address.get(sender);\n if (nonce == null) {\n const url = `${this.stacksNodeAPI}/v2/accounts/${sender}?proof=${false}&tip=${\n block.index_block_hash\n }`;\n const account: AccountDataResponse = await richFetch(url).then((r) =>\n r.json()\n );\n nonce_by_address.set(sender, account.nonce + 1);\n return account.nonce;\n }\n nonce_by_address.set(sender, nonce + 1);\n return nonce;\n };\n for (const step of this.steps) {\n if ('sender' in step && 'function_name' in step) {\n const nonce = await nextNonce(step.sender);\n const [contractAddress, contractName] = step.contract_id.split('.');\n const tx = await makeUnsignedContractCall({\n contractAddress,\n contractName,\n functionName: step.function_name,\n functionArgs: step.function_args ?? [],\n nonce,\n network: STACKS_MAINNET,\n publicKey: '',\n postConditionMode: PostConditionMode.Allow,\n fee: step.fee,\n });\n tx.auth.spendingCondition.signer = c32addressDecode(step.sender)[1];\n txs.push(tx);\n } else if ('sender' in step && 'recipient' in step) {\n const nonce = await nextNonce(step.sender);\n const tx = await makeUnsignedSTXTokenTransfer({\n recipient: step.recipient,\n amount: step.amount,\n nonce,\n network: STACKS_MAINNET,\n publicKey: '',\n fee: step.fee,\n });\n tx.auth.spendingCondition.signer = c32addressDecode(step.sender)[1];\n txs.push(tx);\n } else if ('deployer' in step) {\n const nonce = await nextNonce(step.deployer);\n const tx = await makeUnsignedContractDeploy({\n contractName: step.contract_name,\n codeBody: step.source_code,\n nonce,\n network: STACKS_MAINNET,\n publicKey: '',\n postConditionMode: PostConditionMode.Allow,\n fee: step.fee,\n });\n tx.auth.spendingCondition.signer = c32addressDecode(step.deployer)[1];\n txs.push(tx);\n } else if ('code' in step) {\n txs.push(step);\n } else {\n // biome-ignore lint/style/noUnusedTemplateLiteral: <explanation>\n console.log(`Invalid simulation step:`, step);\n }\n }\n const id = await runSimulation(\n `${this.apiEndpoint}/simulations`,\n block.block_hash, \n block.block_height, \n txs\n );\n console.log(\n `Simulation will be available at: https://stxer.xyz/simulations/mainnet/${id}`\n );\n return id;\n }\n}\n"],"names":["runTx","tx","tupleCV","type","uintCV","data","bufferCV","serializeBytes","runEval","_ref","contract_id","code","_contract_id$split","split","contract_address","contract_name","serializeCVBytes","contract","contractPrincipalCV","stringAsciiCV","runSimulation","_x","_x2","_x3","_x4","_runSimulation","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee5","apiEndpoint","block_hash","block_height","txs","header","heightBytes","view","hashHex","hashBytes","txBytes","totalLength","body","offset","_iterator2","_step2","rs","wrap","_callee5$","_context5","prev","next","TextEncoder","encode","Uint8Array","DataView","buffer","setBigUint64","BigInt","startsWith","substring","match","map","byte","Number","parseInt","t","length","reduce","acc","curr","set","_createForOfIteratorHelperLoose","done","value","fetch","method","then","_ref3","_callee4","response","_callee4$","_context4","text","sent","Error","abrupt","JSON","parse","stop","_x6","id","SimulationBuilder","options","_options$apiEndpoint","_options$stacksNodeAP","stacksNodeAPI","block","NaN","sender","steps","new","_proto","prototype","useBlockHeight","withSender","address","addSTXTransfer","params","_params$sender","_params$fee","push","_extends","fee","addContractCall","_params$sender2","_params$fee2","addContractDeploy","_params$deployer","_params$fee3","deployer","addEvalCode","inside_contract_id","addMapRead","key","addVarRead","variable","getBlockInfo","_getBlockInfo","_callee","_yield$getNodeInfo","stacks_tip_height","info","_callee$","_context","isNaN","getNodeInfo","stacksEndpoint","richFetch","r","json","height","hash","index_block_hash","run","_run","_callee3","_this","nonce_by_address","nextNonce","_iterator","_step","step","_step$function_args","nonce","_step$contract_id$spl","contractAddress","contractName","_nonce","_tx","_nonce2","_tx2","_callee3$","_context3","console","log","Map","_ref2","_callee2","url","account","_callee2$","_context2","get","_x5","makeUnsignedContractCall","functionName","function_name","functionArgs","function_args","network","STACKS_MAINNET","publicKey","postConditionMode","PostConditionMode","Allow","auth","spendingCondition","signer","c32addressDecode","makeUnsignedSTXTokenTransfer","recipient","amount","makeUnsignedContractDeploy","codeBody","source_code"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t=require("ts-clarity"),e=require("@stacks/network"),r=require("@stacks/transactions"),n=require("c32check");function o(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}function i(t,e,r,n,o,i,a){try{var s=t[i](a),c=s.value}catch(t){return void r(t)}s.done?e(c):Promise.resolve(c).then(n,o)}function a(t){return function(){var e=this,r=arguments;return new Promise((function(n,o){var a=t.apply(e,r);function s(t){i(a,n,o,s,c,"next",t)}function c(t){i(a,n,o,s,c,"throw",t)}s(void 0)}))}}function s(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(r)return(r=r.call(t)).next.bind(r);if(Array.isArray(t)||(r=function(t,e){if(t){if("string"==typeof t)return o(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?o(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0;return function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function c(){return c=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var r=arguments[e];for(var n in r)({}).hasOwnProperty.call(r,n)&&(t[n]=r[n])}return t},c.apply(null,arguments)}function u(){u=function(){return e};var t,e={},r=Object.prototype,n=r.hasOwnProperty,o=Object.defineProperty||function(t,e,r){t[e]=r.value},i="function"==typeof Symbol?Symbol:{},a=i.iterator||"@@iterator",s=i.asyncIterator||"@@asyncIterator",c=i.toStringTag||"@@toStringTag";function h(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{h({},"")}catch(t){h=function(t,e,r){return t[e]=r}}function l(t,e,r,n){var i=Object.create((e&&e.prototype instanceof m?e:m).prototype),a=new 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"),n=require("@stacks/transactions"),r=require("c32check");function o(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}function i(t,e,n,r,o,i,a){try{var s=t[i](a),c=s.value}catch(t){return void n(t)}s.done?e(c):Promise.resolve(c).then(r,o)}function a(t){return function(){var e=this,n=arguments;return new Promise((function(r,o){var a=t.apply(e,n);function s(t){i(a,r,o,s,c,"next",t)}function c(t){i(a,r,o,s,c,"throw",t)}s(void 0)}))}}function s(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(n)return(n=n.call(t)).next.bind(n);if(Array.isArray(t)||(n=function(t,e){if(t){if("string"==typeof t)return o(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?o(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0;return function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function c(){return c=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)({}).hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},c.apply(null,arguments)}function u(){u=function(){return e};var t,e={},n=Object.prototype,r=n.hasOwnProperty,o=Object.defineProperty||function(t,e,n){t[e]=n.value},i="function"==typeof Symbol?Symbol:{},a=i.iterator||"@@iterator",s=i.asyncIterator||"@@asyncIterator",c=i.toStringTag||"@@toStringTag";function h(t,e,n){return Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{h({},"")}catch(t){h=function(t,e,n){return t[e]=n}}function l(t,e,n,r){var i=Object.create((e&&e.prototype instanceof m?e:m).prototype),a=new T(r||[]);return o(i,"_invoke",{value:C(t,n,a)}),i}function f(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(t){return{type:"throw",arg:t}}}e.wrap=l;var p="suspendedStart",d="suspendedYield",y="executing",v="completed",g={};function m(){}function b(){}function w(){}var x={};h(x,a,(function(){return this}));var k=Object.getPrototypeOf,_=k&&k(k(I([])));_&&_!==n&&r.call(_,a)&&(x=_);var E=w.prototype=m.prototype=Object.create(x);function S(t){["next","throw","return"].forEach((function(e){h(t,e,(function(t){return this._invoke(e,t)}))}))}function N(t,e){function n(o,i,a,s){var c=f(t[o],t,i);if("throw"!==c.type){var u=c.arg,h=u.value;return h&&"object"==typeof h&&r.call(h,"__await")?e.resolve(h.__await).then((function(t){n("next",t,a,s)}),(function(t){n("throw",t,a,s)})):e.resolve(h).then((function(t){u.value=t,a(u)}),(function(t){return n("throw",t,a,s)}))}s(c.arg)}var i;o(this,"_invoke",{value:function(t,r){function o(){return new e((function(e,o){n(t,r,e,o)}))}return i=i?i.then(o,o):o()}})}function C(e,n,r){var o=p;return function(i,a){if(o===y)throw Error("Generator is already running");if(o===v){if("throw"===i)throw a;return{value:t,done:!0}}for(r.method=i,r.arg=a;;){var s=r.delegate;if(s){var c=A(s,r);if(c){if(c===g)continue;return c}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(o===p)throw o=v,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=y;var u=f(e,n,r);if("normal"===u.type){if(o=r.done?v:d,u.arg===g)continue;return{value:u.arg,done:r.done}}"throw"===u.type&&(o=v,r.method="throw",r.arg=u.arg)}}}function A(e,n){var r=n.method,o=e.iterator[r];if(o===t)return n.delegate=null,"throw"===r&&e.iterator.return&&(n.method="return",n.arg=t,A(e,n),"throw"===n.method)||"return"!==r&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+r+"' method")),g;var i=f(o,e.iterator,n.arg);if("throw"===i.type)return n.method="throw",n.arg=i.arg,n.delegate=null,g;var a=i.arg;return a?a.done?(n[e.resultName]=a.value,n.next=e.nextLoc,"return"!==n.method&&(n.method="next",n.arg=t),n.delegate=null,g):a:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,g)}function L(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function P(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function T(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(L,this),this.reset(!0)}function I(e){if(e||""===e){var n=e[a];if(n)return n.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var o=-1,i=function n(){for(;++o<e.length;)if(r.call(e,o))return n.value=e[o],n.done=!1,n;return n.value=t,n.done=!0,n};return i.next=i}}throw new TypeError(typeof e+" is not iterable")}return b.prototype=w,o(E,"constructor",{value:w,configurable:!0}),o(w,"constructor",{value:b,configurable:!0}),b.displayName=h(w,c,"GeneratorFunction"),e.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===b||"GeneratorFunction"===(e.displayName||e.name))},e.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,w):(t.__proto__=w,h(t,c,"GeneratorFunction")),t.prototype=Object.create(E),t},e.awrap=function(t){return{__await:t}},S(N.prototype),h(N.prototype,s,(function(){return this})),e.AsyncIterator=N,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new N(l(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(t){return t.done?t.value:a.next()}))},S(E),h(E,c,"Generator"),h(E,a,(function(){return this})),h(E,"toString",(function(){return"[object Generator]"})),e.keys=function(t){var e=Object(t),n=[];for(var r in e)n.push(r);return n.reverse(),function t(){for(;n.length;){var r=n.pop();if(r in e)return t.value=r,t.done=!1,t}return t.done=!0,t}},e.values=I,T.prototype={constructor:T,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=t,this.done=!1,this.delegate=null,this.method="next",this.arg=t,this.tryEntries.forEach(P),!e)for(var n in this)"t"===n.charAt(0)&&r.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=t)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var n=this;function o(r,o){return s.type="throw",s.arg=e,n.next=r,o&&(n.method="next",n.arg=t),!!o}for(var i=this.tryEntries.length-1;i>=0;--i){var a=this.tryEntries[i],s=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var c=r.call(a,"catchLoc"),u=r.call(a,"finallyLoc");if(c&&u){if(this.prev<a.catchLoc)return o(a.catchLoc,!0);if(this.prev<a.finallyLoc)return o(a.finallyLoc)}else if(c){if(this.prev<a.catchLoc)return o(a.catchLoc,!0)}else{if(!u)throw Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return o(a.finallyLoc)}}}},abrupt:function(t,e){for(var n=this.tryEntries.length-1;n>=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===t||"continue"===t)&&i.tryLoc<=e&&e<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=t,a.arg=e,i?(this.method="next",this.next=i.finallyLoc,g):this.complete(a)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),g},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),P(n),g}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var o=r.arg;P(n)}return o}}throw Error("illegal catch attempt")},delegateYield:function(e,n,r){return this.delegate={iterator:I(e),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=t),g}},e}function h(t){return n.tupleCV({type:n.uintCV(0),data:n.bufferCV(t.serializeBytes())})}function l(t){var e=t.code,r=t.contract_id.split("."),o=r[0],i=r[1];return n.tupleCV({type:n.uintCV(1),data:n.bufferCV(n.serializeCVBytes(n.tupleCV({contract:n.contractPrincipalCV(o,i),code:n.stringAsciiCV(e)})))})}function f(t,e,n,r){return p.apply(this,arguments)}function p(){return p=a(u().mark((function t(e,r,o,i){var c,f,p,d,y,v,g,m,b,w,x;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:for(c=(new TextEncoder).encode("sim-v1"),f=new Uint8Array(8),new DataView(f.buffer).setBigUint64(0,BigInt(o),!1),p=r.startsWith("0x")?r.substring(2):r,d=new Uint8Array(p.match(/.{1,2}/g).map((function(t){return Number.parseInt(t,16)}))),y=i.map((function(t){return"contract_id"in t&&"code"in t?l(t):h(t)})).map((function(t){return n.serializeCVBytes(t)})),v=c.length+f.length+d.length+y.reduce((function(t,e){return t+e.length}),0),(g=new Uint8Array(v)).set(c,m=0),g.set(f,m+=c.length),g.set(d,m+=f.length),m+=d.length,b=s(y);!(w=b()).done;)g.set(x=w.value,m),m+=x.length;return t.next=19,fetch(e,{method:"POST",body:g}).then(function(){var t=a(u().mark((function t(e){var n;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.text();case 2:if((n=t.sent).startsWith("{")){t.next=5;break}throw new Error("failed to submit simulation: "+n);case 5:return t.abrupt("return",JSON.parse(n));case 6:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}());case 19:return t.abrupt("return",t.sent.id);case 21:case"end":return t.stop()}}),t)}))),p.apply(this,arguments)}exports.SimulationBuilder=function(){function o(t){var e,n;void 0===t&&(t={}),this.apiEndpoint=void 0,this.stacksNodeAPI=void 0,this.block=NaN,this.sender="",this.steps=[],this.apiEndpoint=null!=(e=t.apiEndpoint)?e:"https://api.stxer.xyz",this.stacksNodeAPI=null!=(n=t.stacksNodeAPI)?n:"https://api.hiro.so"}o.new=function(t){return new o(t)};var i=o.prototype;return i.useBlockHeight=function(t){return this.block=t,this},i.withSender=function(t){return this.sender=t,this},i.addSTXTransfer=function(t){var e,n;if(null==t.sender&&""===this.sender)throw new Error("Please specify a sender with useSender or adding a sender paramenter");return this.steps.push(c({},t,{sender:null!=(e=t.sender)?e:this.sender,fee:null!=(n=t.fee)?n:0})),this},i.addContractCall=function(t){var e,n;if(null==t.sender&&""===this.sender)throw new Error("Please specify a sender with useSender or adding a sender paramenter");return this.steps.push(c({},t,{sender:null!=(e=t.sender)?e:this.sender,fee:null!=(n=t.fee)?n:0})),this},i.addContractDeploy=function(t){var e,n;if(null==t.deployer&&""===this.sender)throw new Error("Please specify a deployer with useSender or adding a deployer paramenter");return this.steps.push(c({},t,{deployer:null!=(e=t.deployer)?e:this.sender,fee:null!=(n=t.fee)?n:0})),this},i.addEvalCode=function(t,e){return this.steps.push({contract_id:t,code:e}),this},i.addMapRead=function(t,e,n){return this.steps.push({contract_id:t,code:"(map-get "+e+" "+n+")"}),this},i.addVarRead=function(t,e){return this.steps.push({contract_id:t,code:"(var-get "+e+")"}),this},i.getBlockInfo=function(){var e=a(u().mark((function e(){var n;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!Number.isNaN(this.block)){e.next=6;break}return e.next=3,t.getNodeInfo({stacksEndpoint:this.stacksNodeAPI});case 3:this.block=e.sent.stacks_tip_height;case 6:return e.next=8,t.richFetch(this.stacksNodeAPI+"/extended/v1/block/by_height/"+this.block+"?unanchored=true").then((function(t){return t.json()}));case 8:if((n=e.sent).height===this.block&&"string"==typeof n.hash&&n.hash.startsWith("0x")){e.next=11;break}throw new Error("failed to get block info for block height "+this.block);case 11:return e.abrupt("return",{block_height:this.block,block_hash:n.hash.substring(2),index_block_hash:n.index_block_hash.substring(2)});case 12:case"end":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),i.run=function(){var o=a(u().mark((function o(){var i,c,h,l,p,d,y,v,g,m,b,w,x,k,_,E,S,N,C=this;return u().wrap((function(o){for(;;)switch(o.prev=o.next){case 0:return console.log("--------------------------------\nThis product can never exist without your support!\n\nWe receive sponsorship funds with:\nSP212Y5JKN59YP3GYG07K3S8W5SSGE4KH6B5STXER\n\nFeedbacks and feature requests are welcome.\nTo get in touch: contact@stxer.xyz\n--------------------------------"),o.next=3,this.getBlockInfo();case 3:i=o.sent,console.log("Using block height "+i.block_height+" hash 0x"+i.block_hash+" to run simulation."),c=[],h=new Map,l=function(){var e=a(u().mark((function e(n){var r,o,a;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(null!=(r=h.get(n))){e.next=8;break}return o=C.stacksNodeAPI+"/v2/accounts/"+n+"?proof="+!1+"&tip="+i.index_block_hash,e.next=5,t.richFetch(o).then((function(t){return t.json()}));case 5:return h.set(n,(a=e.sent).nonce+1),e.abrupt("return",a.nonce);case 8:return h.set(n,r+1),e.abrupt("return",r);case 10:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),p=s(this.steps);case 9:if((d=p()).done){o.next=48;break}if(!("sender"in(y=d.value))||!("function_name"in y)){o.next=23;break}return o.next=14,l(y.sender);case 14:return g=o.sent,m=y.contract_id.split("."),b=m[0],w=m[1],o.next=18,n.makeUnsignedContractCall({contractAddress:b,contractName:w,functionName:y.function_name,functionArgs:null!=(v=y.function_args)?v:[],nonce:g,network:e.STACKS_MAINNET,publicKey:"",postConditionMode:n.PostConditionMode.Allow,fee:y.fee});case 18:(x=o.sent).auth.spendingCondition.signer=r.c32addressDecode(y.sender)[1],c.push(x),o.next=46;break;case 23:if(!("sender"in y)||!("recipient"in y)){o.next=34;break}return o.next=26,l(y.sender);case 26:return k=o.sent,o.next=29,n.makeUnsignedSTXTokenTransfer({recipient:y.recipient,amount:y.amount,nonce:k,network:e.STACKS_MAINNET,publicKey:"",fee:y.fee});case 29:(_=o.sent).auth.spendingCondition.signer=r.c32addressDecode(y.sender)[1],c.push(_),o.next=46;break;case 34:if(!("deployer"in y)){o.next=45;break}return o.next=37,l(y.deployer);case 37:return E=o.sent,o.next=40,n.makeUnsignedContractDeploy({contractName:y.contract_name,codeBody:y.source_code,nonce:E,network:e.STACKS_MAINNET,publicKey:"",postConditionMode:n.PostConditionMode.Allow,fee:y.fee});case 40:(S=o.sent).auth.spendingCondition.signer=r.c32addressDecode(y.deployer)[1],c.push(S),o.next=46;break;case 45:"code"in y?c.push(y):console.log("Invalid simulation step:",y);case 46:o.next=9;break;case 48:return o.next=50,f(this.apiEndpoint+"/simulations",i.block_hash,i.block_height,c);case 50:return N=o.sent,console.log("Simulation will be available at: https://stxer.xyz/simulations/mainnet/"+N),o.abrupt("return",N);case 53:case"end":return o.stop()}}),o,this)})));return function(){return o.apply(this,arguments)}}(),o}(),exports.runEval=l,exports.runSimulation=f;
2
2
  //# sourceMappingURL=stxer.cjs.production.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stxer.cjs.production.min.js","sources":["../src/index.ts"],"sourcesContent":["import { type AccountDataResponse, getNodeInfo, richFetch } from 'ts-clarity';\nimport type { Block } from '@stacks/stacks-blockchain-api-types';\nimport { STACKS_MAINNET } from '@stacks/network';\nimport {\n AnchorMode,\n type ClarityValue,\n PostConditionMode,\n type StacksTransactionWire,\n bufferCV,\n contractPrincipalCV,\n makeUnsignedContractCall,\n makeUnsignedContractDeploy,\n makeUnsignedSTXTokenTransfer,\n 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 { STACKS_MAINNET } from '@stacks/network';\nimport {\n AnchorMode,\n type ClarityValue,\n PostConditionMode,\n type StacksTransactionWire,\n bufferCV,\n contractPrincipalCV,\n makeUnsignedContractCall,\n makeUnsignedContractDeploy,\n makeUnsignedSTXTokenTransfer,\n serializeCVBytes,\n stringAsciiCV,\n tupleCV,\n uintCV,\n} from '@stacks/transactions';\nimport { c32addressDecode } from 'c32check';\n\nfunction runTx(tx: StacksTransactionWire) {\n // type 0: run transaction\n return tupleCV({ type: uintCV(0), data: bufferCV(tx.serializeBytes()) });\n}\n\nexport interface SimulationEval {\n contract_id: string;\n code: string;\n}\n\nexport function runEval({ contract_id, code }: SimulationEval) {\n const [contract_address, contract_name] = contract_id.split('.');\n // type 1: eval arbitrary code inside a contract\n return tupleCV({\n type: uintCV(1),\n data: bufferCV(\n serializeCVBytes(\n tupleCV({\n contract: contractPrincipalCV(contract_address, contract_name),\n code: stringAsciiCV(code),\n })\n )\n ),\n });\n}\n\nexport async function runSimulation(\n apiEndpoint: string,\n block_hash: string,\n block_height: number,\n txs: (StacksTransactionWire | SimulationEval)[]\n) {\n // Convert 'sim-v1' to Uint8Array\n const header = new TextEncoder().encode('sim-v1');\n // Create 8 bytes for block height\n const heightBytes = new Uint8Array(8);\n // Convert block height to bytes\n const view = new DataView(heightBytes.buffer);\n view.setBigUint64(0, BigInt(block_height), false); // false for big-endian\n\n // Convert block hash to bytes\n const hashHex = block_hash.startsWith('0x') ? block_hash.substring(2) : block_hash;\n // biome-ignore lint/style/noNonNullAssertion: <explanation>\n const hashBytes = new Uint8Array(hashHex.match(/.{1,2}/g)!.map(byte => Number.parseInt(byte, 16)));\n\n // Convert transactions to bytes\n const txBytes = txs\n .map((t) => 'contract_id' in t && 'code' in t ? runEval(t) : runTx(t))\n .map((t) => serializeCVBytes(t));\n\n // Combine all byte arrays\n const totalLength = header.length + heightBytes.length + hashBytes.length + \n txBytes.reduce((acc, curr) => acc + curr.length, 0);\n const body = new Uint8Array(totalLength);\n\n let offset = 0;\n body.set(header, offset);\n offset += header.length;\n body.set(heightBytes, offset);\n offset += heightBytes.length;\n body.set(hashBytes, offset);\n offset += hashBytes.length;\n for (const tx of txBytes) {\n body.set(tx, offset);\n offset += tx.length;\n }\n\n const rs = await fetch(apiEndpoint, {\n method: 'POST',\n body,\n }).then(async (rs) => {\n const response = await rs.text();\n if (!response.startsWith('{')) {\n throw new Error(`failed to submit simulation: ${response}`);\n }\n return JSON.parse(response) as { id: string };\n });\n return rs.id;\n}\n\ninterface SimulationBuilderOptions {\n apiEndpoint?: string;\n stacksNodeAPI?: string;\n}\n\nexport class SimulationBuilder {\n private apiEndpoint: string;\n private stacksNodeAPI: string;\n\n private constructor(options: SimulationBuilderOptions = {}) {\n this.apiEndpoint = options.apiEndpoint ?? 'https://api.stxer.xyz';\n this.stacksNodeAPI = options.stacksNodeAPI ?? 'https://api.hiro.so';\n }\n\n public static new(options?: SimulationBuilderOptions) {\n return new SimulationBuilder(options);\n }\n\n // biome-ignore lint/style/useNumberNamespace: <explanation>\n private block = NaN;\n private sender = '';\n private steps: (\n | {\n // contract call\n contract_id: string;\n function_name: string;\n function_args?: ClarityValue[];\n sender: string;\n fee: number;\n }\n | {\n // contract deploy\n contract_name: string;\n source_code: string;\n deployer: string;\n fee: number;\n }\n | {\n // STX transfer\n recipient: string;\n amount: number;\n sender: string;\n fee: number;\n }\n | SimulationEval\n )[] = [];\n\n public useBlockHeight(block: number) {\n this.block = block;\n return this;\n }\n public withSender(address: string) {\n this.sender = address;\n return this;\n }\n public addSTXTransfer(params: {\n recipient: string;\n amount: number;\n sender?: string;\n fee?: number;\n }) {\n if (params.sender == null && this.sender === '') {\n throw new Error(\n 'Please specify a sender with useSender or adding a sender paramenter'\n );\n }\n this.steps.push({\n ...params,\n sender: params.sender ?? this.sender,\n fee: params.fee ?? 0,\n });\n return this;\n }\n public addContractCall(params: {\n contract_id: string;\n function_name: string;\n function_args?: ClarityValue[];\n sender?: string;\n fee?: number;\n }) {\n if (params.sender == null && this.sender === '') {\n throw new Error(\n 'Please specify a sender with useSender or adding a sender paramenter'\n );\n }\n this.steps.push({\n ...params,\n sender: params.sender ?? this.sender,\n fee: params.fee ?? 0,\n });\n return this;\n }\n public addContractDeploy(params: {\n contract_name: string;\n source_code: string;\n deployer?: string;\n fee?: number;\n }) {\n if (params.deployer == null && this.sender === '') {\n throw new Error(\n 'Please specify a deployer with useSender or adding a deployer paramenter'\n );\n }\n this.steps.push({\n ...params,\n deployer: params.deployer ?? this.sender,\n fee: params.fee ?? 0,\n });\n return this;\n }\n public addEvalCode(inside_contract_id: string, code: string) {\n this.steps.push({\n contract_id: inside_contract_id,\n code,\n });\n return this;\n }\n public addMapRead(contract_id: string, map: string, key: string) {\n this.steps.push({\n contract_id,\n code: `(map-get ${map} ${key})`,\n });\n return this;\n }\n public addVarRead(contract_id: string, variable: string) {\n this.steps.push({\n contract_id,\n code: `(var-get ${variable})`,\n });\n return this;\n }\n\n private async getBlockInfo() {\n if (Number.isNaN(this.block)) {\n const { stacks_tip_height } = await getNodeInfo({\n stacksEndpoint: this.stacksNodeAPI,\n });\n this.block = stacks_tip_height;\n }\n const info: Block = await richFetch(\n `${this.stacksNodeAPI}/extended/v1/block/by_height/${this.block}?unanchored=true`\n ).then((r) => r.json());\n if (\n info.height !== this.block ||\n typeof info.hash !== 'string' ||\n !info.hash.startsWith('0x')\n ) {\n throw new Error(\n `failed to get block info for block height ${this.block}`\n );\n }\n return {\n block_height: this.block,\n block_hash: info.hash.substring(2),\n index_block_hash: info.index_block_hash.substring(2),\n };\n }\n\n public async run() {\n console.log(\n `--------------------------------\nThis product can never exist without your support!\n\nWe receive sponsorship funds with:\nSP212Y5JKN59YP3GYG07K3S8W5SSGE4KH6B5STXER\n\nFeedbacks and feature requests are welcome.\nTo get in touch: contact@stxer.xyz\n--------------------------------`\n );\n const block = await this.getBlockInfo();\n console.log(\n `Using block height ${block.block_height} hash 0x${block.block_hash} to run simulation.`\n );\n const txs: (StacksTransactionWire | SimulationEval)[] = [];\n const nonce_by_address = new Map<string, number>();\n const nextNonce = async (sender: string) => {\n const nonce = nonce_by_address.get(sender);\n if (nonce == null) {\n const url = `${this.stacksNodeAPI}/v2/accounts/${sender}?proof=${false}&tip=${\n block.index_block_hash\n }`;\n const account: AccountDataResponse = await richFetch(url).then((r) =>\n r.json()\n );\n nonce_by_address.set(sender, account.nonce + 1);\n return account.nonce;\n }\n nonce_by_address.set(sender, nonce + 1);\n return nonce;\n };\n for (const step of this.steps) {\n if ('sender' in step && 'function_name' in step) {\n const nonce = await nextNonce(step.sender);\n const [contractAddress, contractName] = step.contract_id.split('.');\n const tx = await makeUnsignedContractCall({\n contractAddress,\n contractName,\n functionName: step.function_name,\n functionArgs: step.function_args ?? [],\n nonce,\n network: STACKS_MAINNET,\n publicKey: '',\n postConditionMode: PostConditionMode.Allow,\n fee: step.fee,\n });\n tx.auth.spendingCondition.signer = c32addressDecode(step.sender)[1];\n txs.push(tx);\n } else if ('sender' in step && 'recipient' in step) {\n const nonce = await nextNonce(step.sender);\n const tx = await makeUnsignedSTXTokenTransfer({\n recipient: step.recipient,\n amount: step.amount,\n nonce,\n network: STACKS_MAINNET,\n publicKey: '',\n fee: step.fee,\n });\n tx.auth.spendingCondition.signer = c32addressDecode(step.sender)[1];\n txs.push(tx);\n } else if ('deployer' in step) {\n const nonce = await nextNonce(step.deployer);\n const tx = await makeUnsignedContractDeploy({\n contractName: step.contract_name,\n codeBody: step.source_code,\n nonce,\n network: STACKS_MAINNET,\n publicKey: '',\n postConditionMode: PostConditionMode.Allow,\n fee: step.fee,\n });\n tx.auth.spendingCondition.signer = c32addressDecode(step.deployer)[1];\n txs.push(tx);\n } else if ('code' in step) {\n txs.push(step);\n } else {\n // biome-ignore lint/style/noUnusedTemplateLiteral: <explanation>\n console.log(`Invalid simulation step:`, step);\n }\n }\n const id = await runSimulation(\n `${this.apiEndpoint}/simulations`,\n block.block_hash, \n block.block_height, \n txs\n );\n console.log(\n `Simulation will be available at: https://stxer.xyz/simulations/mainnet/${id}`\n );\n return id;\n }\n}\n"],"names":["runTx","tx","tupleCV","type","uintCV","data","bufferCV","serializeBytes","runEval","_ref","code","_contract_id$split","contract_id","split","contract_address","contract_name","serializeCVBytes","contract","contractPrincipalCV","stringAsciiCV","runSimulation","_x","_x2","_x3","_x4","_runSimulation","apply","this","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee5","apiEndpoint","block_hash","block_height","txs","header","heightBytes","hashHex","hashBytes","txBytes","totalLength","body","offset","_iterator2","_step2","wrap","_context5","prev","next","TextEncoder","encode","Uint8Array","DataView","buffer","setBigUint64","BigInt","startsWith","substring","match","map","byte","Number","parseInt","t","length","reduce","acc","curr","set","_createForOfIteratorHelperLoose","done","value","fetch","method","then","_ref3","_callee4","rs","response","_context4","text","sent","Error","abrupt","JSON","parse","stop","_x6","id","SimulationBuilder","options","_options$apiEndpoint","_options$stacksNodeAP","stacksNodeAPI","block","NaN","sender","steps","_proto","prototype","useBlockHeight","withSender","address","addSTXTransfer","params","_params$sender","_params$fee","push","_extends","fee","addContractCall","_params$sender2","_params$fee2","addContractDeploy","_params$deployer","_params$fee3","deployer","addEvalCode","inside_contract_id","addMapRead","key","addVarRead","variable","getBlockInfo","_getBlockInfo","_callee","info","_context","isNaN","getNodeInfo","stacksEndpoint","stacks_tip_height","richFetch","r","json","height","hash","index_block_hash","run","_run","_callee3","nonce_by_address","nextNonce","_iterator","_step","step","_step$function_args","nonce","_step$contract_id$spl","contractAddress","contractName","_nonce","_tx","_nonce2","_tx2","_this","_context3","console","log","Map","_ref2","_callee2","url","account","_context2","get","_x5","makeUnsignedContractCall","functionName","function_name","functionArgs","function_args","network","STACKS_MAINNET","publicKey","postConditionMode","PostConditionMode","Allow","auth","spendingCondition","signer","c32addressDecode","makeUnsignedSTXTokenTransfer","recipient","amount","makeUnsignedContractDeploy","codeBody","source_code"],"mappings":"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"}
package/dist/stxer.esm.js CHANGED
@@ -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
- body = Buffer.concat([Buffer.from('sim-v1'), Buffer.alloc(8), Buffer.from(block_hash.startsWith('0x') ? block_hash.substring(2) : block_hash, 'hex')].concat(txs.map(function (t) {
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
- body.writeBigUInt64BE(BigInt(block_height), 6);
408
- _context5.next = 4;
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 4:
464
+ case 19:
440
465
  rs = _context5.sent;
441
466
  return _context5.abrupt("return", rs.id);
442
- case 6:
467
+ case 21:
443
468
  case "end":
444
469
  return _context5.stop();
445
470
  }
@@ -459,7 +484,7 @@ var SimulationBuilder = /*#__PURE__*/function () {
459
484
  this.block = NaN;
460
485
  this.sender = '';
461
486
  this.steps = [];
462
- this.apiEndpoint = (_options$apiEndpoint = options.apiEndpoint) != null ? _options$apiEndpoint : 'https://api.stxer.xyz/simulations';
487
+ this.apiEndpoint = (_options$apiEndpoint = options.apiEndpoint) != null ? _options$apiEndpoint : 'https://api.stxer.xyz';
463
488
  this.stacksNodeAPI = (_options$stacksNodeAP = options.stacksNodeAPI) != null ? _options$stacksNodeAP : 'https://api.hiro.so';
464
489
  }
465
490
  SimulationBuilder["new"] = function _new(options) {
@@ -718,7 +743,7 @@ var SimulationBuilder = /*#__PURE__*/function () {
718
743
  break;
719
744
  case 48:
720
745
  _context3.next = 50;
721
- return runSimulation(this.apiEndpoint, block.block_hash, block.block_height, txs);
746
+ return runSimulation(this.apiEndpoint + "/simulations", block.block_hash, block.block_height, txs);
722
747
  case 50:
723
748
  id = _context3.sent;
724
749
  console.log("Simulation will be available at: https://stxer.xyz/simulations/mainnet/" + id);
@@ -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 { STACKS_MAINNET } from '@stacks/network';\nimport {\n AnchorMode,\n type ClarityValue,\n PostConditionMode,\n type StacksTransactionWire,\n bufferCV,\n contractPrincipalCV,\n makeUnsignedContractCall,\n makeUnsignedContractDeploy,\n makeUnsignedSTXTokenTransfer,\n serializeCVBytes,\n stringAsciiCV,\n tupleCV,\n uintCV,\n} from '@stacks/transactions';\nimport { c32addressDecode } from 'c32check';\n\nfunction runTx(tx: StacksTransactionWire) {\n // type 0: run transaction\n return tupleCV({ type: uintCV(0), data: bufferCV(tx.serializeBytes()) });\n}\n\nexport interface SimulationEval {\n contract_id: string;\n code: string;\n}\n\nexport function runEval({ contract_id, code }: SimulationEval) {\n const [contract_address, contract_name] = contract_id.split('.');\n // type 1: eval arbitrary code inside a contract\n return tupleCV({\n type: uintCV(1),\n data: bufferCV(\n serializeCVBytes(\n tupleCV({\n contract: contractPrincipalCV(contract_address, contract_name),\n code: stringAsciiCV(code),\n })\n )\n ),\n });\n}\n\nexport async function runSimulation(\n apiEndpoint: string,\n block_hash: string,\n block_height: number,\n txs: (StacksTransactionWire | SimulationEval)[]\n) {\n // Convert 'sim-v1' to Uint8Array\n const header = new TextEncoder().encode('sim-v1');\n // Create 8 bytes for block height\n const heightBytes = new Uint8Array(8);\n // Convert block height to bytes\n const view = new DataView(heightBytes.buffer);\n view.setBigUint64(0, BigInt(block_height), false); // false for big-endian\n\n // Convert block hash to bytes\n const hashHex = block_hash.startsWith('0x') ? block_hash.substring(2) : block_hash;\n // biome-ignore lint/style/noNonNullAssertion: <explanation>\n const hashBytes = new Uint8Array(hashHex.match(/.{1,2}/g)!.map(byte => Number.parseInt(byte, 16)));\n\n // Convert transactions to bytes\n const txBytes = txs\n .map((t) => 'contract_id' in t && 'code' in t ? runEval(t) : runTx(t))\n .map((t) => serializeCVBytes(t));\n\n // Combine all byte arrays\n const totalLength = header.length + heightBytes.length + hashBytes.length + \n txBytes.reduce((acc, curr) => acc + curr.length, 0);\n const body = new Uint8Array(totalLength);\n\n let offset = 0;\n body.set(header, offset);\n offset += header.length;\n body.set(heightBytes, offset);\n offset += heightBytes.length;\n body.set(hashBytes, offset);\n offset += hashBytes.length;\n for (const tx of txBytes) {\n body.set(tx, offset);\n offset += tx.length;\n }\n\n const rs = await fetch(apiEndpoint, {\n method: 'POST',\n body,\n }).then(async (rs) => {\n const response = await rs.text();\n if (!response.startsWith('{')) {\n throw new Error(`failed to submit simulation: ${response}`);\n }\n return JSON.parse(response) as { id: string };\n });\n return rs.id;\n}\n\ninterface SimulationBuilderOptions {\n apiEndpoint?: string;\n stacksNodeAPI?: string;\n}\n\nexport class SimulationBuilder {\n private apiEndpoint: string;\n private stacksNodeAPI: string;\n\n private constructor(options: SimulationBuilderOptions = {}) {\n this.apiEndpoint = options.apiEndpoint ?? 'https://api.stxer.xyz';\n this.stacksNodeAPI = options.stacksNodeAPI ?? 'https://api.hiro.so';\n }\n\n public static new(options?: SimulationBuilderOptions) {\n return new SimulationBuilder(options);\n }\n\n // biome-ignore lint/style/useNumberNamespace: <explanation>\n private block = NaN;\n private sender = '';\n private steps: (\n | {\n // contract call\n contract_id: string;\n function_name: string;\n function_args?: ClarityValue[];\n sender: string;\n fee: number;\n }\n | {\n // contract deploy\n contract_name: string;\n source_code: string;\n deployer: string;\n fee: number;\n }\n | {\n // STX transfer\n recipient: string;\n amount: number;\n sender: string;\n fee: number;\n }\n | SimulationEval\n )[] = [];\n\n public useBlockHeight(block: number) {\n this.block = block;\n return this;\n }\n public withSender(address: string) {\n this.sender = address;\n return this;\n }\n public addSTXTransfer(params: {\n recipient: string;\n amount: number;\n sender?: string;\n fee?: number;\n }) {\n if (params.sender == null && this.sender === '') {\n throw new Error(\n 'Please specify a sender with useSender or adding a sender paramenter'\n );\n }\n this.steps.push({\n ...params,\n sender: params.sender ?? this.sender,\n fee: params.fee ?? 0,\n });\n return this;\n }\n public addContractCall(params: {\n contract_id: string;\n function_name: string;\n function_args?: ClarityValue[];\n sender?: string;\n fee?: number;\n }) {\n if (params.sender == null && this.sender === '') {\n throw new Error(\n 'Please specify a sender with useSender or adding a sender paramenter'\n );\n }\n this.steps.push({\n ...params,\n sender: params.sender ?? this.sender,\n fee: params.fee ?? 0,\n });\n return this;\n }\n public addContractDeploy(params: {\n contract_name: string;\n source_code: string;\n deployer?: string;\n fee?: number;\n }) {\n if (params.deployer == null && this.sender === '') {\n throw new Error(\n 'Please specify a deployer with useSender or adding a deployer paramenter'\n );\n }\n this.steps.push({\n ...params,\n deployer: params.deployer ?? this.sender,\n fee: params.fee ?? 0,\n });\n return this;\n }\n public addEvalCode(inside_contract_id: string, code: string) {\n this.steps.push({\n contract_id: inside_contract_id,\n code,\n });\n return this;\n }\n public addMapRead(contract_id: string, map: string, key: string) {\n this.steps.push({\n contract_id,\n code: `(map-get ${map} ${key})`,\n });\n return this;\n }\n public addVarRead(contract_id: string, variable: string) {\n this.steps.push({\n contract_id,\n code: `(var-get ${variable})`,\n });\n return this;\n }\n\n private async getBlockInfo() {\n if (Number.isNaN(this.block)) {\n const { stacks_tip_height } = await getNodeInfo({\n stacksEndpoint: this.stacksNodeAPI,\n });\n this.block = stacks_tip_height;\n }\n const info: Block = await richFetch(\n `${this.stacksNodeAPI}/extended/v1/block/by_height/${this.block}?unanchored=true`\n ).then((r) => r.json());\n if (\n info.height !== this.block ||\n typeof info.hash !== 'string' ||\n !info.hash.startsWith('0x')\n ) {\n throw new Error(\n `failed to get block info for block height ${this.block}`\n );\n }\n return {\n block_height: this.block,\n block_hash: info.hash.substring(2),\n index_block_hash: info.index_block_hash.substring(2),\n };\n }\n\n public async run() {\n console.log(\n `--------------------------------\nThis product can never exist without your support!\n\nWe receive sponsorship funds with:\nSP212Y5JKN59YP3GYG07K3S8W5SSGE4KH6B5STXER\n\nFeedbacks and feature requests are welcome.\nTo get in touch: contact@stxer.xyz\n--------------------------------`\n );\n const block = await this.getBlockInfo();\n console.log(\n `Using block height ${block.block_height} hash 0x${block.block_hash} to run simulation.`\n );\n const txs: (StacksTransactionWire | SimulationEval)[] = [];\n const nonce_by_address = new Map<string, number>();\n const nextNonce = async (sender: string) => {\n const nonce = nonce_by_address.get(sender);\n if (nonce == null) {\n const url = `${this.stacksNodeAPI}/v2/accounts/${sender}?proof=${false}&tip=${\n block.index_block_hash\n }`;\n const account: AccountDataResponse = await richFetch(url).then((r) =>\n r.json()\n );\n nonce_by_address.set(sender, account.nonce + 1);\n return account.nonce;\n }\n nonce_by_address.set(sender, nonce + 1);\n return nonce;\n };\n for (const step of this.steps) {\n if ('sender' in step && 'function_name' in step) {\n const nonce = await nextNonce(step.sender);\n const [contractAddress, contractName] = step.contract_id.split('.');\n const tx = await makeUnsignedContractCall({\n contractAddress,\n contractName,\n functionName: step.function_name,\n functionArgs: step.function_args ?? [],\n nonce,\n network: STACKS_MAINNET,\n publicKey: '',\n postConditionMode: PostConditionMode.Allow,\n fee: step.fee,\n });\n tx.auth.spendingCondition.signer = c32addressDecode(step.sender)[1];\n txs.push(tx);\n } else if ('sender' in step && 'recipient' in step) {\n const nonce = await nextNonce(step.sender);\n const tx = await makeUnsignedSTXTokenTransfer({\n recipient: step.recipient,\n amount: step.amount,\n nonce,\n network: STACKS_MAINNET,\n publicKey: '',\n fee: step.fee,\n });\n tx.auth.spendingCondition.signer = c32addressDecode(step.sender)[1];\n txs.push(tx);\n } else if ('deployer' in step) {\n const nonce = await nextNonce(step.deployer);\n const tx = await makeUnsignedContractDeploy({\n contractName: step.contract_name,\n codeBody: step.source_code,\n nonce,\n network: STACKS_MAINNET,\n publicKey: '',\n postConditionMode: PostConditionMode.Allow,\n fee: step.fee,\n });\n tx.auth.spendingCondition.signer = c32addressDecode(step.deployer)[1];\n txs.push(tx);\n } else if ('code' in step) {\n txs.push(step);\n } else {\n // biome-ignore lint/style/noUnusedTemplateLiteral: <explanation>\n console.log(`Invalid simulation step:`, step);\n }\n }\n const id = await runSimulation(\n `${this.apiEndpoint}/simulations`,\n block.block_hash, \n block.block_height, \n txs\n );\n console.log(\n `Simulation will be available at: https://stxer.xyz/simulations/mainnet/${id}`\n );\n return id;\n }\n}\n"],"names":["runTx","tx","tupleCV","type","uintCV","data","bufferCV","serializeBytes","runEval","_ref","contract_id","code","_contract_id$split","split","contract_address","contract_name","serializeCVBytes","contract","contractPrincipalCV","stringAsciiCV","runSimulation","_x","_x2","_x3","_x4","_runSimulation","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee5","apiEndpoint","block_hash","block_height","txs","header","heightBytes","view","hashHex","hashBytes","txBytes","totalLength","body","offset","_iterator2","_step2","rs","wrap","_callee5$","_context5","prev","next","TextEncoder","encode","Uint8Array","DataView","buffer","setBigUint64","BigInt","startsWith","substring","match","map","byte","Number","parseInt","t","length","reduce","acc","curr","set","_createForOfIteratorHelperLoose","done","value","fetch","method","then","_ref3","_callee4","response","_callee4$","_context4","text","sent","Error","abrupt","JSON","parse","stop","_x6","id","SimulationBuilder","options","_options$apiEndpoint","_options$stacksNodeAP","stacksNodeAPI","block","NaN","sender","steps","new","_proto","prototype","useBlockHeight","withSender","address","addSTXTransfer","params","_params$sender","_params$fee","push","_extends","fee","addContractCall","_params$sender2","_params$fee2","addContractDeploy","_params$deployer","_params$fee3","deployer","addEvalCode","inside_contract_id","addMapRead","key","addVarRead","variable","getBlockInfo","_getBlockInfo","_callee","_yield$getNodeInfo","stacks_tip_height","info","_callee$","_context","isNaN","getNodeInfo","stacksEndpoint","richFetch","r","json","height","hash","index_block_hash","run","_run","_callee3","_this","nonce_by_address","nextNonce","_iterator","_step","step","_step$function_args","nonce","_step$contract_id$spl","contractAddress","contractName","_nonce","_tx","_nonce2","_tx2","_callee3$","_context3","console","log","Map","_ref2","_callee2","url","account","_callee2$","_context2","get","_x5","makeUnsignedContractCall","functionName","function_name","functionArgs","function_args","network","STACKS_MAINNET","publicKey","postConditionMode","PostConditionMode","Allow","auth","spendingCondition","signer","c32addressDecode","makeUnsignedSTXTokenTransfer","recipient","amount","makeUnsignedContractDeploy","codeBody","source_code"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "stxer",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "license": "MIT",
5
5
  "author": "Kyle Fang",
6
6
  "main": "dist/index.js",
package/src/index.ts CHANGED
@@ -50,20 +50,41 @@ export async function runSimulation(
50
50
  block_height: number,
51
51
  txs: (StacksTransactionWire | SimulationEval)[]
52
52
  ) {
53
- const body = Buffer.concat([
54
- Buffer.from('sim-v1'),
55
- Buffer.alloc(8),
56
- Buffer.from(
57
- block_hash.startsWith('0x') ? block_hash.substring(2) : block_hash,
58
- 'hex'
59
- ),
60
- ...txs
61
- .map((t) => {
62
- return 'contract_id' in t && 'code' in t ? runEval(t) : runTx(t);
63
- })
64
- .map((t) => serializeCVBytes(t)),
65
- ]);
66
- body.writeBigUInt64BE(BigInt(block_height), 6);
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;
@@ -88,7 +108,7 @@ export class SimulationBuilder {
88
108
  private stacksNodeAPI: string;
89
109
 
90
110
  private constructor(options: SimulationBuilderOptions = {}) {
91
- this.apiEndpoint = options.apiEndpoint ?? 'https://api.stxer.xyz/simulations';
111
+ this.apiEndpoint = options.apiEndpoint ?? 'https://api.stxer.xyz';
92
112
  this.stacksNodeAPI = options.stacksNodeAPI ?? 'https://api.hiro.so';
93
113
  }
94
114
 
@@ -319,7 +339,7 @@ To get in touch: contact@stxer.xyz
319
339
  }
320
340
  }
321
341
  const id = await runSimulation(
322
- this.apiEndpoint,
342
+ `${this.apiEndpoint}/simulations`,
323
343
  block.block_hash,
324
344
  block.block_height,
325
345
  txs