NEM(XEM)のハーベストをしていると、時々ハーベスト状態が無効となっていることがあります。
毎回Nano Walletを起動して確認するのも面倒?ですし、今回紹介するサンプルコードを自動実行し、
ハーベストが無効になっていた場合にメールを送るようなこともできるようになります。
以下にPHPによるサンプルコードおよび実行結果を記します。
上記の2つの値を取得する手順を以下に記します。
本記事で紹介するサンプルコードを実行するにあたり、以下の2つの値を準備する必要があります。
Nano Wallet 2.0.14 のスクリーンショットを使い説明します。
上記ですでにNano Walletにログイン済なので一部割愛します。
ハーベスト状態を確認するサンプルコードは2つのファイルから構成されています。
本サンプルコードでは、リモートアカウントとデリゲート(委任先)ノードを設定します。
$DELEGATE_NODEと$REMOTE_ACCOUNTに上記で取得した値を設定してください。
<?php $DELEGATE_NODE=""; $REMOTE_ACCOUNT="";
<?php $DELEGATE_NODE="foo.node"; $REMOTE_ACCOUNT="ABCDEFG1234567890";
本サンプルコードでデリゲート(委託先)ノードにハーベスト状態を問い合わせします。
<?php
// API: Requesting the account status
// https://nemproject.github.io/#requesting-the-account-status
// status
// UNLOCKED : Harvest enabled.
// LOCKED : Harvest disabled.
// DELEGATE NODE and REMOTE ACCOUNT config file
$NEM_HARVEST_CONF="./harvest.conf.php";
// proxy settings
$proxy = "";
$proxy_port = "";
if (!file_exists($NEM_HARVEST_CONF)) {
fputs(STDERR, "[ERR] " . $NEM_HARVEST_CONF . " file not found." . PHP_EOL);
die(1);
}
require_once($NEM_HARVEST_CONF);
if (empty($DELEGATE_NODE) or empty($REMOTE_ACCOUNT)) {
fputs(STDERR, "[ERR] Please check \$DELEGATE_NODE and \$REMOTE_ACCOUNT value." . PHP_EOL);
die(2);
}
// API URL : <DELEGATE NODE>:7890/account/status?address=<REMOTE ACCOUNT>
$url = $DELEGATE_NODE . ":7890/account/status?address=" . $REMOTE_ACCOUNT;
$curl = curl_init();
if ($curl == FALSE) {
fputs(STDERR, "[ERR] curl_init(): " . curl_error($curl) . PHP_EOL);
die(1);
}
// curl set options
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
// set proxy server settings
if (!empty($proxy) && !empty($proxy_port)) {
curl_setopt($curl, CURLOPT_HTTPPROXYTUNNEL, 1);
curl_setopt($curl, CURLOPT_PROXY, $proxy . ":" . $proxy_port);
curl_setopt($curl, CURLOPT_PROXYPORT, $proxy_port);
}
// call status api
$response = curl_exec($curl);
if ($response == FALSE) {
fputs(STDERR, "[ERR] curl_exec(): " . curl_error($curl) . PHP_EOL);
die(1);
}
curl_close($curl);
// json decode
$json_decode = json_decode($response, true);
if ($json_decode == NULL) {
fputs(STDERR, "[ERR] json_decode(): " . json_last_error_msg() . PHP_EOL);
die(1);
}
// check response
if (!array_key_exists("status", $json_decode)) {
fputs(STDERR, "[ERR] unknown response: " . print_r($json_decode, TRUE) . PHP_EOL);
die(1);
}
// check harvest status
$status = $json_decode["status"];
switch ($status) {
case "UNLOCKED":
echo "enabled" . PHP_EOL;
break;
case "LOCKED":
echo "disabled" . PHP_EOL;
break;
default:
fputs(STDERR, "[ERR] unknown status: " . $status . PHP_EOL);
die(1);
}
exit(0);
本サンプルコードを実行した時の出力です。
$ php harvest_status.php enabled
$ php harvest_status.php disabled
以上、NEX(XEM)のハーベスト状態を確認するサンプルコードでした。