この記事は以前NEMLOGで投稿した記事を加筆したものです。
内容自体は大事だと思うので自分用のメモとして残しておきます。
はじめに
SymbolブロックチェーンのCatapult RESTを使ってブロックの日付を取得したいと思ってハマったことについて書こうと思います。
timestampから日付を取得したい!
まずはSymbolBlockExplorerを使って1番目のブロックを確認してみると「Timestamp」に「2021-03-16 09:06:25」が表示されています。
なのでCatapult RESTを使えば簡単に日付を取得できると思ったのが間違いの始まりでした。。
まずは、
SymbolのリファレンスとAPIドキュメントを参考にしてURLを作成して叩いてみます。
↓
https://symbolnode.blockchain-authn.app:3001/blocks/1
叩いてみると様々な情報が表示されると思いますが、今回は"timestamp"に注目します。
"timestamp":"0"
期待していた値と大分違います。。"2021-03-16 09:06:25"みたいなのが返ってくると思ってました。。
というか"0"ってなに???
日付を取得するにはネメシスブロックのタイムスタンプが必要
"timestamp":"0"について調べていくと目指せ北海道さんの記事に答えがありました!
(NEMLOGの記事なのでリンクは張りません。。一部引用します。)
タイムスタンプ(timestamp)は、ネメシスブロックからの時間経過を示し、ミリ秒単位で計算される。
なるほど。先程上で叩いたURLがネメシスブロックだったためにタイムスタンプが"0"だったんですね。
余談ですがネメシスブロックって何?って思って調べ始めました。。
1番目のブロックのことですね!カッコいい言い方すると「原初のブロック」です。
他のチェーンではジェネシスブロックと呼ばれるものですね。
さて、ここまでわかったのでネメシスブロックのタイムスタンプがいつなのかを調べる必要があります。
SymbolBlockExplorerを開いて「Symbol Time」に表示されている「1615853185」をメモっておきます。
これがネメシスブロックのタイムスタンプです。
ちなみにテストネットの場合は「1667250467」です。値が違うのでお間違えなきよう。。
「1615853185」はUTC秒と呼ばれるものなので日付に変換すると「2021-03-16 09:06:25」になります。
これがタイムスタンプの基準となります!ここまで調べるのにまる1日かかりました。。
あとは適当なブロックのタイムスタンプを計算すればOKです!
試しにブロック:90000で確認してみます。
↓
http://localhost:3000/blocks/90000
timestampの値は「2785638884」です!単位はミリ秒です。
先程メモっておいたSymbol Time「1615853185」は単位が秒なのでミリ秒に直します。
1615853185 * 1000 = 1615853185000
timestampの値にネメシスブロックのタイムスタンプを足します。
2785638884 + 1615853185000 = 1618638823884
これを日付に直せば「2021-4-17 14:53:43:884」となります。
日付に直すためのツールはhttps://yu-yum.net/epoch/を使用させていただきました。
さて、実際にhttps://symbol.fyi/blocks/90000を確認してみましょう!
Timestampには「2021-4-17 14:53:44」が表示されていますが多分四捨五入されているのでしょう。。
変換手順自体はこれで問題ないはずです。
まとめ
Symbol-sdk v2系が非推奨(deprecated)になっているため、Catapalt REST APIを使って情報を取得したい人が増えてくると思いますが、timestampの件はハマりそうだなと思うのでメモで残しておきます。
この記事が誰かの役に立ちますように……(/・ω・)/