Ubuntu20.04にrippledをインストール

うぇぶ

BTCやGETHと違って日本語の情報が少ないので公式を頼りに根気よくいきます。。

インストール

とりあえず公式の手順の通りに行ったところですんなりインストールは完了。

テストネットについて

テスト用にテストネットを用意できるかを知りたい。
こちらのサイトの情報によると、多少の変更と再起動でいけそう。ありがたや。
公式リンク

ところが試しにコマンドを打ってみたがどうやらledgerと同期が上手くできていないみたい。。
ポート80も443も開けてないのが原因か…?

$ rippled ledger_closed
Loading: "/etc/opt/ripple/rippled.cfg"
2021-Jul-25 10:36:29.986863081 UTC HTTPClient:NFO Connecting to 127.0.0.1:5005

{
   "result" : {
      "error" : "noCurrent",
      "error_code" : 16,
      "error_message" : "Current ledger is unavailable.",
      "request" : {
         "api_version" : 1,
         "command" : "ledger_closed"
      },
      "status" : "error"
   }
}

Githubにissueを立てて質問したりと格闘しつつ、最終的にfreelancer.comで海外のフリーランサーを探して$100で原因を見つけてもらった。

ようはディスクioが99%になっていて、SSDのパワー不足だった。
そこでAWSのgp2からio1に変更し、IOPSを300から3000に変更したところ、再起動ですんなり解決。
公式にも最低1000IOPSとの記述があった。

何はともあれ。。

実装

全然日本語の情報が無いのと、英語で探しても実装例が見つからないので苦労したが、実際はシンプルだった。。

ただ送金等を行うには、アドレスごとに10XRPの基本準備金?なるものを入れておく必要があるみたい。
https://xrpl.org/reserves.html

送金結果や残高の確認はこちらから
https://test.bithomp.com/

$drop = 1000000;
$reserved = 20000000;

const URL = 'http://127.0.0.1:5005/';
function postJson($json, $url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($json));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
}

// アドレス発行
if ($params->method == "getnewaddress") {
	$data = array(
		"jsonrpc" => "2.0",
		"method" => "wallet_propose",
		"params" => array(
			array("key_type" => "secp256k1"),
		),
		"id" => 1,
	);
	echo postJson($data, URL);
}


// 残高確認
if ($params->method == "getbalance") {
	$data = array(
		"jsonrpc" => "2.0",
		"method" => "account_info",
		"params" => array(
			array("account" => $params->address),
		),
		"id" => 1,
	);
	echo postJson($data, URL);
}

// 送金
if ($params->method == "sendTransaction") {
	// Fee計算
	$data = array(
		"jsonrpc" => "2.0",
		"method" => "server_info",
		"params" => array(),
		"id" => 1,
	);
	$response = json_decode(postJson($data, URL));
	$fee = $response->result->info->validated_ledger->base_fee_xrp * $drop;

	// Transfer
	$data = array(
		"jsonrpc" => "2.0",
		"method" => "sign",
		"params" => array(
			array(
				"offline" => false,
				"secret"  => $params->phrase,
				"tx_json" => array(
					"Account" => $params->from,
					"Amount"  => ($params->amount * $drop) - $fee - $reserved,
					"Destination" => $params->to,
					"TransactionType" => "Payment"
				),
			),
		),
		"id" => 1,
	);
	$response = json_decode(postJson($data, URL));
	if ($response->result->status == "success") {
		$data = array(
			"jsonrpc" => "2.0",
			"method" => "submit",
			"params" => array(
				array("tx_blob" => $response->result->tx_blob)
			),
			"id" => 1,
		);
		echo postJson($data, URL);
	}
}

Follow me!

コメント

PAGE TOP