LoginSignup
5
1

More than 5 years have passed since last update.

catapultのmongoDBからすべてのunconfirmed transactionを取得する

Posted at

はじめに

APIで取得できるトランザクションリストは、アカウントでフィルターされたものしかありません。

例えばブロックチェーンエクスプローラーとかだと、全部欲しいわけです。

mongoDB直接見たら、きっとできると思いました。

設定

tech-bureau/catapult-service-bootstrapでカタパルトを起動するとします。

docker-compose.ymlのdbサービスのところで、27017ポートを接続します。

docker-compose.yml
  db:
    image: mongo
    command: bash -c "mongod --dbpath=/dbdata --bind_ip=db"
    stop_signal: SIGINT
    ports:
    - "27017:27017"
    volumes:
    - ./data/mongo:/dbdata:rw
    - ./bin/bash:/bin-mount

あとは、サーバーのほうも、同じポート開放をしておきます。

GUIで見る

まずは、compassという、DB内を見れるGUIのソフトがあるので、使ってみます。

catapultという名前のdbを開きます。

いろいろなコレクションがあります。カタパルト起動直後は少ないですが、トランザクションが発生すると増えていくようです。

image.png

unconfirmedTransactionsというのを見てみます。

何か入ってますね。

image.png

Node.jsで見る

ここにあるコードを参考にしてみます。

const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');
require('dotenv').config();

// Connection URL
const url = process.env.DB_HOST || 'mongodb://localhost:27017';

// Database Name
const dbName = 'catapult';

// Use connect method to connect to the server
MongoClient.connect(url, function(err, client) {
    assert.equal(null, err);
    console.log("Connected successfully to server");

    const db = client.db(dbName);

    const findDocuments = function(db, callback) {
        // Get the documents collection
        const collection = db.collection('unconfirmedTransactions');
        // Find some documents
        collection.find({}).toArray(function(err, docs) {
            assert.equal(err, null);
            console.log("Found the following records");
            // console.log(docs);
            callback(docs);
        });
    };

    findDocuments(db, function(docs) {
        docs.map(doc => {
            console.log(`hash=${doc.meta.hash.buffer.toString('hex').toUpperCase()} signer=${doc.transaction.signer.buffer.toString('hex').toUpperCase()}`);
        });
    });

    client.close();
});

unconfirmedトランザクションを生み出す

MIJIN_TESTでは手数料いらないので、0XEM送金をたくさんします。

image.png

実行してみる

node sample4.js
(node:17888) DeprecationWarning: current URL string parser is deprecated, and will be removed in a future version. To use the new parser, pass option { useNewUrlParser: true } to MongoClient.connect.
Connected successfully to server
Found the following records
hash=0D364825033AD326A94EEC432309446FC8DC00055030C3B844E856460B808186 signer=AC1A6E1D8DE5B17D2C6B1293F1CAD3829EEACF38D09311BB3C8E5A880092DE26
hash=8594FA157EDF13B59227ADB72AA5F1F51624267F1DBACF442549B0C7DEA5E2E5 signer=AC1A6E1D8DE5B17D2C6B1293F1CAD3829EEACF38D09311BB3C8E5A880092DE26
hash=87FB89349960723F70472F35A0C02917DB0A1E6258BA19C47D895397250036F2 signer=AC1A6E1D8DE5B17D2C6B1293F1CAD3829EEACF38D09311BB3C8E5A880092DE26
hash=684D3E1A5FD3D512348B8C53DA7BDAFBE68AA31E159585B5CDA225A6637572C2 signer=AC1A6E1D8DE5B17D2C6B1293F1CAD3829EEACF38D09311BB3C8E5A880092DE26
hash=42904663DEF13D81F345F551A977740DDB3E50D0F3BA93219018711EA2ADFD27 signer=AC1A6E1D8DE5B17D2C6B1293F1CAD3829EEACF38D09311BB3C8E5A880092DE26
hash=0AC47F341E4CA46AAECCBC0EB501803B4F1138246AD043DFAD409DD169AB5259 signer=AC1A6E1D8DE5B17D2C6B1293F1CAD3829EEACF38D09311BB3C8E5A880092DE26
hash=91DF901791840F26D50F0C67DEFA1519A1A4E1E04B9017C6D8B4FDD8808C4055 signer=AC1A6E1D8DE5B17D2C6B1293F1CAD3829EEACF38D09311BB3C8E5A880092DE26
hash=830B22AEBB4B9B90F74F7F98F8C04A1E1EE6B790C237589BF65F7F80B7AE161D signer=AC1A6E1D8DE5B17D2C6B1293F1CAD3829EEACF38D09311BB3C8E5A880092DE26
hash=32966E1DAAACEACA7321C927FC9F8EC481FF68A0FD3E58A88ED5C430C4BFDD6F signer=AC1A6E1D8DE5B17D2C6B1293F1CAD3829EEACF38D09311BB3C8E5A880092DE26
hash=30F309352563F79BDF4B73DFD1621D13459DD35045C2F2DE3A74A5119BBD4B2B signer=AC1A6E1D8DE5B17D2C6B1293F1CAD3829EEACF38D09311BB3C8E5A880092DE26
hash=3AB638F606DF66F1EDB066BD55DC22BF1F75DEDA349BDEA2505A3D79C4FC8B27 signer=AC1A6E1D8DE5B17D2C6B1293F1CAD3829EEACF38D09311BB3C8E5A880092DE26
hash=0DC28EF688B35EC5923BAF1B5C82C6885F35223F3748A96A221E6EE35061FA0E signer=AC1A6E1D8DE5B17D2C6B1293F1CAD3829EEACF38D09311BB3C8E5A880092DE26
hash=E1C2C37DD888FD508F3A0EEA8AF60310C671A86C7FA85B9BA8C1ED82194F845C signer=AC1A6E1D8DE5B17D2C6B1293F1CAD3829EEACF38D09311BB3C8E5A880092DE26
hash=DC247227E9DCC99DF986167CF971992A342D974B0C4FF63F3F45B352403C6CC7 signer=AC1A6E1D8DE5B17D2C6B1293F1CAD3829EEACF38D09311BB3C8E5A880092DE26
hash=10D744D73E7BF5F78A70097476A29DBE458E6A6EEBA14F32901A1D424F401FB0 signer=AC1A6E1D8DE5B17D2C6B1293F1CAD3829EEACF38D09311BB3C8E5A880092DE26
hash=B0DD864D0910713F5674FBDD36108180D54F6D8F6AEE3B5962A3A21C51BC096E signer=AC1A6E1D8DE5B17D2C6B1293F1CAD3829EEACF38D09311BB3C8E5A880092DE26
hash=A54DB32E218ACCE671724718E4FE2C65DE05077761EA91CE66EE1F3B6EDF1CCD signer=AC1A6E1D8DE5B17D2C6B1293F1CAD3829EEACF38D09311BB3C8E5A880092DE26
hash=5681DA6A68BA85576F6BC18EEBA36FEA3B24EAF3C995C943A64CBCA08A9E77AC signer=AC1A6E1D8DE5B17D2C6B1293F1CAD3829EEACF38D09311BB3C8E5A880092DE26

たくさん取得できました。

おわりに

サクッと取得できました。

  • モザイクIDがsignedで表示されてる。unsignedに変換がいる?
  • 数値は64バイトで入ってるっぽい。jsだとそのままでは扱えない。
  • 数値以外はバイナリで入っている。全部変換しないと読めない。
5
1
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
5
1