Algorand 的 Smart ASA v2 将代币冻结移至持有者无法清除的位置
ARC-20 将 Algorand 代币的规则写入智能合约。其 v2.0.0 参考实现于 10 月 23 日发布,将账户冻结保存在合约拥有的 box 中,使持有者的锁定余额降至 0.1 ALGO。发布说明称代码未经审计且不可升级。

代币甚至可以在持有者尚未拥有一个单位之前就被冻结,而且冻结状态在持有者离开后依然保留。这正是 Smart ASA v2 带来的变化——这是 Algorand ARC-20 标准重建后的参考实现,于 10 月 23 日发布。
中间有合约的代币
ASA 是 Algorand 的原生代币。它通过一笔交易创建,并通过选择加入来持有。其名称、单位、小数位数和最大供应量在创建时即固定。它的四个角色位于地址上,且没有钩子让发行者自己的规则在两个持有者之间的转账中运行。
过去执行规则的途径是冻结资产并通过回收转移单位,这在持有者看来就像本应转账却遭到扣押。ARC-20 保留原生代币,并将四个角色交给合约。资产默认以冻结状态创建,因此单位只能通过合约到达持有者,且每次移动都会先经过检查。
这使得 ARC-20 成为 ARC-2001 的镜像——后者是 Algorand 的另一种合约代币标准,其中代币就是合约,行为类似带有余额和授权的以太坊代币。ARC-20 保持资产原生,因此钱包和交易所像持有任何其他代币一样持有它,并将规则手册置于其上。
版本 2 改变了什么
账户冻结从持有者自己的存储中移出,放入合约拥有的空 box 中。在旧设计中,标志存在于账户的本地状态中,持有者可以清除它。规范2现在指出,box 中的状态不能被持有者删除,且持有者完全无需选择加入合约。他们的锁定余额从 0.2285 降至 0.13 ALGO。
一些限制仍然存在。冻结可以在地址持有任何东西之前就施加于该地址,这正是制裁名单所需要的,并且它在持有者离开并返回后依然有效。对账户的首次冻结会创建一个 box。它由 0.01574 ALGO 的押金资助,该押金在冻结调用之前支付给合约,并在账户恢复默认状态时退还。
这换来的是狭窄而真实的东西:发行者可以对不合作的持有者执行规则,而供应上限和支付逻辑位于任何人都可以读取的公共状态中。这是否是一个特性,取决于你站在冻结的哪一边。
其余是有牙齿的整理工作。三天前发布的上一版本将资产和账户参数编码为普通整数和地址,因此“其方法选择器与 ARC-20 接口不匹配5”。版本 2 使用标准自己的类型,并要求客户端重新生成。失败的调用现在记录 ARC-65 错误代码,因此钱包可以指出原因,而不是显示断言消息。两个扩展点让发行者可以向普通转账添加检查并定义流通供应量,仓库中有一个带上限的示例。
冻结是分层的。全局冻结停止转账,账户冻结停止一个持有者;发布说明称回收永远不会被两者阻止,且每个地址持有的角色各自按其规则行事。
使用它需要什么
部署一个意味着部署一个合约并创建一个资产,然后为每个操作支付手续费。发布的迁移清单将发行、赎回、回收、普通转账和冻结重置定价为最低手续费的两倍。销毁代币的成本是三倍。每个被冻结的账户还会在合约中锁定 0.01576 ALGO 的押金,在重置时退还。
开发路线是 AlgoKit、Poetry 和 Docker 中的本地网络,全部来自仓库7。没有托管服务,也无需注册任何东西。
普通用户也没有任何可以打开的东西。发布的 TestNet 部分描述了五个标准的演示,但没有指定任何应用或资产,这与三天前上一版本的说明不同。开发者可以阅读代码并在本地部署;寻找实时版本 2 代币的读者无处可去。
更完整的变体依赖于 ARC-89——元数据注册表,其自身的采用记录将其列为已在 TestNet 部署并等待 MainNet 部署。该注册表的最新发布自称是 MainNet 部署的第一个候选版本。在它落地之前,更完整的版本仍是 TestNet 工作。
谁构建了它
Cosimo Bassi(网名 cusma8)编写了 ARC-20 规范。他维护此实现并编写了它所依赖的元数据注册表。仓库位于 Algorand 基金会下,其发布列表将上一版本列为 10 月 20 日,此版本为 10 月 23 日。在发布日,他向发行者、钱包和浏览器征求反馈。
早期在 algorandlabs/smart-asa9 的实现从 2022 年起做同样的工作。它通过将合约编号写入代币的 URL 字段来将代币绑定到其合约,并将每个持有者的冻结标志保存在本地状态中。版本 2 取代了这种安排,而实时代币仍然遵循的是旧安排。
唯一的实时用户
ARC-20 的采用文件仅列出一个项目 enel-ebitts,就绪状态标记为低,钱包、浏览器和工具均为空。ebitts 是 Enel 和 Conio 的服务,向意大利家庭出售与两个可再生能源电站产出挂钩的代币,并将该产出抵扣电费;PXke 报道了其 10 月的启动。
每个电站都有以其命名的代币:ebitts Barile Venosa,代码 EBT-BVEN,以及 ebitts Piani della Marina,代码 EBT-PDM。10 两者自 2026 年 5 月起就已在 Algorand 主网上。11 风电站代币的四个角色位于其自身合约拥有的账户上,而非个人密钥,因此每次移动都通过该合约运行。在合约内部,这四个角色被分配给一个钱包。这些代币在其 URL 字段中携带较旧的绑定。它们的合约还指向一个支付应用、一个奖励代币和一个身份应用,而此版本的合约则没有。它们响应与自定义构建相同的接口,而非版本 2 的副本。
它们是活的。风电站代币的合约自 5 月 4 日以来已向大约 37012 个钱包发送了约 1,83013 笔转账,其中 47514 笔发生在截至 10 月 26 日的三十天内,全部来自单一地址,因此这些是合约的分发而非持有者之间的交易。两种代币均无交易。
两种供应量的几乎全部仍在一个钱包中。它创建了两个合约。每个合约的存储状态将其命名为管理者、储备、冻结和回收。它持有风电站代币约 97.715% 和太阳能代币约 99.816%。
采用文件的证据链接打开了同一家族中的另一个代币,其合约名为 REWARD 并存储两位小数,而非任一电站代币。记录显示该家族存在;它本身并不显示家庭持有的单位符合规范。
可能出什么问题
发布说明关于自身说了两件事。它告诉部署者启动新合约,因为上一版本的应用无法就地升级。而且代码未经审计。
其余依赖于发行者,规范也如此说明。规则仅在代币保持默认冻结、其回收地址留在合约上、且该合约无法更新、删除或重新密钥时才成立。其修订文本指出了两条出路。资产的冻结地址可以解冻持有量,其管理者地址可以更改回收,除非任一被设置为合约或留空。
持有者可能被自己的钱包误导。底层资产始终报告零小数和占位最大供应量,无论发行者配置如何,而不理解 ARC-20 的钱包会显示这些而非真实配置。
文书也在漂移。仓库在发布日将其元数据规则从必须不可变改为应该不可变,而开发者门户的副本仍说必须,并且仍描述冻结状态位于持有者的本地存储中。任何查看门户的人读到的都是此版本所取代的版本。
对公告的一条回复直白地问智能 ASA 的用例会是什么。记录中唯一的工作示例是意大利的电费账单,而它运行在较早的构建上。
来源
- Release v2.0.0 · algorandfoundation/arc20 · GitHub17
- ARCs/ARCs/arc-0020.md at main · algorandfoundation/ARCs · GitHub2
- github.com7
- Releases · algorandfoundation/arc2018
- Algorand Smart Contract Token Specification | Algorand Developer Portal1
- GitHub - algorandlabs/smart-asa: Smart ASA reference implementation · GitHub9
- raw.githubusercontent.com19
本文已核查 11 个数字。 其中 3 项直接从链上读取。查看全部核查
来源
- 1ARC-200 dev.algorand.co↩
- 2规范 github.com↩
- 7仓库 github.com↩
- 8cusma github.com↩
- 9algorandlabs/smart-asa github.com↩
- 17Release v2.0.0 · algorandfoundation/arc20 · GitHub github.com↩
- 18Releases · algorandfoundation/arc20 github.com↩
- 19raw.githubusercontent.com/algorandfoundation/arc20/main/README.md raw.githubusercontent.com↩