@ottochain/sdk 2.2.5 → 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 +89 -46
- package/dist/cjs/apps/contracts/state-machines/contract-escrow.js +152 -45
- package/dist/cjs/apps/contracts/state-machines/contract-universal.js +40 -8
- 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 +85 -43
- package/dist/cjs/apps/governance/state-machines/dao-reputation.js +73 -43
- package/dist/cjs/apps/governance/state-machines/dao-single.js +55 -14
- package/dist/cjs/apps/governance/state-machines/dao-token.js +103 -45
- package/dist/cjs/apps/governance/state-machines/governance-simple.js +129 -65
- package/dist/cjs/apps/governance/state-machines/governance-universal.js +29 -5
- 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 +57 -9
- package/dist/cjs/apps/identity/state-machines/identity-oracle.js +70 -27
- package/dist/cjs/apps/identity/state-machines/identity-registry.js +288 -0
- package/dist/cjs/apps/identity/state-machines/identity-universal.js +30 -6
- 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 +44 -19
- package/dist/cjs/apps/markets/state-machines/market-crowdfund.js +54 -29
- package/dist/cjs/apps/markets/state-machines/market-group-buy.js +53 -31
- package/dist/cjs/apps/markets/state-machines/market-prediction.js +120 -61
- package/dist/cjs/apps/markets/state-machines/market-universal.js +50 -10
- 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 +1722 -1
- package/dist/cjs/generated/ottochain/v1/fiber.js +355 -5
- package/dist/cjs/generated/ottochain/v1/messages.js +775 -3
- package/dist/cjs/generated/ottochain/v1/records.js +350 -3
- package/dist/cjs/index.js +45 -7
- package/dist/cjs/openapi.js +2 -0
- package/dist/cjs/ottochain/drop-nulls.js +1 -2
- package/dist/cjs/ottochain/genesis-manifest.js +193 -0
- package/dist/cjs/ottochain/index.js +27 -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 +19 -1
- 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 +89 -46
- package/dist/esm/apps/contracts/state-machines/contract-escrow.js +152 -45
- package/dist/esm/apps/contracts/state-machines/contract-universal.js +40 -8
- 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 +85 -43
- package/dist/esm/apps/governance/state-machines/dao-reputation.js +73 -43
- package/dist/esm/apps/governance/state-machines/dao-single.js +55 -14
- package/dist/esm/apps/governance/state-machines/dao-token.js +103 -45
- package/dist/esm/apps/governance/state-machines/governance-simple.js +129 -65
- package/dist/esm/apps/governance/state-machines/governance-universal.js +29 -5
- 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 +57 -9
- package/dist/esm/apps/identity/state-machines/identity-oracle.js +70 -27
- package/dist/esm/apps/identity/state-machines/identity-registry.js +285 -0
- package/dist/esm/apps/identity/state-machines/identity-universal.js +30 -6
- 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 +44 -19
- package/dist/esm/apps/markets/state-machines/market-crowdfund.js +54 -29
- package/dist/esm/apps/markets/state-machines/market-group-buy.js +53 -31
- package/dist/esm/apps/markets/state-machines/market-prediction.js +120 -61
- package/dist/esm/apps/markets/state-machines/market-universal.js +50 -10
- 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/generated/ottochain/v1/common.js +1718 -0
- package/dist/esm/generated/ottochain/v1/fiber.js +351 -1
- package/dist/esm/generated/ottochain/v1/messages.js +774 -2
- package/dist/esm/generated/ottochain/v1/records.js +349 -2
- package/dist/esm/index.js +23 -2
- package/dist/esm/openapi.js +1 -0
- package/dist/esm/ottochain/genesis-manifest.js +189 -0
- package/dist/esm/ottochain/index.js +4 -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 +18 -0
- 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 +159 -227
- package/dist/types/apps/contracts/state-machines/contract-agreement.d.ts +50 -101
- package/dist/types/apps/contracts/state-machines/contract-escrow.d.ts +86 -120
- package/dist/types/apps/contracts/state-machines/contract-universal.d.ts +20 -4
- 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 +396 -417
- package/dist/types/apps/governance/state-machines/dao-multisig.d.ts +92 -95
- package/dist/types/apps/governance/state-machines/dao-reputation.d.ts +57 -69
- package/dist/types/apps/governance/state-machines/dao-single.d.ts +40 -50
- package/dist/types/apps/governance/state-machines/dao-token.d.ts +80 -53
- package/dist/types/apps/governance/state-machines/governance-simple.d.ts +107 -121
- package/dist/types/apps/governance/state-machines/governance-universal.d.ts +17 -5
- package/dist/types/apps/identity/constants.d.ts +32 -4
- package/dist/types/apps/identity/index.d.ts +449 -100
- package/dist/types/apps/identity/state-machines/identity-agent.d.ts +30 -0
- package/dist/types/apps/identity/state-machines/identity-oracle.d.ts +41 -87
- package/dist/types/apps/identity/state-machines/identity-registry.d.ts +379 -0
- package/dist/types/apps/identity/state-machines/identity-universal.d.ts +15 -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 +184 -204
- package/dist/types/apps/markets/state-machines/market-auction.d.ts +25 -37
- package/dist/types/apps/markets/state-machines/market-crowdfund.d.ts +26 -34
- package/dist/types/apps/markets/state-machines/market-group-buy.d.ts +31 -43
- package/dist/types/apps/markets/state-machines/market-prediction.d.ts +67 -72
- package/dist/types/apps/markets/state-machines/market-universal.d.ts +30 -10
- 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/generated/ottochain/v1/common.d.ts +228 -0
- package/dist/types/generated/ottochain/v1/fiber.d.ts +32 -1
- package/dist/types/generated/ottochain/v1/messages.d.ts +84 -0
- package/dist/types/generated/ottochain/v1/records.d.ts +34 -0
- package/dist/types/index.d.ts +8 -2
- package/dist/types/openapi.d.ts +22 -0
- package/dist/types/ottochain/genesis-manifest.d.ts +130 -0
- package/dist/types/ottochain/index.d.ts +6 -5
- 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 +602 -11
- 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 +41 -3
- 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 +52 -35
- 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
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { defineFiberApp } from "../../../schema/fiber-app.js";
|
|
2
|
+
import { signerIsParty } from "../../../schema/guards.js";
|
|
2
3
|
/**
|
|
3
4
|
* Oracle identity with staking, attestations, reputation, and slashing mechanics.
|
|
4
5
|
*/
|
|
@@ -11,13 +12,18 @@ export const identityOracleDef = defineFiberApp({
|
|
|
11
12
|
description: "Oracle identity with staking, attestations, reputation, and slashing mechanics",
|
|
12
13
|
},
|
|
13
14
|
createSchema: {
|
|
14
|
-
required: ["owner", "stake", "domains"],
|
|
15
|
+
required: ["owner", "stake", "domains", "slasher"],
|
|
15
16
|
properties: {
|
|
16
17
|
owner: {
|
|
17
18
|
type: "address",
|
|
18
19
|
description: "Oracle owner DAG address",
|
|
19
20
|
immutable: true,
|
|
20
21
|
},
|
|
22
|
+
slasher: {
|
|
23
|
+
type: "address",
|
|
24
|
+
description: "DAG address of the slasher authorized to penalize this oracle's stake",
|
|
25
|
+
immutable: true,
|
|
26
|
+
},
|
|
21
27
|
stake: {
|
|
22
28
|
type: "integer",
|
|
23
29
|
minimum: 0,
|
|
@@ -38,6 +44,7 @@ export const identityOracleDef = defineFiberApp({
|
|
|
38
44
|
stateSchema: {
|
|
39
45
|
properties: {
|
|
40
46
|
owner: { type: "address", immutable: true },
|
|
47
|
+
slasher: { type: "address", immutable: true },
|
|
41
48
|
address: { type: "address", computed: true },
|
|
42
49
|
stake: { type: "integer", computed: true },
|
|
43
50
|
minStake: { type: "integer" },
|
|
@@ -85,7 +92,6 @@ export const identityOracleDef = defineFiberApp({
|
|
|
85
92
|
required: ["agent"],
|
|
86
93
|
properties: {
|
|
87
94
|
agent: { type: "address" },
|
|
88
|
-
adminOverride: { type: "boolean", default: false },
|
|
89
95
|
},
|
|
90
96
|
},
|
|
91
97
|
add_stake: {
|
|
@@ -129,11 +135,51 @@ export const identityOracleDef = defineFiberApp({
|
|
|
129
135
|
},
|
|
130
136
|
},
|
|
131
137
|
states: {
|
|
132
|
-
UNREGISTERED: {
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
138
|
+
UNREGISTERED: {
|
|
139
|
+
id: "UNREGISTERED",
|
|
140
|
+
isFinal: false,
|
|
141
|
+
metadata: {
|
|
142
|
+
label: "Unregistered",
|
|
143
|
+
description: "Oracle not yet registered; awaiting stake",
|
|
144
|
+
category: "initial",
|
|
145
|
+
},
|
|
146
|
+
},
|
|
147
|
+
REGISTERED: {
|
|
148
|
+
id: "REGISTERED",
|
|
149
|
+
isFinal: false,
|
|
150
|
+
metadata: {
|
|
151
|
+
label: "Registered",
|
|
152
|
+
description: "Oracle staked and registered but not yet active",
|
|
153
|
+
category: "pending",
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
ACTIVE: {
|
|
157
|
+
id: "ACTIVE",
|
|
158
|
+
isFinal: false,
|
|
159
|
+
metadata: {
|
|
160
|
+
label: "Active",
|
|
161
|
+
description: "Oracle is active and may submit resolutions",
|
|
162
|
+
category: "active",
|
|
163
|
+
},
|
|
164
|
+
},
|
|
165
|
+
SLASHED: {
|
|
166
|
+
id: "SLASHED",
|
|
167
|
+
isFinal: false,
|
|
168
|
+
metadata: {
|
|
169
|
+
label: "Slashed",
|
|
170
|
+
description: "Oracle penalized for a lost dispute; stake reduced",
|
|
171
|
+
category: "pending",
|
|
172
|
+
},
|
|
173
|
+
},
|
|
174
|
+
WITHDRAWN: {
|
|
175
|
+
id: "WITHDRAWN",
|
|
176
|
+
isFinal: true,
|
|
177
|
+
metadata: {
|
|
178
|
+
label: "Withdrawn",
|
|
179
|
+
description: "Oracle withdrawn and stake reclaimed (terminal)",
|
|
180
|
+
category: "terminal",
|
|
181
|
+
},
|
|
182
|
+
},
|
|
137
183
|
},
|
|
138
184
|
initialState: "UNREGISTERED",
|
|
139
185
|
transitions: [
|
|
@@ -149,7 +195,7 @@ export const identityOracleDef = defineFiberApp({
|
|
|
149
195
|
status: "REGISTERED",
|
|
150
196
|
address: { var: "event.agent" },
|
|
151
197
|
stake: { var: "event.stake" },
|
|
152
|
-
registeredAt: { var: "$
|
|
198
|
+
registeredAt: { var: "$ordinal" },
|
|
153
199
|
reputation: {
|
|
154
200
|
accuracy: 100,
|
|
155
201
|
totalResolutions: 0,
|
|
@@ -166,16 +212,12 @@ export const identityOracleDef = defineFiberApp({
|
|
|
166
212
|
from: "REGISTERED",
|
|
167
213
|
to: "ACTIVE",
|
|
168
214
|
eventName: "activate",
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
{ "===": [{ var: "event.agent" }, { var: "state.address" }] },
|
|
172
|
-
{ var: "event.adminOverride" },
|
|
173
|
-
],
|
|
174
|
-
},
|
|
215
|
+
// authority gate — an ARBITER/SLASHER attestation check layers on additively when the identity registry lands (see docs/design/app-hardening-identity-integration.md §4.2)
|
|
216
|
+
guard: signerIsParty("state.address"),
|
|
175
217
|
effect: {
|
|
176
218
|
merge: [
|
|
177
219
|
{ var: "state" },
|
|
178
|
-
{ status: "ACTIVE", activatedAt: { var: "$
|
|
220
|
+
{ status: "ACTIVE", activatedAt: { var: "$ordinal" } },
|
|
179
221
|
],
|
|
180
222
|
},
|
|
181
223
|
},
|
|
@@ -185,7 +227,7 @@ export const identityOracleDef = defineFiberApp({
|
|
|
185
227
|
eventName: "add_stake",
|
|
186
228
|
guard: {
|
|
187
229
|
and: [
|
|
188
|
-
|
|
230
|
+
signerIsParty("state.address"),
|
|
189
231
|
{ ">": [{ var: "event.amount" }, 0] },
|
|
190
232
|
],
|
|
191
233
|
},
|
|
@@ -194,7 +236,7 @@ export const identityOracleDef = defineFiberApp({
|
|
|
194
236
|
{ var: "state" },
|
|
195
237
|
{
|
|
196
238
|
stake: { "+": [{ var: "state.stake" }, { var: "event.amount" }] },
|
|
197
|
-
lastStakeAt: { var: "$
|
|
239
|
+
lastStakeAt: { var: "$ordinal" },
|
|
198
240
|
},
|
|
199
241
|
],
|
|
200
242
|
},
|
|
@@ -225,7 +267,7 @@ export const identityOracleDef = defineFiberApp({
|
|
|
225
267
|
},
|
|
226
268
|
],
|
|
227
269
|
},
|
|
228
|
-
lastResolutionAt: { var: "$
|
|
270
|
+
lastResolutionAt: { var: "$ordinal" },
|
|
229
271
|
},
|
|
230
272
|
],
|
|
231
273
|
},
|
|
@@ -234,9 +276,10 @@ export const identityOracleDef = defineFiberApp({
|
|
|
234
276
|
from: "ACTIVE",
|
|
235
277
|
to: "SLASHED",
|
|
236
278
|
eventName: "slash",
|
|
279
|
+
// authority gate — an ARBITER/SLASHER attestation check layers on additively when the identity registry lands (see docs/design/app-hardening-identity-integration.md §4.2)
|
|
237
280
|
guard: {
|
|
238
281
|
and: [
|
|
239
|
-
|
|
282
|
+
signerIsParty("state.slasher"),
|
|
240
283
|
{ ">": [{ var: "event.amount" }, 0] },
|
|
241
284
|
{ "<=": [{ var: "event.amount" }, { var: "state.stake" }] },
|
|
242
285
|
],
|
|
@@ -255,12 +298,12 @@ export const identityOracleDef = defineFiberApp({
|
|
|
255
298
|
reason: { var: "event.reason" },
|
|
256
299
|
amount: { var: "event.amount" },
|
|
257
300
|
marketId: { var: "event.marketId" },
|
|
258
|
-
slashedAt: { var: "$
|
|
301
|
+
slashedAt: { var: "$ordinal" },
|
|
259
302
|
},
|
|
260
303
|
],
|
|
261
304
|
],
|
|
262
305
|
},
|
|
263
|
-
slashedAt: { var: "$
|
|
306
|
+
slashedAt: { var: "$ordinal" },
|
|
264
307
|
},
|
|
265
308
|
],
|
|
266
309
|
},
|
|
@@ -271,14 +314,14 @@ export const identityOracleDef = defineFiberApp({
|
|
|
271
314
|
eventName: "reactivate",
|
|
272
315
|
guard: {
|
|
273
316
|
and: [
|
|
274
|
-
|
|
317
|
+
signerIsParty("state.address"),
|
|
275
318
|
{ ">=": [{ var: "state.stake" }, { var: "state.minStake" }] },
|
|
276
319
|
],
|
|
277
320
|
},
|
|
278
321
|
effect: {
|
|
279
322
|
merge: [
|
|
280
323
|
{ var: "state" },
|
|
281
|
-
{ status: "ACTIVE", reactivatedAt: { var: "$
|
|
324
|
+
{ status: "ACTIVE", reactivatedAt: { var: "$ordinal" } },
|
|
282
325
|
],
|
|
283
326
|
},
|
|
284
327
|
},
|
|
@@ -286,13 +329,13 @@ export const identityOracleDef = defineFiberApp({
|
|
|
286
329
|
from: "ACTIVE",
|
|
287
330
|
to: "WITHDRAWN",
|
|
288
331
|
eventName: "withdraw",
|
|
289
|
-
guard:
|
|
332
|
+
guard: signerIsParty("state.address"),
|
|
290
333
|
effect: {
|
|
291
334
|
merge: [
|
|
292
335
|
{ var: "state" },
|
|
293
336
|
{
|
|
294
337
|
status: "WITHDRAWN",
|
|
295
|
-
withdrawnAt: { var: "$
|
|
338
|
+
withdrawnAt: { var: "$ordinal" },
|
|
296
339
|
finalStake: { var: "state.stake" },
|
|
297
340
|
},
|
|
298
341
|
],
|
|
@@ -302,13 +345,13 @@ export const identityOracleDef = defineFiberApp({
|
|
|
302
345
|
from: "SLASHED",
|
|
303
346
|
to: "WITHDRAWN",
|
|
304
347
|
eventName: "withdraw",
|
|
305
|
-
guard:
|
|
348
|
+
guard: signerIsParty("state.address"),
|
|
306
349
|
effect: {
|
|
307
350
|
merge: [
|
|
308
351
|
{ var: "state" },
|
|
309
352
|
{
|
|
310
353
|
status: "WITHDRAWN",
|
|
311
|
-
withdrawnAt: { var: "$
|
|
354
|
+
withdrawnAt: { var: "$ordinal" },
|
|
312
355
|
finalStake: { var: "state.stake" },
|
|
313
356
|
},
|
|
314
357
|
],
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
import { defineFiberApp } from "../../../schema/fiber-app.js";
|
|
2
|
+
import { signerIsParty } from "../../../schema/guards.js";
|
|
3
|
+
/**
|
|
4
|
+
* Identity Registry — the ecosystem authority & reputation source.
|
|
5
|
+
*
|
|
6
|
+
* Aggregates, under a single authority-governed fiber:
|
|
7
|
+
* - `reputations: { <address>: int }` — the public reputation read by reputation-gated apps
|
|
8
|
+
* (dao-reputation, credit-scoring) via a declared dependency + the `signerHasReputation` helper.
|
|
9
|
+
* - role attestations (ARBITER / SLASHER / ISSUER / BOARD_MEMBER) as FLAT per-role maps
|
|
10
|
+
* `{ <address>: true }`, read via the `signerHasRole` helper for judicial / issuance / governance
|
|
11
|
+
* authority gates.
|
|
12
|
+
*
|
|
13
|
+
* Writes are gated to the registry's pinned `authority` (immutable, set at create) and bound to the
|
|
14
|
+
* CHAIN-VERIFIED signer via `signerIsParty("state.authority")` — never `event.agent`. Reads happen
|
|
15
|
+
* cross-fiber: a consumer app declares this registry as a dependency and reads
|
|
16
|
+
* `machines.<registryDep>.state.reputations` / `.arbiters` / … bound to `proofs[].address`.
|
|
17
|
+
*
|
|
18
|
+
* Roles are flat per-role maps rather than a nested `roles[addr][ROLE]` map on purpose: metakit
|
|
19
|
+
* `get`/`has` on a NULL inner map throw (they are not null-total), so a nested read would error for
|
|
20
|
+
* any signer with no roles entry — the common case. Flat maps keep both the write (`set`/`unset`) and
|
|
21
|
+
* the read (`has`) total and fail-closed. New role types are added as new state maps + a cascade arm.
|
|
22
|
+
*
|
|
23
|
+
* See docs/design/app-hardening-identity-integration.md §3–§4 and src/schema/guards.ts
|
|
24
|
+
* (signerHasReputation / signerHasRole).
|
|
25
|
+
*/
|
|
26
|
+
export const identityRegistryDef = defineFiberApp({
|
|
27
|
+
metadata: {
|
|
28
|
+
name: "IdentityRegistry",
|
|
29
|
+
app: "identity",
|
|
30
|
+
type: "registry",
|
|
31
|
+
version: "1.0.0",
|
|
32
|
+
description: "Ecosystem reputation + role-attestation registry; authority-gated writes, dependency reads.",
|
|
33
|
+
crossReferences: {
|
|
34
|
+
IdentityAgent: "per-agent reputation source",
|
|
35
|
+
Governance: "reputation-gated participation",
|
|
36
|
+
Contracts: "ARBITER-gated dispute settlement",
|
|
37
|
+
Corporate: "ISSUER / BOARD_MEMBER authority",
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
createSchema: {
|
|
41
|
+
required: ["authority"],
|
|
42
|
+
properties: {
|
|
43
|
+
authority: {
|
|
44
|
+
type: "address",
|
|
45
|
+
description: "DAG address authorized to write reputation + role attestations (immutable)",
|
|
46
|
+
immutable: true,
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
stateSchema: {
|
|
51
|
+
properties: {
|
|
52
|
+
authority: { type: "address", immutable: true },
|
|
53
|
+
// { <address>: int } — public reputation, read via signerHasReputation
|
|
54
|
+
reputations: { type: "object", computed: true },
|
|
55
|
+
// FLAT per-role attestation maps { <address>: true }, read via signerHasRole
|
|
56
|
+
arbiters: { type: "object", computed: true },
|
|
57
|
+
slashers: { type: "object", computed: true },
|
|
58
|
+
issuers: { type: "object", computed: true },
|
|
59
|
+
boardMembers: { type: "object", computed: true },
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
eventSchemas: {
|
|
63
|
+
set_reputation: {
|
|
64
|
+
description: "Authority sets an address's reputation to an absolute score",
|
|
65
|
+
required: ["subject", "score"],
|
|
66
|
+
properties: {
|
|
67
|
+
subject: { type: "address" },
|
|
68
|
+
score: { type: "integer" },
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
adjust_reputation: {
|
|
72
|
+
description: "Authority adjusts an address's reputation by a signed delta",
|
|
73
|
+
required: ["subject", "delta"],
|
|
74
|
+
properties: {
|
|
75
|
+
subject: { type: "address" },
|
|
76
|
+
delta: { type: "integer" },
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
grant_role: {
|
|
80
|
+
description: "Authority grants a role attestation (ARBITER|SLASHER|ISSUER|BOARD_MEMBER) to an address",
|
|
81
|
+
required: ["subject", "role"],
|
|
82
|
+
properties: {
|
|
83
|
+
subject: { type: "address" },
|
|
84
|
+
role: {
|
|
85
|
+
type: "string",
|
|
86
|
+
enum: ["ARBITER", "SLASHER", "ISSUER", "BOARD_MEMBER"],
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
revoke_role: {
|
|
91
|
+
description: "Authority revokes a role attestation from an address",
|
|
92
|
+
required: ["subject", "role"],
|
|
93
|
+
properties: {
|
|
94
|
+
subject: { type: "address" },
|
|
95
|
+
role: {
|
|
96
|
+
type: "string",
|
|
97
|
+
enum: ["ARBITER", "SLASHER", "ISSUER", "BOARD_MEMBER"],
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
states: {
|
|
103
|
+
ACTIVE: {
|
|
104
|
+
id: "ACTIVE",
|
|
105
|
+
isFinal: false,
|
|
106
|
+
metadata: {
|
|
107
|
+
label: "Active",
|
|
108
|
+
description: "Registry accepting authority writes",
|
|
109
|
+
category: "active",
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
initialState: "ACTIVE",
|
|
114
|
+
transitions: [
|
|
115
|
+
// ACTIVE → ACTIVE: set_reputation (absolute)
|
|
116
|
+
{
|
|
117
|
+
from: "ACTIVE",
|
|
118
|
+
to: "ACTIVE",
|
|
119
|
+
eventName: "set_reputation",
|
|
120
|
+
guard: signerIsParty("state.authority"),
|
|
121
|
+
effect: {
|
|
122
|
+
merge: [
|
|
123
|
+
{ var: "state" },
|
|
124
|
+
{
|
|
125
|
+
reputations: {
|
|
126
|
+
set: [
|
|
127
|
+
{ var: "state.reputations" },
|
|
128
|
+
{ var: "event.subject" },
|
|
129
|
+
{ var: "event.score" },
|
|
130
|
+
],
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
],
|
|
134
|
+
},
|
|
135
|
+
dependencies: [],
|
|
136
|
+
},
|
|
137
|
+
// ACTIVE → ACTIVE: adjust_reputation (signed delta; absent subject starts from 0)
|
|
138
|
+
{
|
|
139
|
+
from: "ACTIVE",
|
|
140
|
+
to: "ACTIVE",
|
|
141
|
+
eventName: "adjust_reputation",
|
|
142
|
+
guard: signerIsParty("state.authority"),
|
|
143
|
+
effect: {
|
|
144
|
+
merge: [
|
|
145
|
+
{ var: "state" },
|
|
146
|
+
{
|
|
147
|
+
reputations: {
|
|
148
|
+
set: [
|
|
149
|
+
{ var: "state.reputations" },
|
|
150
|
+
{ var: "event.subject" },
|
|
151
|
+
{
|
|
152
|
+
"+": [
|
|
153
|
+
{
|
|
154
|
+
get: [
|
|
155
|
+
{ var: "state.reputations" },
|
|
156
|
+
{ var: "event.subject" },
|
|
157
|
+
],
|
|
158
|
+
},
|
|
159
|
+
{ var: "event.delta" },
|
|
160
|
+
],
|
|
161
|
+
},
|
|
162
|
+
],
|
|
163
|
+
},
|
|
164
|
+
},
|
|
165
|
+
],
|
|
166
|
+
},
|
|
167
|
+
dependencies: [],
|
|
168
|
+
},
|
|
169
|
+
// ACTIVE → ACTIVE: grant_role (cascade selects the flat per-role map)
|
|
170
|
+
{
|
|
171
|
+
from: "ACTIVE",
|
|
172
|
+
to: "ACTIVE",
|
|
173
|
+
eventName: "grant_role",
|
|
174
|
+
guard: signerIsParty("state.authority"),
|
|
175
|
+
effect: {
|
|
176
|
+
merge: [
|
|
177
|
+
{ var: "state" },
|
|
178
|
+
{
|
|
179
|
+
arbiters: {
|
|
180
|
+
if: [
|
|
181
|
+
{ "==": [{ var: "event.role" }, "ARBITER"] },
|
|
182
|
+
{
|
|
183
|
+
set: [
|
|
184
|
+
{ var: "state.arbiters" },
|
|
185
|
+
{ var: "event.subject" },
|
|
186
|
+
true,
|
|
187
|
+
],
|
|
188
|
+
},
|
|
189
|
+
{ var: "state.arbiters" },
|
|
190
|
+
],
|
|
191
|
+
},
|
|
192
|
+
slashers: {
|
|
193
|
+
if: [
|
|
194
|
+
{ "==": [{ var: "event.role" }, "SLASHER"] },
|
|
195
|
+
{
|
|
196
|
+
set: [
|
|
197
|
+
{ var: "state.slashers" },
|
|
198
|
+
{ var: "event.subject" },
|
|
199
|
+
true,
|
|
200
|
+
],
|
|
201
|
+
},
|
|
202
|
+
{ var: "state.slashers" },
|
|
203
|
+
],
|
|
204
|
+
},
|
|
205
|
+
issuers: {
|
|
206
|
+
if: [
|
|
207
|
+
{ "==": [{ var: "event.role" }, "ISSUER"] },
|
|
208
|
+
{
|
|
209
|
+
set: [
|
|
210
|
+
{ var: "state.issuers" },
|
|
211
|
+
{ var: "event.subject" },
|
|
212
|
+
true,
|
|
213
|
+
],
|
|
214
|
+
},
|
|
215
|
+
{ var: "state.issuers" },
|
|
216
|
+
],
|
|
217
|
+
},
|
|
218
|
+
boardMembers: {
|
|
219
|
+
if: [
|
|
220
|
+
{ "==": [{ var: "event.role" }, "BOARD_MEMBER"] },
|
|
221
|
+
{
|
|
222
|
+
set: [
|
|
223
|
+
{ var: "state.boardMembers" },
|
|
224
|
+
{ var: "event.subject" },
|
|
225
|
+
true,
|
|
226
|
+
],
|
|
227
|
+
},
|
|
228
|
+
{ var: "state.boardMembers" },
|
|
229
|
+
],
|
|
230
|
+
},
|
|
231
|
+
},
|
|
232
|
+
],
|
|
233
|
+
},
|
|
234
|
+
dependencies: [],
|
|
235
|
+
},
|
|
236
|
+
// ACTIVE → ACTIVE: revoke_role (cascade unsets from the flat per-role map)
|
|
237
|
+
{
|
|
238
|
+
from: "ACTIVE",
|
|
239
|
+
to: "ACTIVE",
|
|
240
|
+
eventName: "revoke_role",
|
|
241
|
+
guard: signerIsParty("state.authority"),
|
|
242
|
+
effect: {
|
|
243
|
+
merge: [
|
|
244
|
+
{ var: "state" },
|
|
245
|
+
{
|
|
246
|
+
arbiters: {
|
|
247
|
+
if: [
|
|
248
|
+
{ "==": [{ var: "event.role" }, "ARBITER"] },
|
|
249
|
+
{ unset: [{ var: "state.arbiters" }, { var: "event.subject" }] },
|
|
250
|
+
{ var: "state.arbiters" },
|
|
251
|
+
],
|
|
252
|
+
},
|
|
253
|
+
slashers: {
|
|
254
|
+
if: [
|
|
255
|
+
{ "==": [{ var: "event.role" }, "SLASHER"] },
|
|
256
|
+
{ unset: [{ var: "state.slashers" }, { var: "event.subject" }] },
|
|
257
|
+
{ var: "state.slashers" },
|
|
258
|
+
],
|
|
259
|
+
},
|
|
260
|
+
issuers: {
|
|
261
|
+
if: [
|
|
262
|
+
{ "==": [{ var: "event.role" }, "ISSUER"] },
|
|
263
|
+
{ unset: [{ var: "state.issuers" }, { var: "event.subject" }] },
|
|
264
|
+
{ var: "state.issuers" },
|
|
265
|
+
],
|
|
266
|
+
},
|
|
267
|
+
boardMembers: {
|
|
268
|
+
if: [
|
|
269
|
+
{ "==": [{ var: "event.role" }, "BOARD_MEMBER"] },
|
|
270
|
+
{
|
|
271
|
+
unset: [
|
|
272
|
+
{ var: "state.boardMembers" },
|
|
273
|
+
{ var: "event.subject" },
|
|
274
|
+
],
|
|
275
|
+
},
|
|
276
|
+
{ var: "state.boardMembers" },
|
|
277
|
+
],
|
|
278
|
+
},
|
|
279
|
+
},
|
|
280
|
+
],
|
|
281
|
+
},
|
|
282
|
+
dependencies: [],
|
|
283
|
+
},
|
|
284
|
+
],
|
|
285
|
+
});
|
|
@@ -54,9 +54,33 @@ export const identityUniversalDef = defineFiberApp({
|
|
|
54
54
|
},
|
|
55
55
|
},
|
|
56
56
|
states: {
|
|
57
|
-
CREATED: {
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
CREATED: {
|
|
58
|
+
id: "CREATED",
|
|
59
|
+
isFinal: false,
|
|
60
|
+
metadata: {
|
|
61
|
+
label: "Created",
|
|
62
|
+
description: "Identity registered but not yet activated",
|
|
63
|
+
category: "initial",
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
ACTIVE: {
|
|
67
|
+
id: "ACTIVE",
|
|
68
|
+
isFinal: false,
|
|
69
|
+
metadata: {
|
|
70
|
+
label: "Active",
|
|
71
|
+
description: "Identity is active and can be updated",
|
|
72
|
+
category: "active",
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
INACTIVE: {
|
|
76
|
+
id: "INACTIVE",
|
|
77
|
+
isFinal: true,
|
|
78
|
+
metadata: {
|
|
79
|
+
label: "Inactive",
|
|
80
|
+
description: "Identity deactivated by its owner (terminal)",
|
|
81
|
+
category: "terminal",
|
|
82
|
+
},
|
|
83
|
+
},
|
|
60
84
|
},
|
|
61
85
|
initialState: "CREATED",
|
|
62
86
|
transitions: [
|
|
@@ -68,7 +92,7 @@ export const identityUniversalDef = defineFiberApp({
|
|
|
68
92
|
effect: {
|
|
69
93
|
merge: [
|
|
70
94
|
{ var: "state" },
|
|
71
|
-
{ status: "ACTIVE", activatedAt: { var: "$
|
|
95
|
+
{ status: "ACTIVE", activatedAt: { var: "$ordinal" } },
|
|
72
96
|
],
|
|
73
97
|
},
|
|
74
98
|
},
|
|
@@ -81,7 +105,7 @@ export const identityUniversalDef = defineFiberApp({
|
|
|
81
105
|
merge: [
|
|
82
106
|
{ var: "state" },
|
|
83
107
|
{
|
|
84
|
-
updatedAt: { var: "$
|
|
108
|
+
updatedAt: { var: "$ordinal" },
|
|
85
109
|
metadata: { var: "event.metadata" },
|
|
86
110
|
},
|
|
87
111
|
],
|
|
@@ -95,7 +119,7 @@ export const identityUniversalDef = defineFiberApp({
|
|
|
95
119
|
effect: {
|
|
96
120
|
merge: [
|
|
97
121
|
{ var: "state" },
|
|
98
|
-
{ status: "INACTIVE", deactivatedAt: { var: "$
|
|
122
|
+
{ status: "INACTIVE", deactivatedAt: { var: "$ordinal" } },
|
|
99
123
|
],
|
|
100
124
|
},
|
|
101
125
|
},
|
package/dist/esm/apps/index.js
CHANGED