发行例子

目标:发行$RUNE。总供应量21,000,000

计算协议消息中的第一个数据

协议消息中的第一个数据推送被解码为序列整数。这些整数被解释为(ID, OUTPUT, AMOUNT)元组序列\ 整数被编码为前缀可变数,其中可变数的前导数决定了其字节长度。有很多类型的前缀变体,这是比特币的风格

要发出21000000符文,我们使用这个元组 [0 , 1, 21000000].

为什么是 [0 , 1, 21000000] ?

function encodeBitcoinVarInt(value) {
  if (value < 0xfd) {
    return [value];
  } else if (value <= 0xffff) {
    return [0xfd, value & 0xff, (value >> 8) & 0xff];
  } else if (value <= 0xffffffff) {
    return [0xfe, value & 0xff, (value >> 8) & 0xff, (value >> 16) & 0xff, (value >> 24) & 0xff];
  } else {
    return [
      0xff,
      value & 0xff,
      (value >> 8) & 0xff,
      (value >> 16) & 0xff,
      (value >> 24) & 0xff,
      (value >> 32) & 0xff,
      (value >> 40) & 0xff,
      (value >> 48) & 0xff,
      (value >> 56) & 0xff,
    ];
  }
}

function encodeBitcoinVarIntTuple(tuple) {
  const encodedBytes = tuple.map(encodeBitcoinVarInt).flat();

  // Convert the bytes to a hexadecimal string
  const hexString = encodedBytes.map(byte => byte.toString(16).padStart(2, '0')).join('');

  return hexString;
}

这是元组的数据 [0, 1, 21000000] 在对 比特币风格的编码 解码后\

0 => 00
1 => 01
21000000 => fe406f4001

[0, 1, 21000000] => 0001fe406f4001

计算协议消息中的第一个数据

第二个数据推送被解码为两个整数, SYMBOL, DECIMALS

SYMBOL 是一个26进制编码的人类可读符号,类似于oridinals名称中使用的符号。唯一有效的字符是AZ.

oridinals名称是base-26序数的编码。为了避免将短名字锁定在不可花费的创世区块coinbase奖励中,序数变得越来越短,序数变得越来越长。第一个要挖掘的卫星0的名称是nvtdijuwxlp,最后一个要挖掘的卫星2,099,999,997,689,999的名称是a

// Some code
const bb26 = require("base26");

const text = 'rune';

const formatOrdinalBase26 = (text) => {
 const result = (2099999997689999 + 1 - bb26.from(text));
 return result;
};

这是元组的数据 [RUNE, 18] 在对 比特币风格的编码 解码后\

RUNE => 2099999997359067 => ffdbf3de59dbf3de59
18 => 12

[RUNE, 18] => ffdbf3de59dbf3de5912

协议消息的最后结果

OP_RETURN 52 0001fe406f4001 ffdbf3de59dbf3de5912

Last updated