Node Operator Manual

Step-by-step guide for Node Operators

Steps to become a Tranchess node operator

  1. 1.
    Provide Tranchess team with a name for display, and an address operatorOwner for operator registration
  2. 2.
    Once registered, you are assigned with an unique id. With the id, you could look up all relevant data on profile through the NodeOperatorRegistry contract deployed at <0x2625871323360A04D1d4302a993a2B2D049dC51e>
/// @notice Statistics of validator pubkeys from a node operator.
/// @param totalCount Total number of validator pubkeys uploaded to this contract
/// @param usedCount Number of validator pubkeys that are already used
/// @param verifiedCount Number of validator pubkeys that are verified by the contract owner
/// @param depositLimit Maximum number of usable validator pubkeys, set by the node operator
struct KeyStat {
uint64 totalCount;
uint64 usedCount;
uint64 verifiedCount;
uint64 depositLimit;
/// @notice Node operator parameters and internal state
/// @param operatorOwner Admin address of the node operator
/// @param name Human-readable name
/// @param withdrawalAddress Address receiving withdrawals and execution layer rewards
/// @param rewardAddress Address receiving performance rewards
struct Operator {
address operatorOwner;
string name;
address rewardAddress;
address withdrawalAddress;
KeyStat keyStat;
function getOperator(uint256 id) external view returns (Operator memory);
function getRewardAddress(uint256 id) external view returns (address);
function getWithdrawalAddress(uint256 id) external view returns (address);
function getWithdrawalCredential(uint256 id) external view returns (bytes32);
function getKeyStat(uint256 id) external view returns (KeyStat memory);
function getPubkeys(uint256 id, uint256 start, uint256 count) external view returns (bytes[] memory pubkeys)
3. As the operatorOwner, you could modify the following data on profile:
  • rewardAddress. The address that receives performance fee (aka beacon rewards) in the form of QUEEN. By default, it is the operatorOwner.
  • depositLimit. Upper bound for the number of active validators assigned. It can go beyond the current total validator keys. By default, it is 0.
function updateRewardAddress(uint256 id, address newRewardAddress) external
function updateDepositLimit(uint256 id, uint64 newDepositLimit) external

Steps to batch add new validators

  1. 1.
    For each validator,
    1. 1.
      Generate pubkey
    2. 2.
      Generate signature for each validator using pubkey, withdrawalCredential and the deposit amount, which is exactly 32 ethers
  2. 2.
    Pack them into bytes arrays pubkeys and signatures and add keys to the registry
function addKeys(uint256 id, bytes calldata pubkeys, bytes calldata signatures) external
3. Tranchess team will help verify the new validator submissions off-chain, and update the verifiedCount accordingly
4. Make sure to update depositLimit accordingly to reflect availability of the validator keys
5. Prepare the node and wait for successful deposits

Steps to batch remove unused validators

In rare occasions when signature verification failed for newly added keys or when withdrawal credentials got an update, the Tranchess team will send out a notification for the corresponding operator to truncate all used keys
  1. 1.
    Coordinate with Tranchess team to find out the keys that will be removed;
  2. 2.
    Invoke truncateUnusedKeys to truncate all unused keys.
function truncateUnusedKeys(uint256 id) external