メッセージ
QLYP が署名するのは、正規のバイナリメッセージです。取引のあいまいな説明ではありません。エンベロープは 1 つ、操作はわずか、どの操作も書き方は 1 通りです。
別々に書かれた 2 つのプログラムが、同じバイト列をまったく同じように読むにはどうすればよいでしょう?
QLYP の操作はどれも、小さなバイナリメッセージです。ふつうの Quantus の取引の中に入れられ、取引と一緒に署名されます。つくりとしてバイナリであり、検証によってあいまいさがなくなります。正しい実装が 2 つあれば、同じバイト列を 2 通りに読むことはありえません。
なぜこのつくりなのか
2 つの読み手が食い違ってはいけません。 あるプログラムが「250 を送る」と読み、別のプログラムが「25 を送る」と読めば、台帳は 2 つに割れてしまいます。だから形式は、読み方をちょうど 1 つに限らなければなりません。
テキスト形式には、いくつもの書き方があります。 同じ JSON オブジェクトでも、キーの順番、空白、数の書き方を変えて書けます。書き方が違えばバイト列も違い、署名はバイト列に対してかかります。
そこで QLYP は正規のバイナリにしました。 すべてのフィールドの順番が決まっていて、整数の幅は固定、バイト列の長さの書き方も 1 通りだけです。デコーダーはすべてのバイトを使い切り、エンコードし直したときにまったく同じメッセージにならなければなりません。そうならないメッセージは無効です。
さらに、どのメッセージも自分がどこのものかを示します。 名前とバージョン、チェーンのジェネシス(最初のブロック)、あなたの連番があるので、メッセージを別のネットワークや別のバージョンで使い回したり、同じネットワークで 2 回使ったりすることはできません。
1 バイトずつ見る
- 01 / 05
名前とバージョンで始まる
すべての QLYP メッセージは、4バイトの「QLYP」と1バイトのバージョンで始まります。こう始まらない remark(チェーンに残すメモ)は、QLYP の操作ではありません。また、将来のバージョンが v1 と取り違えられることもありません。
- 02 / 05
どのチェーンかを示す
続く 32 バイトは、ネットワークのジェネシスハッシュ(最初のブロックのハッシュ)です。メインネット向けに署名したメッセージはテストネットでは意味を持たず、その逆も同じです。別のチェーンで使い回すことはできません。
- 03 / 05
操作の回数を数える
8バイトに、あなたのアカウントの QLYP の連番(シーケンス番号)がリトルエンディアンで入ります。操作が受け入れられるたびに1つ進むので、同じメッセージを2回適用することはできません。拒否された操作では進みません。
- 04 / 05
何をするかを伝える
1バイトのタグで操作を選びます。0 はトークンのデプロイ、1 はミント、2 は送金、3 は指定した買い手へのロットのオファーです。タグ 4〜8 は将来のために取ってあり、今は拒否されます。
- 05 / 05
あとは決まったフィールドだけ
フィールドは決められた正規の並びで続き、合計で最大 1,024 バイトです。デコードではすべてのバイトを使い切る必要があり、エンコードし直すと元と同じバイト列にならなければなりません。どのメッセージも、書き方は1通りだけです。
操作の一覧
| タグ | 操作 | 運ぶ内容 |
|---|---|---|
| 0 | デプロイ(Deploy) | シンボル、小数点以下の桁数、最大供給量、1 回のミントの上限、誰でもミントできるか作成者だけか |
| 1 | ミント(Mint) | 40 バイトの資産 ID と、正の数量 |
| 2 | 送金(Transfer) | 資産 ID、数量、32 バイトの受取人 |
| 3 | オファー(Offer) | 資産、数量、買い手、受取口座、価格、手数料、手数料の口座、有効期限 |
| 4–8 | 予約済み(Reserved) | 現在は拒否されます。ローンチパッドや AMM ではありません |
| 9 | 刻印(Inscribe) | コンテンツの種類とコンテンツのバイト列。Quarks に使います |
| 13 | 手数料レート(Fee rate) | 新しい「1 ドルあたりの QTC」レートと、その適用が始まるブロック。手数料の運営者が投稿します |
| 14 | 手数料の管理(Fee admin) | 保留中のレートを取り消す、運営者を凍結する、手数料の役割を変更する |
| 15 | 予約済み(Reserved) | 現在は拒否されます。先に約束してから中身を明かす方式でシンボルを取得するために、取ってあります |
オープン出品やボンディングカーブのような新しい操作は、新しいタグを使います。新しいタグは、公表されたブロックで明示的に有効にしなければなりません。知らないタグに出会ったインデクサーは、それを拒否します。推測することはありません。
識別子と上限
- 資産 ID は、作成者の 32 バイトのアカウント ID に、作成に使った 8 バイトの連番を続けたものです。シンボルは人が読める一意のラベルで、ウォレットが署名するのは資産 ID のほうです。
- シンボルには、1〜12 文字の英大文字または数字を使います。小数点以下の桁数は 0〜18 です。
- 数量は基本単位の整数で、浮動小数点は使いません。
- メッセージ全体は、エンベロープを含めて最大 1,024 バイトです。
2 つのカウンター、2 つの役目
Quantus はあなたのアカウントのノンス(取引ごとに増える番号)を管理していて、ネイティブの取引が使い回されるのを防ぎます。QLYP は自分専用の連番を持ち、受け入れられた資産の操作に順番をつけます。この 2 つは別々に動きます。QLYP の操作が拒否されると、それを運んだ取引がノンスを使っていても、連番は元のままです。