Harvesting

The process of creating new blocks is called harvesting.

The harvesting account - called the harvester - gets the fees for the transactions in the block and inflation. This reward gives the harvester an incentive to add as many transactions to the block as possible.

Eligibility criteria

The importance score of the account determines the chances of creating a new block. This score is calculated as the relation between the number of harvesting mosaics the account owns and the total supply available.

Note

Configuration parameters are editable. The importance score calculation formula and the minimum amount required to harvest may differ for the public network configuration.

The account needs to hold a minimum amount of this harvesting mosaic to have importance greater than zero.

Harvesting account owners can use their importance scores to create new blocks either by running a node or delegating it to a remote node.

Harvesting mosaic

Catapult software allows the definition of any mosaic for harvesting purposes to fit the business needs. The catapult test network names this mosaic cat.harvest.

For example, consortium networks can distribute harvesting mosaics between the companies that are running the infrastructure, while other participants need to pay fees in the form of currency mosaic to consume services.

By contrast, public networks might decide to use the same mosaic for paying transaction fees and running the network.

Local harvesting

During the installation of a node, you will be asked to set up an account that will be used to harvest. The block header includes the public key and signature generated by the harvesting account.

Besides, each node can set a beneficiary public key to share a percentage of the harvesting rewards (fees and inflation), where the sharing ratio is configurable for each network. When the node does not define a beneficiary, all the rewards go to the block signer.

Local harvesting is secure as long as no one accesses your node instance, which is storing the private key.

Delegated harvesting

Delegated harvesting enables an account to use a proxy private key that can be shared with a node securely. In other words, you can use the importance score of your account to create new blocks without running a node.

After an account activates delegated harvesting, its importance score is transferred to a remote account. The remote account inherits the importance of the original account. Security-wise, sharing a proxy private key with a remote node does not compromise the original account since:

  • The remote account has zero balance.
  • The remote account by itself can’t transfer the importance to another account.
  • The original account receives the resulting fees.

Remote harvesters may not receive the entire reward if the following conditions are met:

  • The network harvesting sharing rate is greater than 0.
  • The node selected has defined a beneficiary account.
Comparison between local and delegated harvesting
  Local harvesting Delegated harvesting
Configuration Setup node. Activate remote harvesting.
Cost The node maintenance (electricity, cost VPN). The activation transaction fee.
Security The node stores the private key. A proxy private key is shared with a node.
Reward Total reward. The node owner can share part of the reward with a beneficiary account. Total reward - beneficiary share.

Schemas

AccountLinkTransaction

Announce an AccountLinkTransaction to delegate the account importance to a proxy account. By doing so, you can enable delegated harvesting.

In order for the proxy account to be accepted as the remoteAccountKey for delegated harvesting, it needs to meet the following conditions:

  • It cannot own any mosaics.
  • It cannot be a cosignatory of any other account.
  • It cannot be a multisig account.
  • It cannot already be a delegated account for another account.
  • It cannot have its own delegated account.

Furthermore, for the duration that the account is used as a delegated account, it is restricted from:

  • initiating any transactions.
  • involvement with any type of transactions.

Version: 0x02

Entity type: 0x414C

Inlines:

Property Type Description
remoteAccountKey 32 bytes (binary) The public key of the remote account.
linkAction LinkAction The account link action.

LinkAction

Enumeration: uint8

Id Description
0 Link.
1 Unlink.