LoginSignup
11
8

More than 5 years have passed since last update.

NEMブロックチェーンの履歴をさかのぼって検索し、JavaScriptで表示する。

Last updated at Posted at 2017-06-12

NEM APIでは一度のAPIアクセスで最大25件しか履歴を検索することができません。
おそらくスーパーノードへの負荷を軽減するためだと思われます。
そのため、入出金履歴など25件検索したあと、さらに過去に遡って履歴を検索したい場合は再度APIにアクセスする必要があります。

具体的には入出金履歴などで取得できるmeta情報にid属性があるので、次にアクセスする時にその値を指定してあげることで、そのidよりも以前の入出金履歴を25件取得することができます。
追記:hash値でもさかのぼることができます(&hash= 指定)。idはノードごとに異なる値が割り当てられますが、meta->hash->data で取得できる値は全てのノードで共通ですので、用途によってはこちらの方がよいかもしれません。

fetch_transaction

var LAST_ID;
var ACCOUNT_TRANSFERS  = "http://" + target_ip + "/account/transfers/all?address=";
$.ajax({url: ACCOUNT_TRANSFERS + address ,type: 'GET'}).done(function(res){parse_transfers(res)});

$('#transfers_more').click(function(){
    $.ajax({url: ACCOUNT_TRANSFERS + address + "&id=" + LAST_ID,type: 'GET'}).done(function(res){parse_transfers(res)});
    return false;
})

var parse_transfers = function(result){

    var dataArray = result.data;
    dataArray.forEach(function(val){
        var meta = val.meta;
        LAST_ID = meta.id;
        var tran = val.transaction;

        $( "#transfers tbody" ).append( "<tr>" +
            "<td class='text-right'>" + tran.amount + "</td>" +
            "</tr>" );
        }
    });
}

htmlは以下のような感じです。

transfer_list
<div class="transfers col-sm-4">
    <h2>入出金履歴</h2>
    <table id="transfers">
        <thead>
        <tr>
            <th>金額</th>
        </tr>
        </thead>
        <tbody>
        </tbody>
    </table>
<dl>
    <dd><a id="transfers_more" href="javascript:void(0)" >さらに読み込む</a></dd>
</dl>
</div>

このような構成を取ることで、最初に25件を表示し、それ以降は”さらに読み込む”リンクをクリックすることで表示されるようになります。

具体的に動くプログラムはXEMBookに実装しているのでそちらのソースをご参考ください。

"address=" の後ろを各自のアドレスで指定してやることで、そのアカウントの履歴を参照することができます。またハーベストも同様に過去を遡ることができます。

11
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
8