LoginSignup
9
5

実際の時間とSymbol時間

Last updated at Posted at 2024-02-27

deadlineは実際の時間から数時間後と設定することが多いですが、Symbolのネットワーク時間は少し未来です。

実際の時間とSymbol時間を表示するコード

import symbolSdk from 'symbol-sdk';

const NODE = 'http://finnel.harvestasya.com:3000';

// /node/time を取得
const nodeTimeResponse = await fetch(new URL('/node/time', NODE), {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
});

// 実時間取得
const actualTime = new Date();

// /node/time からネットワーク時間算出
const nodeTimeJson = await nodeTimeResponse.json();
const symbolTime = Number(
  nodeTimeJson.communicationTimestamps.receiveTimestamp
);
const facade = new symbolSdk.facade.SymbolFacade('mainnet');
const networkDate = facade.network.toDatetime(
  new symbolSdk.symbol.NetworkTimestamp(symbolTime)
);

// 表示
console.log(`ActualTime: ${actualTime}`);
console.log(`SymbolTime: ${networkDate}`);

/node/timeとは

/node/timeは、Symbol時間をこういうJsonを返します。sendTimestampreceiveTimestampが異なる値になっているのは見たことないので、どちらを使用しても良いかと思います。

{
  "communicationTimestamps": {
    "sendTimestamp": "93214047045",
    "receiveTimestamp": "93214047045"
  }
}

実行

ActualTime: Wed Feb 28 2024 05:42:46 GMT+0900 (日本標準時)
SymbolTime: Wed Feb 28 2024 05:42:50 GMT+0900 (日本標準時)

Symbolは3~4秒先を見てる。

実際使う場合

使用端末の時間があってるとは限らないので、ネットワーク時間取得してdeadline設定する方が良いかと。

import symbolSdk from 'symbol-sdk';

const NODE = 'http://finnel.harvestasya.com:3000';

// /node/time を取得
const nodeTimeResponse = await fetch(new URL('/node/time', NODE), {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' },
});
// /node/time からネットワーク時間算出
const nodeTimeJson = await nodeTimeResponse.json();
const symbolTime = Number(
  nodeTimeJson.communicationTimestamps.receiveTimestamp
);
// deadline 2時間
const networkTimestamp = new symbolSdk.symbol.NetworkTimestamp(symbolTime);
const deadline = networkTimestamp.addHours(2).timestamp;

// 表示
console.log(`SymbolTime: ${symbolTime}`);
console.log(`DeadLine  : ${deadline}`);
9
5
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
9
5