読了時間:7分
概要
Solanaのアドレスとは、単に鍵ペアのBase58形式の公開鍵のことです。カスタム・ヴァニティ・ウォレットアドレスを使えば、先頭と末尾を自分で選んだ文字で始まるアドレスを作成することができます。 例えば、MetaDAOトークンのミントアドレス「METAwkXcqyXKy1AtsSgJ8JiUHwGCafnZL38n3vYmeta」は、先頭と末尾が「meta」で始まります。このようなバニティアドレスは、選択したプレフィックス、サフィックス、あるいはその両方に一致するアドレスが見つかるまで、候補を繰り返し生成することで見つけ出されます。
一目でわかるアドレスがあれば、プロジェクトのトークン発行、財務管理、またはプログラムをひと目で識別し、信頼しやすくなります。これによりブランドイメージが強化され、ユーザーは類似アカウントではなく、正しいアカウントとやり取りしていることを確認しやすくなります。その反面、必要な文字数が増えるほど、検索に時間がかかるというトレードオフがあります。
「研削」とは何ですか?
グラインディングとは、Solanaのバニティウォレットアドレスを生成するための力業的なプロセスです。グラインダーは新しい鍵ペアを生成し、そのBase58形式のアドレスが指定されたプレフィックスまたはサフィックスと一致するかどうかを確認し、一致するものが見つかるまで、このサイクルを(多くの場合、数百万回にわたり)繰り返します。近道はないため、処理速度は使用するツールとハードウェアに完全に依存します。
このガイドでは、それを集める2つの方法について説明します。まず、次の方法を使います。 solana-keygen の処理に時間がかかる、Solana CLIに組み込まれているコマンドです。これが最も簡単な方法で、追加のものは何も必要ありません。その後、次のように使用します 虚栄心、オープンソースのGPU加速ツールで、以下を処理する ずっと速い そして、より長いパターンのロックを解除します。
- ネイティブ機能を使って、見せかけのアドレスを生成する
solana-keygen の処理に時間がかかるコマンドだけで、追加の工具は不要です - GPU加速されたバニティツールを使えば、はるかに高速に計算(そしてより長いパターンを発見)できます
- 「挽く」という3つの方法を以下で解説します
虚栄心, a 種 (グラインド), a 鍵ペア (キーペアの生成)、およびドップラー鍵ペア(grind-doppler)、そしてそれぞれをいつ使うべきかを学びましょう - 「キーシード」と「キーペア」の違い、およびそれが速度と安全性にどのような影響を与えるかを理解する
主な業務内容
- バニティアドレスを以下で生成する
solana-keygen の処理に時間がかかる - インストール
虚栄心そして、バニティシード、バニティキーペア、およびドップラーキーペアを生成する - 研削結果を確認し、どのツールがどの用途に適しているかを把握する
- 生成した鍵については、ウォレットのセキュリティに関するベストプラクティスに従ってください
必要なもの
- コマンドライン端末
- Solana CLIがインストールされました
- 『Rust』と『Cargo』 インストールするには
虚栄心 - 「JavaScript を使用して Solana でアドレスを作成する方法」で解説されている、Solana のアドレスと鍵ペアに関する基本的な知識
Solana-Keygen を使って生成する
動画による解説をご希望ですか?サヒルと一緒に、Solanaでカスタムバニティアドレスの作成方法を学びましょう。
solana-keygen には グラインド 検索条件に一致する鍵ペアが見つかるまで鍵ペアを生成し続けるサブコマンド。この --で始まる flag は 接頭辞:COUNT 値、したがって QN:1 は、「で始まるアドレスを1つ見つける」という意味です QN".
solana-keygen grind --starts-with QN:1
次のような応答が表示されるはずです:
Searching with 10 threads for:
1 pubkey that starts with 'QN' and ends with ''
Wrote keypair to QN...mgr.json
マッチング .json 現在のディレクトリにあるこのファイルは、標準的なSolanaの鍵ペアファイルです。これをデフォルトのウォレットとして設定したり、コード内で読み込んだりすることができます:
solana config set --keypair ./QN...mgr.json
Base58では各位置に58種類の文字が割り当てられるため、文字が1つ増えるごとに検索の難易度は指数関数的に高まります。実際には、2~5種類の文字を定義するのが適切な範囲です。 solana-keygen. さらに、GPUによる高速化が施された 虚栄心 以下で説明するツール。
グラインドのオプションを確認する
参照が必要なときはいつでも、help コマンドを実行してください:
solana-keygen grind --help
最も役立つオプションは以下の通りです:
--starts-with PREFIX:COUNT発見するCOUNTアドレスが以下で始まる鍵ペアプレフィックス(例えば、--starts-with QN:22つ見つかる)。--SUFFIX:COUNTで終わる代わりに接尾辞に一致します。--PREFIX:SUFFIX:COUNT で始まり、PREFIX:SUFFIX:COUNT で終わる両端を同時に一致させます。--大文字小文字を区別しない検索を大文字小文字を区別しないようにします(デフォルトでは大文字小文字を区別します)。--use-mnemonicキーペアファイルの代わりにシードフレーズを出力します。処理速度が大幅に低下する可能性があります。--num-threads <NUMBER>グラインドスレッドの数を設定します。
接頭辞または接尾辞には、Base58文字を使用する必要があります(A~Z, a-z, 0~9) 混同されやすいものを除いて:ゼロ (0), 大文字の i (I), 大文字の O (O), および小文字の L (l).
ヴァニティと共にかきむしる
vanityは、CPUおよびGPU上で動作する高性能な探索アルゴリズムです。RTX 4090 1枚だけで、1秒あたり10億件をはるかに超える候補を検索できるため、長いパターンの探索も理論上の話ではなく、現実的なものとなっています。
実行する前に、それが実際に何を生み出しているのかを理解しておく必要があります。
シードと鍵ペア
虚栄心 根本的に異なる2つのものを粉砕することができます:
- 種: 以下の機能で使用される短いテキスト文字列
CreateAccountWithSeed. このアドレスは次のように導出される。base58(SHA256(base + seed + owner)). そこには 独自の秘密鍵を持たない. これは、ベースそれを受け取るためのウォレットに加えて、所有者そのアカウントを所有するプログラム。 - 鍵ペア:公開鍵が指定したパターンと一致する、本物の ed25519 鍵ペア。このアドレスは、他のウォレットと同様に署名を行うことができます。
この分割により、速度と安全性の両方が向上します。シードの総当たり計算は、楕円曲線数学を一切用いない純粋な SHA-256 ハッシュ計算であるため、鍵ペアの総当たり計算に比べて約 20 倍高速に実行されます。鍵ペアの総当たり計算は時間がかかりますが、秘密鍵を生成することができます。
洗面化粧台の設置
Cargo を使ってインストールしてください。お使いのハードウェアに合ったビルドを選択してください:
# CPU only (default)
cargo install vanity
# NVIDIA GPU (requires the CUDA toolkit / nvcc on the build machine)
cargo install vanity --features=gpu
# AMD, Intel, or Apple GPUs (requires an OpenCL 1.2 ICD loader and headers)
cargo install vanity --features=opencl
種を挽く
使用方法 グラインド そのアドレスが、トークン発行所、ステークアカウント、プログラムデータアカウントなど、プログラムによって管理されているものに属している場合。その ベース (署名用ウォレット)および 所有者 (アカウントを所有するプログラム)の両方が派生アドレスに組み込まれるため、生成処理を行う前にこれらを決定しておく必要があります。この例では、SPL Token プログラムが所有するトークンのミントを生成します:
vanity grind \
--base <YOUR_WALLET_PUBKEY> \
--owner TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA \
--prefix QN \
--num-gpus 1
出力には、算出されたアドレスと16文字のシードが表示されます(わかりやすくするために短縮しています):
14個のCPU、1個のGPUを使用
ターゲット: QN | 確率: 1.748728e-5 | 予想試行回数: 57,184回
CPU 6 一致: QNey...qrGn; [122, ..., 73] -> zynnPwuquKefX73I (0.003秒); 6,862,657 試行/秒
完了:1秒間で34,459,020回の試行、34,284,098試行/秒
結果をオンチェーンにコミットする前に、必ず確認してください:
vanity verify --base <YOUR_WALLET_PUBKEY> --owner TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA --seed <SEED>
そのシードをオンチェーンで使用するには、それを create_account_with_seed; 算出されたアドレスが新しいアカウントの to_pubkey.
バニティ鍵ペアを生成する
使用方法 キーペアの生成 取引を行うウォレットやプログラムIDなど、アドレス自体が署名を行う必要がある場合。これにより、標準的なSolanaの鍵ペアのJSON配列が生成されます:
vanity grind-keypair --prefix QN --suffix qn
この出力には、公開鍵、シード(16進数)、およびSolana互換の鍵ペアのJSON配列(分かりやすくするために短縮しています)が表示されます:
14個のCPU、1個のGPUを使用
ターゲット: QN...qn | 確率: 5.198358e-9 | 予想試行回数: 192,368,424回
GPU 0:0.323秒で QNg83...q5qn と一致
公開鍵: QNg83...q5qn
シード(16進数):0132...36c4
鍵ペアの JSON (Solana 互換): [1, ..., 125]
完了: 17秒間で104,422,574回の試行(6,117,490試行/秒)
キーペアの生成 実際の秘密鍵が出力されます。資金を預ける予定の鍵ペアは、自分が管理していないハードウェアで生成してはいけません。レンタルしたGPUやサードパーティの鍵生成サービスでは秘密鍵が閲覧されている可能性があるため、外部に委託した鍵ペアはすべて、すでに漏洩しているとみなしてください。
ドップラー・キーペアを生成する
grind-doppler これも実際に署名可能な鍵ペアを生成しますが、異なる種類の照合を行うため処理に時間がかかります。読み取り可能なプレフィックスではなく、Solanaのプログラムがより少ない演算リソースで比較できる形式に、生のバイトデータが適合する公開鍵を探します。生成されるアドレスは人間から見ればごく普通のものですが、その利点は純粋にパフォーマンス面にあります。
vanity grind-doppler --segments 1 --num-gpus 1 # find one cheaper-to-check key
vanity grind-doppler --segments 2 --num-gpus 1 # stricter match, much rarer to find
結果として、キーペア(Solana互換のJSON配列形式、grind-keypairと同様)に加え、各セグメントごとの内訳(各セグメントの.equ定数を含む)が出力されます(分かりやすくするために省略しています):
14個のCPU、1個のGPUを使用
ドップラー: 1つ以上の符号拡張可能な32ビットセグメント | 確率: 9.313226e-10 | 予想試行回数: 1,073,741,824回
GPU 0 一致:CSvy...YFYHy(0.398秒)
公開鍵: CSvy...YFYHy
シード(16進数):4f92c...f09d
鍵ペア JSON (Solana 互換): [79, ..., 52]
ドップラー: 1/4 符号拡張可能なセグメント
セグメント 0 (バイト 0-7): imm32 -904391254 (0xca1815aa) => .equ EXPECTED_KEY_0, 0xca1815aa
セグメント 1 (バイト 8-15): 0xcd61910e9f5edb4e (符号拡張不可) => .equ EXPECTED_KEY_1, 0xcd61910e9f5edb4e
セグメント 2 (バイト 16-23): 0x91f8ae8d74e04ddf (符号拡張不可) => .equ EXPECTED_KEY_2, 0x91f8ae8d74e04ddf
セグメント 3 (バイト 24-31): 0x3423fa148de6ec68 (符号拡張不可) => .equ EXPECTED_KEY_3, 0x3423fa148de6ec68
完了:6秒間で16,085,250回の試行(2,672,178回/秒)
プログラムが特定の公開鍵をハードコードし、それに対して受信アカウントを照合する場合(たとえば、既知の管理者アカウントのみを通過させるアクセス制御ゲートなど)、その32バイトの鍵を読み込み、呼び出しのたびに照合を行う必要があります。A grind-doppler keyは、その負荷の一部を低コスト化するように構成されており、これにより各比較の演算コストが削減されます。この --セグメント フラグ(1~4)は、この処理がキーのどの程度に適用されるかを制御します。セグメント数が多いほど節約効果は大きくなりますが、処理時間は指数関数的に長くなります。
これは、オンチェーン演算が真の制約となる場合、たとえば、命令ごとの演算単位が一つひとつ重要になるほど利用頻度の高いプログラムの場合などにのみ問題となります。通常のウォレット、トークンの鋳造、あるいは単発のプログラムにおいては、これによって得られるメリットは何もありません。 キーペアの生成…ですので、計算負荷の最小化を明確な目標としている場合にのみ、これを利用してください。
一般的な洗面化粧台のオプション
これらのフラグは、すべてのグラインドモードに適用されます:
| 旗 | 適用対象 | デフォルト | 意味 |
|---|---|---|---|
--num-cpus <N> | すべて | 0 (すべての論理コア) | CPUマイニングスレッド |
--num-gpus <N> | すべて(GPUビルド) | 1 | マイニングに使用するGPU |
--count <N> | すべて | 1 | N件の一致が見つかったら停止する |
--大文字小文字を区別しない | グラインド, キーペアの生成 | オフ | 大文字小文字を区別せずに一致させる |
--prefix / --接尾辞 | グラインド, キーペアの生成 | なし | base58 ターゲット;少なくとも1つ指定してください |
--segments <1-4> | grind-doppler | 1 | 符号拡張可能なセグメントが必要 |
適切なツールを選ぶ
この「迅速な判断ガイド」を参考にして、モードを選んでください:
| あなたの目標 | 使用方法 |
|---|---|
| 余分なセットアップが一切不要な、2~5文字の短いパターン | solana-keygen の処理に時間がかかる |
| ウォレットやプログラムIDなど、署名が必要な読み取り可能なアドレス | バニティ・グラインド・キーペア |
| ウォレットやプログラムによって管理されるアドレスにおける優れたパターン。例えば、トークンの鋳造、ステーキング口座、あるいはプログラム所有の口座など(これが最も迅速であり、外部委託しても安全な唯一の選択肢である) | 見栄のためのレベル上げ |
| 利用頻度の高いプログラム内における、より安価なオンチェーン鍵の比較 | バニティ・グラインド・ドップラー |
セキュリティの確保
ウォレットの作成方法にかかわらず、ウォレットのセキュリティに関するベストプラクティスに従ってください。キーペアのファイルはバージョン管理システムに含めないようにし、信頼できないツールに秘密鍵やシードフレーズを貼り付けないよう注意してください。また、「シードとキーペアの区別」というルールを忘れないでください:a グラインド seedは安全に共有できますが、a キーペアの生成 秘密鍵はそうではありません。より詳しい解説については、当社の 暗号資産ウォレットの概要とセキュリティ対策.
まとめ
これで、Solanaのバニティアドレスを取得する方法は2つあり、さらに重要なことに、その2つから適切なものを選ぶための知識も身についたことになります。 solana-keygen の処理に時間がかかる 追加の金型を必要とせず、わずか数秒で短いパターンを得ることができます。一方、 虚栄心 本物のミントやウォレットが求めるスピードと、より長いパターンを実現します。
よくある質問
ソラナのバニティアドレスとは何ですか?
バニティアドレスとは、「QN」で始まるものなど、任意の接頭辞や接尾辞を含むソラナ(Solana)のアドレスのことです。これは、パターンに一致するアドレスが見つかるまで、候補となるアドレスを繰り返し生成することで見つけ出されます。一致の判定は総当たり法で行われるため、文字が1つ増えるごとに検索にかかる時間が指数関数的に遅くなります。
solana-keygen grindとヴァニティツールの違いは何ですか?
solana-keygen grindはSolana CLIに組み込まれており、CPU上で動作します。2~5文字の短いパターンを探す最も簡単な方法です。一方、vanityツールはGPU加速に対応しており、単一のハイエンドGPU上で1秒あたり10億件をはるかに超える候補を検索できるため、より長いパターンの生成も現実的です。また、solana-keygenにはないシード生成機能やドップラー鍵ペアの生成機能も備えています。
種か、キーペアか、どちらを粉砕すべきでしょうか?
ウォレットやプログラムIDなど、アドレス自体が署名を行う必要がある場合は、キーペアをグラインド(grind-keypair)します。トークンの鋳造、ステーキングアカウント、プログラム所有のアカウントなど、アドレスがウォレットやプログラムによって管理されている場合は、シードをグラインド(grind)します。シードのグラインドは、楕円曲線演算を伴わない純粋なSHA-256ハッシュ処理であるため、処理速度が約20倍速くなります。
レンタルGPUを使ってバニティアドレスをマイニングしても安全でしょうか?
grind から生成されたシードは公開鍵であり、制御権は付与されないため、公開鍵のみを共有して外部に委託しても安全です。一方、grind-keypair から生成された鍵ペアには秘密鍵が含まれているため、自分が管理していないハードウェアでこれを生成すると、秘密鍵が漏洩する恐れがあります。
長いプレフィックスをグラインドするのに、なぜこれほど時間がかかるのでしょうか?
Base58では、各位置に58種類の文字が候補として存在するため、制約をかける文字が1つ増えるごとに、検索対象となるアドレスの数はおよそ58倍に増加します。2文字のプレフィックスならほぼ瞬時に見つかりますが、9文字のプレフィックスの場合は、CPUでは現実的ではないほどの時間がかかることがあります。そのため、より長いパターンを検索するにはGPUによる高速化が必要となります。
グラインド・ドップラーはどのような用途に使われるのですか?
grind-doppler は、署名拡張可能な 32 ビットのセグメントを含む生の公開鍵バイトを持つ、署名可能な鍵ペアを生成します。これは、期待される鍵をハードコードして比較を行う、手作業でチューニングされた sBPF プログラムの作成者向けのニッチな最適化であり、署名拡張可能な各セグメントによって、比較 1 回あたり 1 演算単位の処理負荷を削減できます。
リソース
皆様からのフィードバックを心よりお待ちしております!❤️
ご意見や新しいトピックに関するご要望などがありましたら、ぜひお知らせください。皆様からのご連絡を心よりお待ちしております。
