← Orbit Plot
orbit · layer 0

Ink Field

一件确定性生成艺术作品。代码和种子决定图像,图像本身不在链上。 同一份代码加同一个种子,在任何机器上都必须得到同一张图——这个页面就是为了让人验证这一点。

code_hash sha256:0fa1d9271a4dbd98… bytes 5,717 runtime js-deterministic supply 64
seed-0slate · heavy · yes
seed-1slate · fine · yes
seed-2bone · fine · yes
seed-3moss · heavy · no
seed-4slate · medium · yes
seed-5clay · medium · no
链上 · Fractal Bitcoin 测试网 4,780 sats

作品和 manifest 各一笔铭文,已确认在区块 1,587,568。字节与本地构建一致;inscribe/audit.mjs 不读本地记录,直接从交易里重解信封、重算 taproot 承诺与 BIP341 签名,共 16 项检查全部通过。

铭文txid字节确认
generator14a6387e…a4d1d65,717区块 1,587,568
manifestbc46bea3…ca359c607区块 1,587,573
generator · genart 命名空间d46a8d4d…e314ef5,721区块 1,586,885
manifest · start_height 0106d4c2e…b404ad600区块 1,586,885
manifest · start_height 1,587,60053c7a679…646ee5606区块 1,587,529

下面几笔是改名前的铭文:它们各自成立、字节没变,只是不再对应本仓库的当前构建。链上铭文改不了,所以留着——这也是为什么「wire 名要一次定死」不是洁癖。

测试网的 ord 索引停在 1,416,517(主链 1,586,885,落后 170,368 块),官方的 /content/<id> 返回 HTTP 500。确认没有改变这一点——内容在链上,不等于内容可访问。

所以本站自己实现了读的一侧:/content/<txid> 不查索引库,直接取交易、从 witness 里解出信封,返回铭刻时的字节。点开就是作品本身,也可以直接喂给查看器。

第二实现 · 跨运行时一致性 107 / 107

同一份输出,在两套完全不同的运行时里逐字节复现。conformance/port/ink_field.py 只用 Python 标准库,与 JS 版不共享一行代码——它把 Math.imul 的 32 位回绕、 >>> 的逻辑右移、Math.round 的 half-up、数字转字符串的最短往返, 逐条重写了一遍。

层向量钉住什么
sha2566先证明哈希是对的,否则下面的种子全是噪声
round217舍入语义:half-up,不是 toFixed,也不是 Python 的 round
num2str11数字 → 字符串:1000 不是 1000.0
state23seed → PRNG 的四个 uint32
seed2718 组派生 + 9 组必须被拒(大小写、前导零、越界)
artwork23seed → sha256(SVG) 与 traits

11 个典型移植错误全部被抓。第一轮有 1 个存活——23 个作品向量都放过了 half-up 换成 banker's rounding,因为没有种子恰好落在 .5 上。原语级向量就是这么来的。

种子 · 承诺一个还不存在的区块 block 1,586,891

用交易哈希做种子在比特币上是可以 grind 的:txid 由输入输出决定,买家换个找零地址就得到全新的 txid, 离线试几千次、挑一个自己喜欢的,成本接近零。所以种子取自开售后第 6 个区块的哈希—— 铸造时它还不存在,连艺术家也预筛不了。代价是铸造后有约三分钟的「未揭示」窗口,那是设计意图。

公式只有一行,所以它必须精确到字节,否则两套实现会各自「合理」地算出不同的图。 下面用的是 v1 那笔样例铭文(种子区块 1,586,891 已出),所以能当场算出图; 当前可铸造的 v2 系列种子区块是 1,587,606,它还没出,所以那 64 个 token 现在全是「未揭示」——这正是 §7.5 要求渲染方如实显示的状态。

seed_input · ASCII0000000043d6291b002339fc979b6a89bb9dfcde52727ab83f0c66d4f19da697:106d4c2ebf65f28cf4a6e59c0b6740d44e58f8370f91676db3df9aef6ab404adi0:0
seed · SHA-256d414f951d8d2918851044d4561b67b63783be2843e56ee156c23624bd167a1ec
改这个数字:字符串变了,种子变了,图也变了。三者都在这个页面里算出来。
这张图由 work.html 画——与链上那 5,717 字节完全相同的那份。
tokenseed(前 24 位)
0d414f951d8d2918851044d45…
114d897fdd387954464118afd…
2981d60224cc82abb75d5177a…
63ddcad67c9f2580a7a06ec47d…

区块 1,586,891 的哈希是 0000000043d6291b002339fc979b6a89bb9dfcde52727ab83f0c66d4f19da697,可以在 测试网浏览器上核对; 跑 node scripts/seed.mjs demo 会连上链、重取一次这个哈希再算。

查看器从内容 URL 取回字节、在沙箱 iframe 里渲染,并用 crypto.subtle 重算哈希做完整性校验。 换一个种子,或者把内容地址换成链上的 /content/<id>,其余逻辑不变。
名字:分形图像算的是「一个点在迭代下跑了多远」,那条轨迹叫轨道;生成艺术里,种子是初值,作品是轨道。 orbit 同时是这两件事。
三层名字:Orbit Plot 是这个站,orbit 是协议,Ink Field 是作品。