signer

package
v0.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 24, 2026 License: GPL-3.0 Imports: 13 Imported by: 0

Documentation

Overview

Package signer provides BLS signing utilities for builder operations.

Index

Constants

This section is empty.

Variables

View Source
var (
	// DomainVoluntaryExit is the standard domain for voluntary exits.
	DomainVoluntaryExit = phase0.DomainType{0x04, 0x00, 0x00, 0x00}

	// DomainDeposit is the standard domain for validator deposit signatures, and for
	// the genesis builder-onboarding path (a pre-fork deposit to the validator deposit
	// contract with a 0x03 credential, per the Gloas spec).
	DomainDeposit = phase0.DomainType{0x03, 0x00, 0x00, 0x00}

	// DomainBuilderDeposit is DOMAIN_BUILDER_DEPOSIT (Gloas, 0x0E000000): the dedicated
	// domain for post-fork builder deposits submitted to the EIP-8282 builder deposit
	// contract. The consensus-specs sign the DepositMessage proof-of-possession under
	// this domain (is_valid_builder_deposit_signature) so validator and builder deposit
	// signatures cannot be replayed against the other contract.
	DomainBuilderDeposit = phase0.DomainType{0x0E, 0x00, 0x00, 0x00}

	// DomainApplicationBuilder is the domain for builder API validator registration signatures.
	// See https://github.com/ethereum/builder-specs
	DomainApplicationBuilder = phase0.DomainType{0x00, 0x00, 0x00, 0x01}
)

Domain types for lifecycle operations.

Functions

func ComputeBuilderDepositSigningRoot

func ComputeBuilderDepositSigningRoot(
	pubkey phase0.BLSPubKey,
	withdrawalCredentials [32]byte,
	amountGwei uint64,
	genesisForkVersion phase0.Version,
) (phase0.Root, error)

ComputeBuilderDepositSigningRoot computes the signing root for an EIP-8282 builder deposit message. Per the Gloas consensus-specs (is_valid_builder_deposit_signature) it signs the DepositMessage under DOMAIN_BUILDER_DEPOSIT (0x0E000000) — a dedicated domain, distinct from validator deposits — with GENESIS_FORK_VERSION and a zero genesis_validators_root, so the proof-of-possession is chain- and fork-agnostic.

func ComputeDepositDataRoot

func ComputeDepositDataRoot(
	pubkey phase0.BLSPubKey,
	withdrawalCredentials [32]byte,
	amountGwei uint64,
	signature phase0.BLSSignature,
) (phase0.Root, error)

ComputeDepositDataRoot computes the hash tree root of DepositData. Uses the go-eth2-client library's SSZ implementation for correctness.

func ComputeDepositSigningRoot

func ComputeDepositSigningRoot(
	pubkey phase0.BLSPubKey,
	withdrawalCredentials [32]byte,
	amountGwei uint64,
	genesisForkVersion phase0.Version,
) (phase0.Root, error)

ComputeDepositSigningRoot computes the signing root for a deposit message. Uses the go-eth2-client library's SSZ implementation for correctness. Per spec, uses GENESIS_FORK_VERSION and zeros for genesis_validators_root.

func ComputeDomain

func ComputeDomain(
	domainType phase0.DomainType,
	forkVersion phase0.Version,
	genesisValidatorsRoot phase0.Root,
) phase0.Domain

ComputeDomain computes a domain value for a given domain type, fork version, and genesis validators root. Uses consensus spec SSZ hash_tree_root(ForkData) so it matches beacon node / mev-boost signing.

func ComputeSigningRoot

func ComputeSigningRoot(objectRoot phase0.Root, domain phase0.Domain) phase0.Root

ComputeSigningRoot computes the signing root from an object root and domain. Uses consensus spec SSZ hash_tree_root(SigningData) so it matches beacon node / mev-boost signing.

func ComputeVoluntaryExitRoot

func ComputeVoluntaryExitRoot(epoch phase0.Epoch, validatorIndex phase0.ValidatorIndex) phase0.Root

ComputeVoluntaryExitRoot computes the hash tree root of a VoluntaryExit.

func DeriveBLSPrivkeyHex

func DeriveBLSPrivkeyHex(mnemonic string, index uint64) (string, error)

DeriveBLSPrivkeyHex derives a builder BLS private key from a BIP-39 mnemonic and an account index using the standard Ethereum validator key derivation: EIP-2333 tree derivation along the EIP-2334 signing key path m/12381/3600/{index}/0/0.

It returns the 32-byte secret key as a 64-character lowercase hex string (no 0x prefix), matching the format accepted by NewBLSSigner.

func VerifyBLSSignature

func VerifyBLSSignature(pubkey phase0.BLSPubKey, message []byte, signature phase0.BLSSignature) bool

VerifyBLSSignature verifies a BLS signature over a message with the given public key. Returns true if the signature is valid.

Types

type BLSSigner

type BLSSigner struct {
	// contains filtered or unexported fields
}

BLSSigner handles BLS signing operations for a builder.

func NewBLSSigner

func NewBLSSigner(privkeyHex string) (*BLSSigner, error)

NewBLSSigner creates a new BLS signer from a hex-encoded private key.

func NewBuilderSigner

func NewBuilderSigner(privkeyHex, mnemonic string, index uint64) (*BLSSigner, error)

NewBuilderSigner builds a BLS signer from a builder key source: either a raw hex private key or a BIP-39 mnemonic + account index. The mnemonic takes precedence when set (callers are expected to enforce mutual exclusivity via config validation).

func (*BLSSigner) PublicKey

func (s *BLSSigner) PublicKey() phase0.BLSPubKey

PublicKey returns the BLS public key.

func (*BLSSigner) PublicKeyBytes

func (s *BLSSigner) PublicKeyBytes() []byte

PublicKeyBytes returns the public key as a byte slice.

func (*BLSSigner) Sign

func (s *BLSSigner) Sign(message []byte) (phase0.BLSSignature, error)

Sign signs a message and returns the signature.

func (*BLSSigner) SignVoluntaryExit

func (s *BLSSigner) SignVoluntaryExit(
	epoch phase0.Epoch,
	validatorIndex phase0.ValidatorIndex,
	forkVersion phase0.Version,
	genesisValidatorsRoot phase0.Root,
) (phase0.BLSSignature, error)

SignVoluntaryExit signs a voluntary exit message.

func (*BLSSigner) SignWithDomain

func (s *BLSSigner) SignWithDomain(root phase0.Root, domain phase0.Domain) (phase0.BLSSignature, error)

SignWithDomain signs a root with a domain and returns the signature.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL