@ottochain/sdk 2.4.0 → 2.5.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/compute/index.js +33 -0
- package/dist/cjs/apps/compute/state-machines/compute-rule110.js +164 -0
- package/dist/cjs/apps/compute/state-machines/index.js +9 -0
- package/dist/cjs/apps/contracts/index.js +1 -1
- package/dist/cjs/apps/contracts/state-machines/contract-agreement.js +126 -148
- package/dist/cjs/apps/contracts/state-machines/contract-escrow.js +153 -174
- package/dist/cjs/apps/contracts/state-machines/contract-universal.js +46 -58
- package/dist/cjs/apps/corporate/state-machines/corp-board.js +415 -481
- package/dist/cjs/apps/corporate/state-machines/corp-entity.js +368 -440
- package/dist/cjs/apps/corporate/state-machines/corp-securities.js +532 -647
- package/dist/cjs/apps/corporate/state-machines/corp-shareholders.js +499 -603
- package/dist/cjs/apps/governance/index.js +7 -7
- package/dist/cjs/apps/governance/state-machines/dao-multisig.js +170 -209
- package/dist/cjs/apps/governance/state-machines/dao-reputation.js +161 -214
- package/dist/cjs/apps/governance/state-machines/dao-single.js +92 -92
- package/dist/cjs/apps/governance/state-machines/dao-token.js +169 -223
- package/dist/cjs/apps/governance/state-machines/governance-simple.js +185 -217
- package/dist/cjs/apps/governance/state-machines/governance-universal.js +64 -64
- package/dist/cjs/apps/identity/constants.js +16 -24
- package/dist/cjs/apps/identity/index.js +1 -1
- package/dist/cjs/apps/identity/state-machines/identity-agent.js +124 -158
- package/dist/cjs/apps/identity/state-machines/identity-oracle.js +151 -169
- package/dist/cjs/apps/identity/state-machines/identity-registry.js +89 -115
- package/dist/cjs/apps/identity/state-machines/identity-universal.js +51 -57
- package/dist/cjs/apps/index.js +4 -1
- package/dist/cjs/apps/lending/assets.js +41 -17
- package/dist/cjs/apps/lending/credit-scoring.js +4 -4
- package/dist/cjs/apps/lending/eligibility.js +9 -25
- package/dist/cjs/apps/lending/index.js +1 -1
- package/dist/cjs/apps/lending/state-machines/lending-zk-loan.js +177 -156
- package/dist/cjs/apps/markets/index.js +1 -1
- package/dist/cjs/apps/markets/state-machines/market-auction.js +115 -134
- package/dist/cjs/apps/markets/state-machines/market-crowdfund.js +122 -137
- package/dist/cjs/apps/markets/state-machines/market-group-buy.js +158 -177
- package/dist/cjs/apps/markets/state-machines/market-prediction.js +193 -227
- package/dist/cjs/apps/markets/state-machines/market-universal.js +65 -80
- package/dist/cjs/apps/oracles/index.js +1 -1
- package/dist/cjs/apps/privacy/index.js +67 -0
- package/dist/cjs/apps/privacy/state-machines/index.js +17 -0
- package/dist/cjs/apps/privacy/state-machines/mixer-ddhRing.js +286 -0
- package/dist/cjs/apps/privacy/state-machines/note-pool.js +476 -0
- package/dist/cjs/apps/staked-pool/assets.js +103 -0
- package/dist/cjs/apps/staked-pool/base.js +498 -0
- package/dist/cjs/apps/staked-pool/consumer.js +55 -0
- package/dist/cjs/apps/staked-pool/index.js +83 -0
- package/dist/cjs/apps/staked-pool/state-machines/index.js +12 -0
- package/dist/cjs/apps/staked-pool/state-machines/staked-pool-base.js +49 -0
- package/dist/cjs/apps/staked-pool/state-machines/staked-pool-oracle.js +131 -0
- package/dist/cjs/generated/google/protobuf/struct.js +1 -1
- package/dist/cjs/generated/google/protobuf/timestamp.js +1 -1
- package/dist/cjs/generated/ottochain/apps/contracts/v1/contract.js +1 -1
- package/dist/cjs/generated/ottochain/apps/corporate/v1/corporate.js +1 -1
- package/dist/cjs/generated/ottochain/apps/governance/v1/governance.js +1 -1
- package/dist/cjs/generated/ottochain/apps/identity/v1/attestation.js +1 -1
- package/dist/cjs/generated/ottochain/apps/identity/v1/identity.js +1 -1
- package/dist/cjs/generated/ottochain/apps/markets/v1/market.js +1 -1
- package/dist/cjs/generated/ottochain/v1/common.js +1 -1
- package/dist/cjs/generated/ottochain/v1/fiber.js +40 -2
- package/dist/cjs/generated/ottochain/v1/messages.js +1 -1
- package/dist/cjs/generated/ottochain/v1/records.js +1 -1
- package/dist/cjs/index.js +20 -3
- package/dist/cjs/ottochain/genesis-manifest.js +6 -0
- package/dist/cjs/ottochain/metagraph-client.js +16 -8
- package/dist/cjs/ottochain/snapshot.js +2 -4
- package/dist/cjs/ottochain/transaction.js +10 -0
- package/dist/cjs/privacy/sealed-bid.js +85 -82
- package/dist/cjs/privacy/shield-app.js +32 -32
- package/dist/cjs/schema/effects.js +117 -1
- package/dist/cjs/schema/fiber-app.js +132 -3
- package/dist/cjs/schema/guard-lint.js +3 -12
- package/dist/cjs/schema/guards.js +38 -38
- package/dist/cjs/templates/asset-policy.js +190 -0
- package/dist/cjs/templates/index.js +86 -0
- package/dist/cjs/templates/machine.js +130 -0
- package/dist/cjs/templates/migration.js +39 -0
- package/dist/cjs/templates/state-shape.js +38 -0
- package/dist/cjs/validation.js +1 -3
- package/dist/esm/apps/compute/index.js +29 -0
- package/dist/esm/apps/compute/state-machines/compute-rule110.js +161 -0
- package/dist/esm/apps/compute/state-machines/index.js +5 -0
- package/dist/esm/apps/contracts/index.js +4 -4
- package/dist/esm/apps/contracts/state-machines/contract-agreement.js +128 -150
- package/dist/esm/apps/contracts/state-machines/contract-escrow.js +155 -176
- package/dist/esm/apps/contracts/state-machines/contract-universal.js +47 -59
- package/dist/esm/apps/corporate/index.js +2 -2
- package/dist/esm/apps/corporate/state-machines/corp-board.js +418 -484
- package/dist/esm/apps/corporate/state-machines/corp-entity.js +371 -443
- package/dist/esm/apps/corporate/state-machines/corp-securities.js +535 -650
- package/dist/esm/apps/corporate/state-machines/corp-shareholders.js +502 -606
- package/dist/esm/apps/governance/index.js +10 -10
- package/dist/esm/apps/governance/state-machines/dao-multisig.js +172 -211
- package/dist/esm/apps/governance/state-machines/dao-reputation.js +163 -216
- package/dist/esm/apps/governance/state-machines/dao-single.js +94 -94
- package/dist/esm/apps/governance/state-machines/dao-token.js +171 -225
- package/dist/esm/apps/governance/state-machines/governance-simple.js +187 -219
- package/dist/esm/apps/governance/state-machines/governance-universal.js +65 -65
- package/dist/esm/apps/identity/constants.js +18 -26
- package/dist/esm/apps/identity/index.js +8 -8
- package/dist/esm/apps/identity/state-machines/identity-agent.js +125 -159
- package/dist/esm/apps/identity/state-machines/identity-oracle.js +153 -171
- package/dist/esm/apps/identity/state-machines/identity-registry.js +91 -117
- package/dist/esm/apps/identity/state-machines/identity-universal.js +52 -58
- package/dist/esm/apps/index.js +9 -6
- package/dist/esm/apps/lending/assets.js +41 -17
- package/dist/esm/apps/lending/credit-scoring.js +6 -6
- package/dist/esm/apps/lending/eligibility.js +10 -26
- package/dist/esm/apps/lending/index.js +5 -5
- package/dist/esm/apps/lending/state-machines/lending-zk-loan.js +178 -157
- package/dist/esm/apps/markets/index.js +5 -5
- package/dist/esm/apps/markets/state-machines/market-auction.js +117 -136
- package/dist/esm/apps/markets/state-machines/market-crowdfund.js +124 -139
- package/dist/esm/apps/markets/state-machines/market-group-buy.js +160 -179
- package/dist/esm/apps/markets/state-machines/market-prediction.js +195 -229
- package/dist/esm/apps/markets/state-machines/market-universal.js +66 -81
- package/dist/esm/apps/oracles/index.js +3 -3
- package/dist/esm/apps/privacy/index.js +56 -0
- package/dist/esm/apps/privacy/state-machines/index.js +6 -0
- package/dist/esm/apps/privacy/state-machines/mixer-ddhRing.js +282 -0
- package/dist/esm/apps/privacy/state-machines/note-pool.js +470 -0
- package/dist/esm/apps/staked-pool/assets.js +91 -0
- package/dist/esm/apps/staked-pool/base.js +493 -0
- package/dist/esm/apps/staked-pool/consumer.js +49 -0
- package/dist/esm/apps/staked-pool/index.js +60 -0
- package/dist/esm/apps/staked-pool/state-machines/index.js +6 -0
- package/dist/esm/apps/staked-pool/state-machines/staked-pool-base.js +46 -0
- package/dist/esm/apps/staked-pool/state-machines/staked-pool-oracle.js +127 -0
- package/dist/esm/generated/google/protobuf/struct.js +1 -1
- package/dist/esm/generated/google/protobuf/timestamp.js +1 -1
- package/dist/esm/generated/ottochain/apps/contracts/v1/contract.js +1 -1
- package/dist/esm/generated/ottochain/apps/corporate/v1/corporate.js +1 -1
- package/dist/esm/generated/ottochain/apps/governance/v1/governance.js +1 -1
- package/dist/esm/generated/ottochain/apps/identity/v1/attestation.js +1 -1
- package/dist/esm/generated/ottochain/apps/identity/v1/identity.js +1 -1
- package/dist/esm/generated/ottochain/apps/markets/v1/market.js +1 -1
- package/dist/esm/generated/ottochain/v1/common.js +1 -1
- package/dist/esm/generated/ottochain/v1/fiber.js +40 -2
- package/dist/esm/generated/ottochain/v1/messages.js +1 -1
- package/dist/esm/generated/ottochain/v1/records.js +1 -1
- package/dist/esm/index.js +10 -4
- package/dist/esm/ottochain/genesis-manifest.js +6 -0
- package/dist/esm/ottochain/metagraph-client.js +16 -8
- package/dist/esm/ottochain/snapshot.js +2 -4
- package/dist/esm/ottochain/transaction.js +8 -0
- package/dist/esm/privacy/index.js +2 -2
- package/dist/esm/privacy/sealed-bid.js +87 -84
- package/dist/esm/privacy/shield-app.js +33 -33
- package/dist/esm/schema/effects.js +110 -0
- package/dist/esm/schema/fiber-app.js +127 -3
- package/dist/esm/schema/guard-lint.js +3 -12
- package/dist/esm/schema/guards.js +36 -37
- package/dist/esm/templates/asset-policy.js +182 -0
- package/dist/esm/templates/index.js +41 -0
- package/dist/esm/templates/machine.js +125 -0
- package/dist/esm/templates/migration.js +34 -0
- package/dist/esm/templates/state-shape.js +34 -0
- package/dist/esm/validation.js +1 -3
- package/dist/esm/zk/index.js +4 -4
- package/dist/types/apps/compute/index.d.ts +176 -0
- package/dist/types/apps/compute/state-machines/compute-rule110.d.ts +157 -0
- package/dist/types/apps/compute/state-machines/index.d.ts +5 -0
- package/dist/types/apps/contracts/index.d.ts +14 -14
- package/dist/types/apps/contracts/state-machines/contract-agreement.d.ts +3 -3
- package/dist/types/apps/contracts/state-machines/contract-escrow.d.ts +3 -3
- package/dist/types/apps/contracts/state-machines/contract-universal.d.ts +4 -4
- package/dist/types/apps/corporate/index.d.ts +162 -162
- package/dist/types/apps/corporate/state-machines/corp-board.d.ts +88 -88
- package/dist/types/apps/corporate/state-machines/corp-entity.d.ts +14 -14
- package/dist/types/apps/corporate/state-machines/corp-securities.d.ts +18 -18
- package/dist/types/apps/corporate/state-machines/corp-shareholders.d.ts +43 -43
- package/dist/types/apps/governance/index.d.ts +81 -81
- package/dist/types/apps/governance/state-machines/dao-multisig.d.ts +16 -16
- package/dist/types/apps/governance/state-machines/dao-reputation.d.ts +22 -22
- package/dist/types/apps/governance/state-machines/dao-token.d.ts +21 -21
- package/dist/types/apps/governance/state-machines/governance-simple.d.ts +11 -11
- package/dist/types/apps/governance/state-machines/governance-universal.d.ts +4 -4
- package/dist/types/apps/identity/constants.d.ts +2 -2
- package/dist/types/apps/identity/index.d.ts +70 -70
- package/dist/types/apps/identity/state-machines/identity-agent.d.ts +23 -23
- package/dist/types/apps/identity/state-machines/identity-oracle.d.ts +11 -11
- package/dist/types/apps/identity/state-machines/identity-registry.d.ts +27 -27
- package/dist/types/apps/identity/state-machines/identity-universal.d.ts +4 -4
- package/dist/types/apps/index.d.ts +9 -6
- package/dist/types/apps/lending/assets.d.ts +2 -2
- package/dist/types/apps/lending/credit-scoring.d.ts +5 -5
- package/dist/types/apps/lending/eligibility.d.ts +2 -2
- package/dist/types/apps/lending/index.d.ts +20 -12
- package/dist/types/apps/lending/state-machines/lending-zk-loan.d.ts +15 -7
- package/dist/types/apps/markets/index.d.ts +76 -76
- package/dist/types/apps/markets/state-machines/market-auction.d.ts +12 -12
- package/dist/types/apps/markets/state-machines/market-crowdfund.d.ts +19 -19
- package/dist/types/apps/markets/state-machines/market-group-buy.d.ts +18 -18
- package/dist/types/apps/markets/state-machines/market-prediction.d.ts +15 -15
- package/dist/types/apps/markets/state-machines/market-universal.d.ts +7 -7
- package/dist/types/apps/oracles/index.d.ts +1 -1
- package/dist/types/apps/privacy/index.d.ts +328 -0
- package/dist/types/apps/privacy/state-machines/index.d.ts +6 -0
- package/dist/types/apps/privacy/state-machines/mixer-ddhRing.d.ts +337 -0
- package/dist/types/apps/privacy/state-machines/note-pool.d.ts +196 -0
- package/dist/types/apps/staked-pool/assets.d.ts +53 -0
- package/dist/types/apps/staked-pool/base.d.ts +80 -0
- package/dist/types/apps/staked-pool/consumer.d.ts +29 -0
- package/dist/types/apps/staked-pool/index.d.ts +51 -0
- package/dist/types/apps/staked-pool/state-machines/index.d.ts +6 -0
- package/dist/types/apps/staked-pool/state-machines/staked-pool-base.d.ts +8 -0
- package/dist/types/apps/staked-pool/state-machines/staked-pool-oracle.d.ts +34 -0
- package/dist/types/generated/openapi.d.ts +13 -0
- package/dist/types/generated/ottochain/v1/fiber.d.ts +7 -0
- package/dist/types/index.d.ts +3 -3
- package/dist/types/openapi.d.ts +4 -2
- package/dist/types/ottochain/genesis-manifest.d.ts +6 -0
- package/dist/types/ottochain/transaction.d.ts +9 -1
- package/dist/types/ottochain/types.d.ts +1 -1
- package/dist/types/privacy/index.d.ts +2 -2
- package/dist/types/privacy/sealed-bid.d.ts +9 -9
- package/dist/types/privacy/shield-app.d.ts +1 -1
- package/dist/types/schema/effects.d.ts +107 -0
- package/dist/types/schema/fiber-app.d.ts +281 -0
- package/dist/types/schema/guards.d.ts +12 -0
- package/dist/types/templates/asset-policy.d.ts +119 -0
- package/dist/types/templates/index.d.ts +26 -0
- package/dist/types/templates/machine.d.ts +139 -0
- package/dist/types/templates/migration.d.ts +34 -0
- package/dist/types/templates/state-shape.d.ts +30 -0
- package/dist/types/zk/index.d.ts +4 -4
- package/package.json +31 -13
|
@@ -1,184 +1,179 @@
|
|
|
1
|
-
import { defineFiberApp } from
|
|
2
|
-
import { actorHasEntry, signerHasEntry, signerInSet, signerIsAnyParty, signerIsNotParty, } from
|
|
1
|
+
import { defineFiberApp } from '../../../schema/fiber-app.js';
|
|
2
|
+
import { actorHasEntry, signerHasEntry, signerInSet, signerIsAnyParty, signerIsNotParty, } from '../../../schema/guards.js';
|
|
3
3
|
/**
|
|
4
4
|
* Simple org governance: manage members, update rules, resolve disputes.
|
|
5
5
|
*/
|
|
6
6
|
export const govSimpleDef = defineFiberApp({
|
|
7
7
|
metadata: {
|
|
8
|
-
name:
|
|
9
|
-
app:
|
|
10
|
-
type:
|
|
11
|
-
version:
|
|
12
|
-
description:
|
|
8
|
+
name: 'Governance',
|
|
9
|
+
app: 'governance',
|
|
10
|
+
type: 'simple',
|
|
11
|
+
version: '1.0.0',
|
|
12
|
+
description: 'Simple org governance: manage members, update rules, resolve disputes',
|
|
13
13
|
},
|
|
14
14
|
createSchema: {
|
|
15
|
-
required: [
|
|
16
|
-
"admins",
|
|
17
|
-
"passingThreshold",
|
|
18
|
-
"disputeQuorum",
|
|
19
|
-
"votingPeriodMs",
|
|
20
|
-
],
|
|
15
|
+
required: ['admins', 'passingThreshold', 'disputeQuorum', 'votingPeriodMs'],
|
|
21
16
|
properties: {
|
|
22
17
|
admins: {
|
|
23
|
-
type:
|
|
24
|
-
description:
|
|
18
|
+
type: 'array',
|
|
19
|
+
description: 'Initial admin addresses',
|
|
25
20
|
immutable: false,
|
|
26
21
|
},
|
|
27
22
|
passingThreshold: {
|
|
28
|
-
type:
|
|
29
|
-
description:
|
|
23
|
+
type: 'number',
|
|
24
|
+
description: 'Fraction of members required to pass (0-1)',
|
|
30
25
|
},
|
|
31
26
|
disputeQuorum: {
|
|
32
|
-
type:
|
|
33
|
-
description:
|
|
27
|
+
type: 'number',
|
|
28
|
+
description: 'Min votes to resolve a dispute',
|
|
34
29
|
},
|
|
35
30
|
votingPeriodMs: {
|
|
36
|
-
type:
|
|
37
|
-
description:
|
|
31
|
+
type: 'number',
|
|
32
|
+
description: 'Voting window in milliseconds',
|
|
38
33
|
},
|
|
39
34
|
},
|
|
40
35
|
},
|
|
41
36
|
stateSchema: {
|
|
42
37
|
properties: {
|
|
43
|
-
admins: { type:
|
|
44
|
-
members: { type:
|
|
45
|
-
rules: { type:
|
|
46
|
-
history: { type:
|
|
47
|
-
proposal: { type:
|
|
48
|
-
votes: { type:
|
|
49
|
-
dispute: { type:
|
|
50
|
-
passingThreshold: { type:
|
|
51
|
-
disputeQuorum: { type:
|
|
52
|
-
votingPeriodMs: { type:
|
|
38
|
+
admins: { type: 'array', immutable: false },
|
|
39
|
+
members: { type: 'object', computed: true },
|
|
40
|
+
rules: { type: 'object', computed: true },
|
|
41
|
+
history: { type: 'array', computed: true },
|
|
42
|
+
proposal: { type: 'object' },
|
|
43
|
+
votes: { type: 'object', computed: true },
|
|
44
|
+
dispute: { type: 'object' },
|
|
45
|
+
passingThreshold: { type: 'number' },
|
|
46
|
+
disputeQuorum: { type: 'number' },
|
|
47
|
+
votingPeriodMs: { type: 'number' },
|
|
53
48
|
},
|
|
54
49
|
},
|
|
55
50
|
eventSchemas: {
|
|
56
51
|
add_member: {
|
|
57
|
-
description:
|
|
58
|
-
required: [
|
|
52
|
+
description: 'Add a member (admin only)',
|
|
53
|
+
required: ['member', 'role'],
|
|
59
54
|
properties: {
|
|
60
|
-
agent: { type:
|
|
61
|
-
member: { type:
|
|
62
|
-
role: { type:
|
|
55
|
+
agent: { type: 'address' },
|
|
56
|
+
member: { type: 'address' },
|
|
57
|
+
role: { type: 'string' },
|
|
63
58
|
},
|
|
64
59
|
},
|
|
65
60
|
remove_member: {
|
|
66
|
-
description:
|
|
67
|
-
required: [
|
|
61
|
+
description: 'Remove a member (admin only)',
|
|
62
|
+
required: ['member'],
|
|
68
63
|
properties: {
|
|
69
|
-
agent: { type:
|
|
70
|
-
member: { type:
|
|
64
|
+
agent: { type: 'address' },
|
|
65
|
+
member: { type: 'address' },
|
|
71
66
|
},
|
|
72
67
|
},
|
|
73
68
|
propose: {
|
|
74
|
-
description:
|
|
75
|
-
required: [
|
|
69
|
+
description: 'Submit a rule change proposal',
|
|
70
|
+
required: ['proposalId', 'type', 'changes'],
|
|
76
71
|
properties: {
|
|
77
|
-
agent: { type:
|
|
78
|
-
proposalId: { type:
|
|
79
|
-
type: { type:
|
|
80
|
-
changes: { type:
|
|
72
|
+
agent: { type: 'address' },
|
|
73
|
+
proposalId: { type: 'string' },
|
|
74
|
+
type: { type: 'string' },
|
|
75
|
+
changes: { type: 'object' },
|
|
81
76
|
},
|
|
82
77
|
},
|
|
83
78
|
vote: {
|
|
84
|
-
description:
|
|
85
|
-
required: [
|
|
79
|
+
description: 'Cast a vote on the active proposal or dispute',
|
|
80
|
+
required: ['vote'],
|
|
86
81
|
properties: {
|
|
87
|
-
agent: { type:
|
|
88
|
-
vote: { type:
|
|
89
|
-
ruling: { type:
|
|
82
|
+
agent: { type: 'address' },
|
|
83
|
+
vote: { type: 'string' },
|
|
84
|
+
ruling: { type: 'string' },
|
|
90
85
|
},
|
|
91
86
|
},
|
|
92
87
|
finalize: {
|
|
93
|
-
description:
|
|
88
|
+
description: 'Finalize the voting period (for-count derived from recorded ballots)',
|
|
94
89
|
properties: {},
|
|
95
90
|
},
|
|
96
91
|
file_dispute: {
|
|
97
|
-
description:
|
|
98
|
-
required: [
|
|
92
|
+
description: 'File a dispute against a member',
|
|
93
|
+
required: ['disputeId', 'defendant', 'claim'],
|
|
99
94
|
properties: {
|
|
100
|
-
agent: { type:
|
|
101
|
-
disputeId: { type:
|
|
102
|
-
defendant: { type:
|
|
103
|
-
claim: { type:
|
|
95
|
+
agent: { type: 'address' },
|
|
96
|
+
disputeId: { type: 'string' },
|
|
97
|
+
defendant: { type: 'address' },
|
|
98
|
+
claim: { type: 'string' },
|
|
104
99
|
},
|
|
105
100
|
},
|
|
106
101
|
submit_evidence: {
|
|
107
|
-
description:
|
|
108
|
-
required: [
|
|
102
|
+
description: 'Submit evidence in a dispute',
|
|
103
|
+
required: ['content'],
|
|
109
104
|
properties: {
|
|
110
|
-
agent: { type:
|
|
111
|
-
content: { type:
|
|
105
|
+
agent: { type: 'address' },
|
|
106
|
+
content: { type: 'string' },
|
|
112
107
|
},
|
|
113
108
|
},
|
|
114
109
|
resolve: {
|
|
115
|
-
description:
|
|
116
|
-
required: [
|
|
110
|
+
description: 'Resolve the active dispute',
|
|
111
|
+
required: ['ruling', 'remedy'],
|
|
117
112
|
properties: {
|
|
118
|
-
ruling: { type:
|
|
119
|
-
remedy: { type:
|
|
113
|
+
ruling: { type: 'string' },
|
|
114
|
+
remedy: { type: 'string' },
|
|
120
115
|
},
|
|
121
116
|
},
|
|
122
117
|
dissolve: {
|
|
123
|
-
description:
|
|
118
|
+
description: 'Dissolve the organization (requires every member to sign this op — verified unanimity)',
|
|
124
119
|
properties: {},
|
|
125
120
|
},
|
|
126
121
|
},
|
|
127
122
|
states: {
|
|
128
123
|
ACTIVE: {
|
|
129
|
-
id:
|
|
124
|
+
id: 'ACTIVE',
|
|
130
125
|
isFinal: false,
|
|
131
126
|
metadata: {
|
|
132
|
-
label:
|
|
133
|
-
description:
|
|
134
|
-
category:
|
|
127
|
+
label: 'Active',
|
|
128
|
+
description: 'Governance is idle and ready to accept a proposal',
|
|
129
|
+
category: 'initial',
|
|
135
130
|
},
|
|
136
131
|
},
|
|
137
132
|
VOTING: {
|
|
138
|
-
id:
|
|
133
|
+
id: 'VOTING',
|
|
139
134
|
isFinal: false,
|
|
140
135
|
metadata: {
|
|
141
|
-
label:
|
|
142
|
-
description:
|
|
143
|
-
category:
|
|
136
|
+
label: 'Voting',
|
|
137
|
+
description: 'A proposal is open for voting',
|
|
138
|
+
category: 'pending',
|
|
144
139
|
},
|
|
145
140
|
},
|
|
146
141
|
DISPUTE: {
|
|
147
|
-
id:
|
|
142
|
+
id: 'DISPUTE',
|
|
148
143
|
isFinal: false,
|
|
149
144
|
metadata: {
|
|
150
|
-
label:
|
|
151
|
-
description:
|
|
152
|
-
category:
|
|
145
|
+
label: 'Dispute',
|
|
146
|
+
description: 'A proposal outcome is being disputed',
|
|
147
|
+
category: 'pending',
|
|
153
148
|
},
|
|
154
149
|
},
|
|
155
150
|
DISSOLVED: {
|
|
156
|
-
id:
|
|
151
|
+
id: 'DISSOLVED',
|
|
157
152
|
isFinal: true,
|
|
158
153
|
metadata: {
|
|
159
|
-
label:
|
|
160
|
-
description:
|
|
161
|
-
category:
|
|
154
|
+
label: 'Dissolved',
|
|
155
|
+
description: 'Governance entity dissolved (terminal)',
|
|
156
|
+
category: 'terminal',
|
|
162
157
|
},
|
|
163
158
|
},
|
|
164
159
|
},
|
|
165
|
-
initialState:
|
|
160
|
+
initialState: 'ACTIVE',
|
|
166
161
|
transitions: [
|
|
167
162
|
// ACTIVE → ACTIVE: add member (admin only)
|
|
168
163
|
{
|
|
169
|
-
from:
|
|
170
|
-
to:
|
|
171
|
-
eventName:
|
|
172
|
-
guard: signerInSet(
|
|
164
|
+
from: 'ACTIVE',
|
|
165
|
+
to: 'ACTIVE',
|
|
166
|
+
eventName: 'add_member',
|
|
167
|
+
guard: signerInSet('state.admins'),
|
|
173
168
|
effect: {
|
|
174
169
|
merge: [
|
|
175
|
-
{ var:
|
|
170
|
+
{ var: 'state' },
|
|
176
171
|
{
|
|
177
172
|
members: {
|
|
178
173
|
set: [
|
|
179
|
-
{ var:
|
|
180
|
-
{ var:
|
|
181
|
-
{ role: { var:
|
|
174
|
+
{ var: 'state.members' },
|
|
175
|
+
{ var: 'event.member' },
|
|
176
|
+
{ role: { var: 'event.role' }, addedAt: { var: '$ordinal' } },
|
|
182
177
|
],
|
|
183
178
|
},
|
|
184
179
|
},
|
|
@@ -188,16 +183,16 @@ export const govSimpleDef = defineFiberApp({
|
|
|
188
183
|
},
|
|
189
184
|
// ACTIVE → ACTIVE: remove member (admin only)
|
|
190
185
|
{
|
|
191
|
-
from:
|
|
192
|
-
to:
|
|
193
|
-
eventName:
|
|
194
|
-
guard: signerInSet(
|
|
186
|
+
from: 'ACTIVE',
|
|
187
|
+
to: 'ACTIVE',
|
|
188
|
+
eventName: 'remove_member',
|
|
189
|
+
guard: signerInSet('state.admins'),
|
|
195
190
|
effect: {
|
|
196
191
|
merge: [
|
|
197
|
-
{ var:
|
|
192
|
+
{ var: 'state' },
|
|
198
193
|
{
|
|
199
194
|
members: {
|
|
200
|
-
unset: [{ var:
|
|
195
|
+
unset: [{ var: 'state.members' }, { var: 'event.member' }],
|
|
201
196
|
},
|
|
202
197
|
},
|
|
203
198
|
],
|
|
@@ -206,24 +201,24 @@ export const govSimpleDef = defineFiberApp({
|
|
|
206
201
|
},
|
|
207
202
|
// ACTIVE → VOTING: propose
|
|
208
203
|
{
|
|
209
|
-
from:
|
|
210
|
-
to:
|
|
211
|
-
eventName:
|
|
204
|
+
from: 'ACTIVE',
|
|
205
|
+
to: 'VOTING',
|
|
206
|
+
eventName: 'propose',
|
|
212
207
|
// S1/A2 coupled fix: a CHAIN-VERIFIED signer must be a member (getKey is not a
|
|
213
208
|
// JLVM opcode; signerHasEntry checks signer ∈ keys(state.members) via `has`).
|
|
214
|
-
guard: signerHasEntry(
|
|
209
|
+
guard: signerHasEntry('state.members'),
|
|
215
210
|
effect: {
|
|
216
211
|
merge: [
|
|
217
|
-
{ var:
|
|
212
|
+
{ var: 'state' },
|
|
218
213
|
{
|
|
219
214
|
proposal: {
|
|
220
|
-
id: { var:
|
|
221
|
-
type: { var:
|
|
222
|
-
changes: { var:
|
|
223
|
-
proposer: { var:
|
|
224
|
-
proposedAt: { var:
|
|
215
|
+
id: { var: 'event.proposalId' },
|
|
216
|
+
type: { var: 'event.type' },
|
|
217
|
+
changes: { var: 'event.changes' },
|
|
218
|
+
proposer: { var: 'event.agent' },
|
|
219
|
+
proposedAt: { var: '$ordinal' },
|
|
225
220
|
deadline: {
|
|
226
|
-
|
|
221
|
+
'+': [{ var: '$ordinal' }, { var: 'state.votingPeriodMs' }],
|
|
227
222
|
},
|
|
228
223
|
},
|
|
229
224
|
votes: {},
|
|
@@ -234,28 +229,25 @@ export const govSimpleDef = defineFiberApp({
|
|
|
234
229
|
},
|
|
235
230
|
// VOTING → VOTING: vote (member, no double-voting)
|
|
236
231
|
{
|
|
237
|
-
from:
|
|
238
|
-
to:
|
|
239
|
-
eventName:
|
|
232
|
+
from: 'VOTING',
|
|
233
|
+
to: 'VOTING',
|
|
234
|
+
eventName: 'vote',
|
|
240
235
|
// S1/A2 coupled fix: bind event.agent to a verified signer who is a member (actorHasEntry),
|
|
241
236
|
// and block a re-vote by that SAME bound actor — so the ballot is recorded under, and deduped
|
|
242
237
|
// on, the chain-verified voter. Without the binding, signerHasEntry only proves SOME signer is a
|
|
243
238
|
// member, letting one member stuff votes under arbitrary keys (set is the rc.5 map-write opcode).
|
|
244
239
|
guard: {
|
|
245
|
-
and: [
|
|
246
|
-
actorHasEntry("state.members"),
|
|
247
|
-
{ "!": [{ has: [{ var: "state.votes" }, { var: "event.agent" }] }] },
|
|
248
|
-
],
|
|
240
|
+
and: [actorHasEntry('state.members'), { '!': [{ has: [{ var: 'state.votes' }, { var: 'event.agent' }] }] }],
|
|
249
241
|
},
|
|
250
242
|
effect: {
|
|
251
243
|
merge: [
|
|
252
|
-
{ var:
|
|
244
|
+
{ var: 'state' },
|
|
253
245
|
{
|
|
254
246
|
votes: {
|
|
255
247
|
set: [
|
|
256
|
-
{ var:
|
|
257
|
-
{ var:
|
|
258
|
-
{ vote: { var:
|
|
248
|
+
{ var: 'state.votes' },
|
|
249
|
+
{ var: 'event.agent' },
|
|
250
|
+
{ vote: { var: 'event.vote' }, votedAt: { var: '$ordinal' } },
|
|
259
251
|
],
|
|
260
252
|
},
|
|
261
253
|
},
|
|
@@ -265,51 +257,42 @@ export const govSimpleDef = defineFiberApp({
|
|
|
265
257
|
},
|
|
266
258
|
// VOTING → ACTIVE: finalize (passed)
|
|
267
259
|
{
|
|
268
|
-
from:
|
|
269
|
-
to:
|
|
270
|
-
eventName:
|
|
260
|
+
from: 'VOTING',
|
|
261
|
+
to: 'ACTIVE',
|
|
262
|
+
eventName: 'finalize',
|
|
271
263
|
// S2/A2 coupled fix: the for-count is DERIVED from recorded ballots in
|
|
272
264
|
// state.votes (length of the "for" entries), never read from the attacker's
|
|
273
265
|
// event.forCount. members is a Map so its count is length(keys(members)).
|
|
274
266
|
guard: {
|
|
275
|
-
|
|
267
|
+
'>=': [
|
|
276
268
|
{
|
|
277
269
|
length: [
|
|
278
270
|
{
|
|
279
|
-
filter: [
|
|
280
|
-
{ values: [{ var: "state.votes" }] },
|
|
281
|
-
{ "===": [{ var: "vote" }, "for"] },
|
|
282
|
-
],
|
|
271
|
+
filter: [{ values: [{ var: 'state.votes' }] }, { '===': [{ var: 'vote' }, 'for'] }],
|
|
283
272
|
},
|
|
284
273
|
],
|
|
285
274
|
},
|
|
286
275
|
{
|
|
287
|
-
|
|
288
|
-
{ length: [{ keys: [{ var: "state.members" }] }] },
|
|
289
|
-
{ var: "state.passingThreshold" },
|
|
290
|
-
],
|
|
276
|
+
'*': [{ length: [{ keys: [{ var: 'state.members' }] }] }, { var: 'state.passingThreshold' }],
|
|
291
277
|
},
|
|
292
278
|
],
|
|
293
279
|
},
|
|
294
280
|
effect: {
|
|
295
281
|
merge: [
|
|
296
|
-
{ var:
|
|
282
|
+
{ var: 'state' },
|
|
297
283
|
{
|
|
298
284
|
rules: {
|
|
299
|
-
merge: [
|
|
300
|
-
{ var: "state.rules" },
|
|
301
|
-
{ var: "state.proposal.changes" },
|
|
302
|
-
],
|
|
285
|
+
merge: [{ var: 'state.rules' }, { var: 'state.proposal.changes' }],
|
|
303
286
|
},
|
|
304
287
|
history: {
|
|
305
288
|
cat: [
|
|
306
|
-
{ var:
|
|
289
|
+
{ var: 'state.history' },
|
|
307
290
|
[
|
|
308
291
|
{
|
|
309
|
-
type:
|
|
310
|
-
proposal: { var:
|
|
311
|
-
outcome:
|
|
312
|
-
finalizedAt: { var:
|
|
292
|
+
type: 'rule_change',
|
|
293
|
+
proposal: { var: 'state.proposal' },
|
|
294
|
+
outcome: 'passed',
|
|
295
|
+
finalizedAt: { var: '$ordinal' },
|
|
313
296
|
},
|
|
314
297
|
],
|
|
315
298
|
],
|
|
@@ -323,44 +306,38 @@ export const govSimpleDef = defineFiberApp({
|
|
|
323
306
|
},
|
|
324
307
|
// VOTING → ACTIVE: finalize (failed)
|
|
325
308
|
{
|
|
326
|
-
from:
|
|
327
|
-
to:
|
|
328
|
-
eventName:
|
|
309
|
+
from: 'VOTING',
|
|
310
|
+
to: 'ACTIVE',
|
|
311
|
+
eventName: 'finalize',
|
|
329
312
|
// S2/A2 coupled fix (failed arm): derive the for-count from recorded ballots in
|
|
330
313
|
// state.votes; never from event.forCount. members count = length(keys(members)).
|
|
331
314
|
guard: {
|
|
332
|
-
|
|
315
|
+
'<': [
|
|
333
316
|
{
|
|
334
317
|
length: [
|
|
335
318
|
{
|
|
336
|
-
filter: [
|
|
337
|
-
{ values: [{ var: "state.votes" }] },
|
|
338
|
-
{ "===": [{ var: "vote" }, "for"] },
|
|
339
|
-
],
|
|
319
|
+
filter: [{ values: [{ var: 'state.votes' }] }, { '===': [{ var: 'vote' }, 'for'] }],
|
|
340
320
|
},
|
|
341
321
|
],
|
|
342
322
|
},
|
|
343
323
|
{
|
|
344
|
-
|
|
345
|
-
{ length: [{ keys: [{ var: "state.members" }] }] },
|
|
346
|
-
{ var: "state.passingThreshold" },
|
|
347
|
-
],
|
|
324
|
+
'*': [{ length: [{ keys: [{ var: 'state.members' }] }] }, { var: 'state.passingThreshold' }],
|
|
348
325
|
},
|
|
349
326
|
],
|
|
350
327
|
},
|
|
351
328
|
effect: {
|
|
352
329
|
merge: [
|
|
353
|
-
{ var:
|
|
330
|
+
{ var: 'state' },
|
|
354
331
|
{
|
|
355
332
|
history: {
|
|
356
333
|
cat: [
|
|
357
|
-
{ var:
|
|
334
|
+
{ var: 'state.history' },
|
|
358
335
|
[
|
|
359
336
|
{
|
|
360
|
-
type:
|
|
361
|
-
proposal: { var:
|
|
362
|
-
outcome:
|
|
363
|
-
finalizedAt: { var:
|
|
337
|
+
type: 'rule_change',
|
|
338
|
+
proposal: { var: 'state.proposal' },
|
|
339
|
+
outcome: 'failed',
|
|
340
|
+
finalizedAt: { var: '$ordinal' },
|
|
364
341
|
},
|
|
365
342
|
],
|
|
366
343
|
],
|
|
@@ -374,22 +351,22 @@ export const govSimpleDef = defineFiberApp({
|
|
|
374
351
|
},
|
|
375
352
|
// ACTIVE → DISPUTE: file_dispute
|
|
376
353
|
{
|
|
377
|
-
from:
|
|
378
|
-
to:
|
|
379
|
-
eventName:
|
|
354
|
+
from: 'ACTIVE',
|
|
355
|
+
to: 'DISPUTE',
|
|
356
|
+
eventName: 'file_dispute',
|
|
380
357
|
// S1/A2 coupled fix: only a CHAIN-VERIFIED member may file (getKey is not a JLVM
|
|
381
358
|
// opcode; signerHasEntry checks signer ∈ keys(state.members) via `has`).
|
|
382
|
-
guard: signerHasEntry(
|
|
359
|
+
guard: signerHasEntry('state.members'),
|
|
383
360
|
effect: {
|
|
384
361
|
merge: [
|
|
385
|
-
{ var:
|
|
362
|
+
{ var: 'state' },
|
|
386
363
|
{
|
|
387
364
|
dispute: {
|
|
388
|
-
id: { var:
|
|
389
|
-
plaintiff: { var:
|
|
390
|
-
defendant: { var:
|
|
391
|
-
claim: { var:
|
|
392
|
-
filedAt: { var:
|
|
365
|
+
id: { var: 'event.disputeId' },
|
|
366
|
+
plaintiff: { var: 'event.agent' },
|
|
367
|
+
defendant: { var: 'event.defendant' },
|
|
368
|
+
claim: { var: 'event.claim' },
|
|
369
|
+
filedAt: { var: '$ordinal' },
|
|
393
370
|
evidence: [],
|
|
394
371
|
},
|
|
395
372
|
votes: {},
|
|
@@ -400,29 +377,26 @@ export const govSimpleDef = defineFiberApp({
|
|
|
400
377
|
},
|
|
401
378
|
// DISPUTE → DISPUTE: submit_evidence (plaintiff or defendant)
|
|
402
379
|
{
|
|
403
|
-
from:
|
|
404
|
-
to:
|
|
405
|
-
eventName:
|
|
406
|
-
guard: signerIsAnyParty([
|
|
407
|
-
"state.dispute.plaintiff",
|
|
408
|
-
"state.dispute.defendant",
|
|
409
|
-
]),
|
|
380
|
+
from: 'DISPUTE',
|
|
381
|
+
to: 'DISPUTE',
|
|
382
|
+
eventName: 'submit_evidence',
|
|
383
|
+
guard: signerIsAnyParty(['state.dispute.plaintiff', 'state.dispute.defendant']),
|
|
410
384
|
effect: {
|
|
411
385
|
merge: [
|
|
412
|
-
{ var:
|
|
386
|
+
{ var: 'state' },
|
|
413
387
|
{
|
|
414
388
|
dispute: {
|
|
415
389
|
merge: [
|
|
416
|
-
{ var:
|
|
390
|
+
{ var: 'state.dispute' },
|
|
417
391
|
{
|
|
418
392
|
evidence: {
|
|
419
393
|
cat: [
|
|
420
|
-
{ var:
|
|
394
|
+
{ var: 'state.dispute.evidence' },
|
|
421
395
|
[
|
|
422
396
|
{
|
|
423
|
-
from: { var:
|
|
424
|
-
content: { var:
|
|
425
|
-
at: { var:
|
|
397
|
+
from: { var: 'event.agent' },
|
|
398
|
+
content: { var: 'event.content' },
|
|
399
|
+
at: { var: '$ordinal' },
|
|
426
400
|
},
|
|
427
401
|
],
|
|
428
402
|
],
|
|
@@ -437,32 +411,32 @@ export const govSimpleDef = defineFiberApp({
|
|
|
437
411
|
},
|
|
438
412
|
// DISPUTE → DISPUTE: vote (member, not party, no double-vote)
|
|
439
413
|
{
|
|
440
|
-
from:
|
|
441
|
-
to:
|
|
442
|
-
eventName:
|
|
414
|
+
from: 'DISPUTE',
|
|
415
|
+
to: 'DISPUTE',
|
|
416
|
+
eventName: 'vote',
|
|
443
417
|
// S1/A2 coupled fix: bind event.agent to a verified member (actorHasEntry), exclude the parties,
|
|
444
418
|
// and block a re-vote by that SAME bound actor — so the dispute ballot is recorded under, and
|
|
445
419
|
// deduped on, the chain-verified voter (set is the rc.5 map-write opcode; signerIsNotParty still
|
|
446
420
|
// excludes any signer who is a party, which covers the bound actor).
|
|
447
421
|
guard: {
|
|
448
422
|
and: [
|
|
449
|
-
actorHasEntry(
|
|
450
|
-
signerIsNotParty(
|
|
451
|
-
signerIsNotParty(
|
|
452
|
-
{
|
|
423
|
+
actorHasEntry('state.members'),
|
|
424
|
+
signerIsNotParty('state.dispute.plaintiff'),
|
|
425
|
+
signerIsNotParty('state.dispute.defendant'),
|
|
426
|
+
{ '!': [{ has: [{ var: 'state.votes' }, { var: 'event.agent' }] }] },
|
|
453
427
|
],
|
|
454
428
|
},
|
|
455
429
|
effect: {
|
|
456
430
|
merge: [
|
|
457
|
-
{ var:
|
|
431
|
+
{ var: 'state' },
|
|
458
432
|
{
|
|
459
433
|
votes: {
|
|
460
434
|
set: [
|
|
461
|
-
{ var:
|
|
462
|
-
{ var:
|
|
435
|
+
{ var: 'state.votes' },
|
|
436
|
+
{ var: 'event.agent' },
|
|
463
437
|
{
|
|
464
|
-
ruling: { var:
|
|
465
|
-
votedAt: { var:
|
|
438
|
+
ruling: { var: 'event.ruling' },
|
|
439
|
+
votedAt: { var: '$ordinal' },
|
|
466
440
|
},
|
|
467
441
|
],
|
|
468
442
|
},
|
|
@@ -473,31 +447,28 @@ export const govSimpleDef = defineFiberApp({
|
|
|
473
447
|
},
|
|
474
448
|
// DISPUTE → ACTIVE: resolve (quorum met)
|
|
475
449
|
{
|
|
476
|
-
from:
|
|
477
|
-
to:
|
|
478
|
-
eventName:
|
|
450
|
+
from: 'DISPUTE',
|
|
451
|
+
to: 'ACTIVE',
|
|
452
|
+
eventName: 'resolve',
|
|
479
453
|
// A2 fix: count recorded ballots. votes is a Map, and `length` rejects Maps, so
|
|
480
454
|
// count its keys: length(keys(state.votes)). (size is not a JLVM opcode.)
|
|
481
455
|
guard: {
|
|
482
|
-
|
|
483
|
-
{ length: [{ keys: [{ var: "state.votes" }] }] },
|
|
484
|
-
{ var: "state.disputeQuorum" },
|
|
485
|
-
],
|
|
456
|
+
'>=': [{ length: [{ keys: [{ var: 'state.votes' }] }] }, { var: 'state.disputeQuorum' }],
|
|
486
457
|
},
|
|
487
458
|
effect: {
|
|
488
459
|
merge: [
|
|
489
|
-
{ var:
|
|
460
|
+
{ var: 'state' },
|
|
490
461
|
{
|
|
491
462
|
history: {
|
|
492
463
|
cat: [
|
|
493
|
-
{ var:
|
|
464
|
+
{ var: 'state.history' },
|
|
494
465
|
[
|
|
495
466
|
{
|
|
496
|
-
type:
|
|
497
|
-
dispute: { var:
|
|
498
|
-
ruling: { var:
|
|
499
|
-
remedy: { var:
|
|
500
|
-
resolvedAt: { var:
|
|
467
|
+
type: 'dispute',
|
|
468
|
+
dispute: { var: 'state.dispute' },
|
|
469
|
+
ruling: { var: 'event.ruling' },
|
|
470
|
+
remedy: { var: 'event.remedy' },
|
|
471
|
+
resolvedAt: { var: '$ordinal' },
|
|
501
472
|
},
|
|
502
473
|
],
|
|
503
474
|
],
|
|
@@ -511,31 +482,28 @@ export const govSimpleDef = defineFiberApp({
|
|
|
511
482
|
},
|
|
512
483
|
// ACTIVE → DISSOLVED: dissolve (90% approval)
|
|
513
484
|
{
|
|
514
|
-
from:
|
|
515
|
-
to:
|
|
516
|
-
eventName:
|
|
485
|
+
from: 'ACTIVE',
|
|
486
|
+
to: 'DISSOLVED',
|
|
487
|
+
eventName: 'dissolve',
|
|
517
488
|
// S2/A2 coupled fix: dissolution must not trust an attacker-supplied
|
|
518
489
|
// approvalCount. Derive consent from the CHAIN-VERIFIED signers — every member
|
|
519
490
|
// (a key in state.members) must be among proofs[].address, with a non-empty
|
|
520
491
|
// belt. members is a Map, so iterate keys(members); size is not a JLVM opcode.
|
|
521
492
|
guard: {
|
|
522
493
|
and: [
|
|
523
|
-
{
|
|
494
|
+
{ '>': [{ length: [{ keys: [{ var: 'state.members' }] }] }, 0] },
|
|
524
495
|
{
|
|
525
496
|
all: [
|
|
526
|
-
{ keys: [{ var:
|
|
497
|
+
{ keys: [{ var: 'state.members' }] },
|
|
527
498
|
{
|
|
528
|
-
in: [
|
|
529
|
-
{ var: "" },
|
|
530
|
-
{ map: [{ var: "proofs" }, { var: "address" }] },
|
|
531
|
-
],
|
|
499
|
+
in: [{ var: '' }, { map: [{ var: 'proofs' }, { var: 'address' }] }],
|
|
532
500
|
},
|
|
533
501
|
],
|
|
534
502
|
},
|
|
535
503
|
],
|
|
536
504
|
},
|
|
537
505
|
effect: {
|
|
538
|
-
merge: [{ var:
|
|
506
|
+
merge: [{ var: 'state' }, { dissolvedAt: { var: '$ordinal' } }],
|
|
539
507
|
},
|
|
540
508
|
dependencies: [],
|
|
541
509
|
},
|