Difference between revisions of "Altchain PoP Miner"

From Veriblock Wiki
Jump to: navigation, search
Line 137: Line 137:
 
|autoMineRounds
 
|autoMineRounds
 
|[1,2,3,4]
 
|[1,2,3,4]
|Whether this chain is configured to automine the block at the given block height, it can be disabled by commenting the autoMineRounds. [[#APM Automine|See APM Automine]]
+
|Whether this chain is configured to automine the block at the given block height, it can be disabled by commenting the autoMineRounds config. [[#APM Automine|See APM Automine]]
 
|-
 
|-
 
|auth
 
|auth

Revision as of 08:59, 21 May 2020

Altchain PoP Miner install and run instructions

Overview

The Proof-of-Proof (PoP) consensus protocol enables a security inheriting blockchain (any Altchain) to inherit the complete proof-of-work of a security providing blockchain (VeriBlock). For a deeper understanding of the PoP consensus protocol, please refer to the PoP White Paper.

A PoP miner serves as the communication and transactional bridge between the mined Altchain and the VeriBlock blockchain. As often as they wish, a PoP miner will take the most recent blockchain state data from the Altchain, along with an identification of the miner, and publish it to the VeriBlock blockchain via a PoP transaction with the embedded data. The PoP miner then waits for the transaction to be included in a VeriBlock block and also proven in the Bitcoin blockchain (through the process of VeriBlock PoP Mining).

PoP mining is a competitive endeavor in which miners compete to have their endorsement of the Altchain state included in the earliest possible VeriBlock block.

Getting Started

Download NodeCore

For Altchain PoP mining to be successful, the local NodeCore instance must be fully synced with the VeriBlock network.

Configuration

The application.conf file is composed by different configuration blocks:

miner
Configuration Name Default Value Description Example
feePerByte 1000 The atomic units to pay per transaction byte
miner {
  feePerByte: 1000
  maxFee: 10000000
  api.port: 8080
}
maxFee 10000000 Maximum veriblock atomic units to pay as transaction fee
api.port 8080 The miner API port
nodecore
Configuration Name Default Value Description Example
network mainnet The network type, there are three options: mainnet, testnet and alphanet
nodecore {
  network: mainnet
  ip: 127.0.0.1
  port: 10500
}
ip 127.0.0.1 The NodeCore ip to which the miner will connect to
port 10500 The NodeCore port to which the miner will connect to

You can add chains to the securityInheriting block, for example:

securityInheriting
Parent Configuration Configuration Name Example Value Description Example
vbtc pluginKey btc The plugin to load
securityInheriting {
  vbtc: {
    pluginKey: btc
    id: 3860170
    name: "vBitcoin"
    host: "http://localhost:18332"
    payoutAddress: "tb1q3az9yn9crk2zfgae2geuew8q58ftey7kexk5wy"
    autoMineRounds: [1,2,4]
    auth {
        username: "vbitcoin"
        password: "....."
    }
    extraConfig: {
        enableRequestLogging: true
    }
  }
}
vbtc id 3860170 The chain id
vbtc name vBitcoin The chain name
vbtc host http://localhost:10600/api API url from the coin daemon
vbtc payoutAddress payoutAddress Specify a payout address, if is not specified the first address from the publication data will be used as the payout address
vbtc autoMineRounds [1,2,3,4] Whether this chain is configured to automine the block at the given block height, it can be disabled by commenting the autoMineRounds config. See APM Automine
auth username rpcUsername The username used on the daemon authentication (if any), it can be disabled by commenting the whole auth config block.
auth password rpcPassword The password used on the daemon authentication (if any), it can be disabled by commenting the whole auth config block.
extraConfig enableRequestLogging true Enable the verbose request logging

Example of a full configuration file:

miner {
  feePerByte: 1000
  maxFee: 10000000
  api.port: 8080
}

nodecore {
  network: mainnet
  ip: 127.0.0.1
  port: 10500
}

securityInheriting {
  btc: {
    pluginKey: btc
    id: 3860170
    name: "vBitcoin"
    host: "http://localhost:18332"
    payoutAddress: payoutAddress
    autoMineRounds: [1,2,3,4]
    auth {
        username: rpcUsername
        password: rpcPassword
    }
    extraConfig: {
        enableRequestLogging: true
    }
  }
  test: {
    host: "http://localhost:10600/api"
    autoMinePeriod: null
  }
}

APM Automine

// Add the automine information here

Run

Inside the application's bin folder, you will have two scripts to run the application, veriblock-alt-pop (Linux and Mac) and veriblock-alt-pop.bat (Windows)

NOTE: If you are having trouble running nodecore-apm on Linux, you may need to make nodecore-apm executable: chmod a+x veriblock-alt-pop

On first execution of the application, a lightweight VeriBlock wallet will be created, in order to start mining you have to send VBK coin funds to this wallet.

The Altchain PoP miner communicates with NodeCore to maintain the internal wallet. A connection to a synchronized NodeCore is always required.

Docker

With APM Docker, the next environment variables are accessible:

Variable Name Example Value Description
MINER_FEE_PER_BYTE 1000 The atomic units to pay per transaction byte
MINER_MAX_FEE 10000000 Maximum veriblock atomic units to pay as transaction fee
NODECORE_NETWORK mainnet The network type, there are three options: mainnet, testnet and alphanet
NODECORE_HOST localhost The NodeCore ip to which the miner will connect to
NODECORE_PORT 10500 The NodeCore port to which the miner will connect to
MINER_API_PORT 8080 The miner API port
CONFIG_FILE /data/application.conf The APM config file
APM_LOG_PATH /data/logs The folder for the APM logs
APM_LOG_LEVEL The APM logger level
APM_CONSOLE_LOG_LEVEL The APM console logger level
APM_ENABLE_JSON_LOG false Enable the APM JSON logs

Mining

Right now there are no real Altchains integrated with APM. However, we have created a virtual altchain for testing purposes

  • To begin a mining operation for the test alchain, type 'mine test' and press ENTER

Once we start having more plugins ready, Every single APM instance will be able to perform mining operations on multiple different chains.

Mining Lifecycle

The Altchain PoP Miner will do the next actions with the next order:

Action Duration Description Comment
INITIAL N/A Initial state, to be started
INSTRUCTION ~10 Seconds Mining Instruction retrieved, Endorsement Transaction to be submitted
ENDORSEMENT_TRANSACTION ~10 Seconds Endorsement Transaction submitted and to be confirmed
CONFIRMED ~30 Seconds (VeriBlock block time) Endorsement Transaction confirmed in VeriBlock blockchain, waiting for Block of Proof VeriBlock transaction containing ALT data can be seen on VBK Explorer
BLOCK_OF_PROOF ~5 Seconds Block of Proof received, Endorsement Transaction to be proved
PROVEN ~5 Second Endorsement Transaction proven, building Context
CONTEXT ~10 Minutes Context determined, waiting for submission response
SUBMITED_POP_DATA Altchain block time VTB submitted, waiting for depth completion ALT PoP transaction can be seen in ALT mempool and later in an ALT block (at which point it will write out ATV, VTB[] to the Integration Library storage
COMPLETED N/A Completed ALT reward payout will occur in a future ALT coinbase transaction

Shell

The Altchain PoP miner provides several commands:

Command Description
help Lists all the commands
clear Clears the screen
quit or exit Stops the application
listconfig Lists the current config values
setconfig <key> <value> Sets a config value
mine <chain> <block (optional)> Begins a proof of proof mining operation for the given chain
listoperations Lists the currently running mining operations
getoperation <id> Supplies the details of the operation matching the given id
getoperationvtb <id> Supplies the VTB details of the operation matching the given id
getbalance Gets the coin balance for the VeriBlock address
resubmit <id> Submits the PoP data of a copy of an already complete proof of proof mining operation
getoperationlogs <id> <level (optional)> Gets the logs of the supplied operation
canceloperation <id> Cancels the operations
getaddress Gets the currently loaded VeriBlock address