yarn add @vechain.energy/connex-utils
getConnex
A simple wrapper that adds support for multiple nodes. Switches automatically between NodeJS and regular Browser-Javascript.
Example without getConnex
in Browser-Environment:
import { Connex } from '@vechain/connex'
const connex = new Connex({
node: 'https://mainnet.veblocks.net',
network: 'main'
})
Example with a single node using getConnex
:
import { getConnex } from '@vechain.energy/connex-utils'
const connex = await getConnex({
node: 'https://mainnet.veblocks.net'
})
- The
network
parameter is optional, the genesis block is detected from the given node
Example with added functionality of multiple nodes:
import { getConnex } from '@vechain.energy/connex-utils'
const connex = await getConnex({
node: [
'https://invalid.url',
'https://mainnet.veblocks.net',
'https://node.vechain.energy'
],
network: 'main'
})
- It tests each node url before creating a Connex instance
- The last working node is remembered to not re-test previous failures
Example in NodeJS:
const { getConnex } = require('@vechain.energy/connex-utils')
async function main () {
const connex = await getConnex({
node: [
'https://invalid.url',
'https://mainnet.veblocks.net',
'https://node.vechain.energy'
]
})
const data = await connex.thor.block(10000000).get()
console.log(data)
}
main()
.then(() => process.exit(0))
.catch(err => console.error(err))
Notes
Reasons for the approach:
- Modifying
Connex
to support multiple nodes would require a bigger refactoring because it creates a network instance and provides no point of validation before using it - Creating a
connex
object and doing a test request works but it will loop forever for invalid nodes, there is no disconnect option - re-using
SimpleNet
to test a connection failed because of context (this
) issues, switching to bent was the fastest path for success and might switch to useaxios
(which is used withinSimpleNet
) to reduce project size