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

Link to this function

address(name \\ Signet.Solana.Signer.Default)

View Source
@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.

Link to this function

sign(message, name \\ Signet.Solana.Signer.Default)

View Source
@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.

Link to this function

verify(message, arg1, arg2)

View Source
@spec verify(binary(), <<_::512>>, <<_::256>>) :: boolean()

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