@ottochain/sdk 2.3.0 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/apps/contracts/index.js +15 -8
- package/dist/cjs/apps/contracts/state-machines/contract-agreement.js +35 -40
- package/dist/cjs/apps/contracts/state-machines/contract-escrow.js +80 -37
- package/dist/cjs/apps/contracts/state-machines/contract-universal.js +4 -4
- package/dist/cjs/apps/corporate/index.js +2 -2
- package/dist/cjs/apps/corporate/state-machines/corp-board.js +169 -59
- package/dist/cjs/apps/corporate/state-machines/corp-entity.js +245 -47
- package/dist/cjs/apps/corporate/state-machines/corp-securities.js +407 -99
- package/dist/cjs/apps/corporate/state-machines/corp-shareholders.js +151 -37
- package/dist/cjs/apps/governance/index.js +14 -14
- package/dist/cjs/apps/governance/state-machines/dao-multisig.js +58 -40
- package/dist/cjs/apps/governance/state-machines/dao-reputation.js +46 -40
- package/dist/cjs/apps/governance/state-machines/dao-single.js +28 -11
- package/dist/cjs/apps/governance/state-machines/dao-token.js +67 -41
- package/dist/cjs/apps/governance/state-machines/governance-simple.js +93 -61
- package/dist/cjs/apps/governance/state-machines/governance-universal.js +2 -2
- package/dist/cjs/apps/identity/constants.js +55 -14
- package/dist/cjs/apps/identity/index.js +27 -11
- package/dist/cjs/apps/identity/state-machines/identity-agent.js +3 -3
- package/dist/cjs/apps/identity/state-machines/identity-oracle.js +25 -22
- package/dist/cjs/apps/identity/state-machines/identity-registry.js +288 -0
- package/dist/cjs/apps/identity/state-machines/identity-universal.js +3 -3
- package/dist/cjs/apps/identity/state-machines/index.js +3 -1
- package/dist/cjs/apps/index.js +19 -8
- package/dist/cjs/apps/lending/assets.js +223 -0
- package/dist/cjs/apps/lending/credit-scoring.js +87 -0
- package/dist/cjs/apps/lending/eligibility.js +121 -0
- package/dist/cjs/apps/lending/index.js +91 -0
- package/dist/cjs/apps/lending/state-machines/index.js +9 -0
- package/dist/cjs/apps/lending/state-machines/lending-zk-loan.js +412 -0
- package/dist/cjs/apps/markets/index.js +21 -11
- package/dist/cjs/apps/markets/state-machines/market-auction.js +14 -13
- package/dist/cjs/apps/markets/state-machines/market-crowdfund.js +29 -24
- package/dist/cjs/apps/markets/state-machines/market-group-buy.js +24 -26
- package/dist/cjs/apps/markets/state-machines/market-prediction.js +80 -53
- package/dist/cjs/apps/markets/state-machines/market-universal.js +5 -5
- package/dist/cjs/apps/oracles/index.js +2 -2
- package/dist/cjs/errors.js +3 -3
- package/dist/cjs/generated/google/protobuf/struct.js +4 -4
- package/dist/cjs/generated/index.js +11 -7
- package/dist/cjs/generated/openapi.js +6 -0
- package/dist/cjs/generated/ottochain/apps/contracts/v1/contract.js +50 -50
- package/dist/cjs/generated/ottochain/apps/corporate/v1/corporate.js +19 -20
- package/dist/cjs/generated/ottochain/apps/governance/v1/governance.js +13 -13
- package/dist/cjs/generated/ottochain/apps/identity/v1/attestation.js +4 -4
- package/dist/cjs/generated/ottochain/apps/identity/v1/identity.js +124 -130
- package/dist/cjs/generated/ottochain/apps/markets/v1/market.js +107 -107
- package/dist/cjs/generated/ottochain/v1/common.js +4 -4
- package/dist/cjs/generated/ottochain/v1/fiber.js +4 -4
- package/dist/cjs/index.js +41 -7
- package/dist/cjs/openapi.js +2 -0
- package/dist/cjs/ottochain/drop-nulls.js +1 -2
- package/dist/cjs/ottochain/genesis-manifest.js +11 -11
- package/dist/cjs/ottochain/index.js +23 -13
- package/dist/cjs/ottochain/metagraph-client.js +65 -8
- package/dist/cjs/ottochain/snapshot.js +11 -12
- package/dist/cjs/ottochain/transaction.js +57 -14
- package/dist/cjs/ottochain/types.js +16 -2
- package/dist/cjs/privacy/index.js +14 -0
- package/dist/cjs/privacy/sealed-bid.js +210 -0
- package/dist/cjs/privacy/shield-app.js +131 -0
- package/dist/cjs/schema/effects.js +40 -0
- package/dist/cjs/schema/fiber-app.js +19 -13
- package/dist/cjs/schema/guard-lint.js +352 -0
- package/dist/cjs/schema/guards.js +246 -0
- package/dist/cjs/signing.js +80 -0
- package/dist/cjs/types.js +2 -3
- package/dist/cjs/validation.js +8 -8
- package/dist/cjs/verify.js +9 -4
- package/dist/cjs/zk/commit.js +53 -0
- package/dist/cjs/zk/guard.js +107 -0
- package/dist/cjs/zk/index.js +48 -0
- package/dist/cjs/zk/preimage.js +37 -0
- package/dist/cjs/zk/prover.js +87 -0
- package/dist/cjs/zk/registry.js +62 -0
- package/dist/cjs/zk/types.js +28 -0
- package/dist/cjs/zk/witness.js +19 -0
- package/dist/esm/apps/contracts/index.js +7 -3
- package/dist/esm/apps/contracts/state-machines/contract-agreement.js +35 -40
- package/dist/esm/apps/contracts/state-machines/contract-escrow.js +80 -37
- package/dist/esm/apps/contracts/state-machines/contract-universal.js +4 -4
- package/dist/esm/apps/corporate/state-machines/corp-board.js +169 -59
- package/dist/esm/apps/corporate/state-machines/corp-entity.js +245 -47
- package/dist/esm/apps/corporate/state-machines/corp-securities.js +407 -99
- package/dist/esm/apps/corporate/state-machines/corp-shareholders.js +151 -37
- package/dist/esm/apps/governance/state-machines/dao-multisig.js +58 -40
- package/dist/esm/apps/governance/state-machines/dao-reputation.js +46 -40
- package/dist/esm/apps/governance/state-machines/dao-single.js +28 -11
- package/dist/esm/apps/governance/state-machines/dao-token.js +67 -41
- package/dist/esm/apps/governance/state-machines/governance-simple.js +93 -61
- package/dist/esm/apps/governance/state-machines/governance-universal.js +2 -2
- package/dist/esm/apps/identity/constants.js +51 -12
- package/dist/esm/apps/identity/index.js +12 -7
- package/dist/esm/apps/identity/state-machines/identity-agent.js +3 -3
- package/dist/esm/apps/identity/state-machines/identity-oracle.js +25 -22
- package/dist/esm/apps/identity/state-machines/identity-registry.js +285 -0
- package/dist/esm/apps/identity/state-machines/identity-universal.js +3 -3
- package/dist/esm/apps/identity/state-machines/index.js +1 -0
- package/dist/esm/apps/index.js +1 -0
- package/dist/esm/apps/lending/assets.js +207 -0
- package/dist/esm/apps/lending/credit-scoring.js +81 -0
- package/dist/esm/apps/lending/eligibility.js +115 -0
- package/dist/esm/apps/lending/index.js +69 -0
- package/dist/esm/apps/lending/state-machines/index.js +5 -0
- package/dist/esm/apps/lending/state-machines/lending-zk-loan.js +409 -0
- package/dist/esm/apps/markets/index.js +8 -4
- package/dist/esm/apps/markets/state-machines/market-auction.js +14 -13
- package/dist/esm/apps/markets/state-machines/market-crowdfund.js +29 -24
- package/dist/esm/apps/markets/state-machines/market-group-buy.js +24 -26
- package/dist/esm/apps/markets/state-machines/market-prediction.js +80 -53
- package/dist/esm/apps/markets/state-machines/market-universal.js +5 -5
- package/dist/esm/generated/index.js +9 -5
- package/dist/esm/generated/openapi.js +5 -0
- package/dist/esm/generated/ottochain/apps/contracts/v1/contract.js +46 -46
- package/dist/esm/generated/ottochain/apps/identity/v1/identity.js +114 -120
- package/dist/esm/generated/ottochain/apps/markets/v1/market.js +100 -100
- package/dist/esm/index.js +21 -2
- package/dist/esm/openapi.js +1 -0
- package/dist/esm/ottochain/genesis-manifest.js +9 -9
- package/dist/esm/ottochain/index.js +2 -3
- package/dist/esm/ottochain/metagraph-client.js +65 -8
- package/dist/esm/ottochain/snapshot.js +4 -4
- package/dist/esm/ottochain/transaction.js +43 -3
- package/dist/esm/ottochain/types.js +15 -1
- package/dist/esm/privacy/index.js +6 -0
- package/dist/esm/privacy/sealed-bid.js +206 -0
- package/dist/esm/privacy/shield-app.js +127 -0
- package/dist/esm/schema/effects.js +35 -0
- package/dist/esm/schema/fiber-app.js +13 -6
- package/dist/esm/schema/guard-lint.js +346 -0
- package/dist/esm/schema/guards.js +229 -0
- package/dist/esm/signing.js +74 -0
- package/dist/esm/verify.js +8 -2
- package/dist/esm/zk/commit.js +44 -0
- package/dist/esm/zk/guard.js +99 -0
- package/dist/esm/zk/index.js +19 -0
- package/dist/esm/zk/preimage.js +30 -0
- package/dist/esm/zk/prover.js +82 -0
- package/dist/esm/zk/registry.js +55 -0
- package/dist/esm/zk/types.js +25 -0
- package/dist/esm/zk/witness.js +15 -0
- package/dist/types/apps/contracts/index.d.ts +69 -209
- package/dist/types/apps/contracts/state-machines/contract-agreement.d.ts +20 -95
- package/dist/types/apps/contracts/state-machines/contract-escrow.d.ts +46 -112
- package/dist/types/apps/corporate/index.d.ts +1040 -304
- package/dist/types/apps/corporate/state-machines/corp-board.d.ts +188 -52
- package/dist/types/apps/corporate/state-machines/corp-entity.d.ts +267 -62
- package/dist/types/apps/corporate/state-machines/corp-securities.d.ts +355 -131
- package/dist/types/apps/corporate/state-machines/corp-shareholders.d.ts +225 -53
- package/dist/types/apps/governance/index.d.ts +296 -398
- package/dist/types/apps/governance/state-machines/dao-multisig.d.ts +77 -92
- package/dist/types/apps/governance/state-machines/dao-reputation.d.ts +42 -66
- package/dist/types/apps/governance/state-machines/dao-single.d.ts +25 -47
- package/dist/types/apps/governance/state-machines/dao-token.d.ts +60 -49
- package/dist/types/apps/governance/state-machines/governance-simple.d.ts +87 -117
- package/dist/types/apps/governance/state-machines/governance-universal.d.ts +2 -2
- package/dist/types/apps/identity/constants.d.ts +32 -4
- package/dist/types/apps/identity/index.d.ts +378 -94
- package/dist/types/apps/identity/state-machines/identity-oracle.d.ts +16 -87
- package/dist/types/apps/identity/state-machines/identity-registry.d.ts +379 -0
- package/dist/types/apps/identity/state-machines/index.d.ts +1 -0
- package/dist/types/apps/index.d.ts +1 -0
- package/dist/types/apps/lending/assets.d.ts +258 -0
- package/dist/types/apps/lending/credit-scoring.d.ts +80 -0
- package/dist/types/apps/lending/eligibility.d.ts +83 -0
- package/dist/types/apps/lending/index.d.ts +548 -0
- package/dist/types/apps/lending/state-machines/index.d.ts +5 -0
- package/dist/types/apps/lending/state-machines/lending-zk-loan.d.ts +528 -0
- package/dist/types/apps/markets/index.d.ts +108 -203
- package/dist/types/apps/markets/state-machines/market-auction.d.ts +13 -37
- package/dist/types/apps/markets/state-machines/market-crowdfund.d.ts +16 -34
- package/dist/types/apps/markets/state-machines/market-group-buy.d.ts +17 -43
- package/dist/types/apps/markets/state-machines/market-prediction.d.ts +51 -72
- package/dist/types/apps/markets/state-machines/market-universal.d.ts +5 -5
- package/dist/types/generated/index.d.ts +5 -5
- package/dist/types/generated/openapi.d.ts +1257 -0
- package/dist/types/generated/ottochain/apps/contracts/v1/contract.d.ts +5 -5
- package/dist/types/generated/ottochain/apps/identity/v1/identity.d.ts +12 -12
- package/dist/types/generated/ottochain/apps/markets/v1/market.d.ts +11 -11
- package/dist/types/index.d.ts +6 -2
- package/dist/types/openapi.d.ts +22 -0
- package/dist/types/ottochain/genesis-manifest.d.ts +5 -5
- package/dist/types/ottochain/index.d.ts +5 -6
- package/dist/types/ottochain/metagraph-client.d.ts +49 -7
- package/dist/types/ottochain/snapshot.d.ts +6 -6
- package/dist/types/ottochain/transaction.d.ts +33 -1
- package/dist/types/ottochain/types.d.ts +335 -30
- package/dist/types/privacy/index.d.ts +6 -0
- package/dist/types/privacy/sealed-bid.d.ts +348 -0
- package/dist/types/privacy/shield-app.d.ts +48 -0
- package/dist/types/schema/effects.d.ts +34 -0
- package/dist/types/schema/fiber-app.d.ts +1 -2
- package/dist/types/schema/guard-lint.d.ts +111 -0
- package/dist/types/schema/guards.d.ts +134 -0
- package/dist/types/signing.d.ts +45 -0
- package/dist/types/validation.d.ts +22 -217
- package/dist/types/verify.d.ts +4 -0
- package/dist/types/zk/commit.d.ts +28 -0
- package/dist/types/zk/guard.d.ts +46 -0
- package/dist/types/zk/index.d.ts +19 -0
- package/dist/types/zk/preimage.d.ts +10 -0
- package/dist/types/zk/prover.d.ts +34 -0
- package/dist/types/zk/registry.d.ts +34 -0
- package/dist/types/zk/types.d.ts +33 -0
- package/dist/types/zk/witness.d.ts +40 -0
- package/package.json +27 -13
- package/dist/cjs/ottochain/normalize.js +0 -186
- package/dist/esm/ottochain/normalize.js +0 -179
- package/dist/types/ottochain/normalize.d.ts +0 -79
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.identityRegistryDef = void 0;
|
|
4
|
+
const fiber_app_js_1 = require("../../../schema/fiber-app.js");
|
|
5
|
+
const guards_js_1 = require("../../../schema/guards.js");
|
|
6
|
+
/**
|
|
7
|
+
* Identity Registry — the ecosystem authority & reputation source.
|
|
8
|
+
*
|
|
9
|
+
* Aggregates, under a single authority-governed fiber:
|
|
10
|
+
* - `reputations: { <address>: int }` — the public reputation read by reputation-gated apps
|
|
11
|
+
* (dao-reputation, credit-scoring) via a declared dependency + the `signerHasReputation` helper.
|
|
12
|
+
* - role attestations (ARBITER / SLASHER / ISSUER / BOARD_MEMBER) as FLAT per-role maps
|
|
13
|
+
* `{ <address>: true }`, read via the `signerHasRole` helper for judicial / issuance / governance
|
|
14
|
+
* authority gates.
|
|
15
|
+
*
|
|
16
|
+
* Writes are gated to the registry's pinned `authority` (immutable, set at create) and bound to the
|
|
17
|
+
* CHAIN-VERIFIED signer via `signerIsParty("state.authority")` — never `event.agent`. Reads happen
|
|
18
|
+
* cross-fiber: a consumer app declares this registry as a dependency and reads
|
|
19
|
+
* `machines.<registryDep>.state.reputations` / `.arbiters` / … bound to `proofs[].address`.
|
|
20
|
+
*
|
|
21
|
+
* Roles are flat per-role maps rather than a nested `roles[addr][ROLE]` map on purpose: metakit
|
|
22
|
+
* `get`/`has` on a NULL inner map throw (they are not null-total), so a nested read would error for
|
|
23
|
+
* any signer with no roles entry — the common case. Flat maps keep both the write (`set`/`unset`) and
|
|
24
|
+
* the read (`has`) total and fail-closed. New role types are added as new state maps + a cascade arm.
|
|
25
|
+
*
|
|
26
|
+
* See docs/design/app-hardening-identity-integration.md §3–§4 and src/schema/guards.ts
|
|
27
|
+
* (signerHasReputation / signerHasRole).
|
|
28
|
+
*/
|
|
29
|
+
exports.identityRegistryDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
30
|
+
metadata: {
|
|
31
|
+
name: "IdentityRegistry",
|
|
32
|
+
app: "identity",
|
|
33
|
+
type: "registry",
|
|
34
|
+
version: "1.0.0",
|
|
35
|
+
description: "Ecosystem reputation + role-attestation registry; authority-gated writes, dependency reads.",
|
|
36
|
+
crossReferences: {
|
|
37
|
+
IdentityAgent: "per-agent reputation source",
|
|
38
|
+
Governance: "reputation-gated participation",
|
|
39
|
+
Contracts: "ARBITER-gated dispute settlement",
|
|
40
|
+
Corporate: "ISSUER / BOARD_MEMBER authority",
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
createSchema: {
|
|
44
|
+
required: ["authority"],
|
|
45
|
+
properties: {
|
|
46
|
+
authority: {
|
|
47
|
+
type: "address",
|
|
48
|
+
description: "DAG address authorized to write reputation + role attestations (immutable)",
|
|
49
|
+
immutable: true,
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
stateSchema: {
|
|
54
|
+
properties: {
|
|
55
|
+
authority: { type: "address", immutable: true },
|
|
56
|
+
// { <address>: int } — public reputation, read via signerHasReputation
|
|
57
|
+
reputations: { type: "object", computed: true },
|
|
58
|
+
// FLAT per-role attestation maps { <address>: true }, read via signerHasRole
|
|
59
|
+
arbiters: { type: "object", computed: true },
|
|
60
|
+
slashers: { type: "object", computed: true },
|
|
61
|
+
issuers: { type: "object", computed: true },
|
|
62
|
+
boardMembers: { type: "object", computed: true },
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
eventSchemas: {
|
|
66
|
+
set_reputation: {
|
|
67
|
+
description: "Authority sets an address's reputation to an absolute score",
|
|
68
|
+
required: ["subject", "score"],
|
|
69
|
+
properties: {
|
|
70
|
+
subject: { type: "address" },
|
|
71
|
+
score: { type: "integer" },
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
adjust_reputation: {
|
|
75
|
+
description: "Authority adjusts an address's reputation by a signed delta",
|
|
76
|
+
required: ["subject", "delta"],
|
|
77
|
+
properties: {
|
|
78
|
+
subject: { type: "address" },
|
|
79
|
+
delta: { type: "integer" },
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
grant_role: {
|
|
83
|
+
description: "Authority grants a role attestation (ARBITER|SLASHER|ISSUER|BOARD_MEMBER) to an address",
|
|
84
|
+
required: ["subject", "role"],
|
|
85
|
+
properties: {
|
|
86
|
+
subject: { type: "address" },
|
|
87
|
+
role: {
|
|
88
|
+
type: "string",
|
|
89
|
+
enum: ["ARBITER", "SLASHER", "ISSUER", "BOARD_MEMBER"],
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
revoke_role: {
|
|
94
|
+
description: "Authority revokes a role attestation from an address",
|
|
95
|
+
required: ["subject", "role"],
|
|
96
|
+
properties: {
|
|
97
|
+
subject: { type: "address" },
|
|
98
|
+
role: {
|
|
99
|
+
type: "string",
|
|
100
|
+
enum: ["ARBITER", "SLASHER", "ISSUER", "BOARD_MEMBER"],
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
states: {
|
|
106
|
+
ACTIVE: {
|
|
107
|
+
id: "ACTIVE",
|
|
108
|
+
isFinal: false,
|
|
109
|
+
metadata: {
|
|
110
|
+
label: "Active",
|
|
111
|
+
description: "Registry accepting authority writes",
|
|
112
|
+
category: "active",
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
initialState: "ACTIVE",
|
|
117
|
+
transitions: [
|
|
118
|
+
// ACTIVE → ACTIVE: set_reputation (absolute)
|
|
119
|
+
{
|
|
120
|
+
from: "ACTIVE",
|
|
121
|
+
to: "ACTIVE",
|
|
122
|
+
eventName: "set_reputation",
|
|
123
|
+
guard: (0, guards_js_1.signerIsParty)("state.authority"),
|
|
124
|
+
effect: {
|
|
125
|
+
merge: [
|
|
126
|
+
{ var: "state" },
|
|
127
|
+
{
|
|
128
|
+
reputations: {
|
|
129
|
+
set: [
|
|
130
|
+
{ var: "state.reputations" },
|
|
131
|
+
{ var: "event.subject" },
|
|
132
|
+
{ var: "event.score" },
|
|
133
|
+
],
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
],
|
|
137
|
+
},
|
|
138
|
+
dependencies: [],
|
|
139
|
+
},
|
|
140
|
+
// ACTIVE → ACTIVE: adjust_reputation (signed delta; absent subject starts from 0)
|
|
141
|
+
{
|
|
142
|
+
from: "ACTIVE",
|
|
143
|
+
to: "ACTIVE",
|
|
144
|
+
eventName: "adjust_reputation",
|
|
145
|
+
guard: (0, guards_js_1.signerIsParty)("state.authority"),
|
|
146
|
+
effect: {
|
|
147
|
+
merge: [
|
|
148
|
+
{ var: "state" },
|
|
149
|
+
{
|
|
150
|
+
reputations: {
|
|
151
|
+
set: [
|
|
152
|
+
{ var: "state.reputations" },
|
|
153
|
+
{ var: "event.subject" },
|
|
154
|
+
{
|
|
155
|
+
"+": [
|
|
156
|
+
{
|
|
157
|
+
get: [
|
|
158
|
+
{ var: "state.reputations" },
|
|
159
|
+
{ var: "event.subject" },
|
|
160
|
+
],
|
|
161
|
+
},
|
|
162
|
+
{ var: "event.delta" },
|
|
163
|
+
],
|
|
164
|
+
},
|
|
165
|
+
],
|
|
166
|
+
},
|
|
167
|
+
},
|
|
168
|
+
],
|
|
169
|
+
},
|
|
170
|
+
dependencies: [],
|
|
171
|
+
},
|
|
172
|
+
// ACTIVE → ACTIVE: grant_role (cascade selects the flat per-role map)
|
|
173
|
+
{
|
|
174
|
+
from: "ACTIVE",
|
|
175
|
+
to: "ACTIVE",
|
|
176
|
+
eventName: "grant_role",
|
|
177
|
+
guard: (0, guards_js_1.signerIsParty)("state.authority"),
|
|
178
|
+
effect: {
|
|
179
|
+
merge: [
|
|
180
|
+
{ var: "state" },
|
|
181
|
+
{
|
|
182
|
+
arbiters: {
|
|
183
|
+
if: [
|
|
184
|
+
{ "==": [{ var: "event.role" }, "ARBITER"] },
|
|
185
|
+
{
|
|
186
|
+
set: [
|
|
187
|
+
{ var: "state.arbiters" },
|
|
188
|
+
{ var: "event.subject" },
|
|
189
|
+
true,
|
|
190
|
+
],
|
|
191
|
+
},
|
|
192
|
+
{ var: "state.arbiters" },
|
|
193
|
+
],
|
|
194
|
+
},
|
|
195
|
+
slashers: {
|
|
196
|
+
if: [
|
|
197
|
+
{ "==": [{ var: "event.role" }, "SLASHER"] },
|
|
198
|
+
{
|
|
199
|
+
set: [
|
|
200
|
+
{ var: "state.slashers" },
|
|
201
|
+
{ var: "event.subject" },
|
|
202
|
+
true,
|
|
203
|
+
],
|
|
204
|
+
},
|
|
205
|
+
{ var: "state.slashers" },
|
|
206
|
+
],
|
|
207
|
+
},
|
|
208
|
+
issuers: {
|
|
209
|
+
if: [
|
|
210
|
+
{ "==": [{ var: "event.role" }, "ISSUER"] },
|
|
211
|
+
{
|
|
212
|
+
set: [
|
|
213
|
+
{ var: "state.issuers" },
|
|
214
|
+
{ var: "event.subject" },
|
|
215
|
+
true,
|
|
216
|
+
],
|
|
217
|
+
},
|
|
218
|
+
{ var: "state.issuers" },
|
|
219
|
+
],
|
|
220
|
+
},
|
|
221
|
+
boardMembers: {
|
|
222
|
+
if: [
|
|
223
|
+
{ "==": [{ var: "event.role" }, "BOARD_MEMBER"] },
|
|
224
|
+
{
|
|
225
|
+
set: [
|
|
226
|
+
{ var: "state.boardMembers" },
|
|
227
|
+
{ var: "event.subject" },
|
|
228
|
+
true,
|
|
229
|
+
],
|
|
230
|
+
},
|
|
231
|
+
{ var: "state.boardMembers" },
|
|
232
|
+
],
|
|
233
|
+
},
|
|
234
|
+
},
|
|
235
|
+
],
|
|
236
|
+
},
|
|
237
|
+
dependencies: [],
|
|
238
|
+
},
|
|
239
|
+
// ACTIVE → ACTIVE: revoke_role (cascade unsets from the flat per-role map)
|
|
240
|
+
{
|
|
241
|
+
from: "ACTIVE",
|
|
242
|
+
to: "ACTIVE",
|
|
243
|
+
eventName: "revoke_role",
|
|
244
|
+
guard: (0, guards_js_1.signerIsParty)("state.authority"),
|
|
245
|
+
effect: {
|
|
246
|
+
merge: [
|
|
247
|
+
{ var: "state" },
|
|
248
|
+
{
|
|
249
|
+
arbiters: {
|
|
250
|
+
if: [
|
|
251
|
+
{ "==": [{ var: "event.role" }, "ARBITER"] },
|
|
252
|
+
{ unset: [{ var: "state.arbiters" }, { var: "event.subject" }] },
|
|
253
|
+
{ var: "state.arbiters" },
|
|
254
|
+
],
|
|
255
|
+
},
|
|
256
|
+
slashers: {
|
|
257
|
+
if: [
|
|
258
|
+
{ "==": [{ var: "event.role" }, "SLASHER"] },
|
|
259
|
+
{ unset: [{ var: "state.slashers" }, { var: "event.subject" }] },
|
|
260
|
+
{ var: "state.slashers" },
|
|
261
|
+
],
|
|
262
|
+
},
|
|
263
|
+
issuers: {
|
|
264
|
+
if: [
|
|
265
|
+
{ "==": [{ var: "event.role" }, "ISSUER"] },
|
|
266
|
+
{ unset: [{ var: "state.issuers" }, { var: "event.subject" }] },
|
|
267
|
+
{ var: "state.issuers" },
|
|
268
|
+
],
|
|
269
|
+
},
|
|
270
|
+
boardMembers: {
|
|
271
|
+
if: [
|
|
272
|
+
{ "==": [{ var: "event.role" }, "BOARD_MEMBER"] },
|
|
273
|
+
{
|
|
274
|
+
unset: [
|
|
275
|
+
{ var: "state.boardMembers" },
|
|
276
|
+
{ var: "event.subject" },
|
|
277
|
+
],
|
|
278
|
+
},
|
|
279
|
+
{ var: "state.boardMembers" },
|
|
280
|
+
],
|
|
281
|
+
},
|
|
282
|
+
},
|
|
283
|
+
],
|
|
284
|
+
},
|
|
285
|
+
dependencies: [],
|
|
286
|
+
},
|
|
287
|
+
],
|
|
288
|
+
});
|
|
@@ -95,7 +95,7 @@ exports.identityUniversalDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
95
95
|
effect: {
|
|
96
96
|
merge: [
|
|
97
97
|
{ var: "state" },
|
|
98
|
-
{ status: "ACTIVE", activatedAt: { var: "$
|
|
98
|
+
{ status: "ACTIVE", activatedAt: { var: "$ordinal" } },
|
|
99
99
|
],
|
|
100
100
|
},
|
|
101
101
|
},
|
|
@@ -108,7 +108,7 @@ exports.identityUniversalDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
108
108
|
merge: [
|
|
109
109
|
{ var: "state" },
|
|
110
110
|
{
|
|
111
|
-
updatedAt: { var: "$
|
|
111
|
+
updatedAt: { var: "$ordinal" },
|
|
112
112
|
metadata: { var: "event.metadata" },
|
|
113
113
|
},
|
|
114
114
|
],
|
|
@@ -122,7 +122,7 @@ exports.identityUniversalDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
122
122
|
effect: {
|
|
123
123
|
merge: [
|
|
124
124
|
{ var: "state" },
|
|
125
|
-
{ status: "INACTIVE", deactivatedAt: { var: "$
|
|
125
|
+
{ status: "INACTIVE", deactivatedAt: { var: "$ordinal" } },
|
|
126
126
|
],
|
|
127
127
|
},
|
|
128
128
|
},
|
|
@@ -4,10 +4,12 @@
|
|
|
4
4
|
* Re-exports from TypeScript definition files.
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.identityUniversalDef = exports.identityOracleDef = exports.identityAgentDef = void 0;
|
|
7
|
+
exports.identityRegistryDef = exports.identityUniversalDef = exports.identityOracleDef = exports.identityAgentDef = void 0;
|
|
8
8
|
var identity_agent_js_1 = require("./identity-agent.js");
|
|
9
9
|
Object.defineProperty(exports, "identityAgentDef", { enumerable: true, get: function () { return identity_agent_js_1.identityAgentDef; } });
|
|
10
10
|
var identity_oracle_js_1 = require("./identity-oracle.js");
|
|
11
11
|
Object.defineProperty(exports, "identityOracleDef", { enumerable: true, get: function () { return identity_oracle_js_1.identityOracleDef; } });
|
|
12
12
|
var identity_universal_js_1 = require("./identity-universal.js");
|
|
13
13
|
Object.defineProperty(exports, "identityUniversalDef", { enumerable: true, get: function () { return identity_universal_js_1.identityUniversalDef; } });
|
|
14
|
+
var identity_registry_js_1 = require("./identity-registry.js");
|
|
15
|
+
Object.defineProperty(exports, "identityRegistryDef", { enumerable: true, get: function () { return identity_registry_js_1.identityRegistryDef; } });
|
package/dist/cjs/apps/index.js
CHANGED
|
@@ -43,18 +43,29 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
43
43
|
}) : function(o, v) {
|
|
44
44
|
o["default"] = v;
|
|
45
45
|
});
|
|
46
|
-
var __importStar = (this && this.__importStar) || function (
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
};
|
|
46
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
47
|
+
var ownKeys = function(o) {
|
|
48
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
49
|
+
var ar = [];
|
|
50
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
51
|
+
return ar;
|
|
52
|
+
};
|
|
53
|
+
return ownKeys(o);
|
|
54
|
+
};
|
|
55
|
+
return function (mod) {
|
|
56
|
+
if (mod && mod.__esModule) return mod;
|
|
57
|
+
var result = {};
|
|
58
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
59
|
+
__setModuleDefault(result, mod);
|
|
60
|
+
return result;
|
|
61
|
+
};
|
|
62
|
+
})();
|
|
53
63
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
54
|
-
exports.corporate = exports.governance = exports.markets = exports.contracts = exports.identity = void 0;
|
|
64
|
+
exports.lending = exports.corporate = exports.governance = exports.markets = exports.contracts = exports.identity = void 0;
|
|
55
65
|
// Re-export as namespaces for organized access
|
|
56
66
|
exports.identity = __importStar(require("./identity/index.js"));
|
|
57
67
|
exports.contracts = __importStar(require("./contracts/index.js"));
|
|
58
68
|
exports.markets = __importStar(require("./markets/index.js"));
|
|
59
69
|
exports.governance = __importStar(require("./governance/index.js"));
|
|
60
70
|
exports.corporate = __importStar(require("./corporate/index.js"));
|
|
71
|
+
exports.lending = __importStar(require("./lending/index.js"));
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Asset-subsystem integration for the lending family.
|
|
4
|
+
*
|
|
5
|
+
* The loan's collateral, principal/debt, and repayment are ASSETS. This module provides
|
|
6
|
+
* typed payload builders for the OttoChain asset operations and loan-specific helpers that
|
|
7
|
+
* map the zk-loan lifecycle onto typed asset morphisms.
|
|
8
|
+
*
|
|
9
|
+
* Wire shapes mirror the asset-model proposal
|
|
10
|
+
* (`/home/euler/repos/ottochain/docs/proposals/asset-model.md` §7 — `CreateAssetPolicy`,
|
|
11
|
+
* `MintAsset`, `ApplyMorphism`, `AuthorizeCompose`; §8 — Governed/ZkVerify-gated morphisms)
|
|
12
|
+
* and follow the SDK's existing single-key-wrapper convention (the discriminator is the outer
|
|
13
|
+
* key, e.g. `{ MintAsset: {...} }`), matching `src/ottochain/transaction.ts`
|
|
14
|
+
* (`createTransitionPayload`, `createScriptPayload`, ...). The asset op-codes are not yet a
|
|
15
|
+
* merged TypeScript SDK surface; these builders let the lending app construct the proposed
|
|
16
|
+
* wire format today and sign it with the existing `signTransaction` path.
|
|
17
|
+
*
|
|
18
|
+
* Amounts are `Long` on-chain; modeled here as `number` for SDK ergonomics (callers may pass a
|
|
19
|
+
* string for values beyond 2^53 — the field is serialized verbatim).
|
|
20
|
+
*/
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.TokenBehaviors = exports.fiberHolder = exports.walletHolder = void 0;
|
|
23
|
+
exports.behaviorBits = behaviorBits;
|
|
24
|
+
exports.createAssetPolicyPayload = createAssetPolicyPayload;
|
|
25
|
+
exports.createMintAssetPayload = createMintAssetPayload;
|
|
26
|
+
exports.createApplyMorphismPayload = createApplyMorphismPayload;
|
|
27
|
+
exports.createAuthorizeComposePayload = createAuthorizeComposePayload;
|
|
28
|
+
exports.collateralPolicy = collateralPolicy;
|
|
29
|
+
exports.debtPolicy = debtPolicy;
|
|
30
|
+
exports.lockCollateralOp = lockCollateralOp;
|
|
31
|
+
exports.mintPrincipalOp = mintPrincipalOp;
|
|
32
|
+
exports.repayBurnOp = repayBurnOp;
|
|
33
|
+
exports.settleCollateralOp = settleCollateralOp;
|
|
34
|
+
/** Helpers for the two-variant holder. */
|
|
35
|
+
const walletHolder = (address) => ({ Wallet: { address } });
|
|
36
|
+
exports.walletHolder = walletHolder;
|
|
37
|
+
const fiberHolder = (fiberId) => ({ Fiber: { fiberId } });
|
|
38
|
+
exports.fiberHolder = fiberHolder;
|
|
39
|
+
/** Pack a {@link TokenBehavior} to its 5-bit integer (T=16 S=8 C=4 E=2 G=1). */
|
|
40
|
+
function behaviorBits(b) {
|
|
41
|
+
return ((b.transferable ? 16 : 0) |
|
|
42
|
+
(b.splittable ? 8 : 0) |
|
|
43
|
+
(b.combinable ? 4 : 0) |
|
|
44
|
+
(b.expirable ? 2 : 0) |
|
|
45
|
+
(b.governable ? 1 : 0));
|
|
46
|
+
}
|
|
47
|
+
/** Common behavior presets (asset-model.md §2). */
|
|
48
|
+
exports.TokenBehaviors = {
|
|
49
|
+
/** Non-transferable, non-divisible (bits 0). */
|
|
50
|
+
Soulbound: { transferable: false, splittable: false, combinable: false, expirable: false, governable: false },
|
|
51
|
+
/** Transferable only (bits 16). */
|
|
52
|
+
NFT: { transferable: true, splittable: false, combinable: false, expirable: false, governable: false },
|
|
53
|
+
/** Transferable + splittable + combinable (bits 28 = TSC). */
|
|
54
|
+
Fungible: { transferable: true, splittable: true, combinable: true, expirable: false, governable: false },
|
|
55
|
+
/** Fungible + governable (bits 29 = TSCG) — the default for a gated debt token. */
|
|
56
|
+
GovernedFungible: { transferable: true, splittable: true, combinable: true, expirable: false, governable: true },
|
|
57
|
+
};
|
|
58
|
+
/** Publish an asset policy package version. asset-model.md §7. */
|
|
59
|
+
function createAssetPolicyPayload(params) {
|
|
60
|
+
return {
|
|
61
|
+
CreateAssetPolicy: {
|
|
62
|
+
name: params.name,
|
|
63
|
+
version: params.version,
|
|
64
|
+
behavior: params.behavior,
|
|
65
|
+
supply: params.supply,
|
|
66
|
+
morphisms: params.morphisms,
|
|
67
|
+
stateShape: params.stateShape,
|
|
68
|
+
...(params.metadata ? { metadata: params.metadata } : {}),
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Mint an asset instance. asset-model.md §7. When the policy's `mintPolicy` is a
|
|
74
|
+
* `groth16_verify` guard (proof-gated mint), pass the eligibility `witness`.
|
|
75
|
+
*/
|
|
76
|
+
function createMintAssetPayload(params) {
|
|
77
|
+
return {
|
|
78
|
+
MintAsset: {
|
|
79
|
+
assetId: params.assetId,
|
|
80
|
+
policyRef: params.policyRef,
|
|
81
|
+
holder: params.holder,
|
|
82
|
+
amount: params.amount,
|
|
83
|
+
...(params.expiresAt !== undefined ? { expiresAt: params.expiresAt } : {}),
|
|
84
|
+
...(params.witness ? { witness: params.witness } : {}),
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Apply a typed morphism (Transfer / Burn / Compose / ...). asset-model.md §7.
|
|
90
|
+
* Transfer = `{ kind: "Transfer", recipient }`; Burn (repay) = `{ kind: "Burn" }`.
|
|
91
|
+
*/
|
|
92
|
+
function createApplyMorphismPayload(params) {
|
|
93
|
+
return {
|
|
94
|
+
ApplyMorphism: {
|
|
95
|
+
assetId: params.assetId,
|
|
96
|
+
kind: params.kind,
|
|
97
|
+
targetSequenceNumber: params.targetSequenceNumber,
|
|
98
|
+
...(params.recipient ? { recipient: params.recipient } : {}),
|
|
99
|
+
...(params.otherAssets ? { otherAssets: params.otherAssets } : {}),
|
|
100
|
+
...(params.compositeId ? { compositeId: params.compositeId } : {}),
|
|
101
|
+
...(params.shardIds ? { shardIds: params.shardIds } : {}),
|
|
102
|
+
...(params.nonce !== undefined ? { nonce: params.nonce } : {}),
|
|
103
|
+
...(params.witness ? { witness: params.witness } : {}),
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/** Commit half of a two-party compose. asset-model.md §7/§8. */
|
|
108
|
+
function createAuthorizeComposePayload(params) {
|
|
109
|
+
return {
|
|
110
|
+
AuthorizeCompose: {
|
|
111
|
+
assetId: params.assetId,
|
|
112
|
+
partnerPolicy: params.partnerPolicy,
|
|
113
|
+
nonce: params.nonce,
|
|
114
|
+
expiresAt: params.expiresAt,
|
|
115
|
+
targetSequenceNumber: params.targetSequenceNumber,
|
|
116
|
+
},
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
// ---------------------------------------------------------------------------
|
|
120
|
+
// Loan-specific asset policy builders
|
|
121
|
+
// ---------------------------------------------------------------------------
|
|
122
|
+
/**
|
|
123
|
+
* The collateral vault policy: an NFT-like custodial holding (no fungible split) whose
|
|
124
|
+
* `Transfer` morphism is Governed — the loan/escrow fiber is the authorization. Locking is
|
|
125
|
+
* a custody Transfer into `AssetHolder.Fiber(escrow)`; release/liquidation is a Transfer out
|
|
126
|
+
* driven by the loan fiber's REPAID / LIQUIDATED transition (`_transferAsset`).
|
|
127
|
+
*/
|
|
128
|
+
function collateralPolicy(name = "collateral-vault-v1.asset", version = "1.0.0") {
|
|
129
|
+
return {
|
|
130
|
+
name,
|
|
131
|
+
version,
|
|
132
|
+
behavior: { transferable: true, splittable: false, combinable: false, expirable: false, governable: true },
|
|
133
|
+
supply: { maxSupply: null, mintPolicy: null, burnPolicy: null, decimals: 0 },
|
|
134
|
+
morphisms: {
|
|
135
|
+
Transfer: { visibility: "Governed" },
|
|
136
|
+
Burn: { visibility: "Disabled" },
|
|
137
|
+
Compose: { visibility: "Disabled" },
|
|
138
|
+
},
|
|
139
|
+
stateShape: {},
|
|
140
|
+
metadata: { family: "lending", role: "collateral" },
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* The loan-debt / principal policy: a governed fungible whose `mintPolicy` is the
|
|
145
|
+
* proof-gated origination guard — the principal is mintable to the borrower only when the
|
|
146
|
+
* eligibility proof verifies. Repayment is a `Burn` governed by `burnPolicy`.
|
|
147
|
+
*
|
|
148
|
+
* @param mintGuard the origination guard (see `buildOriginationGuard`) — a `groth16_verify`
|
|
149
|
+
* expression bound to the pinned public lending rule.
|
|
150
|
+
*/
|
|
151
|
+
function debtPolicy(mintGuard, name = "loan-debt-v1.asset", version = "1.0.0") {
|
|
152
|
+
return {
|
|
153
|
+
name,
|
|
154
|
+
version,
|
|
155
|
+
behavior: exports.TokenBehaviors.GovernedFungible,
|
|
156
|
+
supply: {
|
|
157
|
+
maxSupply: null,
|
|
158
|
+
// Proof-gated mint: principal is minted only if the eligibility proof verifies.
|
|
159
|
+
mintPolicy: mintGuard,
|
|
160
|
+
// Repayment burns the debt; only the holder (borrower) may burn theirs. The asset context has
|
|
161
|
+
// no `event` key — bind to the verified `signers` (chain-derived from the op's proofs).
|
|
162
|
+
burnPolicy: { in: [{ var: "holder.Wallet.address" }, { var: "signers" }] },
|
|
163
|
+
decimals: 2,
|
|
164
|
+
},
|
|
165
|
+
morphisms: {
|
|
166
|
+
Transfer: { visibility: "Public" },
|
|
167
|
+
Burn: { visibility: "Public" },
|
|
168
|
+
},
|
|
169
|
+
stateShape: {},
|
|
170
|
+
metadata: { family: "lending", role: "debt" },
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
// ---------------------------------------------------------------------------
|
|
174
|
+
// Loan lifecycle → asset morphism drivers
|
|
175
|
+
// ---------------------------------------------------------------------------
|
|
176
|
+
/**
|
|
177
|
+
* lock_collateral: custody Transfer of the pledged collateral into the loan escrow fiber.
|
|
178
|
+
* (asset-model.md §10 — locking is a custody transfer to `AssetHolder.Fiber`, there is no
|
|
179
|
+
* `Lock` morphism.)
|
|
180
|
+
*/
|
|
181
|
+
function lockCollateralOp(args) {
|
|
182
|
+
return createApplyMorphismPayload({
|
|
183
|
+
assetId: args.collateralAssetId,
|
|
184
|
+
kind: "Transfer",
|
|
185
|
+
recipient: (0, exports.fiberHolder)(args.escrowFiberId),
|
|
186
|
+
targetSequenceNumber: args.targetSequenceNumber,
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* originate: Mint the loan principal/debt to the borrower. The policy's `mintPolicy`
|
|
191
|
+
* (the origination guard) reads the eligibility `witness` ({publicValues, proof}).
|
|
192
|
+
*/
|
|
193
|
+
function mintPrincipalOp(args) {
|
|
194
|
+
return createMintAssetPayload({
|
|
195
|
+
assetId: args.debtAssetId,
|
|
196
|
+
policyRef: args.debtPolicyRef,
|
|
197
|
+
holder: (0, exports.walletHolder)(args.borrower),
|
|
198
|
+
amount: args.principalAmount,
|
|
199
|
+
witness: args.witness,
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
/** repay: Burn the borrower's debt token (the principal is repaid). */
|
|
203
|
+
function repayBurnOp(args) {
|
|
204
|
+
return createApplyMorphismPayload({
|
|
205
|
+
assetId: args.debtAssetId,
|
|
206
|
+
kind: "Burn",
|
|
207
|
+
targetSequenceNumber: args.targetSequenceNumber,
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* release / liquidate: Transfer the escrowed collateral out of the escrow fiber to a
|
|
212
|
+
* recipient (the borrower on REPAID, the lender on LIQUIDATED). On-chain this is emitted by
|
|
213
|
+
* the loan fiber's transition via `_transferAsset`; this builder produces the equivalent
|
|
214
|
+
* explicit `ApplyMorphism(Transfer)` for off-fiber/manual settlement.
|
|
215
|
+
*/
|
|
216
|
+
function settleCollateralOp(args) {
|
|
217
|
+
return createApplyMorphismPayload({
|
|
218
|
+
assetId: args.collateralAssetId,
|
|
219
|
+
kind: "Transfer",
|
|
220
|
+
recipient: (0, exports.walletHolder)(args.recipient),
|
|
221
|
+
targetSequenceNumber: args.targetSequenceNumber,
|
|
222
|
+
});
|
|
223
|
+
}
|