diff --git a/README.md b/README.md index 83f9c90..88e29f6 100644 --- a/README.md +++ b/README.md @@ -83,55 +83,35 @@ const processor = new BatchProcessor({ // Queue multiple operations that will be batched together const [resultA, resultB] = await Promise.all([ - new Promise((resolve, reject) => { - processor.enqueue({ - request: { - mode: 'variable', - contractAddress: 'SP...', - contractName: 'my-contract', - variableName: 'variable-a' - }, - resolve, - reject - }); + processor.read({ + mode: 'variable', + contractAddress: 'SP...', + contractName: 'my-contract', + variableName: 'variable-a' }), - new Promise((resolve, reject) => { - processor.enqueue({ - request: { - mode: 'variable', - contractAddress: 'SP...', - contractName: 'my-contract', - variableName: 'variable-b' - }, - resolve, - reject - }); + processor.read({ + mode: 'variable', + contractAddress: 'SP...', + contractName: 'my-contract', + variableName: 'variable-b' }) ]); // You can also queue different types of operations -processor.enqueue({ - request: { - mode: 'readonly', - contractAddress: 'SP...', - contractName: 'my-contract', - functionName: 'get-value', - functionArgs: [] - }, - resolve: (value) => console.log('Function result:', value), - reject: (error) => console.error('Error:', error) +processor.read({ + mode: 'readonly', + contractAddress: 'SP...', + contractName: 'my-contract', + functionName: 'get-value', + functionArgs: [] }); -processor.enqueue({ - request: { - mode: 'mapEntry', - contractAddress: 'SP...', - contractName: 'my-contract', - mapName: 'my-map', - mapKey: someKey - }, - resolve: (value) => console.log('Map entry:', value), - reject: (error) => console.error('Error:', error) +processor.read({ + mode: 'mapEntry', + contractAddress: 'SP...', + contractName: 'my-contract', + mapName: 'my-map', + mapKey: someKey }); ``` diff --git a/src/BatchProcessor.ts b/src/BatchProcessor.ts index b7039d1..14e04ba 100644 --- a/src/BatchProcessor.ts +++ b/src/BatchProcessor.ts @@ -60,6 +60,12 @@ export class BatchProcessor { return tip ?? '_undefined'; } + read(request: BatchRequest): Promise { + return new Promise((resolve, reject) => { + this.enqueue({ request, resolve, reject }); + }); + } + enqueue(request: QueuedRequest): void { const queueKey = this.getQueueKey(request.tip); diff --git a/src/sample/read.ts b/src/sample/read.ts index a6e010d..f44ee59 100644 --- a/src/sample/read.ts +++ b/src/sample/read.ts @@ -82,66 +82,24 @@ async function batchQueueProcessorExample() { }); - const promiseA = new Promise((resolve, reject) => { - processor.enqueue({ - request: { - mode: 'variable', - contractAddress: 'SP1Z92MPDQEWZXW36VX71Q25HKF5K2EPCJ304F275', - contractName: 'liquidity-token-v5kbe3oqvac', - variableName: 'balance-x', - }, - resolve: resolve, - reject: reject, - }); + const promiseA = processor.read({ + mode: 'variable', + contractAddress: 'SP1Z92MPDQEWZXW36VX71Q25HKF5K2EPCJ304F275', + contractName: 'liquidity-token-v5kbe3oqvac', + variableName: 'balance-x', }); - const promiseB = new Promise((resolve, reject) => { - processor.enqueue({ - request: { - mode: 'variable', - contractAddress: 'SP1Z92MPDQEWZXW36VX71Q25HKF5K2EPCJ304F275', - contractName: 'liquidity-token-v5kbe3oqvac', - variableName: 'balance-y', - }, - resolve: resolve, - reject: reject, - }); + const promiseB = processor.read({ + mode: 'variable', + contractAddress: 'SP1Z92MPDQEWZXW36VX71Q25HKF5K2EPCJ304F275', + contractName: 'liquidity-token-v5kbe3oqvac', + variableName: 'balance-y', }); const result = await Promise.all([promiseA, promiseB]); console.log(result); } -// https://explorer.hiro.so/txid/SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.trait-sip-010 -const sip010 = { - functions: [ - { - name: 'get-balance', - access: 'read_only', - args: [ - { - name: 'who', - type: 'principal', - }, - ], - outputs: { - type: { - response: { - ok: 'uint128', - error: 'none', - }, - }, - }, - }, - ], - variables: [], - maps: [], - fungible_tokens: [], - non_fungible_tokens: [], - epoch: 'Epoch2_05', - clarity_version: 'Clarity1', -} as const; - async function batchSip010Example() { const supply = callReadonly({ abi: SIP010TraitABI.functions,