where cxs(uniquifier) is cxs(blockExpiryHeight) || cxs(nonce): the
chain's own Uniquifier encoding, so the replay pair is spelled the way a
transaction spells its own. The result is signed directly, like
transactionSignaturePreimage; Ed25519 does its own hashing. It must
match the Rust thruput_domain_separator::SignedOp::preimage byte for
byte, or the verifying contract rejects the signature. Only the first 74
bytes are fixed-width: the uniquifier's two fields are CXS varints.
defineSignedOperation calls this after encoding the payload; reach
for it directly only when the payload is already CXS bytes.
The message a signed-operation signature covers:
where
cxs(uniquifier)iscxs(blockExpiryHeight) || cxs(nonce): the chain's ownUniquifierencoding, so the replay pair is spelled the way a transaction spells its own. The result is signed directly, like transactionSignaturePreimage; Ed25519 does its own hashing. It must match the Rustthruput_domain_separator::SignedOp::preimagebyte for byte, or the verifying contract rejects the signature. Only the first 74 bytes are fixed-width: the uniquifier's two fields are CXS varints.defineSignedOperation calls this after encoding the payload; reach for it directly only when the payload is already CXS bytes.