Allowances and Permissions
Introduction
Section titled “Introduction”Some capabilities let your Product act on chain on the user's behalf, so the user has to grant them first. Your Product requests these grants — allowances, or resource allocations — from the Host, and the user approves them. A prompt such as "sign and submit on-chain transactions on your behalf" is one of these grants.
Allowances are granted per account. This is why they are closely tied to Accounts and Signing: granting an allowance to one account does nothing for a different one, and a misdirected grant surfaces as no allowance set for account.
What Your Product Can Request
Section titled “What Your Product Can Request”Your Product requests allowances through the SDK, typically once on connect. The resource types are:
| Resource | What it authorizes |
|---|---|
StatementStoreAllowance | Publishing to the Statement Store. |
BulletinAllowance | Storing data on the Bulletin Chain. |
SmartContractAllowance | Sponsoring transactions for a product account, keyed by its derivation index, for contract calls. |
AutoSigning | Signing and submitting transactions on the user's behalf without a per-action prompt. |
Requesting an Allowance
Section titled “Requesting an Allowance”The signer package requests allocations through its onConnect hook, which fires once per connection. Each request resolves to an outcome:
Allocated: The user granted it.Rejected: The user declined it.NotAvailable: The Host or wallet cannot provide it right now.
Request the allowances your Product needs up front, then treat a non-Allocated outcome as a feature being unavailable rather than a fatal error, so a declined grant degrades gracefully.
Scope and Lifetime
Section titled “Scope and Lifetime”- Scope: An allowance authorizes one capability for one account.
AutoSigningis the broadest — it hands your Product a signing subtree so it can sign without prompting for each action — which is why it is gated behind an explicit approval. - Lifetime: The exact lifetime and expiry policy of an allowance is not documented. In practice, an expired allowance surfaces as an error telling you to re-pair the wallet. Treat allowances as revocable and potentially expiring rather than permanent.
Re-Approval Is Expected
Section titled “Re-Approval Is Expected”Users are prompted once, and operations covered by a granted allowance do not prompt again. Two cases where you will see a prompt again are by design, not bugs:
- Redeploys: The CLI caches granted allowances on disk, so subsequent deploys skip most prompts. A fresh environment prompts again.
- Page reload: A Product re-requests its allocations each time it connects. If the Host still holds the grant, this is silent; otherwise the user is prompted again.
Design for re-approval: make requesting allowances idempotent, and do not treat a repeat prompt as an error state.
Inspect and Revoke
Section titled “Inspect and Revoke”- Inspect: There are cached checks for whether a storage or Statement Store allowance is present (they read local state and do not prompt the wallet). There is no documented way to inspect an
AutoSigninggrant specifically, and these checks read cached state rather than querying on-chain records. - Revoke: There is no documented per-allowance revoke. The coarse lever is tearing down the session — signing out clears the granted state. Revoking a single allowance while keeping others is not supported.
Where to Go Next
Section titled “Where to Go Next”-
Accounts and Signing
Allowances are per account; make sure you grant them to the account that signs.
-
Get TestNet Tokens
Grant your account the Bulletin storage authorization and other service allowances.
-
Permissions Reference
The Host-to-Product permission model at the protocol level.