viem-goviem-go

serializeSignature

Combines signature components into a hex string

serializeSignature

Combines signature components (R, S, V, YParity) into a hex formatted signature string.

Import

import "github.com/ChefBingbong/viem-go/utils/signature"

Usage

import "github.com/ChefBingbong/viem-go/utils/signature"
import "math/big"
hexSig, err := signature.SerializeSignature(&signature.Signature{
R: "0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf",
S: "0x4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db8",
YParity: 1,
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("Signature: %s
", hexSig)
// Signature: 0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db81c
// Serialize to bytes
sigBytes, _ := signature.SerializeSignatureBytes(&signature.Signature{
R: "0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf",
S: "0x4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db8",
YParity: 1,
})
// []byte{0x6e, 0x10, ...}

Returns

  • Type: (string, error) for SerializeSignature, ([]byte, error) for SerializeSignatureBytes

The serialized signature. SerializeSignature returns a hex string with 0x prefix (65 bytes), SerializeSignatureBytes returns raw bytes.

Parameters

signature (required)

  • Type: *signature.Signature

The signature struct containing R, S, V, and YParity components.

sig := &signature.Signature{
R: "0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf",
S: "0x4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db8",
YParity: 1,
}
hexSig, _ := signature.SerializeSignature(sig)

R (required)

  • Type: string

The R component of the signature (32 bytes as hex string).

sig := &signature.Signature{
R: "0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf",
// ...
}

S (required)

  • Type: string

The S component of the signature (32 bytes as hex string).

sig := &signature.Signature{
S: "0x4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db8",
// ...
}

V (optional)

  • Type: *big.Int

The V value (27 or 28 for legacy signatures). If not provided, YParity is used.

import "math/big"
sig := &signature.Signature{
V: big.NewInt(28),
// ...
}

YParity (optional)

  • Type: int

The parity of the y-coordinate (0 or 1). Used for EIP-2930/1559 transactions. If not provided, derived from V.

sig := &signature.Signature{
YParity: 1,
// ...
}

Functions

SerializeSignature

Serializes a signature to a hex string:

hexSig, _ := signature.SerializeSignature(sig)
// "0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db81c"

SerializeSignatureBytes

Serializes a signature to bytes:

sigBytes, _ := signature.SerializeSignatureBytes(sig)
// []byte{0x6e, 0x10, ...} (65 bytes)

Signature Format

The serialized signature format is:

  • First 32 bytes: R component (padded to 32 bytes)
  • Next 32 bytes: S component (padded to 32 bytes)
  • Last byte: Recovery byte (0x1b for yParity=0, 0x1c for yParity=1)