# Генерация и импорт ключей валидаторов
## Important Note: Касательно Pyrmont vs Mainnet
1) Для валидаторов в генезисе:
1.1. creating `./deposit <...> --chain=mainnet` (если использовать pyrmont, то при генерации генезиса возникает ошибка)
1.2. creating `bazel run //validator:validator -- accounts import <...> --pyrmont`
1) Для валидаторов с активацией депозитом:
1.1. creating `./deposit <...> --chain=pyrmont`
1.2. creating `bazel run //validator:validator -- accounts import <...> --pyrmont`
проблема возникает в координаторе при валидации депозита (кажется это по запросу валидатора)
проблема связанна c вычислением значения домена, которое используется для валидации подписи
````go
// validatorStatus searches for the requested validator''s state and deposit to retrieve its inclusion estimate. Also returns the validators index.
func (vs *Server) validatorStatus(...) (*ethpb.ValidatorStatusResponse, types.ValidatorIndex) {
...
switch resp.Status {
case ethpb.ValidatorStatus_UNKNOWN_STATUS:
domain, err := signing.ComputeDomain(
params.BeaconConfig().DomainDeposit,
nil, /*forkVersion*/
nil, /*genesisValidatorsRoot*/
)
....
if err := deposit.VerifyDepositSignature(dep.Data, domain); err != nil {
^^^^^^^^^^^^^^^^^^^^^^^^ error here ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
resp.Status = ethpb.ValidatorStatus_INVALID
log.WithError(err).Warn("Invalid Eth1 deposit")
return resp, nonExistentIndex
}
// Set validator deposit status if their deposit is visible.
resp.Status = depositStatus(dep.Data.Amount)
resp.Eth1DepositBlockNumber = eth1BlockNumBigInt.Uint64()
return resp, nonExistentIndex
case ethpb.ValidatorStatus_DEPOSITED, ethpb.ValidatorStatus_PENDING, ethpb.ValidatorStatus_PARTIALLY_DEPOSITED:
...
default:
return resp, idx
}
}
````
````go
// VerifyDepositSignature verifies the correctness of Eth1 deposit BLS signature
func VerifyDepositSignature(dd *ethpb.Deposit_Data, domain []byte) error {
...
signingData := ðpb.SigningData{
ObjectRoot: root[:],
Domain: domain,
}
ctrRoot, err := signingData.HashTreeRoot()
...
if !sig.Verify(publicKey, ctrRoot[:]) {
^^^^^^^^^^^^^ error here ^^^^^^^^^^^^
return signing.ErrSigFailedToVerify
}
return nil
}
````
````go
func ComputeDomain(domainType [DomainByteLength]byte, forkVersion, genesisValidatorsRoot []byte) ([]byte, error) {
if forkVersion == nil {
forkVersion = params.BeaconConfig().GenesisForkVersion
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
}
...
return domain(domainType, forkDataRoot[:]), nil
}
````
## Пример генерации ключей
### NODE-0: 258 validators for genesis with 3 creators
#### create
````shell
./deposit new-mnemonic \
--num_validators=86 \
--eth1_withdrawal_address=0xa7e558cc6efa1c41270ef4aa227b3dd6b4a3951e \
--mnemonic_language=english \
--folder=/home/mezin/work/tmp/_staking-deposit-cli-v1.2.0/ \
--chain=mainnet \
--keystore_password=1qaz2wsx3edc
````
````shell
./deposit existing-mnemonic \
--mnemonic="ill example harsh matter inner borrow health impact brief velvet inform job feed spot air fee error style illness infant flower tomato stable census" \
--validator_start_index=86 \
--num_validators=86 \
--eth1_withdrawal_address=0xe43bb1b64fc7068d313d24d01d8ccca785b22c72 \
--folder=/home/mezin/work/tmp/_staking-deposit-cli-v1.2.0/ \
--chain=mainnet \
--keystore_password=1qaz2wsx3edc
````
````shell
./deposit existing-mnemonic \
--mnemonic="ill example harsh matter inner borrow health impact brief velvet inform job feed spot air fee error style illness infant flower tomato stable census" \
--validator_start_index=172 \
--num_validators=86 \
--eth1_withdrawal_address=0xe43bb1b64fc7068d313d24d01d8ccca785b22c72 \
--folder=/home/mezin/work/tmp/_staking-deposit-cli-v1.2.0/ \
--chain=mainnet \
--keystore_password=1qaz2wsx3edc
````
#### import
````shell
bazel run //validator:validator -- accounts import \
--keys-dir=/home/mezin/go/src/tesseract/.data/node-0/validator_keys \
--wallet-dir=/home/mezin/go/src/tesseract/.data/node-0/wallet-dir \
--wallet-password-file=/home/mezin/go/src/tesseract/.data/node-0/password.txt \
--account-password-file=/home/mezin/go/src/tesseract/.data/node-0/password.txt \
--pyrmont \
--accept-terms-of-use
````
### NODE-1: 258 validators for deposit with 1 creator
#### create
````shell
./deposit new-mnemonic \
--num_validators=258 \
--eth1_withdrawal_address=0x6e9e76fa278190cfb2404e5923d3ccd7e8f6c51d \
--mnemonic_language=english \
--folder=/home/mezin/work/tmp/_staking-deposit-cli-v1.2.0/ \
--chain=pyrmont \
--keystore_password=1qaz2wsx3edc
````
#### import
````shell
bazel run //validator:validator -- accounts import \
--keys-dir=/home/mezin/go/src/tesseract/.data/node-1/validator_keys \
--wallet-dir=/home/mezin/go/src/tesseract/.data/node-1/wallet-dir \
--wallet-password-file=/home/mezin/go/src/tesseract/.data/node-1/password.txt \
--account-password-file=/home/mezin/go/src/tesseract/.data/node-1/password.txt \
--pyrmont \
--accept-terms-of-use
````