app.gainforest.wallet.pendingSend

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.

Details · record, key literal:self
Kindrecord
Record keyliteral:self
Authoritywallet.gainforest.app
Indexed

Record

record · key literal:self

Properties

amountUnits

requiredstring

Raw token units as a decimal string. Redundant with callData, for display.

approvals

requiredarray

Light-hash approvals collected so far, in signing order (at most threshold − 1; the final approval is never stored).

itemsref
Reference

createdAt

requiredstring · datetime

createdBy

requiredstring · did

DID of the signed-in account that started the transfer.

hash

requiredstring

Full EntryPoint v0.7 userOp hash — signed by the final approver.

lightHash

requiredstring

SmartVault light userOp hash — signed by every earlier approver.

threshold

requiredinteger

Approval requirement of the wallet when this transfer was started; a mismatch with the current wallet invalidates the transfer.

  • minimum: 2
  • maximum: 255

to

requiredstring

Recipient address (0x…, 20 bytes). Redundant with callData, for display; the server re-derives it from the operation.

token

requiredstring

What is being sent.

  • enum: ETH | USDC | USDT

userOp

requiredref
Reference

#approval

object

A WebAuthn assertion over the light userOp hash by one enrolled passkey signer.

Properties

addedAt

requiredstring · datetime

addedBy

requiredstring · did

DID of the signed-in account that added this approval.

authenticatorData

requiredstring

Authenticator data of the assertion, hex.

challengeIndex

requiredinteger

Index of "challenge" in clientDataJSON.

clientDataJSON

requiredstring

Client data JSON of the assertion.

credentialId

requiredstring

WebAuthn credential id of the enrolled signer that approved.

r

requiredstring

secp256r1 signature r, decimal string.

s

requiredstring

secp256r1 signature s (low-s), decimal string.

typeIndex

requiredinteger

Index of "type" in clientDataJSON.

#userOp

object

The unsigned ERC-4337 v0.7 UserOperation, exactly as it will be submitted. Gas and fee fields are decimal strings.

Properties

callData

requiredstring

vault.execute(...) calldata — exactly one ETH/USDC/USDT transfer.

callGasLimit

requiredstring

factory

string

SmartVaultFactory address — present only while the vault is undeployed.

createAccount calldata deploying the vault on first send.

maxFeePerGas

requiredstring

maxPriorityFeePerGas

requiredstring

nonce

requiredstring

EntryPoint nonce at preparation time; consumed nonces invalidate the transfer.

preVerificationGas

requiredstring

sender

requiredstring

The wallet's vault address.

verificationGasLimit

requiredstring