@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
|
* Single owner controls all actions. Simplest governance model.
|
|
4
5
|
*/
|
|
@@ -75,9 +76,33 @@ export const daoSingleDef = defineFiberApp({
|
|
|
75
76
|
},
|
|
76
77
|
},
|
|
77
78
|
states: {
|
|
78
|
-
ACTIVE: {
|
|
79
|
-
|
|
80
|
-
|
|
79
|
+
ACTIVE: {
|
|
80
|
+
id: "ACTIVE",
|
|
81
|
+
isFinal: false,
|
|
82
|
+
metadata: {
|
|
83
|
+
label: "Active",
|
|
84
|
+
description: "Single owner controls the DAO and may act or transfer ownership",
|
|
85
|
+
category: "initial",
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
TRANSFERRING: {
|
|
89
|
+
id: "TRANSFERRING",
|
|
90
|
+
isFinal: false,
|
|
91
|
+
metadata: {
|
|
92
|
+
label: "Transferring",
|
|
93
|
+
description: "Ownership transfer proposed; awaiting acceptance",
|
|
94
|
+
category: "pending",
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
DISSOLVED: {
|
|
98
|
+
id: "DISSOLVED",
|
|
99
|
+
isFinal: true,
|
|
100
|
+
metadata: {
|
|
101
|
+
label: "Dissolved",
|
|
102
|
+
description: "DAO dissolved by its owner (terminal)",
|
|
103
|
+
category: "terminal",
|
|
104
|
+
},
|
|
105
|
+
},
|
|
81
106
|
},
|
|
82
107
|
initialState: "ACTIVE",
|
|
83
108
|
transitions: [
|
|
@@ -86,7 +111,7 @@ export const daoSingleDef = defineFiberApp({
|
|
|
86
111
|
from: "ACTIVE",
|
|
87
112
|
to: "ACTIVE",
|
|
88
113
|
eventName: "execute",
|
|
89
|
-
guard:
|
|
114
|
+
guard: signerIsParty("state.owner"),
|
|
90
115
|
effect: {
|
|
91
116
|
merge: [
|
|
92
117
|
{ var: "state" },
|
|
@@ -99,15 +124,23 @@ export const daoSingleDef = defineFiberApp({
|
|
|
99
124
|
id: { var: "event.actionId" },
|
|
100
125
|
type: { var: "event.actionType" },
|
|
101
126
|
payload: { var: "event.payload" },
|
|
102
|
-
executedAt: { var: "$
|
|
127
|
+
executedAt: { var: "$ordinal" },
|
|
103
128
|
},
|
|
104
129
|
],
|
|
105
130
|
],
|
|
106
131
|
},
|
|
132
|
+
// A3 fix: transition-level `emits` is dropped by the chain; emit from INSIDE the effect
|
|
133
|
+
// under the reserved `_emit` key (extracted as an EmittedEvent, stripped from state).
|
|
134
|
+
_emit: [
|
|
135
|
+
{
|
|
136
|
+
name: "action_executed",
|
|
137
|
+
data: { actionId: { var: "event.actionId" } },
|
|
138
|
+
destination: "external",
|
|
139
|
+
},
|
|
140
|
+
],
|
|
107
141
|
},
|
|
108
142
|
],
|
|
109
143
|
},
|
|
110
|
-
emits: [{ event: "action_executed", to: "external" }],
|
|
111
144
|
dependencies: [],
|
|
112
145
|
},
|
|
113
146
|
// ACTIVE → TRANSFERRING: transfer_ownership (owner only)
|
|
@@ -115,13 +148,13 @@ export const daoSingleDef = defineFiberApp({
|
|
|
115
148
|
from: "ACTIVE",
|
|
116
149
|
to: "TRANSFERRING",
|
|
117
150
|
eventName: "transfer_ownership",
|
|
118
|
-
guard:
|
|
151
|
+
guard: signerIsParty("state.owner"),
|
|
119
152
|
effect: {
|
|
120
153
|
merge: [
|
|
121
154
|
{ var: "state" },
|
|
122
155
|
{
|
|
123
156
|
pendingOwner: { var: "event.newOwner" },
|
|
124
|
-
transferInitiatedAt: { var: "$
|
|
157
|
+
transferInitiatedAt: { var: "$ordinal" },
|
|
125
158
|
},
|
|
126
159
|
],
|
|
127
160
|
},
|
|
@@ -132,7 +165,7 @@ export const daoSingleDef = defineFiberApp({
|
|
|
132
165
|
from: "TRANSFERRING",
|
|
133
166
|
to: "ACTIVE",
|
|
134
167
|
eventName: "accept_ownership",
|
|
135
|
-
guard:
|
|
168
|
+
guard: signerIsParty("state.pendingOwner"),
|
|
136
169
|
effect: {
|
|
137
170
|
merge: [
|
|
138
171
|
{ var: "state" },
|
|
@@ -147,15 +180,23 @@ export const daoSingleDef = defineFiberApp({
|
|
|
147
180
|
{
|
|
148
181
|
from: { var: "state.owner" },
|
|
149
182
|
to: { var: "state.pendingOwner" },
|
|
150
|
-
at: { var: "$
|
|
183
|
+
at: { var: "$ordinal" },
|
|
151
184
|
},
|
|
152
185
|
],
|
|
153
186
|
],
|
|
154
187
|
},
|
|
188
|
+
// A3 fix: transition-level `emits` is dropped by the chain; emit from INSIDE the effect
|
|
189
|
+
// under the reserved `_emit` key (extracted as an EmittedEvent, stripped from state).
|
|
190
|
+
_emit: [
|
|
191
|
+
{
|
|
192
|
+
name: "ownership_transferred",
|
|
193
|
+
data: { var: "event" },
|
|
194
|
+
destination: "Identity",
|
|
195
|
+
},
|
|
196
|
+
],
|
|
155
197
|
},
|
|
156
198
|
],
|
|
157
199
|
},
|
|
158
|
-
emits: [{ event: "ownership_transferred", to: "Identity" }],
|
|
159
200
|
dependencies: [],
|
|
160
201
|
},
|
|
161
202
|
// TRANSFERRING → ACTIVE: cancel_transfer (owner only)
|
|
@@ -163,7 +204,7 @@ export const daoSingleDef = defineFiberApp({
|
|
|
163
204
|
from: "TRANSFERRING",
|
|
164
205
|
to: "ACTIVE",
|
|
165
206
|
eventName: "cancel_transfer",
|
|
166
|
-
guard:
|
|
207
|
+
guard: signerIsParty("state.owner"),
|
|
167
208
|
effect: {
|
|
168
209
|
merge: [
|
|
169
210
|
{ var: "state" },
|
|
@@ -180,12 +221,12 @@ export const daoSingleDef = defineFiberApp({
|
|
|
180
221
|
from: "ACTIVE",
|
|
181
222
|
to: "DISSOLVED",
|
|
182
223
|
eventName: "dissolve",
|
|
183
|
-
guard:
|
|
224
|
+
guard: signerIsParty("state.owner"),
|
|
184
225
|
effect: {
|
|
185
226
|
merge: [
|
|
186
227
|
{ var: "state" },
|
|
187
228
|
{
|
|
188
|
-
dissolvedAt: { var: "$
|
|
229
|
+
dissolvedAt: { var: "$ordinal" },
|
|
189
230
|
status: "DISSOLVED",
|
|
190
231
|
},
|
|
191
232
|
],
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { defineFiberApp } from "../../../schema/fiber-app.js";
|
|
2
|
+
import { signerIsParty, actorIsSigner } from "../../../schema/guards.js";
|
|
2
3
|
/**
|
|
3
4
|
* Token-weighted voting. Voting power proportional to token holdings.
|
|
4
5
|
*/
|
|
@@ -125,10 +126,42 @@ export const daoTokenDef = defineFiberApp({
|
|
|
125
126
|
},
|
|
126
127
|
},
|
|
127
128
|
states: {
|
|
128
|
-
ACTIVE: {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
129
|
+
ACTIVE: {
|
|
130
|
+
id: "ACTIVE",
|
|
131
|
+
isFinal: false,
|
|
132
|
+
metadata: {
|
|
133
|
+
label: "Active",
|
|
134
|
+
description: "DAO is idle and ready to accept a proposal",
|
|
135
|
+
category: "initial",
|
|
136
|
+
},
|
|
137
|
+
},
|
|
138
|
+
VOTING: {
|
|
139
|
+
id: "VOTING",
|
|
140
|
+
isFinal: false,
|
|
141
|
+
metadata: {
|
|
142
|
+
label: "Voting",
|
|
143
|
+
description: "Token holders are voting on the active proposal",
|
|
144
|
+
category: "pending",
|
|
145
|
+
},
|
|
146
|
+
},
|
|
147
|
+
QUEUED: {
|
|
148
|
+
id: "QUEUED",
|
|
149
|
+
isFinal: false,
|
|
150
|
+
metadata: {
|
|
151
|
+
label: "Queued",
|
|
152
|
+
description: "Passed proposal queued in timelock before execution",
|
|
153
|
+
category: "pending",
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
DISSOLVED: {
|
|
157
|
+
id: "DISSOLVED",
|
|
158
|
+
isFinal: true,
|
|
159
|
+
metadata: {
|
|
160
|
+
label: "Dissolved",
|
|
161
|
+
description: "Token DAO dissolved (terminal)",
|
|
162
|
+
category: "terminal",
|
|
163
|
+
},
|
|
164
|
+
},
|
|
132
165
|
},
|
|
133
166
|
initialState: "ACTIVE",
|
|
134
167
|
transitions: [
|
|
@@ -137,10 +170,18 @@ export const daoTokenDef = defineFiberApp({
|
|
|
137
170
|
from: "ACTIVE",
|
|
138
171
|
to: "VOTING",
|
|
139
172
|
eventName: "propose",
|
|
173
|
+
// S1/A2 coupled fix: a CHAIN-VERIFIED signer must hold >= proposalThreshold
|
|
174
|
+
// tokens. Iterate proofs[].address and read each balance via `get` (getKey is
|
|
175
|
+
// not a JLVM opcode); never trust the forgeable event.agent for the lookup.
|
|
140
176
|
guard: {
|
|
141
|
-
|
|
142
|
-
{
|
|
143
|
-
{
|
|
177
|
+
some: [
|
|
178
|
+
{ map: [{ var: "proofs" }, { var: "address" }] },
|
|
179
|
+
{
|
|
180
|
+
">=": [
|
|
181
|
+
{ get: [{ var: "state.balances" }, { var: "" }] },
|
|
182
|
+
{ var: "state.proposalThreshold" },
|
|
183
|
+
],
|
|
184
|
+
},
|
|
144
185
|
],
|
|
145
186
|
},
|
|
146
187
|
effect: {
|
|
@@ -154,9 +195,9 @@ export const daoTokenDef = defineFiberApp({
|
|
|
154
195
|
actionType: { var: "event.actionType" },
|
|
155
196
|
payload: { var: "event.payload" },
|
|
156
197
|
proposer: { var: "event.agent" },
|
|
157
|
-
proposedAt: { var: "$
|
|
198
|
+
proposedAt: { var: "$ordinal" },
|
|
158
199
|
votingEndsAt: {
|
|
159
|
-
"+": [{ var: "$
|
|
200
|
+
"+": [{ var: "$ordinal" }, { var: "state.votingPeriodMs" }],
|
|
160
201
|
},
|
|
161
202
|
snapshotBlock: { var: "event.snapshotBlock" },
|
|
162
203
|
},
|
|
@@ -171,26 +212,28 @@ export const daoTokenDef = defineFiberApp({
|
|
|
171
212
|
from: "VOTING",
|
|
172
213
|
to: "VOTING",
|
|
173
214
|
eventName: "vote",
|
|
215
|
+
// S1+A2 coupled fix: bind event.agent to a verified signer (actorIsSigner) so the
|
|
216
|
+
// balance lookup, the no-double-vote check, and the voters write below all key on the
|
|
217
|
+
// CHAIN-VERIFIED actor — never a forgeable claim. getKey→get (value), getKey→has
|
|
218
|
+
// (presence), setKey→set are the rc.5 map opcodes (getKey/setKey do not exist).
|
|
174
219
|
guard: {
|
|
175
220
|
and: [
|
|
221
|
+
actorIsSigner(),
|
|
176
222
|
{
|
|
177
223
|
">": [
|
|
178
|
-
{
|
|
224
|
+
{ get: [{ var: "state.balances" }, { var: "event.agent" }] },
|
|
179
225
|
0,
|
|
180
226
|
],
|
|
181
227
|
},
|
|
182
228
|
{
|
|
183
229
|
"!": [
|
|
184
230
|
{
|
|
185
|
-
|
|
231
|
+
has: [{ var: "state.votes.voters" }, { var: "event.agent" }],
|
|
186
232
|
},
|
|
187
233
|
],
|
|
188
234
|
},
|
|
189
235
|
{
|
|
190
|
-
"<=": [
|
|
191
|
-
{ var: "$timestamp" },
|
|
192
|
-
{ var: "state.proposal.votingEndsAt" },
|
|
193
|
-
],
|
|
236
|
+
"<=": [{ var: "$ordinal" }, { var: "state.proposal.votingEndsAt" }],
|
|
194
237
|
},
|
|
195
238
|
],
|
|
196
239
|
},
|
|
@@ -209,7 +252,7 @@ export const daoTokenDef = defineFiberApp({
|
|
|
209
252
|
"+": [
|
|
210
253
|
{ var: "state.votes.for" },
|
|
211
254
|
{
|
|
212
|
-
|
|
255
|
+
get: [
|
|
213
256
|
{ var: "state.balances" },
|
|
214
257
|
{ var: "event.agent" },
|
|
215
258
|
],
|
|
@@ -223,7 +266,7 @@ export const daoTokenDef = defineFiberApp({
|
|
|
223
266
|
"+": [
|
|
224
267
|
{ var: "state.votes.against" },
|
|
225
268
|
{
|
|
226
|
-
|
|
269
|
+
get: [
|
|
227
270
|
{ var: "state.balances" },
|
|
228
271
|
{ var: "event.agent" },
|
|
229
272
|
],
|
|
@@ -236,7 +279,7 @@ export const daoTokenDef = defineFiberApp({
|
|
|
236
279
|
"+": [
|
|
237
280
|
{ var: "state.votes.abstain" },
|
|
238
281
|
{
|
|
239
|
-
|
|
282
|
+
get: [
|
|
240
283
|
{ var: "state.balances" },
|
|
241
284
|
{ var: "event.agent" },
|
|
242
285
|
],
|
|
@@ -248,18 +291,18 @@ export const daoTokenDef = defineFiberApp({
|
|
|
248
291
|
},
|
|
249
292
|
{
|
|
250
293
|
voters: {
|
|
251
|
-
|
|
294
|
+
set: [
|
|
252
295
|
{ var: "state.votes.voters" },
|
|
253
296
|
{ var: "event.agent" },
|
|
254
297
|
{
|
|
255
298
|
vote: { var: "event.vote" },
|
|
256
299
|
weight: {
|
|
257
|
-
|
|
300
|
+
get: [
|
|
258
301
|
{ var: "state.balances" },
|
|
259
302
|
{ var: "event.agent" },
|
|
260
303
|
],
|
|
261
304
|
},
|
|
262
|
-
votedAt: { var: "$
|
|
305
|
+
votedAt: { var: "$ordinal" },
|
|
263
306
|
},
|
|
264
307
|
],
|
|
265
308
|
},
|
|
@@ -279,10 +322,7 @@ export const daoTokenDef = defineFiberApp({
|
|
|
279
322
|
guard: {
|
|
280
323
|
and: [
|
|
281
324
|
{
|
|
282
|
-
">": [
|
|
283
|
-
{ var: "$timestamp" },
|
|
284
|
-
{ var: "state.proposal.votingEndsAt" },
|
|
285
|
-
],
|
|
325
|
+
">": [{ var: "$ordinal" }, { var: "state.proposal.votingEndsAt" }],
|
|
286
326
|
},
|
|
287
327
|
{ ">": [{ var: "state.votes.for" }, { var: "state.votes.against" }] },
|
|
288
328
|
{
|
|
@@ -307,9 +347,9 @@ export const daoTokenDef = defineFiberApp({
|
|
|
307
347
|
merge: [
|
|
308
348
|
{ var: "state.proposal" },
|
|
309
349
|
{
|
|
310
|
-
queuedAt: { var: "$
|
|
350
|
+
queuedAt: { var: "$ordinal" },
|
|
311
351
|
executableAt: {
|
|
312
|
-
"+": [{ var: "$
|
|
352
|
+
"+": [{ var: "$ordinal" }, { var: "state.timelockMs" }],
|
|
313
353
|
},
|
|
314
354
|
},
|
|
315
355
|
],
|
|
@@ -325,7 +365,7 @@ export const daoTokenDef = defineFiberApp({
|
|
|
325
365
|
to: "ACTIVE",
|
|
326
366
|
eventName: "execute",
|
|
327
367
|
guard: {
|
|
328
|
-
">=": [{ var: "$
|
|
368
|
+
">=": [{ var: "$ordinal" }, { var: "state.proposal.executableAt" }],
|
|
329
369
|
},
|
|
330
370
|
effect: {
|
|
331
371
|
merge: [
|
|
@@ -340,7 +380,7 @@ export const daoTokenDef = defineFiberApp({
|
|
|
340
380
|
{ var: "state.proposal" },
|
|
341
381
|
{
|
|
342
382
|
votes: { var: "state.votes" },
|
|
343
|
-
executedAt: { var: "$
|
|
383
|
+
executedAt: { var: "$ordinal" },
|
|
344
384
|
},
|
|
345
385
|
],
|
|
346
386
|
},
|
|
@@ -349,10 +389,18 @@ export const daoTokenDef = defineFiberApp({
|
|
|
349
389
|
},
|
|
350
390
|
proposal: null,
|
|
351
391
|
votes: null,
|
|
392
|
+
// A3 fix: transition-level `emits` is dropped by the chain; emit from INSIDE the effect
|
|
393
|
+
// under the reserved `_emit` key (extracted as an EmittedEvent, stripped from state).
|
|
394
|
+
_emit: [
|
|
395
|
+
{
|
|
396
|
+
name: "proposal_executed",
|
|
397
|
+
data: { proposalId: { var: "state.proposal.id" } },
|
|
398
|
+
destination: "external",
|
|
399
|
+
},
|
|
400
|
+
],
|
|
352
401
|
},
|
|
353
402
|
],
|
|
354
403
|
},
|
|
355
|
-
emits: [{ event: "proposal_executed", to: "external" }],
|
|
356
404
|
dependencies: [],
|
|
357
405
|
},
|
|
358
406
|
// VOTING → ACTIVE: reject (voting ended, failed quorum or for <= against)
|
|
@@ -363,10 +411,7 @@ export const daoTokenDef = defineFiberApp({
|
|
|
363
411
|
guard: {
|
|
364
412
|
and: [
|
|
365
413
|
{
|
|
366
|
-
">": [
|
|
367
|
-
{ var: "$timestamp" },
|
|
368
|
-
{ var: "state.proposal.votingEndsAt" },
|
|
369
|
-
],
|
|
414
|
+
">": [{ var: "$ordinal" }, { var: "state.proposal.votingEndsAt" }],
|
|
370
415
|
},
|
|
371
416
|
{
|
|
372
417
|
or: [
|
|
@@ -405,7 +450,7 @@ export const daoTokenDef = defineFiberApp({
|
|
|
405
450
|
{ var: "state.proposal" },
|
|
406
451
|
{
|
|
407
452
|
votes: { var: "state.votes" },
|
|
408
|
-
rejectedAt: { var: "$
|
|
453
|
+
rejectedAt: { var: "$ordinal" },
|
|
409
454
|
},
|
|
410
455
|
],
|
|
411
456
|
},
|
|
@@ -424,9 +469,7 @@ export const daoTokenDef = defineFiberApp({
|
|
|
424
469
|
from: "QUEUED",
|
|
425
470
|
to: "ACTIVE",
|
|
426
471
|
eventName: "cancel",
|
|
427
|
-
guard:
|
|
428
|
-
"===": [{ var: "event.agent" }, { var: "state.proposal.proposer" }],
|
|
429
|
-
},
|
|
472
|
+
guard: signerIsParty("state.proposal.proposer"),
|
|
430
473
|
effect: {
|
|
431
474
|
merge: [
|
|
432
475
|
{ var: "state" },
|
|
@@ -438,7 +481,7 @@ export const daoTokenDef = defineFiberApp({
|
|
|
438
481
|
{
|
|
439
482
|
merge: [
|
|
440
483
|
{ var: "state.proposal" },
|
|
441
|
-
{ cancelledAt: { var: "$
|
|
484
|
+
{ cancelledAt: { var: "$ordinal" } },
|
|
442
485
|
],
|
|
443
486
|
},
|
|
444
487
|
],
|
|
@@ -456,10 +499,17 @@ export const daoTokenDef = defineFiberApp({
|
|
|
456
499
|
from: "ACTIVE",
|
|
457
500
|
to: "ACTIVE",
|
|
458
501
|
eventName: "delegate",
|
|
502
|
+
// S1+A2: bind event.agent to a verified signer so the delegation is written under the
|
|
503
|
+
// CHAIN-VERIFIED delegator's key (set), keyed on the same actor whose balance is checked (get).
|
|
459
504
|
guard: {
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
505
|
+
and: [
|
|
506
|
+
actorIsSigner(),
|
|
507
|
+
{
|
|
508
|
+
">": [
|
|
509
|
+
{ get: [{ var: "state.balances" }, { var: "event.agent" }] },
|
|
510
|
+
0,
|
|
511
|
+
],
|
|
512
|
+
},
|
|
463
513
|
],
|
|
464
514
|
},
|
|
465
515
|
effect: {
|
|
@@ -467,7 +517,7 @@ export const daoTokenDef = defineFiberApp({
|
|
|
467
517
|
{ var: "state" },
|
|
468
518
|
{
|
|
469
519
|
delegations: {
|
|
470
|
-
|
|
520
|
+
set: [
|
|
471
521
|
{ var: "state.delegations" },
|
|
472
522
|
{ var: "event.agent" },
|
|
473
523
|
{ var: "event.delegateTo" },
|
|
@@ -483,13 +533,21 @@ export const daoTokenDef = defineFiberApp({
|
|
|
483
533
|
from: "ACTIVE",
|
|
484
534
|
to: "ACTIVE",
|
|
485
535
|
eventName: "undelegate",
|
|
486
|
-
|
|
536
|
+
// S1+A2: bind event.agent to a verified signer; presence via has, removal via unset (the rc.5
|
|
537
|
+
// map opcodes — getKey/deleteKey do not exist). Only the verified delegator can clear their own
|
|
538
|
+
// delegation.
|
|
539
|
+
guard: {
|
|
540
|
+
and: [
|
|
541
|
+
actorIsSigner(),
|
|
542
|
+
{ has: [{ var: "state.delegations" }, { var: "event.agent" }] },
|
|
543
|
+
],
|
|
544
|
+
},
|
|
487
545
|
effect: {
|
|
488
546
|
merge: [
|
|
489
547
|
{ var: "state" },
|
|
490
548
|
{
|
|
491
549
|
delegations: {
|
|
492
|
-
|
|
550
|
+
unset: [{ var: "state.delegations" }, { var: "event.agent" }],
|
|
493
551
|
},
|
|
494
552
|
},
|
|
495
553
|
],
|