@ottochain/sdk 2.4.0 → 2.6.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 +21 -3
- package/dist/cjs/ottochain/genesis-manifest.js +6 -0
- package/dist/cjs/ottochain/metagraph-client.js +63 -11
- 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 +145 -1
- package/dist/cjs/schema/fiber-app.js +139 -5
- 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 +63 -11
- 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 +137 -0
- package/dist/esm/schema/fiber-app.js +134 -5
- 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/index.d.ts +1 -1
- package/dist/types/ottochain/metagraph-client.d.ts +69 -15
- 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 +132 -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
|
@@ -8,201 +8,186 @@ const guards_js_1 = require("../../../schema/guards.js");
|
|
|
8
8
|
*/
|
|
9
9
|
exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
10
10
|
metadata: {
|
|
11
|
-
name:
|
|
12
|
-
app:
|
|
13
|
-
type:
|
|
14
|
-
version:
|
|
15
|
-
description:
|
|
16
|
-
category:
|
|
11
|
+
name: 'TokenDAO',
|
|
12
|
+
app: 'governance',
|
|
13
|
+
type: 'daoToken',
|
|
14
|
+
version: '1.0.0',
|
|
15
|
+
description: 'Token-weighted voting. Voting power proportional to token holdings.',
|
|
16
|
+
category: 'governance/dao',
|
|
17
17
|
crossReferences: {
|
|
18
|
-
Identity:
|
|
19
|
-
Token:
|
|
20
|
-
Contract:
|
|
21
|
-
Treasury:
|
|
18
|
+
Identity: 'voter verification',
|
|
19
|
+
Token: 'balance snapshots',
|
|
20
|
+
Contract: 'action execution',
|
|
21
|
+
Treasury: 'fund management',
|
|
22
22
|
},
|
|
23
23
|
},
|
|
24
24
|
createSchema: {
|
|
25
|
-
required: [
|
|
26
|
-
"balances",
|
|
27
|
-
"proposalThreshold",
|
|
28
|
-
"quorum",
|
|
29
|
-
"votingPeriodMs",
|
|
30
|
-
"timelockMs",
|
|
31
|
-
],
|
|
25
|
+
required: ['balances', 'proposalThreshold', 'quorum', 'votingPeriodMs', 'timelockMs'],
|
|
32
26
|
properties: {
|
|
33
27
|
balances: {
|
|
34
|
-
type:
|
|
35
|
-
description:
|
|
28
|
+
type: 'object',
|
|
29
|
+
description: 'Initial token balances by address',
|
|
36
30
|
},
|
|
37
31
|
proposalThreshold: {
|
|
38
|
-
type:
|
|
39
|
-
description:
|
|
32
|
+
type: 'number',
|
|
33
|
+
description: 'Min token balance to submit a proposal',
|
|
40
34
|
},
|
|
41
35
|
quorum: {
|
|
42
|
-
type:
|
|
43
|
-
description:
|
|
36
|
+
type: 'number',
|
|
37
|
+
description: 'Min total votes (weighted) to pass',
|
|
44
38
|
},
|
|
45
39
|
votingPeriodMs: {
|
|
46
|
-
type:
|
|
47
|
-
description:
|
|
40
|
+
type: 'number',
|
|
41
|
+
description: 'Voting window in milliseconds',
|
|
48
42
|
},
|
|
49
43
|
timelockMs: {
|
|
50
|
-
type:
|
|
51
|
-
description:
|
|
44
|
+
type: 'number',
|
|
45
|
+
description: 'Time-lock delay before execution',
|
|
52
46
|
},
|
|
53
47
|
},
|
|
54
48
|
},
|
|
55
49
|
stateSchema: {
|
|
56
50
|
properties: {
|
|
57
|
-
balances: { type:
|
|
58
|
-
delegations: { type:
|
|
59
|
-
proposalThreshold: { type:
|
|
60
|
-
quorum: { type:
|
|
61
|
-
votingPeriodMs: { type:
|
|
62
|
-
timelockMs: { type:
|
|
63
|
-
proposal: { type:
|
|
64
|
-
votes: { type:
|
|
65
|
-
executedProposals: { type:
|
|
66
|
-
rejectedProposals: { type:
|
|
67
|
-
cancelledProposals: { type:
|
|
51
|
+
balances: { type: 'object' },
|
|
52
|
+
delegations: { type: 'object', computed: true },
|
|
53
|
+
proposalThreshold: { type: 'number' },
|
|
54
|
+
quorum: { type: 'number' },
|
|
55
|
+
votingPeriodMs: { type: 'number' },
|
|
56
|
+
timelockMs: { type: 'number' },
|
|
57
|
+
proposal: { type: 'object' },
|
|
58
|
+
votes: { type: 'object', computed: true },
|
|
59
|
+
executedProposals: { type: 'array', computed: true },
|
|
60
|
+
rejectedProposals: { type: 'array', computed: true },
|
|
61
|
+
cancelledProposals: { type: 'array', computed: true },
|
|
68
62
|
},
|
|
69
63
|
},
|
|
70
64
|
eventSchemas: {
|
|
71
65
|
propose: {
|
|
72
|
-
description:
|
|
73
|
-
required: [
|
|
74
|
-
"proposalId",
|
|
75
|
-
"title",
|
|
76
|
-
"description",
|
|
77
|
-
"actionType",
|
|
78
|
-
"payload",
|
|
79
|
-
],
|
|
66
|
+
description: 'Submit a proposal (requires >= proposalThreshold tokens)',
|
|
67
|
+
required: ['proposalId', 'title', 'description', 'actionType', 'payload'],
|
|
80
68
|
properties: {
|
|
81
|
-
agent: { type:
|
|
82
|
-
proposalId: { type:
|
|
83
|
-
title: { type:
|
|
84
|
-
description: { type:
|
|
85
|
-
actionType: { type:
|
|
86
|
-
payload: { type:
|
|
87
|
-
snapshotBlock: { type:
|
|
69
|
+
agent: { type: 'address' },
|
|
70
|
+
proposalId: { type: 'string' },
|
|
71
|
+
title: { type: 'string' },
|
|
72
|
+
description: { type: 'string' },
|
|
73
|
+
actionType: { type: 'string' },
|
|
74
|
+
payload: { type: 'object' },
|
|
75
|
+
snapshotBlock: { type: 'string' },
|
|
88
76
|
},
|
|
89
77
|
},
|
|
90
78
|
vote: {
|
|
91
|
-
description:
|
|
92
|
-
required: [
|
|
79
|
+
description: 'Cast a token-weighted vote (must hold tokens, no double-vote, within window)',
|
|
80
|
+
required: ['vote'],
|
|
93
81
|
properties: {
|
|
94
|
-
agent: { type:
|
|
95
|
-
vote: { type:
|
|
82
|
+
agent: { type: 'address' },
|
|
83
|
+
vote: { type: 'string', description: '"for" | "against" | "abstain"' },
|
|
96
84
|
},
|
|
97
85
|
},
|
|
98
86
|
queue: {
|
|
99
|
-
description:
|
|
87
|
+
description: 'Queue passing proposal into timelock (voting ended, for > against, quorum met)',
|
|
100
88
|
properties: {},
|
|
101
89
|
},
|
|
102
90
|
execute: {
|
|
103
|
-
description:
|
|
91
|
+
description: 'Execute queued proposal after timelock expires',
|
|
104
92
|
properties: {},
|
|
105
93
|
},
|
|
106
94
|
reject: {
|
|
107
|
-
description:
|
|
95
|
+
description: 'Formally reject a failed proposal (voting ended, failed conditions)',
|
|
108
96
|
properties: {},
|
|
109
97
|
},
|
|
110
98
|
cancel: {
|
|
111
|
-
description:
|
|
99
|
+
description: 'Cancel a queued proposal (proposer only)',
|
|
112
100
|
properties: {
|
|
113
|
-
agent: { type:
|
|
101
|
+
agent: { type: 'address' },
|
|
114
102
|
},
|
|
115
103
|
},
|
|
116
104
|
delegate: {
|
|
117
|
-
description:
|
|
118
|
-
required: [
|
|
105
|
+
description: 'Delegate voting power to another address',
|
|
106
|
+
required: ['delegateTo'],
|
|
119
107
|
properties: {
|
|
120
|
-
agent: { type:
|
|
121
|
-
delegateTo: { type:
|
|
108
|
+
agent: { type: 'address' },
|
|
109
|
+
delegateTo: { type: 'address' },
|
|
122
110
|
},
|
|
123
111
|
},
|
|
124
112
|
undelegate: {
|
|
125
|
-
description:
|
|
113
|
+
description: 'Revoke delegation',
|
|
126
114
|
properties: {
|
|
127
|
-
agent: { type:
|
|
115
|
+
agent: { type: 'address' },
|
|
128
116
|
},
|
|
129
117
|
},
|
|
130
118
|
},
|
|
131
119
|
states: {
|
|
132
120
|
ACTIVE: {
|
|
133
|
-
id:
|
|
121
|
+
id: 'ACTIVE',
|
|
134
122
|
isFinal: false,
|
|
135
123
|
metadata: {
|
|
136
|
-
label:
|
|
137
|
-
description:
|
|
138
|
-
category:
|
|
124
|
+
label: 'Active',
|
|
125
|
+
description: 'DAO is idle and ready to accept a proposal',
|
|
126
|
+
category: 'initial',
|
|
139
127
|
},
|
|
140
128
|
},
|
|
141
129
|
VOTING: {
|
|
142
|
-
id:
|
|
130
|
+
id: 'VOTING',
|
|
143
131
|
isFinal: false,
|
|
144
132
|
metadata: {
|
|
145
|
-
label:
|
|
146
|
-
description:
|
|
147
|
-
category:
|
|
133
|
+
label: 'Voting',
|
|
134
|
+
description: 'Token holders are voting on the active proposal',
|
|
135
|
+
category: 'pending',
|
|
148
136
|
},
|
|
149
137
|
},
|
|
150
138
|
QUEUED: {
|
|
151
|
-
id:
|
|
139
|
+
id: 'QUEUED',
|
|
152
140
|
isFinal: false,
|
|
153
141
|
metadata: {
|
|
154
|
-
label:
|
|
155
|
-
description:
|
|
156
|
-
category:
|
|
142
|
+
label: 'Queued',
|
|
143
|
+
description: 'Passed proposal queued in timelock before execution',
|
|
144
|
+
category: 'pending',
|
|
157
145
|
},
|
|
158
146
|
},
|
|
159
147
|
DISSOLVED: {
|
|
160
|
-
id:
|
|
148
|
+
id: 'DISSOLVED',
|
|
161
149
|
isFinal: true,
|
|
162
150
|
metadata: {
|
|
163
|
-
label:
|
|
164
|
-
description:
|
|
165
|
-
category:
|
|
151
|
+
label: 'Dissolved',
|
|
152
|
+
description: 'Token DAO dissolved (terminal)',
|
|
153
|
+
category: 'terminal',
|
|
166
154
|
},
|
|
167
155
|
},
|
|
168
156
|
},
|
|
169
|
-
initialState:
|
|
157
|
+
initialState: 'ACTIVE',
|
|
170
158
|
transitions: [
|
|
171
159
|
// ACTIVE → VOTING: propose (enough tokens)
|
|
172
160
|
{
|
|
173
|
-
from:
|
|
174
|
-
to:
|
|
175
|
-
eventName:
|
|
161
|
+
from: 'ACTIVE',
|
|
162
|
+
to: 'VOTING',
|
|
163
|
+
eventName: 'propose',
|
|
176
164
|
// S1/A2 coupled fix: a CHAIN-VERIFIED signer must hold >= proposalThreshold
|
|
177
165
|
// tokens. Iterate proofs[].address and read each balance via `get` (getKey is
|
|
178
166
|
// not a JLVM opcode); never trust the forgeable event.agent for the lookup.
|
|
179
167
|
guard: {
|
|
180
168
|
some: [
|
|
181
|
-
{ map: [{ var:
|
|
169
|
+
{ map: [{ var: 'proofs' }, { var: 'address' }] },
|
|
182
170
|
{
|
|
183
|
-
|
|
184
|
-
{ get: [{ var: "state.balances" }, { var: "" }] },
|
|
185
|
-
{ var: "state.proposalThreshold" },
|
|
186
|
-
],
|
|
171
|
+
'>=': [{ get: [{ var: 'state.balances' }, { var: '' }] }, { var: 'state.proposalThreshold' }],
|
|
187
172
|
},
|
|
188
173
|
],
|
|
189
174
|
},
|
|
190
175
|
effect: {
|
|
191
176
|
merge: [
|
|
192
|
-
{ var:
|
|
177
|
+
{ var: 'state' },
|
|
193
178
|
{
|
|
194
179
|
proposal: {
|
|
195
|
-
id: { var:
|
|
196
|
-
title: { var:
|
|
197
|
-
description: { var:
|
|
198
|
-
actionType: { var:
|
|
199
|
-
payload: { var:
|
|
200
|
-
proposer: { var:
|
|
201
|
-
proposedAt: { var:
|
|
180
|
+
id: { var: 'event.proposalId' },
|
|
181
|
+
title: { var: 'event.title' },
|
|
182
|
+
description: { var: 'event.description' },
|
|
183
|
+
actionType: { var: 'event.actionType' },
|
|
184
|
+
payload: { var: 'event.payload' },
|
|
185
|
+
proposer: { var: 'event.agent' },
|
|
186
|
+
proposedAt: { var: '$ordinal' },
|
|
202
187
|
votingEndsAt: {
|
|
203
|
-
|
|
188
|
+
'+': [{ var: '$ordinal' }, { var: 'state.votingPeriodMs' }],
|
|
204
189
|
},
|
|
205
|
-
snapshotBlock: { var:
|
|
190
|
+
snapshotBlock: { var: 'event.snapshotBlock' },
|
|
206
191
|
},
|
|
207
192
|
votes: { for: 0, against: 0, abstain: 0, voters: {} },
|
|
208
193
|
},
|
|
@@ -212,9 +197,9 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
212
197
|
},
|
|
213
198
|
// VOTING → VOTING: vote (token holder, no double-vote, within window)
|
|
214
199
|
{
|
|
215
|
-
from:
|
|
216
|
-
to:
|
|
217
|
-
eventName:
|
|
200
|
+
from: 'VOTING',
|
|
201
|
+
to: 'VOTING',
|
|
202
|
+
eventName: 'vote',
|
|
218
203
|
// S1+A2 coupled fix: bind event.agent to a verified signer (actorIsSigner) so the
|
|
219
204
|
// balance lookup, the no-double-vote check, and the voters write below all key on the
|
|
220
205
|
// CHAIN-VERIFIED actor — never a forgeable claim. getKey→get (value), getKey→has
|
|
@@ -223,69 +208,57 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
223
208
|
and: [
|
|
224
209
|
(0, guards_js_1.actorIsSigner)(),
|
|
225
210
|
{
|
|
226
|
-
|
|
227
|
-
{ get: [{ var: "state.balances" }, { var: "event.agent" }] },
|
|
228
|
-
0,
|
|
229
|
-
],
|
|
211
|
+
'>': [{ get: [{ var: 'state.balances' }, { var: 'event.agent' }] }, 0],
|
|
230
212
|
},
|
|
231
213
|
{
|
|
232
|
-
|
|
214
|
+
'!': [
|
|
233
215
|
{
|
|
234
|
-
has: [{ var:
|
|
216
|
+
has: [{ var: 'state.votes.voters' }, { var: 'event.agent' }],
|
|
235
217
|
},
|
|
236
218
|
],
|
|
237
219
|
},
|
|
238
220
|
{
|
|
239
|
-
|
|
221
|
+
'<=': [{ var: '$ordinal' }, { var: 'state.proposal.votingEndsAt' }],
|
|
240
222
|
},
|
|
241
223
|
],
|
|
242
224
|
},
|
|
243
225
|
effect: {
|
|
244
226
|
merge: [
|
|
245
|
-
{ var:
|
|
227
|
+
{ var: 'state' },
|
|
246
228
|
{
|
|
247
229
|
votes: {
|
|
248
230
|
merge: [
|
|
249
|
-
{ var:
|
|
231
|
+
{ var: 'state.votes' },
|
|
250
232
|
{
|
|
251
233
|
if: [
|
|
252
|
-
{
|
|
234
|
+
{ '===': [{ var: 'event.vote' }, 'for'] },
|
|
253
235
|
{
|
|
254
236
|
for: {
|
|
255
|
-
|
|
256
|
-
{ var:
|
|
237
|
+
'+': [
|
|
238
|
+
{ var: 'state.votes.for' },
|
|
257
239
|
{
|
|
258
|
-
get: [
|
|
259
|
-
{ var: "state.balances" },
|
|
260
|
-
{ var: "event.agent" },
|
|
261
|
-
],
|
|
240
|
+
get: [{ var: 'state.balances' }, { var: 'event.agent' }],
|
|
262
241
|
},
|
|
263
242
|
],
|
|
264
243
|
},
|
|
265
244
|
},
|
|
266
|
-
{
|
|
245
|
+
{ '===': [{ var: 'event.vote' }, 'against'] },
|
|
267
246
|
{
|
|
268
247
|
against: {
|
|
269
|
-
|
|
270
|
-
{ var:
|
|
248
|
+
'+': [
|
|
249
|
+
{ var: 'state.votes.against' },
|
|
271
250
|
{
|
|
272
|
-
get: [
|
|
273
|
-
{ var: "state.balances" },
|
|
274
|
-
{ var: "event.agent" },
|
|
275
|
-
],
|
|
251
|
+
get: [{ var: 'state.balances' }, { var: 'event.agent' }],
|
|
276
252
|
},
|
|
277
253
|
],
|
|
278
254
|
},
|
|
279
255
|
},
|
|
280
256
|
{
|
|
281
257
|
abstain: {
|
|
282
|
-
|
|
283
|
-
{ var:
|
|
258
|
+
'+': [
|
|
259
|
+
{ var: 'state.votes.abstain' },
|
|
284
260
|
{
|
|
285
|
-
get: [
|
|
286
|
-
{ var: "state.balances" },
|
|
287
|
-
{ var: "event.agent" },
|
|
288
|
-
],
|
|
261
|
+
get: [{ var: 'state.balances' }, { var: 'event.agent' }],
|
|
289
262
|
},
|
|
290
263
|
],
|
|
291
264
|
},
|
|
@@ -295,17 +268,14 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
295
268
|
{
|
|
296
269
|
voters: {
|
|
297
270
|
set: [
|
|
298
|
-
{ var:
|
|
299
|
-
{ var:
|
|
271
|
+
{ var: 'state.votes.voters' },
|
|
272
|
+
{ var: 'event.agent' },
|
|
300
273
|
{
|
|
301
|
-
vote: { var:
|
|
274
|
+
vote: { var: 'event.vote' },
|
|
302
275
|
weight: {
|
|
303
|
-
get: [
|
|
304
|
-
{ var: "state.balances" },
|
|
305
|
-
{ var: "event.agent" },
|
|
306
|
-
],
|
|
276
|
+
get: [{ var: 'state.balances' }, { var: 'event.agent' }],
|
|
307
277
|
},
|
|
308
|
-
votedAt: { var:
|
|
278
|
+
votedAt: { var: '$ordinal' },
|
|
309
279
|
},
|
|
310
280
|
],
|
|
311
281
|
},
|
|
@@ -319,40 +289,36 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
319
289
|
},
|
|
320
290
|
// VOTING → QUEUED: queue (voting ended, for > against, quorum met)
|
|
321
291
|
{
|
|
322
|
-
from:
|
|
323
|
-
to:
|
|
324
|
-
eventName:
|
|
292
|
+
from: 'VOTING',
|
|
293
|
+
to: 'QUEUED',
|
|
294
|
+
eventName: 'queue',
|
|
325
295
|
guard: {
|
|
326
296
|
and: [
|
|
327
297
|
{
|
|
328
|
-
|
|
298
|
+
'>': [{ var: '$ordinal' }, { var: 'state.proposal.votingEndsAt' }],
|
|
329
299
|
},
|
|
330
|
-
{
|
|
300
|
+
{ '>': [{ var: 'state.votes.for' }, { var: 'state.votes.against' }] },
|
|
331
301
|
{
|
|
332
|
-
|
|
302
|
+
'>=': [
|
|
333
303
|
{
|
|
334
|
-
|
|
335
|
-
{ var: "state.votes.for" },
|
|
336
|
-
{ var: "state.votes.against" },
|
|
337
|
-
{ var: "state.votes.abstain" },
|
|
338
|
-
],
|
|
304
|
+
'+': [{ var: 'state.votes.for' }, { var: 'state.votes.against' }, { var: 'state.votes.abstain' }],
|
|
339
305
|
},
|
|
340
|
-
{ var:
|
|
306
|
+
{ var: 'state.quorum' },
|
|
341
307
|
],
|
|
342
308
|
},
|
|
343
309
|
],
|
|
344
310
|
},
|
|
345
311
|
effect: {
|
|
346
312
|
merge: [
|
|
347
|
-
{ var:
|
|
313
|
+
{ var: 'state' },
|
|
348
314
|
{
|
|
349
315
|
proposal: {
|
|
350
316
|
merge: [
|
|
351
|
-
{ var:
|
|
317
|
+
{ var: 'state.proposal' },
|
|
352
318
|
{
|
|
353
|
-
queuedAt: { var:
|
|
319
|
+
queuedAt: { var: '$ordinal' },
|
|
354
320
|
executableAt: {
|
|
355
|
-
|
|
321
|
+
'+': [{ var: '$ordinal' }, { var: 'state.timelockMs' }],
|
|
356
322
|
},
|
|
357
323
|
},
|
|
358
324
|
],
|
|
@@ -364,26 +330,26 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
364
330
|
},
|
|
365
331
|
// QUEUED → ACTIVE: execute (timelock expired)
|
|
366
332
|
{
|
|
367
|
-
from:
|
|
368
|
-
to:
|
|
369
|
-
eventName:
|
|
333
|
+
from: 'QUEUED',
|
|
334
|
+
to: 'ACTIVE',
|
|
335
|
+
eventName: 'execute',
|
|
370
336
|
guard: {
|
|
371
|
-
|
|
337
|
+
'>=': [{ var: '$ordinal' }, { var: 'state.proposal.executableAt' }],
|
|
372
338
|
},
|
|
373
339
|
effect: {
|
|
374
340
|
merge: [
|
|
375
|
-
{ var:
|
|
341
|
+
{ var: 'state' },
|
|
376
342
|
{
|
|
377
343
|
executedProposals: {
|
|
378
344
|
cat: [
|
|
379
|
-
{ var:
|
|
345
|
+
{ var: 'state.executedProposals' },
|
|
380
346
|
[
|
|
381
347
|
{
|
|
382
348
|
merge: [
|
|
383
|
-
{ var:
|
|
349
|
+
{ var: 'state.proposal' },
|
|
384
350
|
{
|
|
385
|
-
votes: { var:
|
|
386
|
-
executedAt: { var:
|
|
351
|
+
votes: { var: 'state.votes' },
|
|
352
|
+
executedAt: { var: '$ordinal' },
|
|
387
353
|
},
|
|
388
354
|
],
|
|
389
355
|
},
|
|
@@ -396,9 +362,9 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
396
362
|
// under the reserved `_emit` key (extracted as an EmittedEvent, stripped from state).
|
|
397
363
|
_emit: [
|
|
398
364
|
{
|
|
399
|
-
name:
|
|
400
|
-
data: { proposalId: { var:
|
|
401
|
-
destination:
|
|
365
|
+
name: 'proposal_executed',
|
|
366
|
+
data: { proposalId: { var: 'state.proposal.id' } },
|
|
367
|
+
destination: 'external',
|
|
402
368
|
},
|
|
403
369
|
],
|
|
404
370
|
},
|
|
@@ -408,32 +374,25 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
408
374
|
},
|
|
409
375
|
// VOTING → ACTIVE: reject (voting ended, failed quorum or for <= against)
|
|
410
376
|
{
|
|
411
|
-
from:
|
|
412
|
-
to:
|
|
413
|
-
eventName:
|
|
377
|
+
from: 'VOTING',
|
|
378
|
+
to: 'ACTIVE',
|
|
379
|
+
eventName: 'reject',
|
|
414
380
|
guard: {
|
|
415
381
|
and: [
|
|
416
382
|
{
|
|
417
|
-
|
|
383
|
+
'>': [{ var: '$ordinal' }, { var: 'state.proposal.votingEndsAt' }],
|
|
418
384
|
},
|
|
419
385
|
{
|
|
420
386
|
or: [
|
|
421
387
|
{
|
|
422
|
-
|
|
423
|
-
{ var: "state.votes.for" },
|
|
424
|
-
{ var: "state.votes.against" },
|
|
425
|
-
],
|
|
388
|
+
'<=': [{ var: 'state.votes.for' }, { var: 'state.votes.against' }],
|
|
426
389
|
},
|
|
427
390
|
{
|
|
428
|
-
|
|
391
|
+
'<': [
|
|
429
392
|
{
|
|
430
|
-
|
|
431
|
-
{ var: "state.votes.for" },
|
|
432
|
-
{ var: "state.votes.against" },
|
|
433
|
-
{ var: "state.votes.abstain" },
|
|
434
|
-
],
|
|
393
|
+
'+': [{ var: 'state.votes.for' }, { var: 'state.votes.against' }, { var: 'state.votes.abstain' }],
|
|
435
394
|
},
|
|
436
|
-
{ var:
|
|
395
|
+
{ var: 'state.quorum' },
|
|
437
396
|
],
|
|
438
397
|
},
|
|
439
398
|
],
|
|
@@ -442,18 +401,18 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
442
401
|
},
|
|
443
402
|
effect: {
|
|
444
403
|
merge: [
|
|
445
|
-
{ var:
|
|
404
|
+
{ var: 'state' },
|
|
446
405
|
{
|
|
447
406
|
rejectedProposals: {
|
|
448
407
|
cat: [
|
|
449
|
-
{ var:
|
|
408
|
+
{ var: 'state.rejectedProposals' },
|
|
450
409
|
[
|
|
451
410
|
{
|
|
452
411
|
merge: [
|
|
453
|
-
{ var:
|
|
412
|
+
{ var: 'state.proposal' },
|
|
454
413
|
{
|
|
455
|
-
votes: { var:
|
|
456
|
-
rejectedAt: { var:
|
|
414
|
+
votes: { var: 'state.votes' },
|
|
415
|
+
rejectedAt: { var: '$ordinal' },
|
|
457
416
|
},
|
|
458
417
|
],
|
|
459
418
|
},
|
|
@@ -469,23 +428,20 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
469
428
|
},
|
|
470
429
|
// QUEUED → ACTIVE: cancel (proposer only)
|
|
471
430
|
{
|
|
472
|
-
from:
|
|
473
|
-
to:
|
|
474
|
-
eventName:
|
|
475
|
-
guard: (0, guards_js_1.signerIsParty)(
|
|
431
|
+
from: 'QUEUED',
|
|
432
|
+
to: 'ACTIVE',
|
|
433
|
+
eventName: 'cancel',
|
|
434
|
+
guard: (0, guards_js_1.signerIsParty)('state.proposal.proposer'),
|
|
476
435
|
effect: {
|
|
477
436
|
merge: [
|
|
478
|
-
{ var:
|
|
437
|
+
{ var: 'state' },
|
|
479
438
|
{
|
|
480
439
|
cancelledProposals: {
|
|
481
440
|
cat: [
|
|
482
|
-
{ var:
|
|
441
|
+
{ var: 'state.cancelledProposals' },
|
|
483
442
|
[
|
|
484
443
|
{
|
|
485
|
-
merge: [
|
|
486
|
-
{ var: "state.proposal" },
|
|
487
|
-
{ cancelledAt: { var: "$ordinal" } },
|
|
488
|
-
],
|
|
444
|
+
merge: [{ var: 'state.proposal' }, { cancelledAt: { var: '$ordinal' } }],
|
|
489
445
|
},
|
|
490
446
|
],
|
|
491
447
|
],
|
|
@@ -499,32 +455,25 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
499
455
|
},
|
|
500
456
|
// ACTIVE → ACTIVE: delegate
|
|
501
457
|
{
|
|
502
|
-
from:
|
|
503
|
-
to:
|
|
504
|
-
eventName:
|
|
458
|
+
from: 'ACTIVE',
|
|
459
|
+
to: 'ACTIVE',
|
|
460
|
+
eventName: 'delegate',
|
|
505
461
|
// S1+A2: bind event.agent to a verified signer so the delegation is written under the
|
|
506
462
|
// CHAIN-VERIFIED delegator's key (set), keyed on the same actor whose balance is checked (get).
|
|
507
463
|
guard: {
|
|
508
464
|
and: [
|
|
509
465
|
(0, guards_js_1.actorIsSigner)(),
|
|
510
466
|
{
|
|
511
|
-
|
|
512
|
-
{ get: [{ var: "state.balances" }, { var: "event.agent" }] },
|
|
513
|
-
0,
|
|
514
|
-
],
|
|
467
|
+
'>': [{ get: [{ var: 'state.balances' }, { var: 'event.agent' }] }, 0],
|
|
515
468
|
},
|
|
516
469
|
],
|
|
517
470
|
},
|
|
518
471
|
effect: {
|
|
519
472
|
merge: [
|
|
520
|
-
{ var:
|
|
473
|
+
{ var: 'state' },
|
|
521
474
|
{
|
|
522
475
|
delegations: {
|
|
523
|
-
set: [
|
|
524
|
-
{ var: "state.delegations" },
|
|
525
|
-
{ var: "event.agent" },
|
|
526
|
-
{ var: "event.delegateTo" },
|
|
527
|
-
],
|
|
476
|
+
set: [{ var: 'state.delegations' }, { var: 'event.agent' }, { var: 'event.delegateTo' }],
|
|
528
477
|
},
|
|
529
478
|
},
|
|
530
479
|
],
|
|
@@ -533,24 +482,21 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
533
482
|
},
|
|
534
483
|
// ACTIVE → ACTIVE: undelegate
|
|
535
484
|
{
|
|
536
|
-
from:
|
|
537
|
-
to:
|
|
538
|
-
eventName:
|
|
485
|
+
from: 'ACTIVE',
|
|
486
|
+
to: 'ACTIVE',
|
|
487
|
+
eventName: 'undelegate',
|
|
539
488
|
// S1+A2: bind event.agent to a verified signer; presence via has, removal via unset (the rc.5
|
|
540
489
|
// map opcodes — getKey/deleteKey do not exist). Only the verified delegator can clear their own
|
|
541
490
|
// delegation.
|
|
542
491
|
guard: {
|
|
543
|
-
and: [
|
|
544
|
-
(0, guards_js_1.actorIsSigner)(),
|
|
545
|
-
{ has: [{ var: "state.delegations" }, { var: "event.agent" }] },
|
|
546
|
-
],
|
|
492
|
+
and: [(0, guards_js_1.actorIsSigner)(), { has: [{ var: 'state.delegations' }, { var: 'event.agent' }] }],
|
|
547
493
|
},
|
|
548
494
|
effect: {
|
|
549
495
|
merge: [
|
|
550
|
-
{ var:
|
|
496
|
+
{ var: 'state' },
|
|
551
497
|
{
|
|
552
498
|
delegations: {
|
|
553
|
-
unset: [{ var:
|
|
499
|
+
unset: [{ var: 'state.delegations' }, { var: 'event.agent' }],
|
|
554
500
|
},
|
|
555
501
|
},
|
|
556
502
|
],
|