Using Clarity Values
Some endpoints, like the read-only function contract call, require input to a serialized Clarity value. Other endpoints return serialized values that need to be deserialized.
The example shown below illustrates Clarity value usage in combination with the API.
The @stacks/transactions
library supports typed contract calls and makes response value utilization much simpler.
import {
Configuration,
SmartContractsApiInterface,
SmartContractsApi,
ReadOnlyFunctionSuccessResponse,
} from '@stacks/blockchain-api-client';
import { uintCV, UIntCV, cvToHex, hexToCV, ClarityType } from '@stacks/transactions';
(async () => {
const apiConfig: Configuration = new Configuration({
fetchApi: fetch,
// for mainnet, replace `testnet` with `mainnet`
basePath: 'https://api.testnet.hiro.so', // defaults to http://localhost:3999
});
const contractsApi: SmartContractsApiInterface = new SmartContractsApi(apiConfig);
const principal: string = 'ST000000000000000000002AMW42H';
// use most recent from: https://api.<mainnet/testnet>.hiro.so/v2/pox
const rewardCycle: UIntCV = uintCV(22);
// call a read-only function
const fnCall: ReadOnlyFunctionSuccessResponse = await contractsApi.callReadOnlyFunction({
contractAddress: principal,
contractName: 'pox',
functionName: 'is-pox-active',
readOnlyFunctionArgs: {
sender: principal,
arguments: [cvToHex(rewardCycle)],
},
});
console.log({
status: fnCall.okay,
result: fnCall.result,
representation: hexToCV(fnCall.result).type === ClarityType.BoolTrue,
});
})().catch(console.error);