Delegation ID: {delegationID}
+P-Chain Tx ID: {pChainTxId}
++ Choose the L1 subnet where you want to delegate to a validator. +
++ Select the validator you want to delegate to. The dropdown shows all active validators with their weights and remaining balances. +
+ + {ownerType && ownerType !== 'StakingManager' && ( +Selected Validator Node ID: {validationSelection.nodeId}
++ Call the initiateDelegatorRegistration function on the Native Token Staking Manager contract with your delegation amount. This transaction will emit a warp message for P-Chain registration. +
+ ++ Sign the emitted warp message and submit a SetL1ValidatorWeightTx to P-Chain. This transaction will update the validator's weight to include your delegation. +
++ Complete the delegator registration by signing the P-Chain L1ValidatorRegistrationMessage and calling the completeDelegatorRegistration function on the Staking Manager contract. +
+Found {existingDelegations.length} existing delegation(s) to this validator:
+{delId}
+
+
+ This will deploy the ERC20TokenStakingManager contract to the EVM network {viemChain?.id}.
+ The ERC20 Token Staking Manager enables permissionless staking on your L1 using a custom ERC20 token.
+
+ Contract source: ERC20TokenStakingManager.sol @ {ICM_COMMIT.slice(0, 7)}
+
+ Connected wallet: {walletEVMAddress}
+
+ Required: ValidatorMessages library must be deployed first. + Please go to the Validator Manager Setup section and deploy the ValidatorMessages library. +
+
+ Ready: ValidatorMessages library found at: {validatorMessagesLibAddress}
+
Deployment Status: {erc20StakingManagerAddress || "Not deployed"}
+ Choose the L1 subnet where the ERC20 Token Staking Manager will be initialized. The Validator Manager address and blockchain ID will be automatically derived from your selection. +
++ Note: This subnet has not been converted to an L1 yet. ERC20 Token Staking Manager can only be initialized for L1s. +
+
+ Validator Manager Address: {validatorManagerAddress}
+
+ Select the ERC20 Token Staking Manager contract you want to initialize. +
+
+ Initialize function source: initialize() @ {ICM_COMMIT.slice(0, 7)}
+
+ Set the ERC20 token that will be used for staking and the Reward Calculator contract address. The Validator Manager address and Uptime Blockchain ID are automatically derived from your subnet selection. +
+ +
+ Validator Manager Address: {validatorManagerAddress}
+
+ Uptime Blockchain ID (CB58): {blockchainId || 'Loading...'}
+
+ Uptime Blockchain ID (Hex):
+ {(() => {
+ try {
+ const hex = cb58ToHex(blockchainId);
+ return `0x${hex.padStart(64, '0')}`;
+ } catch {
+ return 'Invalid CB58';
+ }
+ })()}
+
+
Important: Token Requirements
+The ERC20 token must implement the IERC20Mintable interface.
+ This allows the staking manager to mint rewards. Care should be taken to enforce that only
+ authorized users (i.e., the staking manager contract) are able to mint the ERC20 staking token.
+ Configure the staking parameters that define how validators and delegators can participate in securing the network. +
+ ++ Before staking a validator, you must have an L1 node set up and running. If you haven't done this yet, + visit the L1 Node Setup Tool first. + {isTestnet && ( + <> + {' '}On testnet, you can also use our free testnet infrastructure. + > + )} +
++ Choose the L1 subnet where you want to stake the validator. +
++ Add the validator details including node credentials. Your stake amount will be entered in the next step. +
+ ++ Call the initiateValidatorRegistration function on the Native Token Staking Manager contract with your stake. This transaction will emit a RegisterL1ValidatorMessage warp message. +
+ + {ownerType && ownerType !== 'StakingManager' && ( ++ Sign the emitted RegisterL1ValidatorMessage and submit a RegisterL1ValidatorTx to P-Chain. This transaction will emit a L1ValidatorRegistrationMessage warp message. +
++ Complete the validator registration by signing the P-Chain L1ValidatorRegistrationMessage and calling the completeValidatorRegistration function on the Staking Manager contract. +
+