生成艺术的脚本被永久放在链上,是 Art Blocks 反复强调的卖点。但另一件事容易被忽略:有些作品的脚本虽然全在链上,运行时却要从链外拉素材。Art Blocks 官方的《去中心化存储资产》文档就专门讲这类项目在 Engine Flex 合约上的写法,也顺带把“链上艺术”这四个字的边界划清楚了。
先说适用条件。文档明确,外部素材引用是 Engine Flex 的能力;标准 Flagship 和标准 Engine 项目的脚本与依赖全部在链上,这一页不适用。Flex 支持的外部依赖包括链上参数、依赖注册表的多条目、以及 IPFS、Arweave 这类去中心化存储。文档列出的典型用途是那些塞进链上效率太低的东西:作为生成底图的图像、由采样拼出的生成音频、机器学习模型(例如 TensorFlow.js 模型)、以及作为生成输入的大数据集。也就是说,脚本仍然完整地在链上跑,只是脚本运行到某一步会说“去这个地址取一张图”,取回来再参与作画。
取素材靠的是内容标识符(CID)加“偏好网关”。CID 是内容本身算出来的指纹,改一个字节指纹就变;网关则是把内容指纹翻译成可以下载的链接的那层服务。文档的写法是让项目在配置里给出 CID 与偏好网关地址,渲染时由脚本去网关拉取。这个结构决定了三件事实。其一,作品能不能重新渲染,取决于网关当时是否可用、对应的节点是否仍在提供这份内容。脚本是永恒的,网关不是。其二,CID 能保证你拿回来的字节和发行时一致——不一致就是你算错了或者被人换掉了;但 CID 不保证有任何人替你保存它。其三,如果项目引用的是可变的链接而不是内容指纹,那“永久上链”的说法就要打折。
对收藏者来说,实用的核对清单是这样几条。看这个项目是不是被标注为 Flex 的外部素材路径,官方文档把 Flex 与标准 Engine 分得很清。看素材引用给出的是 CID 还是普通网址,普通网址意味着素材可能被替换或下架。看渲染失败的常见解释:同一枚代币在某个网络环境下图是空的,先换个网关或换台设备再看,而不是先怀疑作品坏了。另外要清楚,脚本在链上意味着任何人可以复算随机结果,但复算出来的东西要能显示,仍然依赖那批外部素材的可得性。
这里还有一层容易被营销话术混淆的差别:代码上链、数据上链、显示在链上是三件事。标准项目三者接近统一;外部素材型项目把“显示”这一段搬到了链外。理解这个结构,不是为了否定这类作品,而是为了在页面加载失败时知道该找哪一段:是脚本没跑起来,还是网关没给回那一份内容。
还有一个常被问到的问题:既然素材在链外,那这算不算“假上链”?这个问题问得有点偏。合约与脚本的可得性、随机结果的可复算性,是脚本上链确定能给出的;素材的长期可得性是另一个维度,靠的是内容加存储网络这一层的机制,而不是靠发行方许愿。两者各有保障手段,也各有失效方式,把它们混成一句话评价,往往就得出“全都靠信仰”或者“全都永久”这类不准确的结论。准确的说法只能是:这部分有保证,那部分没有,中间用内容指纹和节点服务连接。
最后提醒一句,具体某个项目是否使用外部素材、用哪条网关,要以项目页与官方文档当时写明为准。合约能力和项目选择是两码事,同一个平台里两种项目可以并存。
顺带把“谁在替你保存文件”这件事说透。内容网络本身不会自动把一份 CID 一直存着,它靠的是有人愿意持续提供和钉住这份内容:发行方、平台、或者热心的第三方节点。项目上线时能打开,与几年后还能打开,中间隔的是这些人的持续意愿。这也是官方文档认真区分“把东西塞进区块”与“引用内容地址再挂网关”两条路线的原因:前者用区块空间换确定性,后者用便宜和灵活换依赖。
本文为机制说明,不构成任何投资建议。

发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。