// AUTO-GENERATED by scaffold-stacks. DO NOT EDIT.
// Re-run `stacksdapp generate` to update.
import { request } from '@stacks/connect';
import { fetchCallReadOnlyFunction, cvToValue, ClarityValue } from '@stacks/transactions';
import { getReadOnlyNetwork, scaffoldConfig } from '../scaffold.config';
import { callDevnetContract, getDevnetSenderAddress } from '../lib/devnet';
let _deployments: Record<string, any> = { contracts: {} };
try { _deployments = require('./deployments.json'); } catch {}
function getContractId(name: string): { address: string; contractName: string } {
const contractId: string = _deployments?.contracts?.[name]?.contract_id ?? '';
if (!contractId) {
console.warn(`[scaffold-stacks] "${name}" not deployed. Run stacksdapp deploy.`);
return { address: '', contractName: name };
}
const dot = contractId.lastIndexOf('.');
return { address: contractId.slice(0, dot), contractName: contractId.slice(dot + 1) };
}
{% for contract in contracts %}
// ── {{ contract.contract_name }} ──────────────────────
{% for fn in contract.functions %}
{% if fn.access == "public" %}
export async function {{ contract.contract_name | camel }}_{{ fn.name | camel }}(
functionArgs: ClarityValue[] = [],
postConditions: any[] = [],
): Promise<any> {
const { address, contractName } = getContractId('{{ contract.contract_name }}');
if (!address) return undefined;
if (scaffoldConfig.isDevnet) {
return callDevnetContract({
contract: `${address}.${contractName}`,
functionName: '{{ fn.name }}',
functionArgs,
postConditions,
});
}
// v8: request() accepts ClarityValue[] directly — no serialization needed
return request('stx_callContract', {
contract: `${address}.${contractName}`,
functionName: '{{ fn.name }}',
functionArgs,
postConditions,
postConditionMode : 'allow',
network: scaffoldConfig.targetNetwork,
});
}
{% endif %}
{% if fn.access == "read_only" %}
export async function {{ contract.contract_name | camel }}_{{ fn.name | camel }}(
functionArgs: ClarityValue[] = [],
senderAddress?: string
): Promise<unknown> {
const { address, contractName } = getContractId('{{ contract.contract_name }}');
if (!address) return null;
const result = await fetchCallReadOnlyFunction({
contractAddress: address,
contractName,
functionName: '{{ fn.name }}',
functionArgs,
network: getReadOnlyNetwork(),
senderAddress: senderAddress ?? getDevnetSenderAddress() ?? address,
});
return cvToValue(result);
}
{% endif %}
{% endfor %}
{% endfor %}