このエントリーをはてなブックマークに追加


NEM(XEM)のハーベストの有効・無効状態を取得するサンプルコード(PHP)

NEM(XEM)のハーベストをしていると、時々ハーベスト状態が無効となっていることがあります。
毎回Nano Walletを起動して確認するのも面倒?ですし、今回紹介するサンプルコードを自動実行し、
ハーベストが無効になっていた場合にメールを送るようなこともできるようになります。
以下にPHPによるサンプルコードおよび実行結果を記します。


スポンサーリンク

参考サイト

NEM(XEM)の取引ができる日本の取引所

上記の2つの値を取得する手順を以下に記します。

準備

本記事で紹介するサンプルコードを実行するにあたり、以下の2つの値を準備する必要があります。

  1. リモートアカウント
  2. デリゲート(委任先)ノード

リモートアカウントの取得手順

Nano Wallet 2.0.14 のスクリーンショットを使い説明します。

  1. Nano Walletにログインしてください。
  2. サービス→デリゲートアカウント(委任アカウント)管理をクリックしてください。
    01.png
     
  3. デリゲートアカウントの有効化/無効化をクリックしてください。
  4. 以下のスクリーンショットのようにリモートアカウントが表示されます。
    03.png

デリゲート(委任先)ノードの取得手順

上記ですでにNano Walletにログイン済なので一部割愛します。

  1. デリゲートハーベスティングを開始/停止をクリックします。
  2. 以下のスクリーンショットのようにデリゲート(委託先)ノードが表示されます。
    04.png

ハーベスト状態確認サンプルコード

ハーベスト状態を確認するサンプルコードは2つのファイルから構成されています。

  1. harvest.conf.php
    上記で取得した、リモートアカウントとデリゲート(委任先)ノードを設定します。
  2. harvest_status.php
    デリゲート(委任先)ノードにハーベスト状態を問い合わせるサンプルコードになります。

harvest.conf.php

本サンプルコードでは、リモートアカウントとデリゲート(委任先)ノードを設定します。
$DELEGATE_NODEと$REMOTE_ACCOUNTに上記で取得した値を設定してください。

<?php
$DELEGATE_NODE="";
$REMOTE_ACCOUNT="";

  • リモートアカウントがABCDEFG1234567890, デリゲート(委任先)ノードがfoo.nodeの場合
    <?php
    $DELEGATE_NODE="foo.node";
    $REMOTE_ACCOUNT="ABCDEFG1234567890";

harvest_status.php

本サンプルコードでデリゲート(委託先)ノードにハーベスト状態を問い合わせします。

<?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)のハーベスト状態を確認するサンプルコードでした。


スポンサーリンク

添付ファイル: file04.png 297件 [詳細] file03.png 296件 [詳細] file01.png 268件 [詳細] fileharvest_status.php 290件 [詳細] fileharvest.conf.php 297件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-01-03 (水) 14:36:39