THORChain Byzantine Module
THORChain Byzantine Module is an anti-phishing module used by ASGARDEX
clients. It provides an easy way to get a valid, but random base url of Midgards API by proofing active THORNodes. It will do all the hard work behind the scenes for you.
Installation
- Install
@thorchain/byzantine-module
from npm
yarn add @thorchain/byzantine-module
Usage
Basic usage
Whenever your application needs to ask Midgard API for data, call Byzantine
before. It will return a valid, but random base url of Midgard API provided by an active THORNode. Please note: That's the only way to send a transaction to a proofed THORNode at any time.
import byzantine from '@thorchain/byzantine-module'
const baseUrl = await byzantine()
const baseUrl = await byzantine(true)
const data = await fetch(`${baseUrl}/v1/pools`)
Side note: Behind the scenes Byzantine
is memorizing a proofed list of baseUrl
s to avoid increasing requests. That's Byzantine
will recycle its cache every hour only. If you want to get a "fresh", not cached baseUrl
, set the second parameter to true
.
const baseUrl = await byzantine(false, true)
const baseUrl = await byzantine(true, true)
That might be helpful for error handling, see next chapter "Error handling".
Error handling
In same cases a cached baseUrl
can be invalid if a node goes offline for any reason. In this case you can force Byzantine
to return a non-cached baseUrl
to retry this request, but using another baseUrl
.
const baseUrl = await byzantine(false)
try {
const data = await fetch(`${baseUrl}/v1/pools`)
...
} catch (error) {
retry()
}
const retry = () => {
const anotherBaseUrl = await byzantine(false, true)
const data = await fetch(`${baseUrl}/v1/pools`)
}
Please note: Use a non-cached baseUrl
as few as possible to avoid to increase requests made by Byzantine
.
Development
Build
yarn build
Tests
yarn test