mirror of
https://github.com/stxer/stxer-sdk.git
synced 2026-01-12 07:23:57 +08:00
feat: add read api
This commit is contained in:
28
README.md
28
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: {
|
||||
processor.read({
|
||||
mode: 'variable',
|
||||
contractAddress: 'SP...',
|
||||
contractName: 'my-contract',
|
||||
variableName: 'variable-a'
|
||||
},
|
||||
resolve,
|
||||
reject
|
||||
});
|
||||
}),
|
||||
new Promise((resolve, reject) => {
|
||||
processor.enqueue({
|
||||
request: {
|
||||
processor.read({
|
||||
mode: 'variable',
|
||||
contractAddress: 'SP...',
|
||||
contractName: 'my-contract',
|
||||
variableName: 'variable-b'
|
||||
},
|
||||
resolve,
|
||||
reject
|
||||
});
|
||||
})
|
||||
]);
|
||||
|
||||
// You can also queue different types of operations
|
||||
processor.enqueue({
|
||||
request: {
|
||||
processor.read({
|
||||
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.enqueue({
|
||||
request: {
|
||||
processor.read({
|
||||
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)
|
||||
});
|
||||
```
|
||||
|
||||
|
||||
@@ -60,6 +60,12 @@ export class BatchProcessor {
|
||||
return tip ?? '_undefined';
|
||||
}
|
||||
|
||||
read(request: BatchRequest): Promise<ClarityValue | OptionalCV> {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.enqueue({ request, resolve, reject });
|
||||
});
|
||||
}
|
||||
|
||||
enqueue(request: QueuedRequest): void {
|
||||
const queueKey = this.getQueueKey(request.tip);
|
||||
|
||||
|
||||
@@ -82,66 +82,24 @@ async function batchQueueProcessorExample() {
|
||||
});
|
||||
|
||||
|
||||
const promiseA = new Promise((resolve, reject) => {
|
||||
processor.enqueue({
|
||||
request: {
|
||||
const promiseA = processor.read({
|
||||
mode: 'variable',
|
||||
contractAddress: 'SP1Z92MPDQEWZXW36VX71Q25HKF5K2EPCJ304F275',
|
||||
contractName: 'liquidity-token-v5kbe3oqvac',
|
||||
variableName: 'balance-x',
|
||||
},
|
||||
resolve: resolve,
|
||||
reject: reject,
|
||||
});
|
||||
});
|
||||
|
||||
const promiseB = new Promise((resolve, reject) => {
|
||||
processor.enqueue({
|
||||
request: {
|
||||
const promiseB = processor.read({
|
||||
mode: 'variable',
|
||||
contractAddress: 'SP1Z92MPDQEWZXW36VX71Q25HKF5K2EPCJ304F275',
|
||||
contractName: 'liquidity-token-v5kbe3oqvac',
|
||||
variableName: 'balance-y',
|
||||
},
|
||||
resolve: resolve,
|
||||
reject: reject,
|
||||
});
|
||||
});
|
||||
|
||||
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,
|
||||
|
||||
Reference in New Issue
Block a user