Files
microdao-daarion/site/cursor/49_wallet_rwa_payouts_claims/index.html
Apple ef3473db21 snapshot: NODE1 production state 2026-02-09
Complete snapshot of /opt/microdao-daarion/ from NODE1 (144.76.224.179).
This represents the actual running production code that has diverged
significantly from the previous main branch.

Key changes from old main:
- Gateway (http_api.py): expanded from ~40KB to 164KB with full agent support
- Router: new /v1/agents/{id}/infer endpoint with vision + DeepSeek routing
- Behavior Policy: SOWA v2.2 (3-level: FULL/ACK/SILENT)
- Agent Registry: config/agent_registry.yml as single source of truth
- 13 agents configured (was 3)
- Memory service integration
- CrewAI teams and roles

Excluded from snapshot: venv/, .env, data/, backups, .tgz archives

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-09 08:46:46 -08:00

1359 lines
45 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="canonical" href="https://IvanTytar.github.io/microdao-daarion/cursor/49_wallet_rwa_payouts_claims/">
<link rel="icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.5.3, mkdocs-material-9.5.18">
<title>49 — Wallet, RWA, Payouts & Claims (MicroDAO) - DAARION Documentation</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.66ac8b77.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#49-wallet-rwa-payouts-claims-microdao" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../.." title="DAARION Documentation" class="md-header__button md-logo" aria-label="DAARION Documentation" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
DAARION Documentation
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
49 — Wallet, RWA, Payouts & Claims (MicroDAO)
</span>
</div>
</div>
</div>
<script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../.." title="DAARION Documentation" class="md-nav__button md-logo" aria-label="DAARION Documentation" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
</a>
DAARION Documentation
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../public/" class="md-nav__link">
<span class="md-ellipsis">
Home
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../public/getting-started/" class="md-nav__link">
<span class="md-ellipsis">
Getting Started
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../public/architecture-overview/" class="md-nav__link">
<span class="md-ellipsis">
Architecture
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../public/daiS_daos_overview/" class="md-nav__link">
<span class="md-ellipsis">
DAIS & DAOS
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="">
<span class="md-ellipsis">
Internal
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
Internal
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_1" >
<label class="md-nav__link" for="__nav_5_1" id="__nav_5_1_label" tabindex="0">
<span class="md-ellipsis">
Infra
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_1_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5_1">
<span class="md-nav__icon md-icon"></span>
Infra
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../internal/infra/INFRA_AUTOMATION_PACK_V1/" class="md-nav__link">
<span class="md-ellipsis">
Infra Automation Pack v1
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../internal/infra/monitoring_overview/" class="md-nav__link">
<span class="md-ellipsis">
Monitoring Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../internal/infra/nodes_registry_v0/" class="md-nav__link">
<span class="md-ellipsis">
Nodes Registry v0
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_2" >
<label class="md-nav__link" for="__nav_5_2" id="__nav_5_2_label" tabindex="0">
<span class="md-ellipsis">
Specs
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5_2">
<span class="md-nav__icon md-icon"></span>
Specs
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../internal/specs/matrix_presence_aggregator/" class="md-nav__link">
<span class="md-ellipsis">
Matrix Presence Aggregator
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../internal/specs/city_map_spec/" class="md-nav__link">
<span class="md-ellipsis">
City Map Spec
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../internal/specs/node_join_protocol_draft/" class="md-nav__link">
<span class="md-ellipsis">
Node Join Protocol (Draft)
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#1-purpose-scope" class="md-nav__link">
<span class="md-ellipsis">
1. Purpose &amp; Scope
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#2-wallet-tokens" class="md-nav__link">
<span class="md-ellipsis">
2. Wallet Tokens
</span>
</a>
<nav class="md-nav" aria-label="2. Wallet Tokens">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#21-1t-token" class="md-nav__link">
<span class="md-ellipsis">
2.1 1T Token
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#22-kwt-token" class="md-nav__link">
<span class="md-ellipsis">
2.2 KWT Token
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#23-ringk-token" class="md-nav__link">
<span class="md-ellipsis">
2.3 RINGK Token
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#24-daarion-token" class="md-nav__link">
<span class="md-ellipsis">
2.4 DAARION Token
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#3-wallet-architecture" class="md-nav__link">
<span class="md-ellipsis">
3. Wallet Architecture
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#4-wallet-schema" class="md-nav__link">
<span class="md-ellipsis">
4. Wallet Schema
</span>
</a>
<nav class="md-nav" aria-label="4. Wallet Schema">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#41-balances" class="md-nav__link">
<span class="md-ellipsis">
4.1 Balances
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#42-transactions" class="md-nav__link">
<span class="md-ellipsis">
4.2 Transactions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#43-payouts" class="md-nav__link">
<span class="md-ellipsis">
4.3 Payouts
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#5-acl-rules" class="md-nav__link">
<span class="md-ellipsis">
5. ACL Rules
</span>
</a>
<nav class="md-nav" aria-label="5. ACL Rules">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#wallet-access" class="md-nav__link">
<span class="md-ellipsis">
Wallet Access
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#6-rwa-payout-formula" class="md-nav__link">
<span class="md-ellipsis">
6. RWA → Payout Formula
</span>
</a>
<nav class="md-nav" aria-label="6. RWA → Payout Formula">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#61-energy-kwt" class="md-nav__link">
<span class="md-ellipsis">
6.1 ENERGY → KWT
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#62-food-1t" class="md-nav__link">
<span class="md-ellipsis">
6.2 FOOD → 1T
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#63-water-1t-kwt" class="md-nav__link">
<span class="md-ellipsis">
6.3 WATER → 1T або KWT
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#7-payout-lifecycle" class="md-nav__link">
<span class="md-ellipsis">
7. Payout Lifecycle
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#8-claim-lifecycle" class="md-nav__link">
<span class="md-ellipsis">
8. Claim Lifecycle
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#9-conversion-rules" class="md-nav__link">
<span class="md-ellipsis">
9. Conversion Rules
</span>
</a>
<nav class="md-nav" aria-label="9. Conversion Rules">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#kwt-1t" class="md-nav__link">
<span class="md-ellipsis">
KWT → 1T
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#daarion-ringk" class="md-nav__link">
<span class="md-ellipsis">
DAARION → RINGK
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ringk-1t" class="md-nav__link">
<span class="md-ellipsis">
RINGK → 1T
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#10-dailymonthly-limits" class="md-nav__link">
<span class="md-ellipsis">
10. Daily/Monthly Limits
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#11-fraud-protection" class="md-nav__link">
<span class="md-ellipsis">
11. Fraud Protection
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#12-governance-controls" class="md-nav__link">
<span class="md-ellipsis">
12. Governance Controls
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#13-integrations" class="md-nav__link">
<span class="md-ellipsis">
13. Integrations
</span>
</a>
<nav class="md-nav" aria-label="13. Integrations">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#131-nats-events" class="md-nav__link">
<span class="md-ellipsis">
13.1 NATS Events
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#132-usage-engine" class="md-nav__link">
<span class="md-ellipsis">
13.2 Usage Engine
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#133-pdp" class="md-nav__link">
<span class="md-ellipsis">
13.3 PDP
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#14-transparency-logs" class="md-nav__link">
<span class="md-ellipsis">
14. Transparency &amp; Logs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#15-example-scenarios" class="md-nav__link">
<span class="md-ellipsis">
15. Example Scenarios
</span>
</a>
<nav class="md-nav" aria-label="15. Example Scenarios">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#151" class="md-nav__link">
<span class="md-ellipsis">
15.1 Енергія
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#152" class="md-nav__link">
<span class="md-ellipsis">
15.2 Вода
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#153" class="md-nav__link">
<span class="md-ellipsis">
15.3 Конвертація
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#154-claim" class="md-nav__link">
<span class="md-ellipsis">
15.4 Claim
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#16-integration-with-other-docs" class="md-nav__link">
<span class="md-ellipsis">
16. Integration with Other Docs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#17-cursor" class="md-nav__link">
<span class="md-ellipsis">
17. Завдання для Cursor
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#18-summary" class="md-nav__link">
<span class="md-ellipsis">
18. Summary
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="49-wallet-rwa-payouts-claims-microdao">49 — Wallet, RWA, Payouts &amp; Claims (MicroDAO)<a class="headerlink" href="#49-wallet-rwa-payouts-claims-microdao" title="Permanent link">&para;</a></h1>
<p><em>Архітектура Wallet Service: баланси, RWA-нарахування, KWT/1T економіка, payout-и, claims, ACL, подвійна верифікація, безпека.</em></p>
<hr />
<h2 id="1-purpose-scope">1. Purpose &amp; Scope<a class="headerlink" href="#1-purpose-scope" title="Permanent link">&para;</a></h2>
<p>Документ визначає:</p>
<ul>
<li>модель гаманця (Wallet Service),</li>
<li>токени, що підтримуються,</li>
<li>RWA → KWT / 1T нарахування,</li>
<li>payouts та claims,</li>
<li>ACL для гаманця,</li>
<li>інтеграцію з RWA, Embassy, Usage Engine, Governance.</li>
</ul>
<p>Це економічний центр системи DAARION.</p>
<hr />
<h2 id="2-wallet-tokens">2. Wallet Tokens<a class="headerlink" href="#2-wallet-tokens" title="Permanent link">&para;</a></h2>
<h3 id="21-1t-token">2.1 1T Token<a class="headerlink" href="#21-1t-token" title="Permanent link">&para;</a></h3>
<ul>
<li>внутрішній compute токен</li>
<li>витрачається на LLM, agents, tools, router</li>
<li>mint: Governance (policy-based)</li>
<li>burn: Usage (auto)</li>
</ul>
<h3 id="22-kwt-token">2.2 KWT Token<a class="headerlink" href="#22-kwt-token" title="Permanent link">&para;</a></h3>
<ul>
<li>внутрішній енергетичний токен</li>
<li>нараховується за kWh</li>
<li>використовується на оплату енергетичних сервісів</li>
<li>рідко витрачається на compute</li>
<li>може бути конвертований у 1T (governance-defined)</li>
</ul>
<h3 id="23-ringk-token">2.3 RINGK Token<a class="headerlink" href="#23-ringk-token" title="Permanent link">&para;</a></h3>
<ul>
<li>stake token</li>
<li>збільшує квоти</li>
<li>впливає на governance</li>
<li>не витрачається на compute</li>
</ul>
<h3 id="24-daarion-token">2.4 DAARION Token<a class="headerlink" href="#24-daarion-token" title="Permanent link">&para;</a></h3>
<ul>
<li>governance token</li>
<li>використовується у голосуваннях</li>
<li>не впливає на usage</li>
<li>може бути конвертований у RINGK</li>
</ul>
<hr />
<h2 id="3-wallet-architecture">3. Wallet Architecture<a class="headerlink" href="#3-wallet-architecture" title="Permanent link">&para;</a></h2>
<div class="codehilite"><pre><span></span><code>API Gateway (PEP)
PDP
Wallet Service
Postgres + NATS Events
</code></pre></div>
<p>Wallet обробляє:</p>
<ul>
<li>read балансів</li>
<li>записи payout</li>
<li>claims</li>
<li>внутрішні транзакції між командами</li>
<li>audit логування</li>
</ul>
<hr />
<h2 id="4-wallet-schema">4. Wallet Schema<a class="headerlink" href="#4-wallet-schema" title="Permanent link">&para;</a></h2>
<h3 id="41-balances">4.1 Balances<a class="headerlink" href="#41-balances" title="Permanent link">&para;</a></h3>
<div class="codehilite"><pre><span></span><code><span class="k">create</span><span class="w"> </span><span class="k">table</span><span class="w"> </span><span class="n">wallet_balances</span><span class="w"> </span><span class="p">(</span>
<span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="nb">text</span><span class="w"> </span><span class="k">primary</span><span class="w"> </span><span class="k">key</span><span class="p">,</span>
<span class="w"> </span><span class="n">owner_type</span><span class="w"> </span><span class="nb">text</span><span class="p">,</span><span class="w"> </span><span class="c1">-- user|team</span>
<span class="w"> </span><span class="n">owner_id</span><span class="w"> </span><span class="nb">text</span><span class="p">,</span>
<span class="w"> </span><span class="n">symbol</span><span class="w"> </span><span class="nb">text</span><span class="p">,</span><span class="w"> </span><span class="c1">-- 1T|KWT|RINGK|DAARION</span>
<span class="w"> </span><span class="n">balance</span><span class="w"> </span><span class="nb">numeric</span><span class="p">,</span>
<span class="w"> </span><span class="n">updated_at</span><span class="w"> </span><span class="n">timestamptz</span>
<span class="p">);</span>
</code></pre></div>
<hr />
<h3 id="42-transactions">4.2 Transactions<a class="headerlink" href="#42-transactions" title="Permanent link">&para;</a></h3>
<div class="codehilite"><pre><span></span><code><span class="k">create</span><span class="w"> </span><span class="k">table</span><span class="w"> </span><span class="n">wallet_transactions</span><span class="w"> </span><span class="p">(</span>
<span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="nb">text</span><span class="w"> </span><span class="k">primary</span><span class="w"> </span><span class="k">key</span><span class="p">,</span>
<span class="w"> </span><span class="n">owner_type</span><span class="w"> </span><span class="nb">text</span><span class="p">,</span>
<span class="w"> </span><span class="n">owner_id</span><span class="w"> </span><span class="nb">text</span><span class="p">,</span>
<span class="w"> </span><span class="n">symbol</span><span class="w"> </span><span class="nb">text</span><span class="p">,</span>
<span class="w"> </span><span class="n">amount</span><span class="w"> </span><span class="nb">numeric</span><span class="p">,</span>
<span class="w"> </span><span class="n">direction</span><span class="w"> </span><span class="nb">text</span><span class="p">,</span><span class="w"> </span><span class="c1">-- credit|debit</span>
<span class="w"> </span><span class="n">reason</span><span class="w"> </span><span class="nb">text</span><span class="p">,</span>
<span class="w"> </span><span class="k">ref</span><span class="w"> </span><span class="nb">text</span><span class="p">,</span>
<span class="w"> </span><span class="n">ts</span><span class="w"> </span><span class="n">timestamptz</span>
<span class="p">);</span>
</code></pre></div>
<hr />
<h3 id="43-payouts">4.3 Payouts<a class="headerlink" href="#43-payouts" title="Permanent link">&para;</a></h3>
<div class="codehilite"><pre><span></span><code><span class="k">create</span><span class="w"> </span><span class="k">table</span><span class="w"> </span><span class="n">payouts</span><span class="w"> </span><span class="p">(</span>
<span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="nb">text</span><span class="w"> </span><span class="k">primary</span><span class="w"> </span><span class="k">key</span><span class="p">,</span>
<span class="w"> </span><span class="n">team_id</span><span class="w"> </span><span class="nb">text</span><span class="p">,</span>
<span class="w"> </span><span class="n">symbol</span><span class="w"> </span><span class="nb">text</span><span class="p">,</span><span class="w"> </span><span class="c1">-- KWT|1T</span>
<span class="w"> </span><span class="n">amount</span><span class="w"> </span><span class="nb">numeric</span><span class="p">,</span>
<span class="w"> </span><span class="n">rwa_ref</span><span class="w"> </span><span class="nb">text</span><span class="p">,</span><span class="w"> </span><span class="c1">-- reference to rwa_inventory</span>
<span class="w"> </span><span class="n">status</span><span class="w"> </span><span class="nb">text</span><span class="p">,</span><span class="w"> </span><span class="c1">-- generated|claimed|failed</span>
<span class="w"> </span><span class="n">created_at</span><span class="w"> </span><span class="n">timestamptz</span><span class="p">,</span>
<span class="w"> </span><span class="n">claimed_at</span><span class="w"> </span><span class="n">timestamptz</span>
<span class="p">);</span>
</code></pre></div>
<hr />
<h2 id="5-acl-rules">5. ACL Rules<a class="headerlink" href="#5-acl-rules" title="Permanent link">&para;</a></h2>
<h3 id="wallet-access">Wallet Access<a class="headerlink" href="#wallet-access" title="Permanent link">&para;</a></h3>
<table>
<thead>
<tr>
<th>Action</th>
<th>Roles Allowed</th>
</tr>
</thead>
<tbody>
<tr>
<td>view balances</td>
<td>owner, guardian</td>
</tr>
<tr>
<td>claim payouts</td>
<td>owner, guardian</td>
</tr>
<tr>
<td>send tx</td>
<td>owner</td>
</tr>
<tr>
<td>convert tokens</td>
<td>owner</td>
</tr>
<tr>
<td>read audit</td>
<td>owner, guardian</td>
</tr>
<tr>
<td>no agent access</td>
<td>agents cannot read balances</td>
</tr>
</tbody>
</table>
<p>Agent run <strong>не може</strong>:</p>
<ul>
<li>бачити баланси</li>
<li>робити payouts</li>
<li>робити транзакції</li>
</ul>
<hr />
<h2 id="6-rwa-payout-formula">6. RWA → Payout Formula<a class="headerlink" href="#6-rwa-payout-formula" title="Permanent link">&para;</a></h2>
<h3 id="61-energy-kwt">6.1 ENERGY → KWT<a class="headerlink" href="#61-energy-kwt" title="Permanent link">&para;</a></h3>
<div class="codehilite"><pre><span></span><code>delta_kwh = inventory.delta
payout = delta_kwh × conversion_rate_energy_kwt
</code></pre></div>
<h3 id="62-food-1t">6.2 FOOD → 1T<a class="headerlink" href="#62-food-1t" title="Permanent link">&para;</a></h3>
<div class="codehilite"><pre><span></span><code>delta_kg × conversion_rate_food_1t
</code></pre></div>
<h3 id="63-water-1t-kwt">6.3 WATER → 1T або KWT<a class="headerlink" href="#63-water-1t-kwt" title="Permanent link">&para;</a></h3>
<div class="codehilite"><pre><span></span><code>delta_m3 × water_reward_rate (1T/KWT)
</code></pre></div>
<p>Conversion rates задає Governance.</p>
<hr />
<h2 id="7-payout-lifecycle">7. Payout Lifecycle<a class="headerlink" href="#7-payout-lifecycle" title="Permanent link">&para;</a></h2>
<div class="codehilite"><pre><span></span><code><span class="n">sequenceDiagram</span>
<span class="w"> </span><span class="n">participant</span><span class="w"> </span><span class="n">EMB</span><span class="w"> </span><span class="kr">as</span><span class="w"> </span><span class="n">Embassy</span>
<span class="w"> </span><span class="n">participant</span><span class="w"> </span><span class="n">RWA</span><span class="w"> </span><span class="kr">as</span><span class="w"> </span><span class="n">RWA</span><span class="w"> </span><span class="n">Processor</span>
<span class="w"> </span><span class="n">participant</span><span class="w"> </span><span class="n">W</span><span class="w"> </span><span class="kr">as</span><span class="w"> </span><span class="n">Wallet</span>
<span class="w"> </span><span class="n">participant</span><span class="w"> </span><span class="n">OUT</span><span class="w"> </span><span class="kr">as</span><span class="w"> </span><span class="n">Outbox</span>
<span class="w"> </span><span class="n">participant</span><span class="w"> </span><span class="n">N</span><span class="w"> </span><span class="kr">as</span><span class="w"> </span><span class="n">NATS</span>
<span class="w"> </span><span class="n">EMB</span><span class="o">-&gt;&gt;</span><span class="n">RWA</span><span class="o">:</span><span class="w"> </span><span class="n">new</span><span class="w"> </span><span class="n">measurement</span>
<span class="w"> </span><span class="n">RWA</span><span class="o">-&gt;&gt;</span><span class="n">W</span><span class="o">:</span><span class="w"> </span><span class="n">request</span><span class="w"> </span><span class="n">payout</span>
<span class="w"> </span><span class="n">W</span><span class="o">-&gt;&gt;</span><span class="n">W</span><span class="o">:</span><span class="w"> </span><span class="n">calculate</span>
<span class="w"> </span><span class="n">W</span><span class="o">-&gt;&gt;</span><span class="n">DB</span><span class="o">:</span><span class="w"> </span><span class="n">insert</span><span class="w"> </span><span class="n">payout</span>
<span class="w"> </span><span class="n">W</span><span class="o">-&gt;&gt;</span><span class="n">OUT</span><span class="o">:</span><span class="w"> </span><span class="n">insert</span><span class="w"> </span><span class="n">outbox</span><span class="w"> </span><span class="nf">event</span>
<span class="w"> </span><span class="n">OUT</span><span class="o">-&gt;&gt;</span><span class="n">N</span><span class="o">:</span><span class="w"> </span><span class="n">payout</span><span class="p">.</span><span class="n">generated</span>
</code></pre></div>
<hr />
<h2 id="8-claim-lifecycle">8. Claim Lifecycle<a class="headerlink" href="#8-claim-lifecycle" title="Permanent link">&para;</a></h2>
<p>Owner/Guardian може забрати payout:</p>
<div class="codehilite"><pre><span></span><code><span class="n">sequenceDiagram</span>
<span class="w"> </span><span class="n">participant</span><span class="w"> </span><span class="n">U</span>
<span class="w"> </span><span class="n">participant</span><span class="w"> </span><span class="n">GW</span>
<span class="w"> </span><span class="n">participant</span><span class="w"> </span><span class="n">PDP</span>
<span class="w"> </span><span class="n">participant</span><span class="w"> </span><span class="n">W</span>
<span class="w"> </span><span class="n">U</span><span class="o">-&gt;&gt;</span><span class="n">GW</span><span class="o">:</span><span class="w"> </span><span class="n">POST</span><span class="w"> </span><span class="o">/</span><span class="n">wallet</span><span class="o">/</span><span class="n">payout</span><span class="o">/:</span><span class="n">id</span><span class="o">/</span><span class="n">claim</span>
<span class="w"> </span><span class="n">GW</span><span class="o">-&gt;&gt;</span><span class="n">PDP</span><span class="o">:</span><span class="w"> </span><span class="n">authorize</span><span class="p">(</span><span class="n">payout</span><span class="p">.</span><span class="n">claim</span><span class="p">)</span>
<span class="w"> </span><span class="n">PDP</span><span class="o">--&gt;&gt;</span><span class="n">GW</span><span class="o">:</span><span class="w"> </span><span class="n">allow</span>
<span class="w"> </span><span class="n">GW</span><span class="o">-&gt;&gt;</span><span class="n">W</span><span class="o">:</span><span class="w"> </span><span class="n">claim</span>
<span class="w"> </span><span class="n">W</span><span class="o">-&gt;&gt;</span><span class="n">DB</span><span class="o">:</span><span class="w"> </span><span class="n">update</span><span class="w"> </span><span class="n">payout</span><span class="w"> </span><span class="n">status</span>
<span class="w"> </span><span class="n">W</span><span class="o">-&gt;&gt;</span><span class="n">DB</span><span class="o">:</span><span class="w"> </span><span class="n">credit</span><span class="w"> </span><span class="n">wallet</span><span class="w"> </span><span class="n">balance</span>
<span class="w"> </span><span class="n">W</span><span class="o">--&gt;&gt;</span><span class="n">GW</span><span class="o">:</span><span class="w"> </span><span class="kr">success</span>
</code></pre></div>
<hr />
<h2 id="9-conversion-rules">9. Conversion Rules<a class="headerlink" href="#9-conversion-rules" title="Permanent link">&para;</a></h2>
<p>Команда може конвертувати:</p>
<h3 id="kwt-1t">KWT → 1T<a class="headerlink" href="#kwt-1t" title="Permanent link">&para;</a></h3>
<ul>
<li>курс визначає Governance</li>
<li>зазвичай 1:1 або 1:0.85</li>
<li>обмеження на денний об'єм</li>
</ul>
<h3 id="daarion-ringk">DAARION → RINGK<a class="headerlink" href="#daarion-ringk" title="Permanent link">&para;</a></h3>
<ul>
<li>тільки за рішенням governance</li>
<li>збільшує stake</li>
</ul>
<h3 id="ringk-1t">RINGK → 1T<a class="headerlink" href="#ringk-1t" title="Permanent link">&para;</a></h3>
<ul>
<li>неможливо (односторонній стейк)</li>
</ul>
<hr />
<h2 id="10-dailymonthly-limits">10. Daily/Monthly Limits<a class="headerlink" href="#10-dailymonthly-limits" title="Permanent link">&para;</a></h2>
<p>Wallet Service накладає ліміти:</p>
<ul>
<li>max claims/day</li>
<li>max tx/day</li>
<li>max conversion/day</li>
<li>max payout value/day</li>
</ul>
<hr />
<h2 id="11-fraud-protection">11. Fraud Protection<a class="headerlink" href="#11-fraud-protection" title="Permanent link">&para;</a></h2>
<p>Wallet блокує:</p>
<ul>
<li>подвійні claims</li>
<li>негативний баланс</li>
<li>підозрілі великі нарахування</li>
<li>конфлікт даних з RWA</li>
<li>повторні RWA-події з однаковим timestamp</li>
<li>підміну site_id</li>
</ul>
<hr />
<h2 id="12-governance-controls">12. Governance Controls<a class="headerlink" href="#12-governance-controls" title="Permanent link">&para;</a></h2>
<p>Governance може:</p>
<ul>
<li>встановлювати conversion rates</li>
<li>встановлювати max rewards/day</li>
<li>коригувати max payout</li>
<li>вимикати reward-и на певний період</li>
<li>включати emergency freeze</li>
<li>контролювати стейк RINGK</li>
</ul>
<hr />
<h2 id="13-integrations">13. Integrations<a class="headerlink" href="#13-integrations" title="Permanent link">&para;</a></h2>
<h3 id="131-nats-events">13.1 NATS Events<a class="headerlink" href="#131-nats-events" title="Permanent link">&para;</a></h3>
<p>Wallet генерує:</p>
<ul>
<li><code>wallet.balance.updated</code></li>
<li><code>wallet.tx.sent</code></li>
<li><code>payout.generated</code></li>
<li><code>payout.claimed</code></li>
</ul>
<h3 id="132-usage-engine">13.2 Usage Engine<a class="headerlink" href="#132-usage-engine" title="Permanent link">&para;</a></h3>
<p>Wallet використовує Usage Engine для billing за:</p>
<ul>
<li>claims</li>
<li>tx</li>
<li>conversion</li>
</ul>
<h3 id="133-pdp">13.3 PDP<a class="headerlink" href="#133-pdp" title="Permanent link">&para;</a></h3>
<p>Кожна дія в гаманці → PDP(authorize).</p>
<hr />
<h2 id="14-transparency-logs">14. Transparency &amp; Logs<a class="headerlink" href="#14-transparency-logs" title="Permanent link">&para;</a></h2>
<p>Wallet зберігає audit trail:</p>
<ul>
<li>хто зробив claim</li>
<li>коли</li>
<li>з якого IP/device</li>
<li>які payout-и пов'язані</li>
<li>які RWA-дані були використані</li>
</ul>
<hr />
<h2 id="15-example-scenarios">15. Example Scenarios<a class="headerlink" href="#15-example-scenarios" title="Permanent link">&para;</a></h2>
<h3 id="151">15.1 Енергія<a class="headerlink" href="#151" title="Permanent link">&para;</a></h3>
<p>Команда виробила 250 kWh → payout=250 KWT.</p>
<h3 id="152">15.2 Вода<a class="headerlink" href="#152" title="Permanent link">&para;</a></h3>
<p>Очистка 1 m³ → 1T payout.</p>
<h3 id="153">15.3 Конвертація<a class="headerlink" href="#153" title="Permanent link">&para;</a></h3>
<p>Owner конвертує 100 KWT → 80 1T.</p>
<h3 id="154-claim">15.4 Claim<a class="headerlink" href="#154-claim" title="Permanent link">&para;</a></h3>
<p>Owner забирає payout → баланс додається → статус "claimed".</p>
<hr />
<h2 id="16-integration-with-other-docs">16. Integration with Other Docs<a class="headerlink" href="#16-integration-with-other-docs" title="Permanent link">&para;</a></h2>
<p>Цей документ доповнює:</p>
<ul>
<li><code>40_rwa_energy_food_water_flow_specs.md</code></li>
<li><code>28_flows_wallet_embassy_energy_union.md</code></li>
<li><code>32_policy_service_PDP_design.md</code></li>
<li><code>44_usage_accounting_and_quota_engine.md</code></li>
<li><code>48_teams_access_control_and_confidential_mode.md</code></li>
</ul>
<hr />
<h2 id="17-cursor">17. Завдання для Cursor<a class="headerlink" href="#17-cursor" title="Permanent link">&para;</a></h2>
<div class="codehilite"><pre><span></span><code>You are a senior backend engineer. Implement Wallet, RWA, Payouts &amp; Claims using:
- 49_wallet_rwa_payouts_claims.md
- 40_rwa_energy_food_water_flow_specs.md
- 28_flows_wallet_embassy_energy_union.md
Tasks:
1) Create Wallet Service architecture (API Gateway → PDP → Wallet Service → Postgres + NATS).
2) Define Wallet Tokens (1T, KWT, RINGK, DAARION) with properties.
3) Create Wallet Schema (wallet_balances, wallet_transactions, payouts tables).
4) Implement ACL Rules (view balances, claim payouts, send tx, convert tokens, read audit, no agent access).
5) Implement RWA → Payout Formula (ENERGY → KWT, FOOD → 1T, WATER → 1T/KWT).
6) Implement Payout Lifecycle (Embassy → RWA Processor → Wallet → Outbox → NATS).
7) Implement Claim Lifecycle (User → Gateway → PDP → Wallet → DB update).
8) Add Conversion Rules (KWT → 1T, DAARION → RINGK, RINGK → 1T impossible).
9) Implement Daily/Monthly Limits (max claims/day, max tx/day, max conversion/day, max payout value/day).
10) Add Fraud Protection (double claims, negative balance, suspicious large credits, RWA data conflicts, duplicate RWA events, site_id tampering).
11) Add Governance Controls (conversion rates, max rewards/day, max payout, reward disabling, emergency freeze, RINGK stake control).
12) Integrate with NATS Events (wallet.balance.updated, wallet.tx.sent, payout.generated, payout.claimed).
13) Integrate with Usage Engine (billing for claims, tx, conversion).
14) Integrate with PDP (authorize every wallet action).
15) Add Transparency &amp; Logs (audit trail: who, when, IP/device, related payouts, RWA data used).
Output:
- list of modified files
- diff
- summary
</code></pre></div>
<hr />
<h2 id="18-summary">18. Summary<a class="headerlink" href="#18-summary" title="Permanent link">&para;</a></h2>
<p>Wallet Service:</p>
<ul>
<li>веде баланси 1T/KWT/RINGK/DAARION</li>
<li>керує payout-и за RWA</li>
<li>забезпечує claim-и</li>
<li>інтегрований з Embassy/RWA/Outbox/NATS</li>
<li>має строгі ACL</li>
<li>забезпечує прозору економічну модель</li>
<li>є фундаментальним компонентом DAARION OS</li>
</ul>
<hr />
<p><strong>Версія:</strong> 1.0<br />
<strong>Останнє оновлення:</strong> 2024-11-14</p>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../..", "features": ["navigation.sections", "navigation.instant", "content.code.copy"], "search": "../../assets/javascripts/workers/search.b8dbb3d2.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
<script src="../../assets/javascripts/bundle.3220b9d7.min.js"></script>
</body>
</html>