View Source Signet.Solana.Signer (Signet v1.6.0)
GenServer that wraps Ed25519 signing backends for Solana.
Follows the same MFA (module, function, args) backend pattern as the
Ethereum Signet.Signer, but much simpler: no recovery bit brute-force,
no chain ID encoding.
Delegates to a backend module (e.g., Signet.Solana.Signer.Ed25519 for
local keys, or Signet.Solana.Signer.CloudKMS for GCP KMS). Caches
the public key on first use.
Examples
# Start via supervisor or manually:
{:ok, pid} = Signet.Solana.Signer.start_link(
mfa: {Signet.Solana.Signer.Ed25519, :sign, [seed]},
name: MySolSigner
)
# Sign a message:
{:ok, signature} = Signet.Solana.Signer.sign(message, MySolSigner)
# Get the signer's public key:
pub_key = Signet.Solana.Signer.address(MySolSigner)
Summary
Functions
Get the 32-byte public key (Solana address) for this signer.
Returns a specification to start this module under a supervisor.
Sign raw message bytes. Returns a 64-byte Ed25519 signature.
Starts a new Solana signer process.
Verify an Ed25519 signature. Standalone function, no GenServer needed.
Functions
@spec address(GenServer.name()) :: <<_::256>>
Get the 32-byte public key (Solana address) for this signer.
Examples
iex> signer = Signet.Solana.Test.Signer.start_signer()
iex> address = Signet.Solana.Signer.address(signer)
iex> byte_size(address)
32
Returns a specification to start this module under a supervisor.
See Supervisor.
@spec sign(binary(), GenServer.name()) :: {:ok, <<_::512>>} | {:error, term()}
Sign raw message bytes. Returns a 64-byte Ed25519 signature.
Examples
iex> signer = Signet.Solana.Test.Signer.start_signer()
iex> {:ok, sig} = Signet.Solana.Signer.sign("test", signer)
iex> byte_size(sig)
64
@spec start_link(keyword()) :: GenServer.on_start()
Starts a new Solana signer process.
Verify an Ed25519 signature. Standalone function, no GenServer needed.
Examples
iex> seed = Base.decode16!("9D61B19DEFFD5A60BA844AF492EC2CC44449C5697B326919703BAC031CAE7F60")
iex> pub = Base.decode16!("D75A980182B10AB7D54BFED3C964073A0EE172F3DAA62325AF021A68F707511A")
iex> {:ok, sig} = Signet.Solana.Signer.Ed25519.sign("test", seed)
iex> Signet.Solana.Signer.verify("test", sig, pub)
true