Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | 9x 9x 9x 9x 9x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | import type { ClarityValue } from 'micro-stacks/clarity'; import { cvToHex } from 'micro-stacks/clarity'; import { StacksMainnet, StacksTestnet } from 'micro-stacks/network'; import { fetchPrivate } from 'micro-stacks/common'; import { isMainnetAddress, parseReadOnlyResponse } from './utils'; import type { ReadOnlyFunctionOptions, ReadOnlyFunctionResponse } from './types'; /** * Calls a read only function from a contract interface * * @param {ReadOnlyFunctionOptions} options - the options object * * Returns an object with a status bool (okay) and a result string that is a serialized clarity value in hex format. * * @see https://docs.micro-stacks.dev/modules/core/api/smart-contracts#fetchreadonlyfunction * @return {ClarityValue} */ export async function callReadOnlyFunction<T extends ClarityValue>( options: ReadOnlyFunctionOptions ): Promise<T> { const { contractName, contractAddress, functionName, functionArgs, senderAddress = contractAddress, tip, } = options; let network = options.network; Iif (!options.network) { try { network = isMainnetAddress(contractAddress) ? new StacksMainnet() : new StacksTestnet(); } catch (e) { console.error(e); throw new Error( '[micro-stacks] callReadOnlyFunction -> Incorrect Stacks addressed passed to contractAddress' ); } } Iif (!network) throw Error('[micro-stacks] callReadOnlyFunction -> no network defined'); let url = network.getReadOnlyFunctionCallApiUrl(contractAddress, contractName, functionName); Iif (tip) { url += `?tip=${tip}`; } const body = JSON.stringify({ sender: senderAddress, arguments: functionArgs.map(arg => (typeof arg === 'string' ? arg : cvToHex(arg))), }); const response = await fetchPrivate(url, { method: 'POST', body, headers: { 'Content-Type': 'application/json', }, }); Iif (!response.ok) { let msg = ''; try { msg = await response.text(); } catch (error) {} throw new Error( `Error calling read-only function. Response ${response.status}: ${response.statusText}. Attempted to fetch ${url} and failed with the message: "${msg}"` ); } return parseReadOnlyResponse((await response.json()) as ReadOnlyFunctionResponse) as T; } |