挑戰已經到了2/3,每天都在與進度和死線追趕,希望能撐到完賽
今天繼續整合API的功能,整合是取得node shard的資訊,為什麼要取的shard的資訊呢,因為需要知道目前已確認的最後一個block高度,之前的文章有提到,交易所需要監控每一個block內的transaction是否有自己交易所的Address然後來做處理,如果你有使用交易所去withdraw或是deposit加密貨幣的話,通常會看到上面會根據你選擇的區塊鏈而顯示需要多少區塊確認,這個意思是指假設上面寫10個區塊確認,就是今天交易所parser到最新的block有屬於自己address的交易,會先儲存進DB紀錄起來,這時候還不會真的撥款和扣款,而是等到parser到那個block後10個區塊都沒發生reorg之類的情況就視為已確認且無法更改的狀態,這時才會真的撥款和扣款。
首先看一下這隻API
Elrond前面提到有三個shard和一個meta chain,我們API所帶的shardId對應是
shard 0: 0
shard 1: 1
shard 2: 2
meta chain: 4294967295
至於為什麼是4294967295我也不知道XD,我們主要是取meta chain的資料,因為meta chain的reponse上面會有其他三個shard的最新高度,這個也可以用來確認自己運行的node和public node是否存在區塊高度落後的情況。
首先先建立response的model
在model下建立networkStatusRes.go
package model
type NetworkStatusRes struct {
Code string `json:"code"`
Data StatusData `json:"data"`
}
type StatusData struct {
Status Status `json:"status"`
}
type Status struct {
ErdCrossCheckBlockHeight string `json:"erd_cross_check_block_height"`
ErdCurrentRound int `json:"erd_current_round"`
ErdEpochNumber int `json:"erd_epoch_number"`
ErdHighestFinalNonce int `json:"erd_highest_final_nonce"`
ErdNonce int `json:"erd_nonce"`
ErdNonceAtEpochStart int `json:"erd_nonce_at_epoch_start"`
ErdNoncesPassedInCurrentEpoch int `json:"erd_nonces_passed_in_current_epoch"`
ErdRoundAtEpochStart int `json:"erd_round_at_epoch_start"`
ErdRoundsPassedInCurrentEpoch int `json:"erd_rounds_passed_in_current_epoch"`
ErdRoundsPerEpoch int `json:"erd_rounds_per_epoch"`
}
由於這個是屬於取得node資料的函式所以將函式建立在internal/node/nodeUtils.go
package node
import (
utils "elrondWallet/internal"
"elrondWallet/internal/model"
"fmt"
"github.com/pelletier/go-toml"
)
var (
conf, _ = toml.LoadFile("./configs/config.toml")
url = conf.Get("server.url").(string)
)
func GetNodeInfo() {
var networkStatusRes model.NetworkStatusRes
utils.HttpGet(url+"/network/status/4294967295", &networkStatusRes)
fmt.Println(networkStatusRes)
fmt.Printf("erd_highest_final_nonce: %d\n", networkStatusRes.Data.Status.ErdHighestFinalNonce)
}
然後執行來測試一下
成功的取得meta chain的response了,至於為什麼要選meta chain還有另外一個原因,因為可以用meta chain的block hight去取得hyperblock,裡面會記載著三個shard的交易紀錄,只要呼叫一個API就可以取得所有交易紀錄,是一個非常便利的API呢。