返回 Skill 列表
extension
分类: 开发与工程无需 API Key

algorand-typescript

Algorand TypeScript (PuyaTs) 智能合约的语法规则和模式。在编写TypeScript合约代码、遇到Puya编译器错误、询问关于AVM类型或值语义、需要关于存储模式(如GlobalState, BoxMap)的指导,或者询问关于clone()、数组或内部交易时使用。强烈的触发词包括“Puya编译器错误”、“我如何使用uint64?”、“clone()是做什么的?”、“BoxMap无法工作”、“AVM类型错误”、“GlobalState没有更新”。

person作者: jakexiaohubgithub

Algorand TypeScript

Write, test, deploy, and troubleshoot Algorand TypeScript smart contracts.

Quick Start

algokit init -n my-project -t typescript --answer preset_name production --defaults
cd my-project
algokit project run build    # Compile .algo.ts → ARC-56 + typed client
algokit project run test     # Run Vitest tests
algokit localnet start       # Start local network
algokit project deploy localnet  # Deploy

Critical Rules

  • File extension: Contract files MUST use .algo.ts
  • NEVER use number: Use uint64 and Uint64() for all numeric values in contracts
  • Always clone() storage reads/writes: clone(this.box(k).value) — see syntax-types.md decision table
  • fee: Uint64(0) on all inner transactions: Prevents app account drain; caller covers via fee pooling
  • Fund app account before box operations: Box storage requires MBR funding
  • NEVER use PyTEAL, Beaker, or raw TEAL: Only use Algorand TypeScript (PuyaTs)
  • Always search docs first: Use Kapa MCP or web search before writing contract code
  • Always include tests: Use algorandFixture for E2E integration tests
  • Understand AVM constraints: See algorand-core skill for the foundational mental model

Reference Guide

Read the specific reference file for your task. Each file is self-contained.

Contract Syntax

  • syntax-types.md — AVM types (uint64, bytes, bigint), number rules, clone(), value semantics, union type workarounds, array rules
  • syntax-storage.mdGlobalState, LocalState, BoxMap, Box, MBR funding patterns, @contract decorator for dynamic keys, choosing storage types
  • syntax-methods.md — Method visibility (public/private), @abimethod/@readonly decorators, transaction-type parameters, lifecycle methods, emit() events, assertMatch with comparison operators
  • syntax-transactions.mdgtxn typed access, ABI method transaction parameters, itxn inner transactions, itxnCompose/itxn.submitGroup, fee pooling, asset creation

Testing

  • testing.md — E2E test examples (HelloWorld, BoxStorage, LocalStorage, StructInBox) + unit testing with TestExecutionContext

Deployment and Client Interaction

  • deploy-interaction.md — Factory deployment, typed client calls, newGroup() chaining, .simulate(), struct-as-tuple returns, box references, populateAppCallResources, coverAppCallInnerTransactionFees, amount helpers, .addr.toString() gotcha

Migration

Troubleshooting

  • errors.md — Contract errors (assert, opcode budget, box MBR, inner txn) + transaction errors (overspend, asset not opted in, account not found)

Canonical Example Repos

Search these repositories for real-world code examples:

  • algorandfoundation/devportal-code-examples — Primary examples in projects/typescript-examples/contracts/ (HelloWorld, BoxStorage, LocalStorage, StructInBox, etc.)
  • algorandfoundation/puya-ts — Compiler examples in examples/ (hello_world_arc4, voting, amm)
  • algorandfoundation/algokit-typescript-template — AlgoKit project template
  • algorandfoundation/algokit-utils-ts — AlgoKit Utils TypeScript SDK

Cross-References

  • New to Algorand? Read algorand-core skill first for AVM mental model
  • Project scaffolding and CLI: See algorand-project-setup skill
  • React frontends: See algorand-frontend skill