Docs/Reference/Signing
Signing
How brand wallets sign issuance, redemption, and admin messages before anyone can submit them.
Domain#
The signature is bound to Loyfin, one chain, and one verifying contract.
const domain = {
name: "Loyfin",
version: "1",
chainId: 8453,
verifyingContract: loyfinFactoryAddress
};
const types = {
Metadata: [
{ name: "loyaltyId", type: "bytes32" },
{ name: "name", type: "string" },
{ name: "symbol", type: "string" },
{ name: "media", type: "string" },
{ name: "description", type: "string" },
{ name: "contractURI", type: "string" },
{ name: "tokenURI", type: "string" }
],
Issuance: [
{ name: "issuer", type: "address" },
{ name: "to", type: "address" },
{ name: "loyaltyId", type: "bytes32" },
{ name: "amount", type: "uint256" },
{ name: "expiresAt", type: "uint256" },
{ name: "deadline", type: "uint256" },
{ name: "nonce", type: "bytes32" },
{ name: "chainId", type: "uint256" },
{ name: "verifyingContract", type: "address" },
{ name: "operationHash", type: "bytes32" },
{ name: "metadata", type: "Metadata" },
{ name: "data", type: "bytes" }
]
};Issuance type#
Issuance signatures include metadata because the first tokenization can create the Loyalty Token. Issuance and redemption signatures also include deadline; 0 means the signed action does not expire.
Redemption type#
const types = {
Redemption: [
{ name: "issuer", type: "address" },
{ name: "from", type: "address" },
{ name: "loyaltyId", type: "bytes32" },
{ name: "amount", type: "uint256" },
{ name: "expiresAt", type: "uint256" },
{ name: "deadline", type: "uint256" },
{ name: "nonce", type: "bytes32" },
{ name: "chainId", type: "uint256" },
{ name: "verifyingContract", type: "address" },
{ name: "operationHash", type: "bytes32" },
{ name: "data", type: "bytes" }
]
};