HowTo Setup vBFI

From Veriblock Wiki
Jump to: navigation, search

See: Main_Page

This is for VeriBlock NodeCore.

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:

  1. Much more security: Bitcoin level security (which depending on the chain can be 100x+ the security that would normally be available after 2 hours).
  2. Less wait time: About 2 hours under normal network conditions.

Useful links:

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)

  1. Run a full NodeCore instance: NodeCore_QuickStart
  2. Add file bfi.conf
  3. 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).

Vbfi explorer tx.png

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".

Vbfi ui control.png

When checking the specific transaction, it would also show "BTC+3".

Gettx.png

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.

Vbfi explorer green.png

Vbfi explorer red.png

Vbfi explorer yellow.png

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