mirror of
https://github.com/stxer/stxer-sdk.git
synced 2026-01-12 07:23:57 +08:00
feat: remove batch readonly
This commit is contained in:
@@ -29,11 +29,7 @@ const result = await batchRead({
|
|||||||
contract: contractPrincipalCV(...),
|
contract: contractPrincipalCV(...),
|
||||||
mapName: 'my-map',
|
mapName: 'my-map',
|
||||||
mapKey: someCV
|
mapKey: someCV
|
||||||
}]
|
}],
|
||||||
});
|
|
||||||
|
|
||||||
// Batch readonly function calls
|
|
||||||
const readonlyResult = await batchReadonly({
|
|
||||||
readonly: [{
|
readonly: [{
|
||||||
contract: contractPrincipalCV(...),
|
contract: contractPrincipalCV(...),
|
||||||
functionName: 'my-function',
|
functionName: 'my-function',
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ import {
|
|||||||
type ClarityValue,
|
type ClarityValue,
|
||||||
type ContractPrincipalCV,
|
type ContractPrincipalCV,
|
||||||
deserializeCV,
|
deserializeCV,
|
||||||
type OptionalCV,
|
|
||||||
serializeCV,
|
serializeCV,
|
||||||
} from '@stacks/transactions';
|
} from '@stacks/transactions';
|
||||||
|
|
||||||
@@ -133,56 +132,4 @@ export async function batchRead(
|
|||||||
maps: convertResults(rs.maps),
|
maps: convertResults(rs.maps),
|
||||||
readonly: convertResults(rs.readonly),
|
readonly: convertResults(rs.readonly),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface BatchReadonlyRequest {
|
|
||||||
readonly: {
|
|
||||||
contract: ContractPrincipalCV;
|
|
||||||
functionName: string;
|
|
||||||
functionArgs: ClarityValue[];
|
|
||||||
}[];
|
|
||||||
index_block_hash?: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function batchReadonly(
|
|
||||||
req: BatchReadonlyRequest,
|
|
||||||
options: BatchApiOptions = {}
|
|
||||||
): Promise<(ClarityValue | Error)[]> {
|
|
||||||
const payload = req.readonly.map((r) => [
|
|
||||||
serializeCV(r.contract),
|
|
||||||
r.functionName,
|
|
||||||
...r.functionArgs.map((arg) => serializeCV(arg)),
|
|
||||||
]);
|
|
||||||
|
|
||||||
const ibh =
|
|
||||||
req.index_block_hash == null
|
|
||||||
? null
|
|
||||||
: req.index_block_hash.startsWith('0x')
|
|
||||||
? req.index_block_hash.substring(2)
|
|
||||||
: req.index_block_hash;
|
|
||||||
|
|
||||||
const url = `${options.stxerApi ?? DEFAULT_STXER_API}/sidecar/v2/batch-readonly${ibh == null ? '' : `?tip=${ibh}`
|
|
||||||
}`;
|
|
||||||
const data = await fetch(url, {
|
|
||||||
method: 'POST',
|
|
||||||
body: JSON.stringify(payload),
|
|
||||||
});
|
|
||||||
const text = await data.text();
|
|
||||||
if (!text.includes('Ok') && !text.includes('Err')) {
|
|
||||||
throw new Error(
|
|
||||||
`Requesting batch readonly failed: ${text}, url: ${url}, payload: ${JSON.stringify(
|
|
||||||
payload
|
|
||||||
)}`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
const results = JSON.parse(text) as [{ Ok: string } | { Err: string }];
|
|
||||||
const rs: (ClarityValue | Error)[] = [];
|
|
||||||
for (const result of results) {
|
|
||||||
if ('Ok' in result) {
|
|
||||||
rs.push(deserializeCV(result.Ok));
|
|
||||||
} else {
|
|
||||||
rs.push(new Error(result.Err));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return rs;
|
|
||||||
}
|
|
||||||
@@ -1,127 +1,82 @@
|
|||||||
import {
|
import {
|
||||||
contractPrincipalCV,
|
contractPrincipalCV,
|
||||||
principalCV,
|
principalCV,
|
||||||
stringAsciiCV,
|
stringAsciiCV,
|
||||||
tupleCV,
|
tupleCV,
|
||||||
uintCV,
|
uintCV,
|
||||||
} from '@stacks/transactions';
|
} from '@stacks/transactions';
|
||||||
import { batchRead, batchReadonly } from '../batch-api';
|
import { batchRead } from '../batch-api';
|
||||||
|
|
||||||
async function batchReadsExample() {
|
async function batchReadsExample() {
|
||||||
const rs = await batchRead({
|
const rs = await batchRead({
|
||||||
// index_block_hash:
|
// index_block_hash:
|
||||||
// 'ce04817b9c6d90814ff9c06228d3a07d64335b1d9b01a233456fc304e34f7c0e', // block 373499
|
// 'ce04817b9c6d90814ff9c06228d3a07d64335b1d9b01a233456fc304e34f7c0e', // block 373499
|
||||||
variables: [
|
variables: [
|
||||||
{
|
{
|
||||||
contract: contractPrincipalCV(
|
contract: contractPrincipalCV(
|
||||||
'SP1Z92MPDQEWZXW36VX71Q25HKF5K2EPCJ304F275',
|
'SP1Z92MPDQEWZXW36VX71Q25HKF5K2EPCJ304F275',
|
||||||
'liquidity-token-v5kbe3oqvac'
|
'liquidity-token-v5kbe3oqvac'
|
||||||
|
),
|
||||||
|
variableName: 'balance-x',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
contract: contractPrincipalCV(
|
||||||
|
'SP1Z92MPDQEWZXW36VX71Q25HKF5K2EPCJ304F275',
|
||||||
|
'liquidity-token-v5kbe3oqvac'
|
||||||
|
),
|
||||||
|
variableName: 'balance-y',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
contract: contractPrincipalCV(
|
||||||
|
'SP1Z92MPDQEWZXW36VX71Q25HKF5K2EPCJ304F275',
|
||||||
|
'liquidity-token-v5kbe3oqvac'
|
||||||
|
),
|
||||||
|
variableName: 'something-not-exists',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
maps: [
|
||||||
|
{
|
||||||
|
contract: contractPrincipalCV(
|
||||||
|
'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM',
|
||||||
|
'amm-registry-v2-01'
|
||||||
|
),
|
||||||
|
mapName: 'pools-data-map',
|
||||||
|
mapKey: tupleCV({
|
||||||
|
'token-x': principalCV(
|
||||||
|
'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wstx-v2'
|
||||||
),
|
),
|
||||||
variableName: 'balance-x',
|
'token-y': principalCV(
|
||||||
},
|
'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-alex'
|
||||||
{
|
|
||||||
contract: contractPrincipalCV(
|
|
||||||
'SP1Z92MPDQEWZXW36VX71Q25HKF5K2EPCJ304F275',
|
|
||||||
'liquidity-token-v5kbe3oqvac'
|
|
||||||
),
|
),
|
||||||
variableName: 'balance-y',
|
factor: uintCV(1e8),
|
||||||
},
|
}),
|
||||||
{
|
},
|
||||||
contract: contractPrincipalCV(
|
{
|
||||||
'SP1Z92MPDQEWZXW36VX71Q25HKF5K2EPCJ304F275',
|
contract: contractPrincipalCV(
|
||||||
'liquidity-token-v5kbe3oqvac'
|
'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1',
|
||||||
),
|
'univ2-core'
|
||||||
variableName: 'something-not-exists',
|
),
|
||||||
},
|
mapName: 'pools',
|
||||||
],
|
mapKey: uintCV(1),
|
||||||
maps: [
|
},
|
||||||
{
|
{
|
||||||
contract: contractPrincipalCV(
|
contract: contractPrincipalCV(
|
||||||
'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM',
|
'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1',
|
||||||
'amm-registry-v2-01'
|
'contract-not-exists'
|
||||||
),
|
),
|
||||||
mapName: 'pools-data-map',
|
mapName: 'pools',
|
||||||
mapKey: tupleCV({
|
mapKey: uintCV(1),
|
||||||
'token-x': principalCV(
|
},
|
||||||
'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-wstx-v2'
|
],
|
||||||
),
|
});
|
||||||
'token-y': principalCV(
|
console.log(rs);
|
||||||
'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-alex'
|
}
|
||||||
),
|
|
||||||
factor: uintCV(1e8),
|
async function main() {
|
||||||
}),
|
await batchReadsExample();
|
||||||
},
|
// await batchReadonlyExample();
|
||||||
{
|
}
|
||||||
contract: contractPrincipalCV(
|
|
||||||
'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1',
|
if (require.main === module) {
|
||||||
'univ2-core'
|
main().catch(console.error);
|
||||||
),
|
}
|
||||||
mapName: 'pools',
|
|
||||||
mapKey: uintCV(1),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
contract: contractPrincipalCV(
|
|
||||||
'SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1',
|
|
||||||
'contract-not-exists'
|
|
||||||
),
|
|
||||||
mapName: 'pools',
|
|
||||||
mapKey: uintCV(1),
|
|
||||||
},
|
|
||||||
],
|
|
||||||
});
|
|
||||||
console.log(rs);
|
|
||||||
}
|
|
||||||
|
|
||||||
async function batchReadonlyExample() {
|
|
||||||
const rs = await batchReadonly({
|
|
||||||
index_block_hash:
|
|
||||||
'ce04817b9c6d90814ff9c06228d3a07d64335b1d9b01a233456fc304e34f7c0e',
|
|
||||||
readonly: [
|
|
||||||
{
|
|
||||||
contract: contractPrincipalCV(
|
|
||||||
'SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4',
|
|
||||||
'sbtc-token'
|
|
||||||
),
|
|
||||||
functionName: 'get-total-supply',
|
|
||||||
functionArgs: [],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
contract: contractPrincipalCV(
|
|
||||||
'SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4',
|
|
||||||
'sbtc-token'
|
|
||||||
),
|
|
||||||
functionName: 'get-balance',
|
|
||||||
functionArgs: [
|
|
||||||
principalCV('SP1CT7J2RWBZD62QAX36A2PQ3HKH5NFDGVHB8J34V'),
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
contract: contractPrincipalCV(
|
|
||||||
'SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4',
|
|
||||||
'sbtc-token'
|
|
||||||
),
|
|
||||||
functionName: 'function-not-exists',
|
|
||||||
functionArgs: [],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
contract: contractPrincipalCV(
|
|
||||||
'SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4',
|
|
||||||
'sbtc-token'
|
|
||||||
),
|
|
||||||
functionName: 'get-balance',
|
|
||||||
functionArgs: [stringAsciiCV('invalid-args')],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
});
|
|
||||||
console.log(rs);
|
|
||||||
}
|
|
||||||
|
|
||||||
async function main() {
|
|
||||||
await batchReadsExample();
|
|
||||||
// await batchReadonlyExample();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (require.main === module) {
|
|
||||||
main().catch(console.error);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
"module": "esnext",
|
"module": "esnext",
|
||||||
"allowImportingTsExtensions": false,
|
"allowImportingTsExtensions": false,
|
||||||
"moduleResolution": "node",
|
"moduleResolution": "node",
|
||||||
"esModuleInterop": true
|
"esModuleInterop": true,
|
||||||
|
"noEmit": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user