Sound of AVM 发布 v0.9.0,在浏览器里为 Algorand 的实时内存池谱曲
开源 Algorand 内存池声音化工具 Sound of AVM 发布 v0.9.0:以无需密钥的 Nodely gossip 取代轮询,新增多款可视化效果,预设可作为 ARC-3 NFT 铸造到链上。
一条可以聆听的网络
Algorand 每隔几秒就完成一个区块的结算,而每个区块都会为网络刚刚发生的事盖上封条——一笔稳定币支付、一次资产转移、一次智能合约调用。大多数人是在区块浏览器上,看着不断滚动的哈希表格来观察这些流量。Sound of AVM1 则选择用听的:这款浏览器合成器把链上实时活动变成音乐,网络繁忙时听起来像一间热闹的房间,冷清时则近乎寂静,只偶尔响起一个音符。项目自己的说明是最贴切的概括:“没有任何预录内容;只要你听到一个音符,就说明一笔交易刚刚发生。”
这款应用读取的是内存池——等待被打包进下一个区块的未确认交易集合——而不是历史区块数据,因此它能在交易传播途中、也就是结算之前就听到它们。每一件乐器都是一张合成器卡片,把一条规则(它关心哪些交易)与一个声音(符合条件的交易到来时该播放什么)配对在一起。2026 年 7 月 26 日,项目发布了 v0.9.0,这是它首个带版本号的正式版本;应用内指南提供了最快捷的上手路径:加载一个预设,按下 Start,此后在页面的任何位置都能用空格键暂停和恢复音乐。
每种交易类型一个合成器
合成器要做的第一个选择,是它监听哪一类交易。菜单上列出了 Algorand 的全部交易类型——pay、axfer、appl、acfg、keyreg、afrz、stpf、hb、group、block——每一种都能按子类型进一步收窄。pay 合成器可以按金额、发送方或接收方过滤;axfer 合成器还能加上资产 ID、opt-in、opt-out 和追回;appl 合成器则可以盯住某个特定应用。过滤器正是这件工具最见功力之处:
| 概念 | 现实中的含义 |
|---|---|
| pay——普通 ALGO 支付 | 设定金额区间,人声就变成了巨鲸探测器:只有当某笔支付超过比如 5,000 ALGO 时,才会响起一个低沉的声音。 |
| axfer——资产转移 | 资产输入框支持按名称和 ID 搜索,所以只要输入“USDC”,就能让某个声音只在该代币发生流动时响起。 |
| appl——智能合约调用 | 无需翻看交易日志,就能追踪单个应用,或它的调用所涉及的外部资产与账户。 |
| group——交易组 | 把合成器与 group 配对,就能捕捉到代币在 DEX 上被兑换的瞬间,因为一笔兑换是一个原子交易组,而不是单独一笔交易。 |
| block——每个区块一个音符 | 节奏组:每完成一个经过认证的轮次就发一次声,为其他所有声音提供稳定的节拍。 |
剩下的就是音色设计。人声之下运行着五种 Tone.js2 引擎:用于短促打击音的单声部合成器;自带滤波器、负责低音线的单音合成器;用于叠加铺底音色的复音合成器;以及制造金属质感或钟声般音色的 AM 和 FM 变体。八步音序器靠交易推进,而不是靠时钟,所以乐句的速度就是网络的速度:链上越忙,乐句越快。指南把音高当作作曲手段:“把最繁忙的交易类型放低,把最稀有的放高,低音和旋律就自然有了。”当某个合成器被触发的速度快过它的上限时,由 Mode 决定结果:Single 会丢弃溢出部分,Aggr 则把这一串爆发合并成一次更长、更响的击发。
从轮询到实时数据流
项目始于 Algorand Dev Retreat at Home,最初只是一个用纯 HTML 和 JavaScript 写的原型,灵感来自一个观察:链上的交易流本身就是一种节奏。第一版每 50 毫秒通过公共 AlgoNode API 或个人节点轮询一次待处理交易,把结果喂给 Tone.js,并请用户对免费 API 手下留情。接入个人节点意味着要在节点配置里打开一个 CORS 头。它能用,但有代价:调度精度受轮询间隔摆布,而 API 的速率限制也让它更像玩具,而非监控工具。
v0.9.0 替换了整个数据层。应用不再轮询,而是与 Nodely3 的主网 gossip 网关建立 WebSocket 连接,在中继节点广播交易时于浏览器内解码这些已签名交易。代码里明确说明了这一取舍:“每一笔交易都在传播途中抵达,带着它真实的到达时间——没有轮询,没有计数比对,也不需要令牌。”
| 概念 | 现实中的含义 |
|---|---|
| 原型阶段:每 50 毫秒轮询一次公共 API | 音符的到达时间被量化到轮询间隔,项目估算免费额度的速率限制使连续监听最多只能维持约 5 小时。 |
| v0.9.0:无需密钥的 Nodely gossip WebSocket | 交易传播到中继节点的同时音符就会响起,无需 API 密钥,也不需要本地节点。 |
| 原子组缓冲(约 300 毫秒) | 交易组的各个成员被收集起来,作为单个事件一次性送出,于是一笔兑换听起来是一个整体动作,而不是一连串卡顿。 |
最后这一点对听众的意义不亚于合成本身:客户端在浏览器里实现了 Algorand 中继线路协议的一部分,订阅交易消息标签,解码其 msgpack 负载,并跨两代记录最近见过的交易,这样中继节点的重复广播就不会让同一个音符触发两次。
可以在链上铸造的预设
布局是可以随身携带的。一个预设就是一个 JSON 文件,描述所有合成器及其设置,可以保存在本地,也可以导出分享;v0.9.0 还会把预设和已铸造的预设代币编码进地址栏,因此一条 URL 就足以把一个声音传递出去。钱包按钮的存在只有一个理由:把预设作为“NFPreset”铸造到链上。
这套机制值得细说,因为它直接调用了 Algorand 的原生代币机制。Algorand 无需智能合约即可发行资产,也就是 ASA,而其中 NFT 所遵循的约定是 ARC-3:资产的 URL 指向托管在 IPFS 上的 JSON 元数据,并带有“#arc3”后缀。一个 NFPreset 就是一个 ASA,它的 IPFS 元数据把预设以压缩后的 base64 字符串嵌入到自身属性中。加载一个 NFPreset,就是从索引器取回该资产的元数据,从 IPFS 取回文件,再把它解码回一个个声音。路线图把这次铸造描述为一笔由钱包签名的资产创建交易,而用于交易 NFPreset 的市场则被推迟到未来的 v2。
这个格式已经在链上实际跑过了。资产“block anxiety”(单位名 NFP,总供应量 1)于 2025 年 8 月 5 日创建,创建地址由 hampelman.algo 资助——这是开发者的链上标识——与项目自己路线图文档中的示例元数据一致;此后同一预设又被铸造了两次,分别标记为 NFP2 和 NFP23。这个设定安静地透着古怪,也相当实用:这里的 NFT 不是一张图片,而是一套可演奏的乐器配置,交易它就等于在交易音色设计。
小巧、开放,音准依旧
这次带版本号的发布还带来了一组把同一批数据画成图像的视觉化效果——Territory,其中每笔交易都会占据自己的一块屏幕,“把原本站稳的地盘挤到一边”,此外还有 Kintsugi Ledger 和 Music Box,以及更早的 Score 和 Loom。用于把输出录制为音频的 Record 按钮目前还没有接上。
项目对自己的局限并不讳言。最初的 README 写道,“交易到来的速度对 Tone.js 来说太快,无法为每一笔交易生成唯一的时间戳”——这正是聚合模式存在的原因——此外代码库没有经过正式审计,这对这一规模的开源工具来说是常态。它的影响力还很有限:Algorand Developer Retreat 组织下的原始仓库有 8 颗星,开发者个人账号下积极维护的那个副本有 1 颗星,2026 年 7 月下旬只有一家 Algorand 新闻聚合网站发过一篇简短报道,讲的还是旧的轮询架构——这说明此次改版尚未找到自己的受众。
这类项目之所以存在,只因为一场黑客松让一位开发者得以追逐一个古怪的想法:区块链上的活动有一种值得倾听的节奏。代码依然开放,维护者从原型阶段起就一直欢迎各种建议。对于任何曾以不太对劲的方式被区块浏览器催眠的人来说,聆听网络——巨鲸对应低音,稀有事件对应旋律,一个区块合成器负责打拍子——是一种真正全新的观察链上运作的方式。
来源
来源
- 1Sound of AVM soundofavm.online↩
- 2Tone.js tonejs.github.io↩
- 3Nodely nodely.io↩
- 4The Sound of AVM——Algorand Developer Retreat 组织(原型) github.com↩
- 5The Sound of AVM——活跃开发仓库 github.com↩
- 6Verifiably Random:S2:E8——走进 Algorand Dev Retreat 的开源编码 algorand.co↩
- 7@algorand.pxke.me 的帖子——Bluesky bsky.app↩
- 8RelayUrl 路径与查询问题 · Issue #735 · mikedilger/gossip github.com↩
- 9QuickStart | Nodely nodely.io↩