PoD Consensus Algorithm Overview

As previously noted, our Escrow node is a voting transaction confirmation node. Each Escrow node is randomly selected according to a determined transaction volume and receives transaction confirmation status from a randomly selected voting node. During the 10-block generation, five voting nodes, excluding the sending and receiving nodes from the seven selected nodes, vote on each transaction, Escrow nodes determine true or not-true of a transaction using a decision-making formula. The number of voting nodes participating in the vote will change depending on the scale of Voting nodes joining in the future. If the sum of the transaction’'s true/not-true results are greater than or equal to 75% (the threshold value), the transaction's token is released. Figure 2 shows the flow diagram for true/not-true transactions.

Voting-based blockchain sample codeVoting-based blockchain sample code

function voter_registration(string memory _ ip address) public
  // for bytes conversion of msg.sender and _ip address
  uint _size = abi.encodePacked(msg.sender).length + bytes(_ip address).length;
  bytes memory _data = new bytes(_size);
  uint counter=0;
  for (uint i=0;i<abi.encodePacked(msg.sender).length;i++)
  {
    _data[counter]=abi.encodePacked(msg.sender)[i];
    counter++;
  }
  for (uint i=0;i<bytes(_ip address).length;i++)
  {
    _data[counter]=bytes(_ip address)[i];
    counter++;
  }
  require(!voters[keccak256(_data)]);
  voters[keccak256(_data)] = true;
}

function vote_casting(string memory _ ip address, string memory _category) {
  // for bytes conversion of _ ip address and _category
  uint _size = bytes(_ip address).length + bytes(_category).length;
  bytes memory _data = new bytes(_size);
  uint counter=0;
  for (uint i=0;i<bytes(_ip address).length;i++)
  {
    _data[counter]=bytes(_ip address)[i];
    counter++;
  }
  for (uint i=0;i<bytes(_category).length;i++)
  {
    _data[counter]=bytes(_category)[i];
    counter++;
  }

  urlData[keccak256(_data)].voteCount++;

  emit votedEvent(keccak256(_data));
}

Escrow Accounts

Escrow node escrow accounts help prevent the mistake of giving tokens to the wrong party. The Escrow node holds the tokens until the transactions in the escrow account are confirmed by selected multiple voting nodes, and when the Escrow node confirms that the transaction is true, it releases the tokens to the recipient's wallet.

​​Escrow Account Determination Formula

θj is the bias coefficient of the decision condition when the NFT content has comments.

In the default setting example below, seven nodes were selected, five nodes responded True except for sender and receiver nodes, and one node responded Not-True. If the threshold is less than or equal to 75%, the transaction is considered a "True" transaction.

User Type

Voting Node

Reply Signal

Result

Custody

NFT buyer

A

T

True

True

NFT seller

B

T

True

True

Other user

C

NT

True

True

Other service

D

NT

True

True

Other user

E

NT

True

True

Other service

F

T

Not true

Not true

Other user

G

NT

True

True

In the above example, the result is True both when the response signal is True (lines 1 and 2) and when it is not (lines 3,4, and 5).

The motivation for maintaining Xenea is it has the capability of PoW mining with a confirmation vote for each transaction. The Xenea algorithm randomly selects a number of nodes to identify the transaction nodes. If consensus is reached, all selected nodes will receive token rewards. Thus, all participating voting nodes have the opportunity to receive rewards if they reply to the transaction confirmation within the required time frame.

Last updated