Skip to content
call-smart-contracts logo

Calling Smart Contracts

call-smart-contracts

Deploy and interact with Algorand smart contracts using AlgoKit CLI and generated TypeScript clients. Use when deploying contracts to localnet/testnet/mainnet, calling contract methods, reading global/local/box state, opting in or closing out of applications, or writing interaction scripts. Stron...

SKILL.md

Full skill instructions

Calling Smart Contracts

Deploy and interact with Algorand smart contracts using AlgoKit CLI and the generated TypeScript client.

Overview / Core Workflow

  1. Build the contract: algokit project run build
  2. Deploy using CLI: algokit project deploy localnet
  3. Write TypeScript scripts using the generated client
  4. Run scripts: npx tsx scripts/​my-script.ts

How to proceed

1. Build the Contract

algokit project run build

This compiles your contract and generates:

  • artifacts/<ContractName>/<ContractName>.arc56.json — ARC-56 app spec
  • artifacts/<ContractName>/​client.ts — Generated TypeScript client

2. Deploy to Localnet

# Start localnet if not running
algokit localnet start

# Deploy (runs deploy-config.ts)
algokit project deploy localnet

The deployment script (smart_contracts/​deploy-config.ts) handles:

  • Idempotent deployment (safe to re-run)
  • App ID tracking
  • Initial state setup

Note the App ID from the deployment output.

3. Interact Using Generated Client

Create scripts in your project to call contract methods. Example structure:

// scripts/​call-contract.ts
import { AlgorandClient } from '@algorandfoundation/​algokit-utils'
import { CounterClient } from '../​smart_contracts/​artifacts/​Counter/​client'

async function main() {
  // Connect to localnet
  const algorand = AlgorandClient.fromEnvironment()

  // Get the default account (localnet dispenser)
  const deployer = await algorand.account.fromEnvironment('DEPLOYER')

  // Create client for deployed app
  const client = algorand.client.getTypedAppClientById(CounterClient, {
    appId: BigInt(1234), // Replace with actual App ID
    sender: deployer,
  })

  // Call a method
  const result = await client.send.increment({})
  console.log('New count:', result.return)

  // Read global state
  const state = await client.state.global.getAll()
  console.log('Global state:', state)
}

main().catch(console.error)

Run with:

npx tsx scripts/​call-contract.ts

4. Common Operations

Call a Method
// No arguments
const result = await client.send.increment({})

// With arguments
const result = await client.send.setValue({ args: { value: 42n } })

// Access return value
console.log('Return:', result.return)
Read Global State
// Get all global state
const state = await client.state.global.getAll()

// Get specific key (if typed in contract)
const count = await client.state.global.count()
Read Local State
// Get local state for an address
const localState = await client.state.local(address).getAll()
Opt-In to Application
// If contract has an opt_in method
await client.send.optIn.optIn({})

// Or use bare opt-in
await client.send.optIn.bare({})
Read Box Storage
// If contract uses boxes
const boxValue = await client.state.box.myBox()
Bulk Opt-In/​Opt-Out

For batch operations across multiple assets:

// Bulk opt-in to multiple assets
const group = algorand.newGroup()
for (const assetId of assetIds) {
  group.addAssetOptIn({ sender: account.addr, assetId })
}
await group.send()

// Bulk opt-out from multiple assets
const closeGroup = algorand.newGroup()
for (const assetId of assetIds) {
  closeGroup.addAssetOptOut({ sender: account.addr, assetId, creator: creatorAddr })
}
await closeGroup.send()

Important Rules / Guidelines

  • Always build before deploying: Run algokit project run build to generate fresh artifacts
  • Use generated clients: They provide type safety and handle ABI encoding
  • Check App ID: Get it from deployment output, don't hardcode across environments
  • Use environment variables: Store sensitive data like mnemonics in .env
  • Localnet accounts: Use algorand.account.fromEnvironment('DEPLOYER') for localnet

Common Variations / Edge Cases

ScenarioApproach
Deploy to testnetalgokit project deploy testnet (requires funded account)
Custom senderCreate account with algorand.account.fromMnemonic()
Multiple contractsCreate separate client instances for each
State not foundEnsure app is deployed and App ID is correct
Method not foundRebuild contract and regenerate client

Environment Setup

For non-localnet deployments, set environment variables:

# .env file
ALGORAND_NETWORK=testnet
DEPLOYER_MNEMONIC="your twenty four word mnemonic phrase here"

References / Further Reading

More skills from majiayu000

xiaohongshu logo
majiayu000/claude-arsenal

xiaohongshu

xiaohongshu

286 148
View
agent-task-conductor logo
majiayu000/claude-skill-registry

agent-task-conductor

Conduct multi-agent task orchestration and workflow coordination.

663 1
View
conductor-setup logo
majiayu000/claude-skill-registry

conductor-setup

Initialize project with Conductor artifacts (product definition,

663 1
View
animation-designer logo
majiayu000/claude-skill-registry

animation-designer

Expert in web animations, transitions, and motion design using Framer Motion and CSS

663 1
View
diagramming logo
majiayu000/claude-skill-registry

diagramming

Creates Mermaid and ASCII diagrams for flowcharts, architecture, ERDs, state machines, mindmaps, and more. Use when user mentions diagram, flowchart, mermaid, ASCII diagram, text diagram, terminal diagram, visualize, C4, mindmap, architecture diagram, sequence diagram, ERD, or needs visual docume...

663 1
View
h3-pg logo
majiayu000/claude-skill-registry-data

h3-pg

PostgreSQL bindings for H3 hexagonal grid system. Use when working with H3 cells in Postgres, including spatial indexing, geometry/geography integration, and raster analysis.

23 1
View
conductor-development logo
majiayu000/claude-skill-registry

conductor-development

Context-Driven Development skill for projects using Conductor. Use this skill when you detect a `conductor/` directory in the project, when working on tasks defined in a `plan.md` file, or when the user asks about tracks, specs, or plans. Automatically applies TDD workflow, tracks task completion...

663 1
View
conductor-status logo
majiayu000/claude-skill-registry

conductor-status

Display project status, active tracks, and next actions

663 1
View
dockerization logo
majiayu000/claude-skill-registry

dockerization

Official Stakpak application containerization standard operating procedure, a step-by-step guidline to properly dockerize applications. This is a rule book curated by the Stakpak Team.

663 1
View

Popular AI tools

Kaiber logo
Video

Kaiber

Generate, edit, and beat-sync AI video with leading models in one workspace.

Paid
View
Vimcal logo
Productivity

Vimcal

The world's fastest calendar for remote work

Free
View

Transform Your Design with AI Designer by ImgCreator.ai

Freemium
View
Akool AI logo
Content & writing

Akool AI

Revolutionizing Video Production with AI-Powered Creativity

Paid
View

Extend an image past the frame and let AI fill the new aspect ratio.

Freemium
View
StarByFace logo
Security

StarByFace

Discover your celebrity doppelgänger with StarByFace!

Free
View
C

ChainClarity explains 700+ crypto whitepapers in plain English, with layered summaries, comparisons, research tools, alerts, and a $4.99 Pro plan.

Freemium
View
Opus Clip logo
Coding & apps

Opus Clip

Opus.ai: Revolutionize Your Web Experience

Free
View