HowTo Setup vBFI
See: Main_Page
This is for VeriBlock NodeCore.
Contents
Background
vBFI provides the equivalent number of Bitcoin confirmations that a VeriBlock block (and the transactions it contains) has.
Third parties require specific numbers of confirmations to confirm a transaction (for example, an exchange accepting incoming deposits). In general, a higher number of confirmations corresponds to more security, with the trade-off of longer waiting period.
vBFI provides the best of both worlds:
- Much more security: Bitcoin level security (which depending on the chain can be 100x+ the security that would normally be available after 2 hours).
- Less wait time: About 2 hours under normal network conditions.
Useful links:
- https://veriblock.org/vbfi - official home page
- https://vbfi.veriblock.org/ - live UI control for vBFI (this link may change, and will be integrated into the explorer)
- How_VeriBlock_PoP_vBFI_Protects_Altchains
How to set up
vBFI is contained within NodeCore. It is an optional plugin, not run by default (to conserve resources).
It is available with 0.4.13-rc8 and later (TODO - this is a pre-release). Requires both NodeCore and NodeCore CLI to be 0.4.13-rc8+ (older versions of NC_CLI may not return the new fields)
- Run a full NodeCore instance: NodeCore_QuickStart
- Add file bfi.conf
- In nodecore.properties, set bfi.enabled=true
If you run getdiagnosticinfo, you will see this flag enabled.
bfi.conf
Put this next to 'nodecore.properties' file:
bfi { blockChainNetwork = mainnet nodeCoreRpcHost = "127.0.0.1:10500" httpApiBindPort = 4567 httpApiNotificationsTest = true forkThreatThreshold = 2 forkThreatRatioThreshold = 0.8 }
nodecore.properties
# Enable BFI bfi.enabled=true
Get results
bitcoinConfirmations for each transaction
This is available per transaction via the bitcoinConfirmations field.
Below is a sample transaction that is a few hours old. Note that a very recent transaction (such as 5 minutes old) will still show bitcoinConfirmations: -11, as Bitcoin Finality has not been achieved yet.
NC_CLI
From NC_CLI (see: NodeCore_CommandLine ))
gettransaction 2AB3811FD0EDE3B3F89A50926B15AA4C0C2370A4467E6670635A19E5A1CD3AF3 5000 ... "bitcoinConfirmations": 4, ...
API
There is also a JavaScript sample to call the HTTP API for gettransactions:
https://github.com/VeriBlock/nodecore-js/blob/master/packages/core/example/3_get_bfi_score.js
Explorer
The VeriBlock explorer shows vBFI confirmations on both the block and the transaction. (the transaction will have the same vBFI confirmations as its containing block).
API results
Two supported APIs are:
#Summary ping that <instance>/api/ping #detailed chain data <instance>/api/chains
End-to-end example
If a transaction occurs in block 2713020, and the UI control shows that has "BTC+3", that is equivalent to "3 Bitcoin confirmations," meaning if an attacker wanted to reverse that transaction would have to perform a 3-block reorganization on Bitcoin (in addition to simultaneously reorging approximately 250-300 VBK blocks). In other words, the transaction has the same (technically, higher) security as a transaction on Bitcoin itself with 3 confirmations.
For example, if a service required "3 Bitcoin confirmations" worth of security to deposit Bitcoin, then that service would want "BTC+3".
When checking the specific transaction, it would also show "BTC+3".
Is my transaction bitcoin-secure?
In its simplest form, vBFI functions almost like a stoplight.
- Green = Proceed. There is bitcoin-level security
- Yellow = Wait, there is not yet bitcoin-level security.
- Red = Wait, there is a fork in-progress, and therefore not yet bitcoin-level security.
Docker setup
version: '3' services: nodecore: container_name: nodecore image: docker-internal.veriblock.com/nodecore:0.4.13-rc.8 expose: - 7500 # p2p - 10500 # rpc - 10600 # api - 4567 # bfi ports: - "7501:7501" - "10500:10500" - "127.0.0.1:10600:10600" - "127.0.0.1:4567:4567" volumes: - /root/VeriBlock:/data:Z environment: - NODECORE_LOG_PATH=/data/logs/ - NODECORE_LOG_LEVEL=INFO
^ In the above case configuration needs to be placed in /root/VeriBlock