ビットコインのアドレス
ビットコインのアドレスは公開鍵と秘密鍵のペアです
ビットコインの公開鍵は特に暗号化するのに使うわけでもなくビットコインアドレスという支払い受付用の他人に見せてもよいアドレスにするためだけに使われます
秘密鍵はデジタル署名として使いトランザクションスクリプトを用いてビットコインの残高を動かすのに使います。
一般的な用途の公開鍵(暗号化)と秘密鍵(複合化)という使い方とは違った使い方をします。
(ただし、このアドレスは俺のものだと証明するのにk)
普段見かける1xxxxxxxxxx や 3xxxxxxxxxxxなどの形式はビットコインアドレスといい公開鍵にHash160とBase58Checkというチェックサム付きのエンコードをかけて表示しています
ビットコインアドレス生成の一連の流れ
bitcore-libというjavascriptのライブラリを用いてコードを記載します。
以下のコマンドでインストールできます
console
npm i bitcore-lib
秘密鍵->公開鍵->ビットコインアドレスと順番に生成していきますが逆にはたどれません。
※注意事項としてここでは秘密鍵を気軽にハードコードしてますがそれはかなり危険な行為です。
まずはランダムに秘密鍵の生成から
javascript
var bitcore = require('bitcore-lib');
var network = 'livenet';
var privateKey = new bitcore.PrivateKey(network);
console.log(privateKey.toString());
console
69a97488152a6db9efe3f5c3d96b397cc09114c8267f4e0269830b47c9c04b69
生の秘密鍵からWIF形式の生成
- WIFはウォレット間で秘密鍵を移動する場合に考案された方式
javascript
var bitcore = require('bitcore-lib');
var network = 'livenet';
var privkey = '69a97488152a6db9efe3f5c3d96b397cc09114c8267f4e0269830b47c9c04b69';
var privateKey = new bitcore.PrivateKey(privkey, network);
console.log(privateKey.toWIF());
console
cR86SboG3dmS2u43hENCT2xfhtu8UkBcAqLFvJU55LvPw8CAjkFj
WIFから秘密鍵の取り込み
javascript
var bitcore = require('bitcore-lib');
var wif = 'cR86SboG3dmS2u43hENCT2xfhtu8UkBcAqLFvJU55LvPw8CAjkFj';
var privateKey = bitcore.PrivateKey.fromWIF(wif);
console.log(privateKey.toString());
console
69a97488152a6db9efe3f5c3d96b397cc09114c8267f4e0269830b47c9c04b69
秘密鍵から公開鍵の取得
javascript
var bitcore = require('bitcore-lib');
var network = 'livenet';
var privkey = '69a97488152a6db9efe3f5c3d96b397cc09114c8267f4e0269830b47c9c04b69';
var privateKey = new bitcore.PrivateKey(privkey, network);
var publicKey = privateKey.toPublicKey();
console.log(publicKey.toString());
console
02c8fa0c8d1edefcd78177af0d834cba9f49fd1396a214a204aaca81561eea02de
公開鍵からビットコインアドレスの取得
javascript
var bitcore = require('bitcore-lib');
var network = 'livenet';
var pubKey = '02c8fa0c8d1edefcd78177af0d834cba9f49fd1396a214a204aaca81561eea02de';
var publicKey = new bitcore.PublicKey(pubKey, network);
var address = publicKey.toAddress();
console.log(address.toString());
console
1HGxskriFLBsnQcG2zb6LyZybJC97b3EZe
ビットコインアドレスを取得
javascript
var bitcore = require('bitcore-lib');
var network = 'livenet';
var btcAddr = '1HGxskriFLBsnQcG2zb6LyZybJC97b3EZe';
var address = new bitcore.Address(btcAddr, network);
console.log(address.toString());
console
1HGxskriFLBsnQcG2zb6LyZybJC97b3EZe
ビットコインアドレスのバリデーションかける
javascript
var network = 'livenet';
var btcAddr = '1HGxskriFLBsnQcG2zb6LyZybJC97b3EZe';
var error = bitcore.Address.getValidationError(btcAddr, network);
if (error) {
// 無効なアドレス
var message = error.messsage;
}