feat: add durable Kuknos settlement coordination

This commit is contained in:
Navid
2026-09-15 13:59:13 +03:30
parent d5c9b338a4
commit 12c478cf3a
34 changed files with 1846 additions and 122 deletions
@@ -0,0 +1,22 @@
CREATE TABLE kuknos_settlements (
id uuid PRIMARY KEY,
source_service text NOT NULL CHECK (source_service <> ''),
source_transaction_id text NOT NULL CHECK (source_transaction_id <> ''),
idempotency_key text NOT NULL UNIQUE CHECK (idempotency_key <> ''),
status text NOT NULL CHECK (status IN ('PENDING','SUBMITTED','CONFIRMED','RETRYABLE','MANUAL_REVIEW')),
network text NOT NULL DEFAULT 'kuknos',
signed_transaction_xdr text NOT NULL DEFAULT '',
transaction_hash text NOT NULL DEFAULT '',
attempts integer NOT NULL DEFAULT 0 CHECK (attempts >= 0),
available_at timestamptz NOT NULL DEFAULT clock_timestamp(),
locked_at timestamptz,
locked_by text NOT NULL DEFAULT '',
last_error text NOT NULL DEFAULT '',
submitted_at timestamptz,
confirmed_at timestamptz,
manual_review_at timestamptz,
created_at timestamptz NOT NULL DEFAULT clock_timestamp(),
updated_at timestamptz NOT NULL DEFAULT clock_timestamp()
);
CREATE INDEX kuknos_settlements_due_idx ON kuknos_settlements (status, available_at);
@@ -0,0 +1,13 @@
CREATE TABLE kuknos_settlement_operator_audits (
id bigserial PRIMARY KEY,
settlement_id uuid NOT NULL REFERENCES kuknos_settlements(id),
actor_id text NOT NULL CHECK (actor_id <> ''),
action text NOT NULL CHECK (action IN ('RETRY')),
reason text NOT NULL CHECK (reason <> ''),
previous_status text NOT NULL,
resulting_status text NOT NULL,
created_at timestamptz NOT NULL DEFAULT clock_timestamp()
);
CREATE INDEX kuknos_settlement_operator_audits_settlement_idx
ON kuknos_settlement_operator_audits (settlement_id, created_at DESC);
@@ -0,0 +1,13 @@
CREATE TABLE kuknos_reconciliation_issues (
settlement_id uuid PRIMARY KEY REFERENCES kuknos_settlements(id),
issue_type text NOT NULL CHECK (issue_type IN ('MISSING_LEDGER_CONFIRMATION','TRANSACTION_HASH_MISMATCH')),
expected_hash text NOT NULL DEFAULT '',
actual_hash text NOT NULL DEFAULT '',
status text NOT NULL DEFAULT 'OPEN' CHECK (status IN ('OPEN','RESOLVED')),
first_detected_at timestamptz NOT NULL DEFAULT clock_timestamp(),
last_detected_at timestamptz NOT NULL DEFAULT clock_timestamp(),
resolved_at timestamptz
);
CREATE INDEX kuknos_reconciliation_issues_open_idx
ON kuknos_reconciliation_issues (status, last_detected_at DESC);