PHPでNEMを取り扱う必要があったので、TestnetでXEMを送るところまで検証してみました。
※最近、NEM2(Catapult)の話ばかりしていましたが、今回の話は現行NEMの話です。
ライブラリの導入
今回は、nem-phpを使ってみました。
ライブラリはcomposerを使ってインストールしましたが、kornrunner/keccak
のdev-master
に依存しているらしく、requireにevial/npm-php
だけ指定しただけではうまくインストールできないので、注意が必要です。
composer.jsonは以下のような感じになります。
{
"name": "daoka/nem-php-sample", // 任意の名前を設定
"require": {
"kornrunner/keccak": "dev-master",
"evias/nem-php": "^0.2.11"
},
"autoload": {
"psr-4": {
"NemPhpSample\\": "src/" // 任意の名前に変えておく
}
}
}
XEMを送金してみる
以下のソースコードを参照。
<?php
require_once("vendor/autoload.php");
$nemAPI = new NEM\API();
$nemAPI->setOptions([
"protocol" => "http",
"use_ssl" => false,
"host" => "192.3.61.243",
"port" => 7890,
"endpoint" => "/",
]);
$sdk = new NEM\SDK([], $nemAPI);
$privateKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
$keypair = new NEM\Core\KeyPair($privateKey);
// 送信したいメッセージを指定
$message = new NEM\Models\Message();
$message->setPlain("hogehoge");
// TimeStampはUNIXタイムからnemesisタイムを引いた値にする
$timeStamp = time() - NEM\Models\TimeWindow::$nemesis;
// deadlineはtimeStampから24時間以内の時間を指定する
$deadline = $timeStamp + 24 * 60 * 60;
$txData = [
"timeStamp" => $timeStamp,
"deadline" => $deadline,
// トランザクションのタイプを指定する
"type" => NEM\Models\TransactionType::TRANSFER,
"amount" => 1000000, // マイクロXEMで指定する
"message" => $message,
// 送信先アドレス
"recipient" => "TXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
// メインネットなのか、テストネットなのか、モザイク添付ありなので変わる
"version" => NEM\Models\Transaction::VERSION_1_TEST
];
// トランザクションのモデルを生成
$transferTx = NEM\Models\Transaction::create($txData);
$service = $sdk->transaction();
// 送信するアカウントの秘密鍵で署名して、ネットワークに流す。
$result = $service->announce($transferTx, $keypair);
var_dump($result);