Node Operator Registry
/// @notice Node operator parameters and internal state
/// @param operatorOwner Admin address of the node operator
/// @param name Human-readable name
/// @param rewardAddress Address receiving performance rewards
/// @param withdrawalAddress Address receiving withdrawals and execution layer rewards
struct Operator {
address operatorOwner;
string name;
address rewardAddress;
address withdrawalAddress;
KeyStat keyStat;
}
/// @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;
}
Getter for the operator record of the given
id
.>>> nodeOperatorRegistry.getOperator(0)
operatorOwner: '0xe2F8CeFcDee51F48e3CE5c4Deea3095c43369b36'
name: 'InfStones'
rewardAddress: '0xe2F8CeFcDee51F48e3CE5c4Deea3095c43369b36'
withdrawalAddress: '0xbF4Db410a07b3864A45074313150779b5b99889E'
totalCount: '10'
usedCount: '2'
verifiedCount: '10'
depositLimit: '320'
Getter for an array of all existing operators’ records.
Getter for the reward address of the given
id
.>>> nodeOperatorRegistry.getRewardAddress(0)
'0xe2F8CeFcDee51F48e3CE5c4Deea3095c43369b36'
Getter for an array of all existing reward addresses.
Getter for the withdrawal manager address of the given
id
.>>> nodeOperatorRegistry.getWithdrawalAddress(0)
'0xbF4Db410a07b3864A45074313150779b5b99889E'
Getter for an array of all existing withdrawal managers’ addresses.
Getter for the withdrawal credential of the given
id
. Unlike the withdrawal address, withdrawal credential is a piece of bytes32
data including the withdrawal prefix (currently all Tranchess operators adopt ETH1_ADDRESS_WITHDRAWAL_PREFIX
) and the withdrawal manager address.>>> nodeOperatorRegistry.getWithdrawalCredential(0)
'0x010000000000000000000000bf4db410a07b3864a45074313150779b5b99889e'
Getter for the validator key status of the given
id
.>>> nodeOperatorRegistry.getKeyStat(0)
totalCount: '10'
usedCount: '2'
verifiedCount: '10'
depositLimit: '320'
Getter for an array of all existing validator key status.
/// @notice Storage for pubkey (48 bytes) and signature (96 bytes)
/// @param pubkey0 [0-32) bytes of the pubkey
/// @param pubkey1 [32-48) bytes of the pubkey
/// @param signature0 [0-32) bytes of the signature
/// @param signature1 [32-64) bytes of the signature
/// @param signature2 [64-96) bytes of the signature
struct Key {
bytes32 pubkey0;
bytes32 pubkey1; // Only the higher 16 bytes of the second slot are used
bytes32 signature0;
bytes32 signature1;
bytes32 signature2;
}
Getter for the validator key struct of the given
id
and index
.>>> nodeOperatorRegistry.getKey(0, 0)
pubkey0: '0xb1b620b54b1909fdf1defc96e60350040cf7fef3dbdfa75099f977c835331201'
pubkey1: '0x644fe9caa6d028dcef5c6d953cdc0d5900000000000000000000000000000000'
signature0: '0x9295c7c1e51c224999192156e0af16ed06a251fd6c90dcce88819642f5109486'
signature1: '0x4fe852dd979a1ec27ccab8dd704cd6170a361d5362d210cbba89a30c3ccda7ba'
signature2: '0x0fcfe368e52ee1a3551145c0a30dfcc21d2ffccd0525e725ed5543dbb34ce92e'
Batch getter for the validator key struct of the given
id
and the range starting at start
spanning count
length.Batch getter for the reconstructed validator keys of the given
id
and the range starting at start
spanning count
length.>>> nodeOperatorRegistry.getPubkeys(0, 2, 3)
[
'0xb9deda6df019981189155383b54ec08de0f2ee73f696900a487d3dddc0876e366134bd76c6153f37f1dcd27fcbfd8697',
'0xb1b620b54b1909fdf1defc96e60350040cf7fef3dbdfa75099f977c835331201644fe9caa6d028dcef5c6d953cdc0d59',
'0xa105b2b7c4212b10a62389fae02f58f49c1f1570ec3e5e0a41c46691ec2de464519d9c234b9bc1d834107a7644b570ec'
]
Batch getter for the reconstructed validator signatures of the given
id
and the range starting at start
spanning count
length.>>> nodeOperatorRegistry.getSignatures(0, 2, 3)
[
'0x846dceeac17a53b49373c68166dbd2dfb5fa4a89ada44d4fdfa054f73b087beb6bc01bb31e89b06d8b88a724110ceb9f033c9d1bee995b74a79f7dae42dad5a584dc01a3f33b80a20ee2451490ae9b2203f1fdb1430f3a8502747cb821d4b05f',
'0x9295c7c1e51c224999192156e0af16ed06a251fd6c90dcce88819642f51094864fe852dd979a1ec27ccab8dd704cd6170a361d5362d210cbba89a30c3ccda7ba0fcfe368e52ee1a3551145c0a30dfcc21d2ffccd0525e725ed5543dbb34ce92e',
'0xa6b177f3e9787049caa502959be8d07409fd80b4e93b81f27c262b586eba471845e995d8fac26b705de97aadd19c02390be6a88cdeed5e4ed1a0225843d9e5c7bbdb79cb6dc3912f58ef498f78c1e63895c9cda3651e06c63e1080c0ee78b97c'
]
Batch add validator keys for
id
. pubkeys
and signatures
are the concatenated public keys and signatures without padding. Id
node operator’s owner only.Truncate all unused validator keys previously submitted for
id
. Id
node operator’s owner only.Update the
operator.rewardAddress
to newRewardAddress
for id
. By default, the reward address is the same as operator.operatorOwner
. Id
node operator’s owner only.Update the
operator.depositLimit
to newDepositLimit
for id
, which is the new maximal number of active validators the operator could get assigned. We recommend it to be the current total number of validator keys, but it could go beyond the current validator key total number. Id
node operator’s owner only.Last modified 6mo ago