A transfer from the account's donation wallet (app.gainforest.wallet.primary) that still needs more passkey approvals. Multi-approval wallets (threshold > 1) collect approvals asynchronously: the initiator stores the exact unsigned ERC-4337 UserOperation here together with their own approval, remaining passkey holders approve from their own devices, and the final approver signs the full userOp hash which submits the operation on-chain and deletes this record. Every stored approval is a WebAuthn assertion over the operation's LIGHT hash (the SmartVault scheme where all but the last signer sign a gas-bounded subset of the operation). Approvals are verified off-chain before being stored and re-verified before submission, so a hand-crafted record cannot forge or brick a transfer. Fixed rkey `self`: one pending transfer per wallet at a time.
literal:self
Fixed literal value
Properties
amountUnits
string
Required
Raw token units as a decimal string. Redundant with callData, for display.
approvals
array
of
ref
#approval
Required
Light-hash approvals collected so far, in signing order (at most threshold − 1; the final approval is never stored).
createdAt
string
datetime
Required
An RFC 3339 formatted timestamp.
createdBy
string
did
Required
DID of the signed-in account that started the transfer.
hash
string
Required
Full EntryPoint v0.7 userOp hash — signed by the final approver.
lightHash
string
Required
SmartVault light userOp hash — signed by every earlier approver.
threshold
integer
Required
Approval requirement of the wallet when this transfer was started; a mismatch with the current wallet invalidates the transfer.
minimum: 2maximum: 255to
string
Required
Recipient address (0x…, 20 bytes). Redundant with callData, for display; the server re-derives it from the operation.
token
string
Required
What is being sent.
ETH, USDC, USDTuserOp
ref
#userOp
Required
No description available.
View raw schema
{
"key": "literal:self",
"type": "record",
"record": {
"type": "object",
"required": [
"token",
"to",
"amountUnits",
"userOp",
"hash",
"lightHash",
"threshold",
"approvals",
"createdBy",
"createdAt"
],
"properties": {
"to": {
"type": "string",
"description": "Recipient address (0x…, 20 bytes). Redundant with callData, for display; the server re-derives it from the operation."
},
"hash": {
"type": "string",
"description": "Full EntryPoint v0.7 userOp hash — signed by the final approver."
},
"token": {
"enum": [
"ETH",
"USDC",
"USDT"
],
"type": "string",
"description": "What is being sent."
},
"userOp": {
"ref": "#userOp",
"type": "ref"
},
"approvals": {
"type": "array",
"items": {
"ref": "#approval",
"type": "ref"
},
"description": "Light-hash approvals collected so far, in signing order (at most threshold − 1; the final approval is never stored)."
},
"createdAt": {
"type": "string",
"format": "datetime"
},
"createdBy": {
"type": "string",
"format": "did",
"description": "DID of the signed-in account that started the transfer."
},
"lightHash": {
"type": "string",
"description": "SmartVault light userOp hash — signed by every earlier approver."
},
"threshold": {
"type": "integer",
"maximum": 255,
"minimum": 2,
"description": "Approval requirement of the wallet when this transfer was started; a mismatch with the current wallet invalidates the transfer."
},
"amountUnits": {
"type": "string",
"description": "Raw token units as a decimal string. Redundant with callData, for display."
}
}
},
"description": "A transfer from the account's donation wallet (app.gainforest.wallet.primary) that still needs more passkey approvals. Multi-approval wallets (threshold > 1) collect approvals asynchronously: the initiator stores the exact unsigned ERC-4337 UserOperation here together with their own approval, remaining passkey holders approve from their own devices, and the final approver signs the full userOp hash which submits the operation on-chain and deletes this record. Every stored approval is a WebAuthn assertion over the operation's LIGHT hash (the SmartVault scheme where all but the last signer sign a gas-bounded subset of the operation). Approvals are verified off-chain before being stored and re-verified before submission, so a hand-crafted record cannot forge or brick a transfer. Fixed rkey `self`: one pending transfer per wallet at a time."
}