serializeCompactSignature
Combines compact signature components into a hex string (EIP-2098)
serializeCompactSignature
Combines compact signature components (R and YParityAndS) into a hex formatted compact signature string (EIP-2098).
Import
import "github.com/ChefBingbong/viem-go/utils/signature"Usage
import "github.com/ChefBingbong/viem-go/utils/signature"
hexSig, err := signature.SerializeCompactSignature(&signature.CompactSignature{ R: "0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90", YParityAndS: "0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064",})if err != nil { log.Fatal(err)}fmt.Printf("Compact Signature: %s", hexSig)// Compact Signature: 0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b907e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064
// Serialize to bytessigBytes, _ := signature.SerializeCompactSignatureBytes(&signature.CompactSignature{ R: "0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90", YParityAndS: "0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064",})// []byte{0x68, 0xa0, ...} (64 bytes)Returns
- Type:
(string, error)forSerializeCompactSignature,([]byte, error)forSerializeCompactSignatureBytes
The serialized compact signature. SerializeCompactSignature returns a hex string with 0x prefix (64 bytes), SerializeCompactSignatureBytes returns raw bytes.
Parameters
signature (required)
- Type:
*signature.CompactSignature
The compact signature struct containing R and YParityAndS components.
sig := &signature.CompactSignature{ R: "0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90", YParityAndS: "0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064",}
hexSig, _ := signature.SerializeCompactSignature(sig)R (required)
- Type:
string
The R component of the signature (32 bytes as hex string).
sig := &signature.CompactSignature{ R: "0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90", // ...}YParityAndS (required)
- Type:
string
The S component with yParity encoded in the top bit of the first byte (32 bytes as hex string).
sig := &signature.CompactSignature{ YParityAndS: "0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064", // ...}Functions
SerializeCompactSignature
Serializes a compact signature to a hex string:
hexSig, _ := signature.SerializeCompactSignature(sig)
// "0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b907e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064"
SerializeCompactSignatureBytes
Serializes a compact signature to bytes:
sigBytes, _ := signature.SerializeCompactSignatureBytes(sig)
// []byte{0x68, 0xa0, ...} (64 bytes)
Conversion Functions
SignatureToCompactSignature
Converts a regular Signature to a CompactSignature:
compact, _ := signature.SignatureToCompactSignature(&signature.Signature{
R: "0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90",
S: "0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064",
YParity: 0,
})
CompactSignatureToSignature
Converts a CompactSignature back to a regular Signature:
sig, _ := signature.CompactSignatureToSignature(compact)
Notes
- Compact signatures are 64 bytes instead of 65 bytes (saves 1 byte)
- The yParity is encoded in the top bit (bit 7) of the first byte of S
- EIP-2098 format is commonly used in Ethereum to reduce signature size