1. ビットコインの背景
ビットコインは現金に似た取引モデル(現金制)を採用しており、その決済方法は従来の口座残高ベースのモデルとは異なるUTXOと呼ばれるモデルに基づいています。例: 銀行の口座会計モデル プロセスでは、A が B に 100 元を送金するとき、銀行は 3 つのステップを記録し、これらが取引プロセスを構成します。最初のステップは A の口座から 100 元を差し引くことであり、このステップのレコード ID は tid1 です。 2 番目のステップは、B の口座に 100 元を入金することであり、このステップのレコード ID は tid2 です。 3 番目のステップは、tid1 と tid2 をリンクする送金記録を記録することで、アカウント A が 100 元減少し、アカウント B が 100 元増加することを示します。このようにして、A と B の間の転送関係が記録され、将来的にクエリや追跡が可能になります。ここでは、UTXOの導入と決済モデルによるビットコインの決済方法について説明していきます。
UTXO
ビットコインのブロックチェーンでは、すべての残高は「未使用トランザクション出力」(UTXO)と呼ばれるリストに保存されます。各 UTXO には、特定の数のビットコインと、これらのビットコインの所有者に関する情報が含まれており、ビットコインが利用可能かどうかが示されます。これは、所有者の名前が記載された現金小切手のようなものだと考えてください。所有者が署名する限り、使用権を他の人に譲渡できます。特定のアドレスの場合、すべての UTXO 金額の合計がアドレスのウォレットの残高となります。すべての UTXO をループすることで、各アドレスの現在の残高を取得できます。すべてのUTXOの合計額を加算すると、現在流通しているすべてのビットコインが得られます。
ビットコインのトランザクション構造では、各トランザクションには複数の入力と出力が含まれており、各入力は既存の UTXO への参照であり、各出力は新しい資金受け取りアドレスと対応する金額を指定します。トランザクションが開始されると、その入力部分によって参照される UTXO は、トランザクションが完了するまで再利用を防ぐために一時的にロックされます。トランザクションがマイナーによってブロックに正常にパッケージ化され、ネットワークによって確認された場合にのみ、関連する UTXO ステータスが変わります。具体的には、トランザクションへの入力として使用された UTXO は UTXO リストから削除され、それらが消費されたことを示しますが、トランザクションの出力は新しい UTXO を生成して UTXO リストに追加されます。古い現金小切手が使用された後、それは無効になり、新しい現金小切手が生成され、その所有権は新しい所有者に帰属することが理解できます。
各 UTXO はトランザクション内で 1 回しか使用できないことを強調する価値があります。入力として消費されると、UTXO リストから永久に削除されます。同時に、新しく生成された出力が新しい UTXO としてリストに追加されます。 UTXO のリストは常に変化しており、新しいブロックが作成されるたびに、それに応じて更新されます。また、ブロックチェーン内のトランザクション履歴を分析することで、任意の時点での UTXO リストの状態を再構築できます。
さらに、トランザクションの総投入量は、通常、総産出量をわずかに超えます。トランザクション手数料またはネットワーク手数料と呼ばれるこの差額は、トランザクションをブロックにパッケージ化する責任を負うマイナーにインセンティブとして与えられます。ネットワーク料金のサイズはトランザクションの複雑さに直接比例するため、より多くの入力と出力を伴うトランザクションでは、通常、より高いネットワーク料金が必要になります。
ここでは、ビットコインの取引構造をより鮮明に理解するために、具体的な例を通じて詳細な分析を行っていきます。ビットコインのトランザクション構造は次のとおりです。ここで、2 つの変数 vin と vout は、それぞれビットコイン トランザクションの「入力」と「出力」を表します。ビットコイントランザクションは、従来の口座残高モデルのような口座形式のデータ変更を記録しませんが、入力と出力によって表されます。
const std::vector<CTxIn> vin;const std::vector<CTxOut> vout;const int32_t nVersion;const uint32_t nLockTime;
blockchain.com 上のトランザクション レコードをランダムに選択して分析できます。下の図は、ハッシュ ID 0627052b6f28912f2703066a912ea577f2ce4da4caa5a5fbd8a57286c345c2f2 のトランザクションを示しています。 1 つの入力と 2 つの出力が含まれています。
bitcoin-cli コマンド getrawtransaction および decorawtransaction を使用すると、上記のトランザクションの基礎となる構造を表示できます。
{"version": 1,"locktime": 0,"vin": [{"txid": "7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18","vout": 0,"scriptSig" : "3045022100884d1 42d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813[すべて] 0484ecc0d46f19 18b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adf","シーケンス": 4294967295 }],"vout": [{"値": 0.01500000,"scriptPubKey": "OP_DUP OP_HASH160 ab68025513c3dbd2f7b92a94e0581f5d50f654e7 OP_EQUALVERIFY OP_CHECKSIG"},{"値": 0.08450000,"scriptPubキー": "OP_DUP OP_HASH160 7f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a8 OP_EQUALVERIFY OP_CHECKSIG",}]}
ビットコイン ネットワークでは、トランザクション出力には、アドレス (公開キー ハッシュ) と金額 (ビットコイン) という 2 つの重要な情報が含まれています。トランザクションの出力が他のトランザクションの入力で使用されていない場合、トランザクション出力は未使用トランザクション出力 (UTXO) と呼ばれます。 UTXO の公開鍵に対応する秘密鍵を所有する人は誰でも、この UTXO を使用する (つまり、使用する) 権利を持ちます。
上記のコードの "vin" の情報を見てみましょう。これは、このトランザクションによって消費された UTXO が 0 番目の出力から来ていることを示しています (トランザクションの出力は複数になる可能性があり、インデックスは 0 から始まります)。過去のトランザクションからのこの UTXO の量 (たとえば、0.1)。したがって、このトランザクションでは、ユーザーは 0.1 BTC を費やしました。値 0.1 はトランザクションに明示的に書き込む必要はありませんが、検索を通じて UTXO 情報が取得されます。このトランザクションの "vout" には 2 つの出力があります。これら 2 つの出力は、別のトランザクションが入力として消費するまで、新しい残高とホルダーに対応する 2 つの新しい UTXO です。
支払いモデル
ビットコイン ネットワークの支払いモデルをよりよく理解するために、例を使用して、A が B に n ビットコインを支払う支払いプロセスを紹介します。以下の図は、ユーザー A がユーザー B に 3 ビットコインを送信するプロセスを示しています。
ユーザー A の場合、まず第一に、ユーザー A が所有するすべての UTXO のセット、つまりユーザー A が制御できるすべてのビットコインを決定する必要があります。
A は、トランザクションの入力としてこのセットから 1 つ以上の UTXO を選択します。これらの入力の金額の合計は m (2+0.8+0.5=3.3 BTC) であり、支払われる金額 n (3 BTC) よりも大きくなります。 );
ユーザー A はトランザクションに対して 2 つの出力を設定します。1 つの出力は B のアドレスに支払われ、金額は n (3 BTC)、もう 1 つの出力は A 自身の変更アドレスに支払われ、金額は m-n-fee (3.3-3-0.001) です。 = 0.299 BTC)。ユーザーのウォレットは通常複数のアドレスで構成されており、通常、各アドレスは 1 回のみ使用され、デフォルトでは小銭は新しいアドレスに返されます。
マイナーがトランザクションをパッケージ化し、確認のためにチェーンにアップロードした後、B はトランザクション情報を受け取ることができます。ブロック サイズには上限 (約 1 MB) があるため、マイナーは最高の手数料収益を得るために、トランザクション レート (fee_rate=fee/size) の高いトランザクションを優先します。 mempoolではリアルタイムのマイニング取引手数料状況が確認できます。転送プロセス中に最速の確認が必要な場合は、高優先度を選択するか、適切なトランザクション レートをカスタマイズできます。
2. コングの番号付けと追跡
ビットコインの総数は 2,100 万で、各ビットコインには 10^8 のサトシ (サトシ、サト) が含まれています。したがって、ビットコイン ネットワークには合計 2,100 万 * 10^8 サトシが存在します。 Ordinals プロトコルはこれらのサトシを区別し、各サトシに一意の番号を与えます。このセクションでは、このプロトコルが各サトシに一意に番号を付ける方法と、サトシが属するアカウントを追跡する方法を紹介します。さらに、サトシのレア度分類も紹介します。
サトシの番号
Ordinals プロトコルによれば、サトシはマイニングされた順序に基づいて番号が付けられます。以下の図は、0 番目のブロックで採掘された 0 番目のサトシの表現を示しています。
サトシを表現する方法はたくさんあります。
整数記号: 例: 2099994106992659。これは、マイニング順序に従って SATOSHI に割り当てられたシリアル番号を表します。
10 進表記: 例: 3891094.16797。最初の数字はサトシが採掘されたブロックの高さを示し、2 番目の数字はブロック内のサトシの番号を示します。
度記号: たとえば、3°111094'214''16797‴、最初の数字は 0 から始まる番号が付けられた期間、2 番目の数字は半減期のブロック インデックス、3 番目の数字は難易度中のブロック インデックスです。調整期間、最後の数字はブロック内のSatのインデックスです。
パーセント記号: たとえば、99.99971949060254% は、ビットコイン供給におけるサトシの位置をパーセンテージで示します。
名前:例えばサトシ。 a ~ z の文字を使用してシーケンス番号をエンコードした名前。
例を使用して、新しくマイニングされたビットコインに番号を付ける方法を説明します。ビットコイン ブロックチェーンのブロック 795952 を見ると、最初のトランザクション Tx 3a1f...b177 がマイナーの報酬 (コインベース トランザクション) を記録していることがわかります。このトランザクションには、マイナーへのパッケージ報酬として使用される新しく採掘されたビットコインと、トランザクション開始者によってマイナーに支払われる手数料が含まれます。以下の図の入力を見ると、UTXO ID が 0 の文字列とブロックの高さで構成されていることがわかります。出力されるアドレスはマイナーのウォレットアドレスで、金額は上記の報酬と手数料の合計です。
マイナーへの出力をさらに詳しく調べると、アドレス、金額、含まれる SATOSHI の分布がわかります。前述したように、これにはマイニングの報酬と手数料が含まれます。このうち、緑色のサト番号情報 1941220000000000–1941220625000000 はマイニング報酬によって生成された新しいサトシであり、残りの 712 サトシレコードはブロック内のすべての手数料に相当します。
Sat 1941220000000000 という番号を確認できます。そのブロック番号は795952で、10進数表記(10進数)は795952.0で、このサトシを採掘するブロックの高さは795952、このブロック内のサトシの数は0、その後のレアリティ(希少性)マークは珍しいことを意味します。これについては、後のセクションで詳しく説明します。
コングの循環
すべての BTC はマイニング報酬を通じて生成されるため、すべて追跡可能です。ビットコインアカウントはUTXOモデルを使用します。ユーザー A がマイニングにより 100 番目から 110 番目の SATOSHI を取得したとします (ID adc123 で 10 個の SATOSHI がまとめて同じ UTXO に保存されます)。ユーザー A がユーザー B に 5 SATOSHI を支払いたい場合、トランザクションの入力として ID abc123 を使用することを選択します。そのうち 5 SATOSHI がユーザー B に与えられ、5 SATOSHI はおつりとしてユーザー A に返されます。 5 SATOSHI のこれら 2 つのコピーは全体であり、それぞれ ID abc456 と abc789 を持つ 2 つの UTXO に保存されます。上記の UTXO id と SATOSHI 数は一例であり、実際には最低送信 SATOSHI 数は 546 に制限されており、UTXO ID はこの形式で表現されません。
上記のトランザクションでは、ユーザー A の 10 SATOSHI の循環経路は次のようになります。
採掘により、[100、110) の番号が付けられた 10 個のサトシが生成されます。これは、100 番目から 109 番目の SATOSHI が ID abc123 で UTXO に保存されており、その所有者がユーザー A であることを意味します。
Aが送金する場合、10サトシを5サトシずつ2つに分けます。ここでは「先入れ先出し」の原則が使用されています。つまり、トランザクション出力内のインデックスに従って SATOSHI の番号の順序が決定されます。出力の順序が最初にユーザー A、次にユーザー B であるとします。ユーザー A の残りの 5 SATOSHI のシリアル番号は [100, 105) で、ID abc456 の UTXO に保存され、ユーザー B の 5 SATOSHI のシリアル番号は次のようになります。 [105 , 110)、ID abc789 で UTXO に保存されます。
稀有度(Rare Satoshi)
Ordinals プロトコルのスピンオフとして、サトシの希少性はマイニングされた順序に基づいて定義できます。これにより、異なるレアリティを持ついくつかの特別なサトシが発生します。さまざまなサトシのレア度レベルは次のとおりです。
common:ブロック内の最初のサトシを除く任意のサトシ(総供給量は2,100兆)
アンコモン: 各ブロックの最初のサトシ (総供給量は 6,929,999)
レア:初サトシ 各難易度調整期間(総供給数3437)
エピック: 各半減後の最初のサトシ (総供給量は 32)
伝説的: 各サイクルの最初のサトシ (合計供給数は 5)
ミシック: ジェネシスブロックの最初のサトシ (総供給数は 1)
希少なサトシというこの概念は、ビットコインのエコシステムにさらなる関心と価値を加えることができます。レアリティの異なるサトシは市場で異なる価値を持ち、コレクターや投資家を魅了する可能性があります。
3. 表記方法
序数は、他の非ビットコインチェーンの NFT とは大きく異なります。主な違いは、序数メタデータが特定の場所に保存されないことです。代わりに、このメタデータはトランザクションの証人データ (証人データ、証人フィールド) に埋め込まれており、このデータが碑文のようにビットコインに「刻まれている」ため、これを「碑文」と呼んでいます。データは特定のサトシに添付されます。この登録プロセスは、Segregated Witness (SegWit) および Pay-to-Taproot (P2TR) を通じて実装されます。これには、コミットと公開という 2 つの段階が含まれます。指定されたサーバーには、あらゆる形式のコンテンツ (テキスト、画像、ビデオなど) が登録されます。サトシさん。以下では、別のより直接的な保存方法 OP_RETURN を紹介し、それが銘刻の手段として使用されない理由を説明します。同時に、Segregated Witness と Pay-to-Taproot とは何なのか、また Inscription においてどのような役割を果たしているのかについても紹介します。最後に刻印方法をご紹介します。
OP_RETURE
Bitcoin Core クライアント バージョン 0.9 では、RETURN 演算子の採用によって最終的に妥協が達成されました。 **RETURN を使用すると、開発者は 80 バイトの非支払いデータをトランザクション出力に追加できます。 **疑似支払いとは異なり、RETURN は、UTXO セットに保存する必要のない、明示的に検証可能な非消費型出力を作成します。 RETURN 出力はブロックチェーンに記録されます。これらはディスク領域を消費し、ブロックチェーンのサイズを増加させます。ただし、UTXO セットには保存されないため、UTXO メモリ プールは拡張されず、フル ノードの数も増加しません。メモリのコストが高い。
OP_RETURN はビットコイン ブロックチェーンに情報を保存する非常に簡単な手段ですが、潜在的な書き込み方法でもあります。ただし、OP_RETURN には制限があるため、メタデータ ストレージを扱う際にいくつかの課題に直面します。まず、OP_RETURN は 80 バイトのデータしか保存できないため、より大量のデータを保存する必要がある場合、この制限は明らかに不十分です。次に、OP_RETURN データはトランザクション出力部分に格納されますが、このデータは UTXO セットには格納されませんが、ブロックチェーンの記憶領域を占有するため、ブロックチェーンのサイズが増加します。最後に、OP_RETURN を使用すると、これらのトランザクションをポストするためにより多くの支払いが必要となるため、トランザクション手数料が高くなります。
隔離された証人
これに対し、SegWit が提供する新しい手法は上記の問題を解決します。 SegWit はビットコインの重要なプロトコル アップグレードであり、2015 年にビットコイン コア開発者の Pieter Wuille によって提案され、2017 年にバージョン 0.16.0 で正式に採用されました。 Segregated Witness の Segregated は分離と隔離を意味し、証人は取引に関連する署名的なものです。したがって、SegWit は、トランザクションから特定のトランザクション署名データ (証人データ) を分離します。
トランザクション関連データから署名を分離する主な利点は、ビットコイン ブロックに保存されるデータのサイズが削減されることです。これにより、より多くのトランザクションを保存できるブロックあたりの追加容量が得られます。これは、ネットワークがより多くのトランザクションを処理できるようになり、送信者が支払う料金が安くなることも意味します。技術的に言えば、スクリプト署名 (scriptSig) 情報を基本構造 (ベース ブロック) から取り出して、新しいデータ構造に配置することを意味します。検証作業を行うノードとマイナーは、この新しいデータ構造内のスクリプト署名も検証して、トランザクションが有効であることを確認します。 Segwit のアップグレードでは、プライバシーとパフォーマンスを確保するために、トランザクション出力に新しい監視フィールドが導入されています。目撃データはデータ保存用に設計されていませんが、実際には碑文メタデータなどを保存する機会を与えてくれます。隔離された証人をより鮮明に理解するために、次の図を使用します。
主根
P2TR は、2021 年の Taproot アップグレードで導入されたビットコインのトランザクション出力タイプで、さまざまなトランザクション条件をよりプライベートにブロックチェーンに保存できるようになります。 Ordinals の碑文では、P2TR が重要な役割を果たしています。 Inscription は基本的に特定のデータ コンテンツをビットコイン トランザクションに埋め込みますが、Taproot アップグレード、特に P2TR により、このデータの埋め込みがより柔軟かつ経済的になります。
まず、Taproot スクリプトの保存方法により、Taproot スクリプト パス支出スクリプトに碑文コンテンツを保存できます。このスクリプトにはコンテンツにほとんど制限がなく、証人データの割引も受けられるため、碑文コンテンツの保存が比較的経済的になります。 Taproot スクリプトの使用は既存の Taproot 出力からのみ行うことができるため、Inscription では 2 段階のコミット/公開プロセスを使用します。まず、コミット トランザクションで、碑文コンテンツを含むスクリプトを約束する Taproot 出力が作成されます。次に、公開トランザクションでは、コミット トランザクションによって作成された出力が消費され、それによってオンチェーンの碑文コンテンツが公開されます。
このアプローチにより、リソースの消費が大幅に削減されます。 P2TR が使用されない場合、証人情報はトランザクションの出力に保存されます。このようにして、この出力が消費されない限り、監視情報は常に UTXO セットに保存されます。対照的に、P2TR が使用される場合、監視情報はコミット フェーズ中に生成されたトランザクションに表示されないため、UTXO セットには書き込まれません。この UTXO が消費された場合にのみ、公開フェーズ中に証人情報がトランザクション入力に表示されます。 P2TR を使用すると、メタデータをビットコイン ブロックチェーンに書き込むことができますが、UTXO セットには表示されません。 UTXO セットの維持/変更にはより多くのリソースが必要となるため、このアプローチでは多くのリソースを節約できます。
碑文
Ordinals プロトコルは SegWit を利用して、ビットコイン ネットワークに書き込まれるコンテンツのサイズ制限を緩和し、碑文のコンテンツを証人データに保存します。最大 4MB のメタデータを保存できます。 Taproot を使用すると、任意の証人データをビットコイン トランザクションに簡単に保存できるようになり、Ordinals 開発者の Casey Rodarmor 氏は、古いオペコード (OP_FALSE、OP_IF、OP_PUSH) を、彼が「碑文」ストレージと呼ぶ任意のデータの「エンベロープ」と表現するものに再利用できるようになります。
碑文の鋳造プロセスは次の 2 つのステップで構成されます。
まず、碑文コンテンツを含むスクリプトの Taproot 出力へのコミット トランザクションを作成する必要があります。ストレージ形式は Taproot です。つまり、前のトランザクションの出力は P2TR (Pay-To-Taproot) であり、次のトランザクションの入力は監視された Taproot スクリプトに特定の形式で埋め込まれます。まず、文字列 ord は次のようになります。碑文が他の用途にあったという曖昧さを排除するために、スタックに押し込まれました。 OP_PUSH 1 は、次のプッシュにコンテンツ タイプが含まれていることを示し、OP_PUSH 0 は、後続のデータ プッシュにコンテンツ自体が含まれていることを示します。タップルートの数少ない制限の 1 つは 1 つのデータ プッシュが 520 バイトを超えることができないため、大きな碑文では複数のデータ プッシュを使用する必要があります。現時点では、碑文データはトランザクション出力の UTXO にマッピングされていますが、公開されていません。
次に、コミット トランザクションによって作成された出力は、リビール トランザクションで消費される必要があります。この段階で、その碑文に対応する UTXO を入力として使用してトランザクションが開始されます。この際、該当する碑文内容がインターネット全体に公開されました。
上記の 2 つの手順により、書き込みコンテンツが書き込み UTXO にバインドされます。上で紹介したサトシの配置に従い、UTXO入力に対応する最初のサトシに刻印が行われ、表示されるトランザクションの入力に刻印内容が含まれます。上で紹介したサトシの流通と追跡の紹介によると、特別な内容が刻まれたこのサトシは譲渡、購入、売却、紛失、回収が可能だという。繰り返しの刻印は許可されません。そうでない場合、それ以降の刻印は無効となりますのでご注意ください。
このプロセスは、主に前述のコミットとリビールの 2 段階で構成され、小さな BTC NFT 画像を彫刻する例を通じて詳細に説明します。まず、最初のトランザクションのハッシュ ID が 2ddf9...f585c であることがわかります。このトランザクションの出力には証人データが含まれておらず、Web ページには関連する碑文情報が存在しないことに注意してください。
次に、ハッシュ ID が e7454...7c0e1 である第 2 段階のレコードを確認します。ここでは、証言の碑文の内容である序数碑文の情報を見ることができます。このトランザクションの入力アドレスは前のトランザクションの出力アドレスであり、出力0.00000546BTC(546 SATOSHI)はこのNFTを自分のアドレスに送信することになります。同時に、この碑文があるサトシもSat 1893640468329373で見つけることができます。
ビットコインウォレットでこの資産を確認できます。このNFTを取引したい場合は、他の人のアドレスに直接送信する、つまりこのUTXOを送信することで、碑文の転送が完了します。
4. ビットコインウォレット
オーディナルの生態、サトシの循環、そして碑文の関連知識とは何かを理解した後、BRC-20、ORC-20、BRC-721、GBRC-721、その他の関連する派生プロトコルには、トークン情報または NFT の小さな画像をサポートおよび表示するための対応するウォレットがあります。このセクションでは、さまざまなビットコインウォレットアドレスの概念と特徴を紹介します。
ビットコイン アドレスは 1、3、または bc1 で始まります。電子メール アドレスと同様に、他のビットコイン ユーザーと共有でき、ユーザーはそれを使用して自分のウォレットにビットコインを直接送信できます。セキュリティの観点から見ると、ビットコイン アドレスには機密情報は含まれません。アカウントのセキュリティを損なうことなく、どこにでも投稿できます。電子メール アドレスとは異なり、新しいアドレスは必要に応じていつでも作成でき、資金はウォレットに直接入金されます。実際、最新のウォレットの多くは、プライバシーを最大限に高めるために、トランザクションごとに新しいアドレスを自動的に作成します。ウォレットは、その中の資金のロックを解除するためのアドレスとキーのコレクションにすぎません。まず、ビットコインウォレットのアドレスがどのように生成されるかを知る必要があります。
ビットコインの秘密鍵と公開鍵
ビットコインは楕円曲線 Secp256k1 を使用します。「秘密鍵」は 1 から n-1 までの乱数です。n は大きな数 (256 ビット)。n は科学表記法で次のように表されます。
この範囲は非常に広く、他の人の秘密鍵を推測することはほとんど不可能です。このランダムな整数の秘密鍵は 256 ビットで表現でき、複数のエンコード方法があります。 WIF または WIF 圧縮形式の秘密キーが暗号化されていない場合は、それを復号化することで元の「ランダムな整数」を取得できます。もう 1 つの方法は BIP38 であり、AES アルゴリズムを使用して秘密キーを暗号化することを提案しています。この方法で取得される秘密キーは文字 6P で始まります。この種の秘密キーは、さまざまなビットコイン ウォレットにインポートする前にパスワードを入力する必要があります。これは私たちが通常行うことであり、一般的に使用される秘密鍵です。
次に、楕円曲線の公式 K = kG を使用して、秘密鍵 k からビットコイン公開鍵 K を生成します。G はベースポイントであり、secp256k1 のパラメータです。公開鍵の「非圧縮形式」と「圧縮形式」の2つの表現であるKの2つの座標が得られる。
非圧縮形式では、2 つの座標 x と y を直接接続し、先頭に 0x04 プレフィックスを追加します。
圧縮形式とは、y が偶数の場合、エンコードは 02 x であり、y が奇数の場合、エンコードは 03 x であることを意味します。
ビットコインアドレス
ビットコインアドレスの種類は下図のようになりますが、表現方法は以下の4つがあります。
参考: https://en.bitcoin.it/wiki/Invoice_address
1. レガシー (P2PKH) フォーマット
例: 1Fh7ajXabJBpZPZw8bjD3QU4CuQ3pRty9u
「1」で始まるアドレスはビットコインの元のアドレス形式であり、現在でも使用されています。これは、Pay To PubKey Hash (Pay To PubKey Hash (公開鍵ハッシュへの支払い)) の略語である P2PKH としても知られる、ハッシュを介して公開鍵から計算されます。
2. ネストされた SegWit (P2SH) 形式
例: 3KF9nXowQ4asSGxRRzeiTpDjMuwM2nypAN
アドレスは「3」で始まり、P2SH は Pay To Script Hash の略称で、レガシー アドレスよりも複雑な機能をサポートします。ネストされた P2SH は、既存の P2SH アドレス (「3」で始まる) を取得し、それを SegWit アドレスでカプセル化します。
3. ネイティブ SegWit (Bech32) 形式
例: bc1qf3uwcxaz779nxedw0wry89v9cjh9w2xylnmqc3
bc1 で始まるアドレスは BIP0173 で提案されており、ネイティブ SegWit アドレスです。 Bech32 エンコードされたアドレスは、SegWit 用に特別に開発されたアドレス形式です。 Bech32 は、2017 年末の BIP173 で定義されました。この形式の主な特徴の 1 つは、大文字と小文字が区別されないこと (アドレスには 0 ~ 9、a ~ z のみが含まれる) であるため、入力時の混乱を効果的に回避でき、読みやすくなっています。 。アドレスに必要な文字数が少ないため、アドレスでは従来の Base58 ではなく Base32 エンコーディングが使用され、計算がより便利かつ効率的になります。 QR コードではデータをより緊密に保存できます。 Bech32 は、より優れたセキュリティ、より適切に最適化されたチェックサム エラー検出コードを提供し、無効なアドレスの可能性を最小限に抑えます。
Bech32 アドレス自体は SegWit と互換性があります。 SegWit アドレスを P2SH アドレスに入れるために追加のスペースは必要ないため、Bech32 形式のアドレスを使用すると、手数料が安くなります。 Bech32 アドレスには、古い Base58 (Base58Check エンコーディングは、ビットコインのバイト配列を人間がエンコード可能な文字列にエンコードするために使用されます) アドレスよりもいくつかの利点があります: QR コードが小さい、エラー耐性が高い、安全性が高い、大文字と小文字の区別がつかない、小文字のみで構成されている、読みやすく、入力しやすく、理解しやすいです。
4. タップルート形式 (P2TR)
Bech32 には欠点があります。アドレスの最後の文字が p の場合、p の直前に任意の数の文字 q を挿入または削除しても、そのチェックサムは無効になりません。
Bech32 の上記の欠点を軽減するために、Bech32m アドレスが BIP0350 で提案されました。
バージョン 0 のネイティブ SegWit アドレスの場合は、以前の Bech32 を使用します。
バージョン 1 (またはそれ以降) のネイティブ SegWit アドレスの場合、新しい Bech32m が使用されます。
Bech32m アドレスの場合、バージョンが 1 の場合、常に bc1p で始まります (つまり、タップルート アドレス)。具体的には、ネイティブ SegWit と同様に、ウォレットはシード フレーズとパスフレーズで構成できます。これらは、階層的決定論的ウォレット内の任意のパスのアドレスを導出するために使用される拡張公開キーと秘密キーを生成するために使用されます。主にBRC-20やBTC NFT等を保管しております。


