部分染色 / 自定义染色

描述 Atomicals 部分染色和自定义染色的实现细节及如何集成。

Atomicals ElectrumX v1.5.0 版本新增了部分染色和自定义染色的功能,这些功能在正式网区块高度 848484 开启(测试网 2584936)。

使用 v1.5.* 的 Tag 可以运行相关的索引代码。有关接口结构变动的具体说明可以查看: API 集成

部分染色

部分染色可以让 Atomicals 在部分不燃烧的场景下分配到小于 546。用户无需直接感知部分染色,其仅作为 Atomicals 转账规则的一个补充子集。以下是一些 Atomicals 不再会被直接燃烧的场景:

全染色 -> 部分染色

输入/输出
Satoshis
Atomicals

vin:0

1000

1000 ATOM

vin:1

9900

0 ATOM

vout:0

900

900 ATOM

vout:1

10000

100 ATOM

如果没有部分染色,当交易尝试分配 900 ATOM 到 vout:0 时,剩下的 100 ATOM 会被燃烧。现在部分染色会尝试将这 100 ATOM 分配给 vout:1,由于 sat_value >= atomical_value,分配可以进行。

输入/输出
Satoshis
Atomicals

vin:0

1000

1000 ATOM

vin:1

546

0 ATOM

vout:0

999

999 ATOM

vout:1

547

1 ATOM

另一个例子是分配 vin:0 中的 1 ATOM(或者 999 ATOM)到 vout:1 。此处的 vout:1 只要大于被分配的 Atomicals 资产值即可,即可以为 sats_values>=546

部分染色 -> 全染色

输入/输出
Satoshis
Atomicals

vin:0

1000

100 ATOM

vin:1

1000

900 ATOM

vout:0

1000

1000 ATOM

vout:1

1000

0 ATOM

对两个部分染色的 UTXO 进行合并会自动分配完成。


自定义染色

自定义染色通过 z 操作符将 Atomicals 分配到 546 以下。分配的资产没有小数,且仍然需要符合基本转账规则。

操作注意事项

z 操作符相对全能,但最好只在特定场景下使用。以下是一些关于 z 的注意事项:

  1. 最好仅在所有输出的 Atomicals 都小于 546 时使用,否则相对普通转账而言会造成少量的体积增加。

  2. 染色资产必须小于等于 UTXO 的 sats,否则多出的分配资产会被燃烧

主要步骤

在进行自定义染色时,你应该遵循以下规则:

  1. OP 设置为十六进制的 z (7a);

  2. 将染色的记录放在 payload,结构为 (TypeScript):Record<string, Record<number, number>>

  3. 针对染色记录构造对应的 UTXO,每条 UTXO 要符合 sat_value >= atomical_value

以下是一个 payload 示例:

上面的 payload 表示了将 ID 为 9527... 的 ARC-20 分配 1000 到 vout:0,分配 2000 到 vout:1;将 ID 为 8888... 的 ARC-20 分配 3000 到 vout:2,分配 4000 到 vout:3

拆分已合并的资产

由于 z 可以定义 Atomicals 的分配情况,它相当于是高级的 x (splat) 和 y (split) 操作的组合,可以在单个 z 操作中完成这两个操作的实际行为。开发者需要根据使用场景来选择使用的操作符。

自定义染色代码示例

查看完整代码示例

如何对Reveal PSBT进行签名

解析交易

索引在 v1.5.0 版本中提供了接口查询 PSBT 或者原始 Tx 的方法。/proxy/blockchain.atomicals.decode_psbt 可以用来解析 PSBT,/proxy/blockchain.atomicals.decode_tx 可以用来解析原始 Tx。

Last updated