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