読了時間:5分
概要
PHPは、ウェブサイトやウェブアプリケーションのバックエンド開発において非常に広く利用されています。PHPを主力言語として信頼する開発者は大勢います。このガイドでは、PHPを使って新しいイーサリアムアドレスを生成する方法について解説します。
前提条件
- gmp 拡張機能がインストールされた PHP 7.0 以降。
- Composer がインストールされました
- テキストエディタ
- CLI
イーサリアムアドレスとは何ですか?
インターネット上のどのプラットフォームにログインする際も、認証情報を使って本人確認を行う必要があります。イーサリアムアドレスをユーザー名、それに対応する秘密鍵をパスワードと見なしてください。イーサリアムアドレスは公開されており、他人と共有することも可能ですが、秘密鍵は常に秘密にしておく必要があります。この組み合わせを使用することで、イーサリアムブロックチェーンとやり取りを行うことができます。 イーサリアムアドレスはブロックチェーン上でのあなたのIDであり、次のような形式になります。「0x6E0d01A76C3Cf4288372a29124A26D4353EE51BE」。有効なイーサリアムアドレスは、以下の目的で必要となります:
- イーサリアムの送受信
- 取引の署名・送信
- 分散型アプリケーションへの接続
イーサリアムアドレスの生成方法:
まず、64文字(16進数)のランダムな秘密鍵(256ビット/32バイト)が生成されます。例:
0xf4a2b939592564feb35ab10a8e04f6f2fe0943579fb3c9c33505298978b74893
その後、生成された秘密鍵を用いて、楕円曲線デジタル署名アルゴリズム(ECDSA)により、128(16進数)文字(64バイト)の公開鍵が導出されます。例えば:
0x04345f1a86ebf24a6dbeff80f6a2a574d46efaa3ad3988de94aa68b695f09db9ddca37439f99548da0a1fe4acf4721a945a599a5d789c18a06b20349e803fdbbe
次に、公開鍵(128文字/64バイト)にKeccak-256ハッシュ関数を適用し、64文字(32バイト)のハッシュ文字列を生成します。この文字列の最後の40文字/20バイトに0xを接頭辞として付加したものが、最終的なイーサリアムアドレスとなります。例えば:
0xd5e099c71b797516c10ed0f0d895f429c2781142
注:コーディングにおける「0x」は、その数値または文字列が16進数で表記されていることを示します。
PHPとは何ですか?
PHPは「Hypertext Preprocessor」の頭文字をとった再帰的頭字語です。PHPは、通常HTMLに埋め込まれて使用される、広く普及しているオープンソースのサーバーサイドスクリプト言語です。 データベースの管理、セッション追跡、動的コンテンツの生成などに使用され、MySQL、PostgreSQL、MS SQL Serverなど、ほぼすべての一般的なデータベースに対応しています。C言語に似た構文を持ち、LDAP、IMAP、POP3などの主要なプロトコルをサポートしています。PHP4ではJavaおよび分散オブジェクトアーキテクチャ(COMおよびCORBA)への対応が追加され、初めてn層開発が可能になりました。
**
PHPの日常的な活用例
**
- クッキー変数を設定および参照するには。
- Webフォームから情報を収集するため。
- ファイルの開いたり閉じたりといったシステム機能を実行するため。
- データベース内の要素を追加、削除、および変更する。
- Webページにユーザーごとの制限を追加する。
**
以下に、PHPのいくつかの特徴を挙げます
**
- 拡張性
- 柔軟性
- シンプルさ
- 大文字と小文字を区別する
- 型付けが緩い
- 通訳された
- オープンソース
PHP およびその他の依存関係のインストール
住所を生成するために必要な依存関係をインストールする前に、システムにPHPがインストールされているかどうかを確認しましょう。確認するには、以下の内容をコピーして貼り付け、ターミナルまたはコマンドプロンプトで実行してください。
$ php -v
PHPのバージョンが表示されるはずです。インストールされていない場合は、PHP公式ウェブサイトのダウンロードページにある手順に従って、お使いのOSに対応したPHPをダウンロードしてください。
PHPのgmp拡張機能をインストールする必要があります。php.initファイルからその行のコメントを外すか、以下の手順に従って手動でインストールしてください。
$ sudo apt-get install php-gmp
注:gmpを有効にする際は、上記の方法のうちいずれか1つだけを使用する必要があります。
Macの場合:
brew を使って PHP を再インストールすると、gmp 拡張機能を有効にすることができます。以下のコマンドを入力してください:
$ brew reinstall php@7.2
$ export PATH="/usr/local/opt/php@7.2/bin:$PATH"
$ brew services restart php@7.2
$ php -info | grep "GMP"
アドレスの生成や鍵の生成に必要なPHPライブラリや依存関係を管理するために、Composer(PHP用の依存関係管理ツール)を使用します。ターミナルまたはコマンドプロンプトで以下のコマンドを実行し、お使いのシステムにComposerがインストールされているかどうかを確認してください:
インストールされていない場合は、Composerのウェブサイトのダウンロードページの手順に従って、ダウンロードしてインストールしてください。
それでは、プロジェクトディレクトリ内に「composer.json」という名前のJSONファイルを作成し、そこに以下の内容をコピー&ペーストしてください。
{
"require": {
"sop/asn1": "^3.3",
"sop/crypto-encoding": "^0.2.0",
"sop/crypto-types": "^0.2.1",
"kornrunner/keccak": "^1.0",
"symfony/dotenv": "^4.0",
"sc0vu/web3.php": "dev-master"
}
}
ファイルを保存し、Composer を使って依存関係をインストールします:
$ composer install
これにより、必要な依存関係がディレクトリにインストールされます。
PHPでイーサリアムアドレスを生成する
次に、そのディレクトリ内に「Address.php」という名前の新しいPHPファイルを作成し、以下の内容をコピーして貼り付けてください。
<?
require_once "vendor/autoload.";
use Sop\CryptoTypes\Asymmetric\EC\ECPublicKey;
use Sop\CryptoTypes\Asymmetric\EC\ECPrivateKey;
use Sop\CryptoEncoding\PEM;
use kornrunner\Keccak;
$config = [
'private_key_type' => OPENSSL_KEYTYPE_EC,
'curve_name' => 'secp256k1'
];
$res = openssl_pkey_new($config);
if (!$res) {
echo 'ERROR: Fail to generate private key. -> ' . openssl_error_string();
exit;
}
openssl_pkey_export($res, $priv_key);
$key_detail = openssl_pkey_get_details($res);
$pub_key = $key_detail["key"];
$priv_pem = PEM::fromString($priv_key);
$ec_priv_key = ECPrivateKey::fromPEM($priv_pem);
$ec_priv_seq = $ec_priv_key->toASN1();
$priv_key_hex = bin2hex($ec_priv_seq->at(1)->asOctetString()->string());
$priv_key_len = strlen($priv_key_hex) / 2;
$pub_key_hex = bin2hex($ec_priv_seq->at(3)->asTagged()->asExplicit()->asBitString()->string());
$pub_key_len = strlen($pub_key_hex) / 2;
$pub_key_hex_2 = substr($pub_key_hex, 2);
$pub_key_len_2 = strlen($pub_key_hex_2) / 2;
$hash = Keccak::hash(hex2bin($pub_key_hex_2), 256);
$wallet_address = '0x' . substr($hash, -40);
$wallet_private_key = '0x' . $priv_key_hex;
echo "\r\n SAVE BUT DO NOT SHARE THIS (Private Key): " . $wallet_private_key;
echo "\r\n Address: " . $wallet_address . " \n";
?>
上記のコードの説明
1行目:PHPスクリプトをPHPの開始タグで開始します。
3行目~8行目:インストール済みの依存関係をインポートします。
10~20行目:secp256k1曲線を使用して秘密鍵を生成します。
22行目:秘密鍵の生成。
24~25行目:公開鍵の取得。
29~31行目:鍵を楕円曲線秘密鍵形式に変換し、さらにASN.1構造体に変換する。
33行目~36行目:秘密鍵と公開鍵を16進数形式で取得する。
38~39行目:公開鍵からイーサリアムアドレスを導出する際、すべての公開鍵は常に0x04で始まるが、
正しくハッシュ化するために、先頭の 0x04 を削除する。
41行目:アドレスをハッシュ形式で取得する。
43行目:アドレスのハッシュに「0x」という接頭辞を付け、その最後の40文字を取得して、wallet_address変数に格納します。
44行目:秘密鍵に「0x」という接頭辞を追加し、それを wallet_private_key 変数に格納します。
46行目:警告を表示して秘密鍵を出力します。
47行目:「Address:」という文字列とともにイーサリアムアドレスを出力する
それでは、ファイルを保存して、スクリプトを実行してください。
$ php Address.php
すべてが計画通りに進めば、このような感じになるはずです。

結論
PHPで独自のイーサリアムアドレスを生成できたこと、おめでとうございます。これを使って、素晴らしい分散型ウォレットを作成することができます。
イーサリアムに関する記事やガイドをもっと読みたい方は、ぜひニュースレターにご登録ください。ご意見やご感想がございましたら、Twitterからお気軽にお寄せください。また、Discordコミュニティサーバーでは、これまで出会った中で最もクールな開発者たちが集まっていますので、いつでもお気軽にチャットで交流してください :)
