implement-arc-standards implement-arc-standards

这项技能涵盖了Algorand智能合约开发中最核心的ARC标准,包括ARC-4 ABI编码、ARC-22只读方法、ARC-28事件日志规范、ARC-32与ARC-56应用规范的使用,以及如何生成和使用应用规范文件。

智能合约 0 次安装 0 次浏览 更新于 3/4/2026

实施ARC标准

ARC(Algorand请求评论)标准定义了Algorand上的编码、方法调用和应用规范。这项技能涵盖了智能合约开发中最核心的ARC。

概览 / 核心工作流程

  1. 确定适用于您用例的ARC
  2. 按照ARC约定实现合约
  3. 生成应用规范文件
  4. 使用应用规范构建类型化客户端

如何进行

智能合约开发的关键ARC

ARC 目的 何时使用
ARC-4 应用程序二进制接口(ABI) 所有智能合约方法调用、类型编码
ARC-22 只读方法注释 不修改状态的方法
ARC-28 事件日志规范 发出结构化事件
ARC-32 应用规范(已弃用) 旧版应用规范(使用ARC-56代替)
ARC-56 扩展应用描述 包含完整合约元数据的现代应用规范

ARC-4:基础

ARC-4定义了如何为Algorand智能合约编码方法调用和数据类型。

方法签名

方法签名唯一标识一个方法:name(arg_types)return_type

# 方法签名:add(uint64,uint64)uint128
# 方法选择器:SHA-512/256哈希的前4个字节

from algopy import ARC4Contract, arc4

class Calculator(ARC4Contract):
    @arc4.abimethod
    def add(self, a: arc4.UInt64, b: arc4.UInt64) -> arc4.UInt128:
        return arc4.UInt128(a.native + b.native)
import { Contract } from '@algorandfoundation/algorand-typescript'
import { abimethod, UInt64, UInt128 } from '@algorandfoundation/algorand-typescript/arc4'

class Calculator extends Contract {
  @abimethod()
  add(a: UInt64, b: UInt64): UInt128 {
    return new UInt128(a.native + b.native)
  }
}

方法选择器计算

方法签名:add(uint64,uint64)uint128
SHA-512/256哈希:8aa3b61f0f1965c3a1cbfa91d46b24e54c67270184ff89dc114e877b1753254a
方法选择器:8aa3b61f(前4个字节)

ARC-32与ARC-56

特性 ARC-32 ARC-56
状态模式
方法描述
命名结构体
默认参数值 部分 全部
源映射
事件(ARC-28)
状态 已弃用 当前

对于新项目使用ARC-56。ARC-32为向后兼容而维护。

生成应用规范

应用规范在编译时自动生成:

# 生成ContractName.arc32.json和ContractName.arc56.json
algokit project run build

使用应用规范与客户端

// TypeScript与AlgoKit Utils
import { algorandClient } from '@algorandfoundation/algokit-utils'
import appSpec from './Calculator.arc56.json'

const client = algorand.client.getTypedAppClientById(CalculatorClient, {
  appId: 12345n,
  appSpec,
})

const result = await client.send.add({ args: { a: 10n, b: 20n } })
# Python与AlgoKit Utils
from algokit_utils import AlgorandClient
from artifacts.calculator_client import CalculatorClient

algorand = AlgorandClient.default_localnet()
client = algorand.client.get_typed_app_client(
    CalculatorClient,
    app_id=12345,
)

result = client.send.add(a=10, b=20)

重要规则/指南

规则 详情
ARC-4类型仅在ABI中 方法参数和返回值使用arc4.UInt64arc4.String
引用类型仅作为参数 accountassetapplication不能作为返回类型
15个参数限制 16+参数的方法将额外参数编码为参数15中的元组
返回前缀 返回值以151f7c75前缀记录
裸方法无选择器 裸调用使用NumAppArgs == 0进行路由

常见变体/边缘情况

场景 方法
从合约调用ARC-4方法 使用arc4.abi_call()进行类型安全的内部交易
创建带方法的合约 @abimethod装饰器中使用create="require"
只读方法(ARC-22) 在装饰器中使用readonly=True参数
发出事件(ARC-28) 使用arc4.emit()与类型化事件结构体

参考资料/进一步阅读