はじめに
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を開きます。
いろいろなコレクションがあります。カタパルト起動直後は少ないですが、トランザクションが発生すると増えていくようです。
unconfirmedTransactionsというのを見てみます。
何か入ってますね。
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送金をたくさんします。
実行してみる
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だとそのままでは扱えない。
- 数値以外はバイナリで入っている。全部変換しないと読めない。