Documentation ¶
Overview ¶
Package keystore contains useful functions for dealing with eth2 deposit inputs leveraging go-ethereum's own keystore package.
Index ¶
Constants ¶
const ( // StandardScryptN is the N parameter of Scrypt encryption algorithm, using 256MB // memory and taking approximately 1s CPU time on a modern processor. StandardScryptN = 1 << 18 // StandardScryptP is the P parameter of Scrypt encryption algorithm, using 256MB // memory and taking approximately 1s CPU time on a modern processor. StandardScryptP = 1 // LightScryptN is the N parameter of Scrypt encryption algorithm, using 4MB // memory and taking approximately 100ms CPU time on a modern processor. LightScryptN = 1 << 12 // LightScryptP is the P parameter of Scrypt encryption algorithm, using 4MB // memory and taking approximately 100ms CPU time on a modern processor. LightScryptP = 6 )
Variables ¶
var ( // ErrDecrypt is the standard error message when decryption is a failure. ErrDecrypt = errors.New("could not decrypt key with given passphrase") )
Functions ¶
func DepositInput ¶
func DepositInput(depositKey *Key, withdrawalKey *Key, amountInGwei uint64) (*ethpb.Deposit_Data, [32]byte, error)
DepositInput for a given key. This input data can be used to when making a validator deposit. The input data includes a proof of possession field signed by the deposit key.
Spec details about general deposit workflow:
To submit a deposit: - Pack the validator's initialization parameters into deposit_data, a Deposit_Data SSZ object. - Let amount be the amount in Gwei to be deposited by the validator where MIN_DEPOSIT_AMOUNT <= amount <= MAX_EFFECTIVE_BALANCE. - Set deposit_data.amount = amount. - Let signature be the result of bls_sign of the signing_root(deposit_data) with domain=compute_domain(DOMAIN_DEPOSIT). (Deposits are valid regardless of fork version, compute_domain will default to zeroes there). - Send a transaction on the Ethereum 1.0 chain to DEPOSIT_CONTRACT_ADDRESS executing def deposit(pubkey: bytes[48], withdrawal_credentials: bytes[32], signature: bytes[96]) along with a deposit of amount Gwei.
func EncryptKey ¶
EncryptKey encrypts a key using the specified scrypt parameters into a JSON blob that can be decrypted later on.
Types ¶
type Key ¶
type Key struct { ID uuid.UUID // Version 4 "random" for unique id not derived from key data PublicKey *bls.PublicKey // Represents the public key of the user. SecretKey *bls.SecretKey // Represents the private key of the user. }
Key is the object that stores all the user data related to their public/secret keys.
func DecryptKey ¶
DecryptKey decrypts a key from a JSON blob, returning the private key itself.
func NewKeyFromBLS ¶
NewKeyFromBLS creates a new keystore Key type using a BLS private key.
func (*Key) MarshalJSON ¶
MarshalJSON marshals a key struct into a JSON blob.
func (*Key) UnmarshalJSON ¶
UnmarshalJSON unmarshals a blob into a key struct.
type Store ¶
type Store struct {
// contains filtered or unexported fields
}
Store defines a keystore with a directory path and scrypt values.
func (Store) GetKeys ¶
func (ks Store) GetKeys(directory, filePrefix, password string, warnOnFail bool) (map[string]*Key, error)
GetKeys from directory using the prefix to filter relevant files and a decryption password.