pages / example / loop_vault

example · loop_vault

canister coord://offchain/genie/program/loop_vault@v1/d3a01e517ee8d771 · v1 · artifact root 0xd3a01e517ee8d771cc5e5e5a9b1e285627440f3b8ba138b094c56019e0671bec · previous none (first version) · superroot at publish not sealed yet

sealed cases that reached it: 0 — sealed cases that reached this word (the store counts, never reads)

the words it says

its helpdesk graph

loop vault (a .genie program) in the studio: 6 symptoms, 6 fixes

the source

// _GENIE_v1_ — the loop vault under grid metering: every payout of an RPC resale leaves it metered, capped per transfer and
// per day as the register says, released by one KMS signature, and the supply venues are read by header collectors through the warmbed (the one route a chain read takes).
genie loop_vault v1
about "The loop vault under grid metering: each payout metered, capped per transfer and per day, one KMS signature, the supply venues read by header collectors"

use vault vault:taifoon:loop
use chain every
use product taifoon.rpc taifoon.api
use venue rpc-alchemy rpc-ankr
use guard owner-arm value-cap day-cap kms-sign-only idempotent-payouts

agent payout is "one payout of the loop vault to an RPC supplier"
  states due reserved released paid held
  start due
  final paid held
  failed held
  on cron "0 * * * *"
  read GET /v1/vaults/map as vaults
  read GET /v1/wallets/state as wallets
  move due -> reserved when leg.units > 0 guard idempotent-payouts venue rpc-alchemy
  move reserved -> released guard owner-arm value-cap venue rpc-ankr
  move released -> paid act releaser signs vault-signer release(bytes32) guard owner-arm day-cap kms-sign-only via vault:taifoon:loop on every cap 50000 USDC meter taifoon.rpc
  move * -> held when payee.known == false
  refuse no_payee "a leg without a payee is held, named"
  say paid "The batch left the loop vault: one signature through KMS"
  next due reserved "The hour's legs are reserved once; nothing is paid twice"
  next reserved released "The owner arms the vault; the value cap is checked before release"

vault vault:taifoon:loop
  grid taifoon.rpc per_call 1 per_day 1000000
  grid taifoon.api per_call 1
  cap USDC every per_tx 50000 per_day 5000000

knowledge
  symptom "a payout is held" caused_by "the leg names no payee" fixed_by "register the supplier's payee address and release the hour again"
  policy "the loop vault pays at most 50000 units per transfer and 5000000 per day on every chain it serves"

collector alchemy_health
  source https://warmbed.taifoon.dev/
  every 600s
  header "x-warmbed-score" as score
  feeds payout
  stage due when status == 200
  venue rpc-alchemy

collector ankr_health
  source https://grid.taifoon.dev/
  every 600s
  feeds payout
  stage due when status == 200
  venue rpc-ankr

// the extension packs in use: the layer's intents (ext/taifoon-intents.json) and subscriptions (ext/subscriptions.json)
agent supply is "a subscription of an RPC supplier's quota, renewed monthly from the loop vault"
  states open renewing renewed lapsed
  start open
  final renewed lapsed
  failed lapsed
  on tick 1d
  move open -> renewing when period.ends_in < 86400 subscribe taifoon.rpc 30d intent hold venue rpc-alchemy
  move renewing -> renewed act releaser signs vault-signer release(bytes32) guard owner-arm day-cap kms-sign-only via vault:taifoon:loop on every cap 50000 USDC meter taifoon.rpc intent payout
  move * -> lapsed when period.ends_in < 0
  refuse lapsed "the period ended before the renewal was paid"
  say renewed "The quota is renewed for the period; one signature through KMS"
  next open renewing "A day before the period ends the renewal is reserved"