Controller instance keys
Instance storage shares the contract instance’s lifetime:
Pool deployment and upgrade receive the Wasm hash as an argument. They do not
require a stored pool template.
Controller persistent keys
Shared records hold protocol, hub, and spoke state. User records hold account state and have a shorter renewal target.
Account ownership lives in the Position NFT
contract. Oracle configuration lives in the price aggregator under
PriceKey::Token(address) or PriceKey::Ref(symbol), as described in
Oracles.
Pool persistent keys
Market storage uses both hub id and token address. Keep both fields when building
keeper footprints; the same token under two hubs has two distinct market rows.
TTL
Time to live (TTL) is extended only on paths that call renewal helpers. A read or transaction does not automatically renew every related entry. The table uses approximately 17,280 ledgers per day. TTL is measured in ledgers, so these day counts depend on ledger cadence. The network’s maximum entry TTL also limits extensions. A simulation does not commit a TTL extension.renew_account(caller, account_id) requires the account owner to authorize. It
extends the controller instance, existing account records, and NFT Owner and
holder Balance entries. It moves no funds and remains callable during global
pause. Direct permissionless NFT renew(token_id) renews only NFT state.
account_exists(id) checks controller metadata. A successful call can renew
that entry through the storage read helper, but it does not prove or renew the
position maps, delegates, or NFT state. Use the owner, account attributes, and
position views for those checks.
An integrating contract owns its local account-id key and instance. Renew both
on successful use; protocol account renewal cannot extend them. After an action
that can delete the lending account, clear the local key only when
try_account_exists returns Ok(Ok(false)). Abort on a lookup failure. A zero
token balance or an empty indexed response does not prove account deletion.
For a contract-owned account, expose an authenticated renewal entrypoint that
uses the owner and controller addresses stored by your contract. It can call
renew_account as the current contract after renewing its own instance and key.
Do not accept an arbitrary controller address for account reconciliation.
The off-chain keeper extends or restores its configured instances, code, and
shared entries: controller, governance, pool, price aggregator, hub/spoke
listings, pool market rows, oracle configuration, and access-control records.
Dormant accounts also need account renewal.
Archived persistent entries remain restorable with RestoreFootprint.
Renewal and restoration procedures are in the
RPC disruption runbook.
