Block Module
Why should I have the "Block Management" module?
All transaction data in the blockchain is stored in the block, so there is a module responsible for the storage and management of the block, so that other modules can obtain the block when verifying the data in the block and processing the business.
When the blockchain program is started for the first time, it is necessary to synchronize the latest block on the network to the local. This process is generally time consuming, and the transaction cannot be initiated when the synchronization is not completed, so it is suitable for the work to be performed by a separate module.
In summary, it is necessary to provide a unified block data service for other modules, and it is also better to separate the management of the block from the specific service of the block. The modules used in the block do not have to care about the block. Get the details.
"Block Management" What to do
- Provide api for block storage, query, rollback operations
- Synchronize the latest block from the network for preliminary verification and fork verification. If there is no fork, call the consensus module for consensus verification, call the transaction module for transaction verification, and save all the verifications to the local.
- Block synchronization, broadcast, and forwarding of message processing
- Judgment and storage of bifurcation blocks
- Judgment and storage of orphan blocks
- Forked chain maintenance, switching
- Orphan chain maintenance, switching
Common log analysis
Log content | Log generation reason |
skip block syn because minNodeAmount is set to 0 | Setting minNodeAmount to 0 will print this log and skip the block synchronization process directly. If you want a node to block out, you need to change this parameter |
no consistent nodes | The height of the connected nodes is inconsistent |
first start | The height of the connected node is 0, indicating that the chain is just starting to run |
local blocks is newest | The block of the local node is already up to date, no block synchronization is required |
The number of rolled back blocks exceeded the configured value | The block in this area is inconsistent with the block on the network. The block in this area is rolled back, but the number of rollbacks exceeds the threshold, and the rollback stops. |
The local GenesisBlock differ from network | The creation node hash of the local node does not match the creation block hash on the network, and the local configuration needs to be checked. |
available nodes not enough | The number of available nodes connected to is insufficient, check the minNodeAmount configuration item, and the network module configuration, log |
block syn complete successfully current height | The block sync is successful and has been synchronized to the latest block |
block syn complete but is not newest | The block sync is successful, but it is not the latest block and will be automatically synchronized again |
error occur when saving downloaded blocks | Block synchronization failure, generally when saving the synced block, error, focus on the block module, consensus module, transaction module log |
Configuration Item Description
Configuration item | Description |
dataFolder | Database Folder Name |
language | Error Code Language |
forkChainsMonitorInterval | Forked Chain Monitoring Thread Running Interval |
orphanChainsMonitorInterval | Orphan chain monitoring thread running interval |
orphanChainsMaintainerInterval | Orphan chain maintenance thread running interval |
storageSizeMonitorInterval | Cache database capacity monitoring thread run interval |
networkResetMonitorInterval | Network Monitoring Thread Running Interval |
nodesMonitorInterval | Number of nodes monitors thread run interval |
txGroupRequestorInterval | TxGroup gets thread running interval |
txGroupTaskDelay | Forked chain monitoring thread running interval |
testAutoRollbackAmount | The number of blocks that are automatically rolled back after startup, only for test block rollback, set to 0 in production environment |
chainName | default chain name |
chainId | Default Chain ID |
assetId | Default Asset ID |
blockMaxSize | Maximum number of bytes in the block |
extendMaxSize | Block extension field maximum number of bytes |
resetTime | Time interval at which the network action is reset when the height of the local block is not updated |
chainSwtichThreshold | Raise the height difference threshold for the forked chain switch |
cacheSize | The maximum number of branches in the forked chain or orphan chain block |
heightRange | Receive the range of new blocks |
waitInterval | When downloading a block in batches, if the CompleteMessage is received, the block has not been saved, and how long is reserved for each block |
maxRollback | The local maximum rollback number when the local block is inconsistent with the network block |
consistencyNodePercent | Statistics of the node's latest block height and hash consistent percentage threshold on the network |
minNodeAmount | The minimum number of linked nodes, when the linked network node is lower than this parameter, it will continue to wait |
downloadNumber | Number of blocks downloaded from the node on the network each time during block synchronization |
validBlockInterval | To prevent malicious nodes from pre-eventing blocks, set this parameter to discard the block if the block timestamp is greater than the current time. |
blockCache | How many blocks are cached when syncing blocks |
smallBlockCache | How many cached cell blocks are received from other nodes during normal system operation |
orphanChainMaxAge | When the orphan chain fails to maintain, the age is increased by one. This parameter is the maximum age that the orphan chain can reach. Above this value, it will be cleaned up by the cleanup thread |
logLevel | Log level, differentiated by different chains |
singleDownloadTimeout | Timeout for downloading a single block from a network node |
batchDownloadTimeout | Timeout for downloading multiple blocks from a network node |
maxLoop | When downloading a block in batches, if the CompleteMessage is received, the block has not been saved yet, and the loop waits for a few rounds at most |
synSleepInterval | Time interval between two block syncs |
waitNetworkInterval | Time interval waiting for network stability |
cleanParam | forked chain monitoring thread running interval |
All time parameter units in the configuration file are in milliseconds
Interface List
info
returns network node height and local node height
scope:public
version:1.0
parameter list
Parameter Name | Parameter Type | Parameter Description | Is Not Empty |
chainId | int | Chain ID | Yes |
return value
Field Name | Field Type | Parameter Description |
networkHeight | long | Network Node Latest Block Height |
localHeight | long | The latest block height of the local node |
latestBlock
the latest block of master chain
scope:public
version:1.0
parameter list
Parameter Name | Parameter Type | Parameter Description | Is Not Empty |
chainId | int | Chain ID | Yes |
return value
Field Name | Field Type | Parameter Description |
Return value | string | Returns a HEX string after serialization of a block |
downloadBlockByHash
get a block by hash
scope:public
version:1.0
parameter list
Parameter Name | Parameter Type | Parameter Description | Is Not Empty |
chainId | int | Chain ID | Yes |
hash | string | block hash | yes |
return value
Field Name | Field Type | Parameter Description |
Return value | string | Returns the HEX string after the serialization of the block |
latestHeight
the latest height of master chain
scope:public
version:1.0
parameter list
Parameter Name | Parameter Type | Parameter Description | Is Not Empty |
chainId | int | Chain ID | Yes |
return value
Field Name | Field Type | Parameter Description |
value | long | Latest main chain height |
the latest block header of master chain
scope:public
version:1.0
parameter list
Parameter Name | Parameter Type | Parameter Description | Is Not Empty |
chainId | int | Chain ID | Yes |
return value
Field Name | Field Type | Parameter Description |
Return value | string | Returns a HEX string after serialization of a block header |
the latest block header po of master chain
scope:public
version:1.0
parameter list
Parameter Name | Parameter Type | Parameter Description | Is Not Empty |
chainId | int | Chain ID | Yes |
return value
Field Name | Field Type | Parameter Description |
Return value | string | Returns a HEX string after a block header PO serialization |
get a block header by height
scope:public
version:1.0
parameter list
Parameter Name | Parameter Type | Parameter Description | Is Not Empty |
chainId | int | Chain ID | Yes |
height | long | block height | yes |
return value
Field Name | Field Type | Parameter Description |
Return value | string | Returns a HEX string after serialization of a block header |
get a block header po by height
scope:public
version:1.0
parameter list
Parameter Name | Parameter Type | Parameter Description | Is Not Empty |
chainId | int | Chain ID | Yes |
height | long | block height | yes |
return value
Field Name | Field Type | Parameter Description |
Return value | string | Returns a HEX string after a block header PO serialization |
getBlockByHeight
get a block by height
scope:public
version:1.0
parameter list
Parameter Name | Parameter Type | Parameter Description | Is Not Empty |
chainId | int | Chain ID | Yes |
height | long | block height | yes |
return value
Field Name | Field Type | Parameter Description |
Return Value | string | Returns the HEX String List after serialization of the block |
get a block header by hash
scope:public
version:1.0
parameter list
Parameter Name | Parameter Type | Parameter Description | Is Not Empty |
chainId | int | Chain ID | Yes |
hash | string | block hash | yes |
return value
Field Name | Field Type | Parameter Description |
Return value | string | Returns the HEX string after the block header serialization |
get a block header po by hash
scope:public
version:1.0
parameter list
Parameter Name | Parameter Type | Parameter Description | Is Not Empty |
chainId | int | Chain ID | Yes |
hash | string | block hash | yes |
return value
Field Name | Field Type | Parameter Description |
Return value | string | Returns the HEX string after the block header PO serialization |
get the latest number of block headers
scope:public
version:1.0
parameter list
Parameter Name | Parameter Type | Parameter Description | Is Not Empty |
chainId | int | Chain ID | Yes |
size | int | quantity | yes |
return value
Field Name | Field Type | Parameter Description |
Return value | list<string> | Returns the HEX string of the block header serialized List |
get the latest several rounds of block headers
scope:public
version:1.0
parameter list
Parameter Name | Parameter Type | Parameter Description | Is Not Empty |
chainId | int | Chain ID | Yes |
round | int | Consensus Round | Yes |
return value
Field Name | Field Type | Parameter Description |
Return value | list<string> | Returns the HEX string of the block header serialized List |
get the latest several rounds of block headers
scope:public
version:1.0
parameter list
Parameter Name | Parameter Type | Parameter Description | Is Not Empty |
chainId | int | Chain ID | Yes |
height | long | starting height | yes |
round | int | Consensus Round | Yes |
return value
Field Name | Field Type | Parameter Description |
Return value | list<string> | Returns the HEX string of the block header serialized List |
receivePackingBlock
receive the new packaged block
scope:public
version:1.0
parameter list
Parameter Name | Parameter Type | Parameter Description | Is Not Empty |
chainId | int | Chain ID | Yes |
block | string | HEX string after block serialization | Yes |
return value
Field Name | Field Type | Parameter Description |
N/A | void | No return value |
get the block headers according to the height range
scope:public
version:1.0
parameter list
Parameter Name | Parameter Type | Parameter Description | Is Not Empty |
chainId | int | Chain ID | Yes |
begin | long | starting height | yes |
end | long | end height | yes |
return value
Field Name | Field Type | Parameter Description |
Return value | list<string> | Returns the HEX string of the block header serialized List |
get block headers for protocol upgrade module
scope:public
version:1.0
parameter list
Parameter Name | Parameter Type | Parameter Description | Is Not Empty |
chainId | int | Chain ID | Yes |
interval | int | Protocol Upgrade Statistics | Yes |
return value
Field Name | Field Type | Parameter Description |
Return value | list<string> | Returns the HEX string of the block header serialized List |
getStatus
receive the new packaged block
scope:public
version:1.0
parameter list
Parameter Name | Parameter Type | Parameter Description | Is Not Empty |
chainId | int | Chain ID | Yes |
return value
Field Name | Field Type | Parameter Description |
status | integer | Run Status |
Last Updated: 9/5/2019, 4:50:57 PM