btc-terminology について
btc-terminologyは、設定、Goコード、Bitcoin Core RPCで使うBitcoinアドレス用語を整理する開発スキルです。TaprootのアドレスタイプとBech32mのエンコード形式の混同を防ぎます。
主な機能
- 01TaprootとBech32mの区別
- 02設定とRPCでの用語整理
- 03Goの型変換の記載
- 04確認チェックリスト
活用シーン
- 01Taprootアドレス設定の編集
- 02Bitcoin Core RPC呼び出しの記述
- 03アドレス関連Goコードのレビュー
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ hiromaily/ go-crypto-wallet --skill btc-terminologyインストール後、Claude Code で/btc-terminologyを入力して読み込まれたか確認します。
詳細
BTC 用語ルール
🚨 重要:Bech32m と Taproot
これはよくあるバグの原因です。 これらの用語を混同しないでください。
| 用語 | 意味 | 使用箇所 |
|---|---|---|
| bech32m | エンコード形式(アドレスのシリアライズ方法) | Bitcoin Core RPC、シェルスクリプト |
| taproot | アドレスの種類(アドレスが表すもの) | 設定ファイル、ドメインモデル |
重要なルール: bech32m ≠ taproot — 関連はありますが、互換性のある用語ではありません。
クイックリファレンス表
| コンテキスト | 正しい用語 | 例 |
|---|---|---|
| 設定 YAML/TOML ファイル | taproot | address_type: "taproot" |
| 環境変数 | taproot | WALLET_ADDRESS_TYPE="taproot" |
| Bitcoin Core CLI/RPC | bech32m | bitcoin-cli getnewaddress "" bech32m |
| シェルスクリプト(受信アドレス) | bech32m | getnewaddress "" bech32m |
Go ドメインコード(internal/domain/address/) | taproot | AddrTypeTaproot |
Go Bitcoin Core インターフェース(internal/domain/bitcoin/) | bech32m | AddressTypeTaproot = "bech32m" |
よくある間違い
❌ 誤り
# Config file - DON'T use bech32m
address_type: "bech32m" # WRONG!
# Shell script - DON'T use taproot for Bitcoin Core RPC
bitcoin-cli getnewaddress "" taproot # WRONG!
✅ 正しい例
# Config file - Use taproot
address_type: "taproot" # CORRECT!
# Shell script - Use bech32m for Bitcoin Core RPC
bitcoin-cli getnewaddress "" bech32m # CORRECT!
技術的背景
なぜ異なる用語が2つあるのか?
- Taproot(BIP341)= SegWit バージョン1のアドレスの種類(P2TR - Pay-to-Taproot)
- Bech32m(BIP350)= 元の Bech32 のチェックサムの問題を修正するエンコード形式
すべての Taproot アドレスは bech32m を使ってエンコードされますが、次のように使い分けます。
- ユーザー向けの設定では「taproot」を使用します(指定するアドレスの種類)
- Bitcoin Core RPC では「bech32m」を使用します(エンコード方法)
アドレス形式の比較
| エンコード | SegWit バージョン | アドレスの種類 | プレフィックス | 設定値 |
|---|---|---|---|---|
| Base58 | N/A | P2PKH | 1... | legacy |
| Base58 | N/A | P2SH | 3... | p2sh-segwit |
| Bech32 | v0 | P2WPKH | bc1q... | bech32 |
| Bech32m | v1 | P2TR | bc1p... | taproot |
コードベースの対応関係
このプロジェクトには、異なる型定義が2つあります。
// internal/domain/bitcoin/address_type.go
// For Bitcoin Core RPC communication
AddressTypeTaproot AddressType = "bech32m" // Bitcoin Core uses "bech32m"
// internal/domain/address/types.go
// For user-facing configuration
AddrTypeTaproot AddrType = "taproot" // User sees "taproot"
これらの変換は、マッパー関数で処理されます。
// internal/infrastructure/api/btc/btc/mapper.go
// FromAddressType: "bech32m" (Bitcoin Core) → "taproot" (user-facing)
// ToAddressType: "taproot" (user-facing) → "bech32m" (Bitcoin Core)
検証チェックリスト
Taproot/Bech32m のコードを扱う際は、次の点を確認してください。
- 設定ファイル(YAML/TOML)では
address_type: "taproot"を使用する - 環境変数では
WALLET_ADDRESS_TYPE="taproot"を使用する - シェルスクリプト内の Bitcoin Core RPC 呼び出しでは
bech32mを使用する - 受信アドレスを生成するシェルスクリプトでは
bech32mを使用する - Go コードでは、レイヤーに応じた正しい型を使用する:
- ドメイン/設定レイヤー:
AddrTypeTaproot(値:"taproot") - Bitcoin Core インターフェース:
AddressTypeTaproot(値:"bech32m")
- ドメイン/設定レイヤー:
関連ファイル
| ファイル | 用途 |
|---|---|
internal/domain/address/types.go | ユーザー向け AddrType の定義 |
internal/domain/bitcoin/address_type.go | Bitcoin Core の AddressType の定義 |
internal/infrastructure/api/btc/btc/mapper.go | 型変換関数 |
docs/chains/btc/taproot/user-guide.md | Taproot ユーザーガイド |
Related Documentation
コメント
Markdown 対応