Operator onboarding guide
This guide will run you through the steps required to become an Operator on the Accumulate Network.
Last updated
This guide will run you through the steps required to become an Operator on the Accumulate Network.
Last updated
Each operator runs a dual-mode deployment with a Directory Network Node (DNN) and Block Validator Network Node (BVNN). In Accumulate, Block Validator Networks (BVNs) contain validator nodes used to validate transactions. All transactions feed into the Directory Network (DN) containing validator nodes which anchor each BVN into the larger network.
The network must store all operator and validator node public keys to facilitate transaction validation and other operator functions. Therefore, each operator must supply a public key representing the operator plus every node's full public key.
When launching a node through AccMan, the node will initially be a Follower. After completing the Follower Node setup, please follow the steps in the Validator Node Setup guide to set up your Validator node.
acc://dn.acme
ADI Account for the Directory Network
acc://dn.acme/operators
Operators Key Book
acc://dn.acme/operators/1
Operators Key Page within the Operators Key Book
acc://dn.acme/network
ADI Data Account that stores the Validator keys
acc://dn.acme/globals
ADI Data Account that defines the Operator Accept Threshold Ratio
acc://dn.acme/oracle
ADI Data Account that stores pricing data for the ACME-Credits conversion rate.
As shown in the Diagram above, the Operator Key Book is an Authority to the Networks, Data, and Global Data Accounts and all BVN ADIs and the accounts within them. The Operator Key Book, with the URL dn.acme/operators
has one Key Page: Operator Key Page 1 with the URL dn.acme/operators/1
. The Operator Key Page 1 store the Operators’ keys (Public Key hashes). The keys affiliated with the public key hashes must be used to sign any transaction that adds a data entry to one of the Data Accounts. Since there is no Key Page of a higher priority than Operator Key Page 1, these keys must also sign any transaction that adds a new key to Operator Key Page 1.
The Network Data Account dn.acme/network
contains a list of Validator keys (public key hashes) used to validate transactions. The Globals Data Account dn.acme/globals
defines and enforces the Operator Accept Threshold Ratio, i.e., the minimum number of signatures needed by the Operator Key Page to execute a transaction. The threshold ratio is 2/3 (rounded up). This threshold ratio is used when updating the list of Validators in dn.acme/network
The Oracle Data Account defines the price of ACME and how many credits a user should receive for that price.
To add a new operator key to dn.acme/operators/1
we execute a multi-sig UpdateKeyPage transaction signed by dn.acme/operators
.
To add a new Validator key to dn.acme/network
we execute a multi-sig WriteData transaction signed by dn.acme/operators
. Tendermint (the consensus engine of Accumulate) uses the Validator keys to approve or reject all transactions in Accumulate.
Command Line Interface
An Operator Key can be generated in the Command Line Interface
Syntax
Command
The above command will return an output similar to the following:
The Public Key in the Output will serve as the Operator Public Key
Operators decide who becomes a validator.
./accumulate operator
Manage operators
Usage: accumulate operator [command]
Available Commands: add (Add an operator), remove (Remove an operator), update-key, (Update an operator's key)
Add a Key to the Operator Key Page ./accumulate operator add
2/3 of the existing operators need to sign a transaction to add the operator key
Syntax
The first argument is a Public Key of an existing Operator. The second argument is the Public Key of the new Operator. DeFi Devs will execute the transaction below to add your Operator Key to the Operator Key Page. In the example below a key was generated called “operator key.” To generate a Key in the Command Line Interface the “./accumulate key generate [name of key]” command can be used.
Add the Operator key
Command
The above command will return an output similar to the following:
Querying the Operator Key Page to see if the Key was added:
The above command will return an output similar to the following:
As shown above, the Directory Network ADI and Block Validator Network ADIs do not require credits to perform transactions. Other than this specific use case, all actions in Accumulate require credits generated by burning ACME tokens.
To conform to the 2/3 threshold, the protocol will execute: Number of Keys in Key Page * Signature Threshold Ratio (2/3) = RoundUp(Number of Signatures Required) 2 *(2/3) = 1.3 -> Rounded Up to Nearest Whole Number if Number is a Decimal = 2 Signatures Required From this point going forward 2 out of 2 Operator signatures are required to execute a transaction.
Next, a third Key will be added using sign a Multi-Signature Transaction based on the 2 of 2 Threshold.
Either Operator within the Key Page can execute a transaction to add a third key, but both Operators must sign the transaction for the Key to be added. In this scenario, DeFiDevs has initiated the transaction.
The above command will return an output similar to the following:
The second Operator needs to sign the Transaction Hash to fulfill the Multi-Signature transaction.
The origin url is the Operator Key Page, which is being updated. The Signer Key refers to a party that needs to sign the multi-signature transaction. The transaction hash refers to the hash produced from the initial transaction.
The above command will return an output similar to the following:
Querying the Operator Key Page to see if the Key was added:
The above command will return an output similar to the following:
To conform to the 2/3 threshold, the protocol will execute: Number of Keys in Key Page * Signature Threshold Ratio (2/3) = RoundUp(Number of Signatures Required) 3 *(2/3) = 2 -> Rounded Up to Nearest Whole Number if Number is a Decimal = 2 Signatures Required From this point going forward 2 out of 2 Operator signatures are required to execute a transaction.
Remove a Key from an Operator Key Page: To remove a Key from the Key Page 2 of the 3 Keys need to sign a transaction for it to be processed.
The above command will return an output similar to the following:
One of the two remaining operators needs to sign the transaction hash:
The above command will return an output similar to the following:
Querying the Operator Key Page to see if the Key was Removed:
The above command will return an output similar to the following:
Update the Key
Update your Key on the Operator Key Page: When you update your Key within a Key Page you do not have to conform to the signature threshold. The signature threshold is 1 of 1 for this transaction only; all other transactions will require the Key Page threshold. In the example below, DeFi Devs want to update their Key 1e0ffe0dc92cef77211b4d98256aea98fd87b9ea2b3657cdbe494bbea912d839
to UpdatedKey.
The signature threshold is 1 of 1 for this transaction; all other transactions will require the Key Page threshold. In the example below, DeFi Devs want to update someone else's key, which would require the 2 of 3 thresholds.
Syntax
./accumulate operator update-key
Usage: accumulate operator update-key dn [Signing Key] [old key name or path] [new key name or path] [flags]
Command
The above command will return an output similar to the following:
Sign Transaction Hash:
The above command will return an output similar to the following:
Query Operator Key Page:
The above command will return an output similar to the following:
./accumulate validator
Manage validators
accumulate validator [command] Available Commands: add Add a validator remove Remove a validator update-key Update a validator's key
Adding a Validator Key is a separate Operation from adding an Operator Key. The Operator Key Book is an Authority to the Network Data Account that Lists the Validator Keys. This means that the Operators need to sign a transaction to add a Validator to the Validator Set. The DN operator Key Page has two Keys which means a Multi-Signature Transaction is required.
To modify a key to the directory network use dn. To modify a key in a block validator network use bvn[BVN#].
Command
The above command will return an output similar to the following:
Sign a Transaction with Operator Key to add a Validator Key to the Network Data Account
The above command will return an output similar to the following:
Sign the Transaction Hash:
The above command will return an output similar to the following:
A Get Command on the Network Data Account shows the Validator Keys:
The above command will return an output similar to the following:
Remove a Validator Key
The above command will return an output similar to the following:
Sign the Transaction Hash:
The above command will return an output similar to the following:
A Get Command on the Network Data Account shows the Validator Keys:
The above command will return an output similar to the following:
Update a Validator Key
There is a special procedure for updating a Validator Key.
Launch a New Node
Use the Key from the new Node in the Update-Key function
Syntax
Command
The above command will return an output similar to the following:
Sign Transaction Hash:
The above command will return an output similar to the following:
A Get Command on the Network Data Account shows the Validator Keys:
The above command will return an output similar to the following:
Changing the Oracle Value Transaction in Accumulate Require Credits. Certain actions require a different amount of Credits See Fee Schedule: https://docs.accumulatenetwork.io/accumulate/getting-started/fees
1 Credit always equals $0.01 If the value of ACME increases or decreases the Oracle needs to change to maintain the ratio of 1 credit equaling $0.01.
Querying the Oracle: ./accumulate oracle USD per ACME : $0.0500 Credits per ACME : 5.00
As shown, if the price of ACME is $0.0500 then the Credits per ACME is 5.00 to retain 1 credit equaling $0.01 (5/$0.0500). If the price of ACME increases to $0.0600 the credits per ACME would be 6.00.
Signing a Transaction to change the Oracle Value:
The above command will return an output similar to the following:
Get an Oracle
The above command will return an output similar to the following: