@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
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sealed-bid (Vickrey) auction — the worked example for the privacy stack.
|
|
3
|
+
*
|
|
4
|
+
* Two pieces (RFC §4):
|
|
5
|
+
* 1. `sealedBidAccountDef` — the PRIVATE per-bidder bid. `shieldApp` turns it into a shielded
|
|
6
|
+
* pool (`shieldedSealedBidDef`): a bidder commits a bid note and proves it well-formed with a
|
|
7
|
+
* zk-jlvm-shielded Groth16 proof, so the amount stays sealed *until the deadline*. This is the
|
|
8
|
+
* mechanical per-instance / single-owner case.
|
|
9
|
+
* 2. `vickreyAuctionDef` — the PUBLIC settlement (reveal-then-tally). After the deadline bidders
|
|
10
|
+
* open their notes; the combine computes winner = argmax and clearingPrice = second-highest
|
|
11
|
+
* (the Vickrey price). This is the one shared-state step, kept simple for v1; a zk settlement
|
|
12
|
+
* proof that seals losers' amounts forever is the deferred upgrade (RFC §10).
|
|
13
|
+
*/
|
|
14
|
+
import { type FiberAppDefinition } from '../schema/fiber-app.js';
|
|
15
|
+
import { type ShieldOptions } from './shield-app.js';
|
|
16
|
+
/** The per-bidder PRIVATE state: a bid note `{ amount, bidder, nonce }`. */
|
|
17
|
+
export declare const sealedBidAccountDef: {
|
|
18
|
+
readonly metadata: {
|
|
19
|
+
readonly name: "SealedBidAccount";
|
|
20
|
+
readonly app: "markets";
|
|
21
|
+
readonly type: "sealed-bid-account";
|
|
22
|
+
readonly version: "1.0.0";
|
|
23
|
+
readonly description: "A single bidder's sealed bid (private amount). Shielded via shieldApp.";
|
|
24
|
+
};
|
|
25
|
+
readonly stateSchema: {
|
|
26
|
+
readonly properties: {
|
|
27
|
+
readonly amount: {
|
|
28
|
+
readonly type: "number";
|
|
29
|
+
readonly description: "the (private) bid amount";
|
|
30
|
+
};
|
|
31
|
+
readonly bidder: {
|
|
32
|
+
readonly type: "address";
|
|
33
|
+
};
|
|
34
|
+
readonly nonce: {
|
|
35
|
+
readonly type: "number";
|
|
36
|
+
readonly description: "per-note randomness; keeps the commitment hiding";
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
readonly eventSchemas: {
|
|
41
|
+
readonly place_bid: {
|
|
42
|
+
readonly description: "Set the sealed bid amount";
|
|
43
|
+
readonly required: readonly ["amount"];
|
|
44
|
+
readonly properties: {
|
|
45
|
+
readonly amount: {
|
|
46
|
+
readonly type: "number";
|
|
47
|
+
readonly minimum: 1;
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
readonly states: {
|
|
53
|
+
readonly OPEN: {
|
|
54
|
+
readonly id: "OPEN";
|
|
55
|
+
readonly isFinal: false;
|
|
56
|
+
readonly metadata: {
|
|
57
|
+
readonly label: "Open";
|
|
58
|
+
readonly description: "No bid yet";
|
|
59
|
+
readonly category: "initial";
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
readonly BID: {
|
|
63
|
+
readonly id: "BID";
|
|
64
|
+
readonly isFinal: false;
|
|
65
|
+
readonly metadata: {
|
|
66
|
+
readonly label: "Bid";
|
|
67
|
+
readonly description: "Bid committed";
|
|
68
|
+
readonly category: "active";
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
readonly initialState: "OPEN";
|
|
73
|
+
readonly transitions: readonly [{
|
|
74
|
+
readonly from: "OPEN";
|
|
75
|
+
readonly to: "BID";
|
|
76
|
+
readonly eventName: "place_bid";
|
|
77
|
+
readonly guard: {
|
|
78
|
+
readonly '>': readonly [{
|
|
79
|
+
readonly var: "event.amount";
|
|
80
|
+
}, 0];
|
|
81
|
+
};
|
|
82
|
+
readonly effect: {
|
|
83
|
+
readonly merge: readonly [{
|
|
84
|
+
readonly var: "state";
|
|
85
|
+
}, {
|
|
86
|
+
readonly amount: {
|
|
87
|
+
readonly var: "event.amount";
|
|
88
|
+
};
|
|
89
|
+
}];
|
|
90
|
+
};
|
|
91
|
+
readonly dependencies: readonly [];
|
|
92
|
+
}];
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* The shielded sealed-bid pool. `vkey`/`exprHash` come from the built zk-jlvm-shielded circuit
|
|
96
|
+
* (these are placeholders until the circuit's program vkey + the keccak of the `place_bid` effect
|
|
97
|
+
* are wired in by the genesis/build step).
|
|
98
|
+
*/
|
|
99
|
+
export declare function shieldedSealedBidDef(opts: ShieldOptions): FiberAppDefinition;
|
|
100
|
+
/**
|
|
101
|
+
* Public reveal-then-tally settlement. `reveal` appends an opened bid (in a full build the opening
|
|
102
|
+
* is checked against the recorded commitment in the shielded pool); `settle` computes the winner
|
|
103
|
+
* and the Vickrey (second-price) clearing price over the revealed bids in one reduce.
|
|
104
|
+
*/
|
|
105
|
+
export declare const vickreyAuctionDef: {
|
|
106
|
+
readonly metadata: {
|
|
107
|
+
readonly name: "VickreyAuction";
|
|
108
|
+
readonly app: "markets";
|
|
109
|
+
readonly type: "vickrey-auction";
|
|
110
|
+
readonly version: "1.0.0";
|
|
111
|
+
readonly description: "Sealed-bid second-price auction: public reveal-then-tally over shielded bids.";
|
|
112
|
+
readonly crossReferences: {
|
|
113
|
+
readonly bidPool: "the ShieldedSealedBidAccount pool holding the sealed bids";
|
|
114
|
+
};
|
|
115
|
+
};
|
|
116
|
+
readonly createSchema: {
|
|
117
|
+
readonly required: readonly ["seller", "deadline"];
|
|
118
|
+
readonly properties: {
|
|
119
|
+
readonly seller: {
|
|
120
|
+
readonly type: "address";
|
|
121
|
+
readonly immutable: true;
|
|
122
|
+
};
|
|
123
|
+
readonly deadline: {
|
|
124
|
+
readonly type: "timestamp";
|
|
125
|
+
readonly immutable: true;
|
|
126
|
+
};
|
|
127
|
+
};
|
|
128
|
+
};
|
|
129
|
+
readonly stateSchema: {
|
|
130
|
+
readonly properties: {
|
|
131
|
+
readonly seller: {
|
|
132
|
+
readonly type: "address";
|
|
133
|
+
readonly immutable: true;
|
|
134
|
+
};
|
|
135
|
+
readonly deadline: {
|
|
136
|
+
readonly type: "timestamp";
|
|
137
|
+
readonly immutable: true;
|
|
138
|
+
};
|
|
139
|
+
readonly status: {
|
|
140
|
+
readonly type: "string";
|
|
141
|
+
readonly computed: true;
|
|
142
|
+
};
|
|
143
|
+
readonly revealed: {
|
|
144
|
+
readonly type: "array";
|
|
145
|
+
readonly computed: true;
|
|
146
|
+
readonly description: "opened bids [{bidder, amount}]";
|
|
147
|
+
};
|
|
148
|
+
readonly winner: {
|
|
149
|
+
readonly type: "address";
|
|
150
|
+
readonly computed: true;
|
|
151
|
+
};
|
|
152
|
+
readonly clearingPrice: {
|
|
153
|
+
readonly type: "number";
|
|
154
|
+
readonly computed: true;
|
|
155
|
+
readonly description: "second-highest bid (Vickrey)";
|
|
156
|
+
};
|
|
157
|
+
};
|
|
158
|
+
};
|
|
159
|
+
readonly eventSchemas: {
|
|
160
|
+
readonly reveal: {
|
|
161
|
+
readonly description: "Open a sealed bid after the deadline";
|
|
162
|
+
readonly required: readonly ["bidder", "amount"];
|
|
163
|
+
readonly properties: {
|
|
164
|
+
readonly bidder: {
|
|
165
|
+
readonly type: "address";
|
|
166
|
+
};
|
|
167
|
+
readonly amount: {
|
|
168
|
+
readonly type: "number";
|
|
169
|
+
readonly minimum: 1;
|
|
170
|
+
};
|
|
171
|
+
};
|
|
172
|
+
};
|
|
173
|
+
readonly settle: {
|
|
174
|
+
readonly description: "Tally the revealed bids (winner + second price)";
|
|
175
|
+
};
|
|
176
|
+
};
|
|
177
|
+
readonly states: {
|
|
178
|
+
readonly OPEN: {
|
|
179
|
+
readonly id: "OPEN";
|
|
180
|
+
readonly isFinal: false;
|
|
181
|
+
readonly metadata: {
|
|
182
|
+
readonly label: "Open";
|
|
183
|
+
readonly description: "Bidding (sealed)";
|
|
184
|
+
readonly category: "initial";
|
|
185
|
+
};
|
|
186
|
+
};
|
|
187
|
+
readonly REVEAL: {
|
|
188
|
+
readonly id: "REVEAL";
|
|
189
|
+
readonly isFinal: false;
|
|
190
|
+
readonly metadata: {
|
|
191
|
+
readonly label: "Reveal";
|
|
192
|
+
readonly description: "Opening bids";
|
|
193
|
+
readonly category: "active";
|
|
194
|
+
};
|
|
195
|
+
};
|
|
196
|
+
readonly SETTLED: {
|
|
197
|
+
readonly id: "SETTLED";
|
|
198
|
+
readonly isFinal: true;
|
|
199
|
+
readonly metadata: {
|
|
200
|
+
readonly label: "Settled";
|
|
201
|
+
readonly description: "Winner + price set";
|
|
202
|
+
readonly category: "terminal";
|
|
203
|
+
};
|
|
204
|
+
};
|
|
205
|
+
};
|
|
206
|
+
readonly initialState: "OPEN";
|
|
207
|
+
readonly transitions: readonly [{
|
|
208
|
+
readonly from: "OPEN";
|
|
209
|
+
readonly to: "REVEAL";
|
|
210
|
+
readonly eventName: "reveal";
|
|
211
|
+
readonly guard: {
|
|
212
|
+
readonly '>=': readonly [{
|
|
213
|
+
readonly var: "$timestamp";
|
|
214
|
+
}, {
|
|
215
|
+
readonly var: "state.deadline";
|
|
216
|
+
}];
|
|
217
|
+
};
|
|
218
|
+
readonly effect: {
|
|
219
|
+
readonly merge: readonly [{
|
|
220
|
+
readonly var: "state";
|
|
221
|
+
}, {
|
|
222
|
+
readonly status: "REVEAL";
|
|
223
|
+
readonly revealed: {
|
|
224
|
+
readonly cat: readonly [{
|
|
225
|
+
readonly var: "state.revealed";
|
|
226
|
+
}, readonly [{
|
|
227
|
+
readonly bidder: {
|
|
228
|
+
readonly var: "event.bidder";
|
|
229
|
+
};
|
|
230
|
+
readonly amount: {
|
|
231
|
+
readonly var: "event.amount";
|
|
232
|
+
};
|
|
233
|
+
}]];
|
|
234
|
+
};
|
|
235
|
+
}];
|
|
236
|
+
};
|
|
237
|
+
readonly dependencies: readonly [];
|
|
238
|
+
}, {
|
|
239
|
+
readonly from: "REVEAL";
|
|
240
|
+
readonly to: "REVEAL";
|
|
241
|
+
readonly eventName: "reveal";
|
|
242
|
+
readonly guard: {
|
|
243
|
+
readonly '>=': readonly [{
|
|
244
|
+
readonly var: "$timestamp";
|
|
245
|
+
}, {
|
|
246
|
+
readonly var: "state.deadline";
|
|
247
|
+
}];
|
|
248
|
+
};
|
|
249
|
+
readonly effect: {
|
|
250
|
+
readonly merge: readonly [{
|
|
251
|
+
readonly var: "state";
|
|
252
|
+
}, {
|
|
253
|
+
readonly revealed: {
|
|
254
|
+
readonly cat: readonly [{
|
|
255
|
+
readonly var: "state.revealed";
|
|
256
|
+
}, readonly [{
|
|
257
|
+
readonly bidder: {
|
|
258
|
+
readonly var: "event.bidder";
|
|
259
|
+
};
|
|
260
|
+
readonly amount: {
|
|
261
|
+
readonly var: "event.amount";
|
|
262
|
+
};
|
|
263
|
+
}]];
|
|
264
|
+
};
|
|
265
|
+
}];
|
|
266
|
+
};
|
|
267
|
+
readonly dependencies: readonly [];
|
|
268
|
+
}, {
|
|
269
|
+
readonly from: "REVEAL";
|
|
270
|
+
readonly to: "SETTLED";
|
|
271
|
+
readonly eventName: "settle";
|
|
272
|
+
readonly guard: {
|
|
273
|
+
readonly '>': readonly [{
|
|
274
|
+
readonly reduce: readonly [{
|
|
275
|
+
readonly var: "state.revealed";
|
|
276
|
+
}, {
|
|
277
|
+
readonly '+': readonly [{
|
|
278
|
+
readonly var: "accumulator";
|
|
279
|
+
}, 1];
|
|
280
|
+
}, 0];
|
|
281
|
+
}, 0];
|
|
282
|
+
};
|
|
283
|
+
readonly effect: {
|
|
284
|
+
readonly merge: readonly [{
|
|
285
|
+
readonly var: "state";
|
|
286
|
+
}, {
|
|
287
|
+
readonly status: "SETTLED";
|
|
288
|
+
readonly settledAt: {
|
|
289
|
+
readonly var: "$timestamp";
|
|
290
|
+
};
|
|
291
|
+
readonly winner: {
|
|
292
|
+
readonly var: readonly ["tally.winner", null];
|
|
293
|
+
};
|
|
294
|
+
readonly clearingPrice: {
|
|
295
|
+
readonly var: readonly ["tally.second", 0];
|
|
296
|
+
};
|
|
297
|
+
readonly tally: {
|
|
298
|
+
readonly reduce: readonly [{
|
|
299
|
+
readonly var: "state.revealed";
|
|
300
|
+
}, {
|
|
301
|
+
readonly if: readonly [{
|
|
302
|
+
readonly '>': readonly [{
|
|
303
|
+
readonly var: "current.amount";
|
|
304
|
+
}, {
|
|
305
|
+
readonly var: "accumulator.max";
|
|
306
|
+
}];
|
|
307
|
+
}, {
|
|
308
|
+
readonly max: {
|
|
309
|
+
readonly var: "current.amount";
|
|
310
|
+
};
|
|
311
|
+
readonly second: {
|
|
312
|
+
readonly var: "accumulator.max";
|
|
313
|
+
};
|
|
314
|
+
readonly winner: {
|
|
315
|
+
readonly var: "current.bidder";
|
|
316
|
+
};
|
|
317
|
+
}, {
|
|
318
|
+
readonly if: readonly [{
|
|
319
|
+
readonly '>': readonly [{
|
|
320
|
+
readonly var: "current.amount";
|
|
321
|
+
}, {
|
|
322
|
+
readonly var: "accumulator.second";
|
|
323
|
+
}];
|
|
324
|
+
}, {
|
|
325
|
+
readonly max: {
|
|
326
|
+
readonly var: "accumulator.max";
|
|
327
|
+
};
|
|
328
|
+
readonly second: {
|
|
329
|
+
readonly var: "current.amount";
|
|
330
|
+
};
|
|
331
|
+
readonly winner: {
|
|
332
|
+
readonly var: "accumulator.winner";
|
|
333
|
+
};
|
|
334
|
+
}, {
|
|
335
|
+
readonly var: "accumulator";
|
|
336
|
+
}];
|
|
337
|
+
}];
|
|
338
|
+
}, {
|
|
339
|
+
readonly max: 0;
|
|
340
|
+
readonly second: 0;
|
|
341
|
+
readonly winner: null;
|
|
342
|
+
}];
|
|
343
|
+
};
|
|
344
|
+
}];
|
|
345
|
+
};
|
|
346
|
+
readonly dependencies: readonly [];
|
|
347
|
+
}];
|
|
348
|
+
};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* shieldApp — turn a fiber app into a PRIVATE-state pool.
|
|
3
|
+
*
|
|
4
|
+
* Given a base {@link FiberAppDefinition} (the app whose state + transition you want to keep
|
|
5
|
+
* private), `shieldApp` returns a new `FiberAppDefinition` for a "shielded pool" Machine fiber.
|
|
6
|
+
* The pool's state is PUBLIC scaffolding only — the spent-nullifier set, the commitment log, and
|
|
7
|
+
* the set of valid anchors — while the app's real state lives off-chain in a note committed to
|
|
8
|
+
* the tree. Each app transition is carried out off-chain and attested by a single
|
|
9
|
+
* `zk-jlvm-shielded` Groth16 proof; the on-chain combine just verifies the proof, rejects an
|
|
10
|
+
* already-spent nullifier, and records the new commitment.
|
|
11
|
+
*
|
|
12
|
+
* Division of labour (see ottochain-sdk RFC docs/design/zk-private-contract-state-rfc.md):
|
|
13
|
+
* - the CIRCUIT proves membership ∧ authorization ∧ `jlvm-core` effect ∧ new commitment;
|
|
14
|
+
* - this GUARD (combine) verifies the proof, pins which app logic ran (`exprHash`), checks the
|
|
15
|
+
* anchor is recent, and checks the nullifier is fresh — all combiner-only (CLAUDE.md);
|
|
16
|
+
* - block-validity stays structural (proof / publicValues present + hex).
|
|
17
|
+
*
|
|
18
|
+
* It uses NO new metakit opcode: `groth16_verify` verifies the proof, and the four-`bytes32`
|
|
19
|
+
* public values (`anchor`, `nullifier`, `newCommitment`, `exprHash`) are extracted from the
|
|
20
|
+
* VERIFIED `publicValues` string with fixed-offset `substr` — slicing the verified bytes IS the
|
|
21
|
+
* binding (§8.1).
|
|
22
|
+
*
|
|
23
|
+
* NOTE on cost: the note model rehashes the whole state each transition, so proving cost is
|
|
24
|
+
* O(state size) (RFC §8). Keep shielded note state small (a few KB); for large keyed state use
|
|
25
|
+
* the auth-DB variant (RFC §3.1.1).
|
|
26
|
+
*/
|
|
27
|
+
import { type FiberAppDefinition, type SchemaField } from '../schema/fiber-app.js';
|
|
28
|
+
export interface ShieldOptions {
|
|
29
|
+
/** SP1 program vkey for the zk-jlvm-shielded circuit (0x-prefixed bytes32 hex). Pinned at creation. */
|
|
30
|
+
vkey: string;
|
|
31
|
+
/**
|
|
32
|
+
* `keccak256(effectExpr)` the circuit commits — pins WHICH app logic the accepted proofs ran.
|
|
33
|
+
* Compute it from the base app's transition effect; one pinned effect per pool (the per-event /
|
|
34
|
+
* multi-effect generalization is RFC §10 open question 1).
|
|
35
|
+
*/
|
|
36
|
+
exprHash: string;
|
|
37
|
+
/** How many recent anchors stay spendable (rolling window). Default 64. */
|
|
38
|
+
rootWindow?: number;
|
|
39
|
+
}
|
|
40
|
+
/** Standard public state every shielded pool carries (the rest of the app state is private/off-chain). */
|
|
41
|
+
export declare const SHIELDED_POOL_STATE: Record<string, SchemaField>;
|
|
42
|
+
/**
|
|
43
|
+
* Build the shielded-pool variant of `base`.
|
|
44
|
+
*
|
|
45
|
+
* @param base the app being shielded (used for naming + to document the pinned logic).
|
|
46
|
+
* @param opts the circuit vkey + the pinned `exprHash` + the anchor window.
|
|
47
|
+
*/
|
|
48
|
+
export declare function shieldApp(base: FiberAppDefinition, opts: ShieldOptions): FiberAppDefinition;
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Builders for the fiber-engine reserved EFFECT directives — the `_`-prefixed keys the chain extracts
|
|
3
|
+
* from an evaluated effect result and applies as side effects (then strips from the merged state).
|
|
4
|
+
*
|
|
5
|
+
* Place the returned fragment INSIDE the state-update map of a `merge` effect, so the directive rides in
|
|
6
|
+
* the evaluated result map (EffectExtractor reads it; StateMerger drops `_`-prefixed keys from state):
|
|
7
|
+
*
|
|
8
|
+
* ```ts
|
|
9
|
+
* effect: {
|
|
10
|
+
* merge: [
|
|
11
|
+
* { var: "state" },
|
|
12
|
+
* { boundAt: { var: "$ordinal" }, ...addDependency({ var: "event.registryId" }) },
|
|
13
|
+
* ],
|
|
14
|
+
* }
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
import type { ProtoStateMachineDefinition } from './fiber-app.js';
|
|
18
|
+
/** A JSON-Logic value: a literal (string/number/bool) or a `{var}`/operator expression. */
|
|
19
|
+
type JsonLogicValue = unknown;
|
|
20
|
+
/**
|
|
21
|
+
* `_addDependency` (#24): add — or re-activate — a runtime DYNAMIC dependency on `fiberId`, so that
|
|
22
|
+
* fiber's state appears in `machines.<fiberId>` for SUBSEQUENT transitions of this fiber. `fiberId` may
|
|
23
|
+
* be a literal UUID string or an expression (e.g. `{ var: "event.registryId" }`, `{ var: "state.registryId" }`).
|
|
24
|
+
* The ledger is append-only, idempotent (one entry per fiber), and engine-bounded (active + ledger caps).
|
|
25
|
+
* Because the `machines` context is built BEFORE the effect runs, the bound dependency is readable only
|
|
26
|
+
* from the NEXT transition onward (two-phase: bind, then read).
|
|
27
|
+
*/
|
|
28
|
+
export declare const addDependency: (fiberId: JsonLogicValue) => Record<string, unknown>;
|
|
29
|
+
/**
|
|
30
|
+
* `_setDependencyActive` (#24): toggle a dynamic dependency's `active` flag. The entry is NEVER removed —
|
|
31
|
+
* deactivation simply drops it from the `machines` context (and it can be cheaply re-activated). `fiberId`
|
|
32
|
+
* may be a literal or an expression.
|
|
33
|
+
*/
|
|
34
|
+
export declare const setDependencyActive: (fiberId: JsonLogicValue, active: boolean) => Record<string, unknown>;
|
|
35
|
+
/**
|
|
36
|
+
* `_transferAsset`: move one or more WHOLE asset instances the emitting fiber holds, each to a single
|
|
37
|
+
* recipient. The directive rides INSIDE a `merge` effect map (the engine extracts `_`-prefixed keys
|
|
38
|
+
* before merging into state); a transition-level `emits` block is silently stripped by
|
|
39
|
+
* `toProtoDefinition`, which would strand the asset.
|
|
40
|
+
*
|
|
41
|
+
* Each directive is `{ assetId, recipient }` ONLY — there is NO `amount` field. The combiner reassigns
|
|
42
|
+
* `holder := recipient` on the WHOLE asset record (`AssetCombiner.applyFiberTransfer`); value is moved
|
|
43
|
+
* one whole instance at a time, never split. `recipient` must resolve to the canonical `AssetHolder`
|
|
44
|
+
* OBJECT form — `{"Fiber":{"fiberId":..}}` / `{"Wallet":{"address":..}}` — built with {@link toFiber} /
|
|
45
|
+
* {@link toWallet}; the chain raises a graceful `CombineRejected` on a bare string or malformed object
|
|
46
|
+
* (`EffectExtractor.parseAssetTransfer`). `assetId` is a UUID; the holder id may be a literal or an
|
|
47
|
+
* expression (e.g. `{ var: "event.agent" }`).
|
|
48
|
+
*
|
|
49
|
+
* Combiner-side holder defense (R1) independently re-validates every directive: the asset must resolve,
|
|
50
|
+
* be held by `Fiber(self)`, be `behavior.transferable`, and (Fiber recipient) the recipient fiber must be
|
|
51
|
+
* live — else the whole transition is `CombineRejected`. There is a hard cap of 32 asset mutations per
|
|
52
|
+
* transition (all-or-nothing); keep emitting fibers at ≤1 transfer per transition for claim/withdraw/slash.
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* effect: { merge: [ { var: "state" }, {
|
|
56
|
+
* status: "SETTLED",
|
|
57
|
+
* ...transferAsset([{ assetId: { var: "event.rewardAssetId" }, recipient: toWallet({ var: "event.agent" }) }]),
|
|
58
|
+
* } ] }
|
|
59
|
+
*/
|
|
60
|
+
export declare const transferAsset: (transfers: {
|
|
61
|
+
assetId: JsonLogicValue;
|
|
62
|
+
recipient: JsonLogicValue;
|
|
63
|
+
}[]) => Record<string, unknown>;
|
|
64
|
+
/**
|
|
65
|
+
* Build a `_transferAsset` `recipient` as the canonical `AssetHolder` OBJECT form. The chain requires the
|
|
66
|
+
* object form ONLY — `{"Fiber":{"fiberId":..}}` / `{"Wallet":{"address":..}}` — and raises a graceful
|
|
67
|
+
* `CombineRejected` on a bare string or a malformed object (`EffectExtractor.parseAssetTransfer`); the
|
|
68
|
+
* legacy bare-string UUID/DAG-address disambiguation has been removed. These mirror the typed
|
|
69
|
+
* {@link fiberHolder} / {@link walletHolder} `AssetHolder` builders (used for `MintAsset.holder` /
|
|
70
|
+
* `ApplyMorphism.recipient`) but accept a `JsonLogicValue`, so the id can be a runtime expression:
|
|
71
|
+
*
|
|
72
|
+
* ```ts
|
|
73
|
+
* transferAsset([{ assetId, recipient: toFiber({ var: "event.retailerId" }) }]); // → {"Fiber":{"fiberId":..}}
|
|
74
|
+
* transferAsset([{ assetId, recipient: toWallet({ var: "event.agent" }) }]); // → {"Wallet":{"address":..}}
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
export declare const toFiber: (fiberId: JsonLogicValue) => JsonLogicValue;
|
|
78
|
+
/** See {@link toFiber}: a `transferAsset` recipient held by a wallet — `{"Wallet":{"address":..}}`. */
|
|
79
|
+
export declare const toWallet: (address: JsonLogicValue) => JsonLogicValue;
|
|
80
|
+
/**
|
|
81
|
+
* `_triggers` (F4): fire one or more CROSS-FIBER events. Each entry is projected to
|
|
82
|
+
* `{ targetMachineId, eventName, payload }` — the exact shape the chain's `EffectExtractor` reads
|
|
83
|
+
* (`ReservedKeys.scala`, `EffectExtractor.scala`). `target` is the recipient fiber id (a literal UUID
|
|
84
|
+
* or an expression, e.g. `{ var: "event.retailerId" }`); `event` is the event NAME to enqueue on it;
|
|
85
|
+
* `payload` is the event body — omit it and the builder emits `{}` (never `null`).
|
|
86
|
+
*
|
|
87
|
+
* Authoring this as a builder makes a typo'd `_trigger` / `triggres` a TypeScript error rather than a
|
|
88
|
+
* silently-merged state field (the F4 foot-gun). Place the fragment INSIDE the effect's state-update
|
|
89
|
+
* map so it rides in the evaluated result the extractor reads.
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* effect: { merge: [ { var: "state" }, {
|
|
93
|
+
* status: "debt_current",
|
|
94
|
+
* ...triggers([{ target: { var: "event.retailerId" }, event: "process_sale",
|
|
95
|
+
* payload: { buyerId: { var: "machineId" }, quantity: { var: "event.quantity" } } }]),
|
|
96
|
+
* } ] }
|
|
97
|
+
*/
|
|
98
|
+
export declare const triggers: (ts: {
|
|
99
|
+
target: JsonLogicValue;
|
|
100
|
+
event: string;
|
|
101
|
+
payload?: Record<string, unknown>;
|
|
102
|
+
}[]) => Record<string, unknown>;
|
|
103
|
+
/**
|
|
104
|
+
* `_spawn`: create one or more CHILD fibers, each from a literal machine `definition`. Each entry is
|
|
105
|
+
* `{ childId, definition, initialData, owners }` (`ReservedKeys.scala`, `EffectExtractor.scala`).
|
|
106
|
+
*
|
|
107
|
+
* The chain extracts `_spawn` from the effect EXPRESSION, not the evaluated result, so `definition`
|
|
108
|
+
* MUST be a literal {@link ProtoStateMachineDefinition} (e.g. a nested `machine().wireDefinition()` /
|
|
109
|
+
* `toProtoDefinition(child)` output) — NOT an expression the engine would evaluate at runtime.
|
|
110
|
+
*
|
|
111
|
+
* F8 gotcha — `owners` is load-bearing. A spawned child's transitions are gated by
|
|
112
|
+
* `owners ∪ authorizedSigners` (`riverdale-economy/README.md`), so EVERY party that will later drive
|
|
113
|
+
* the child (e.g. every bidder on a spawned auction) MUST be listed in `owners`, or their events are
|
|
114
|
+
* rejected. `owners` may be a literal id array or an expression (e.g. `{ var: "event.auctionOwners" }`);
|
|
115
|
+
* `childId` / `initialData` likewise accept literals or expressions.
|
|
116
|
+
*/
|
|
117
|
+
export declare const spawn: (ds: {
|
|
118
|
+
childId: JsonLogicValue;
|
|
119
|
+
definition: ProtoStateMachineDefinition;
|
|
120
|
+
initialData: Record<string, unknown>;
|
|
121
|
+
owners: JsonLogicValue;
|
|
122
|
+
}[]) => Record<string, unknown>;
|
|
123
|
+
/**
|
|
124
|
+
* `_emit`: emit one or more domain events to the fiber's outbox. Each entry is
|
|
125
|
+
* `{ name, data, destination? }` (`ReservedKeys.scala`, `EffectExtractor.scala`). `name` is the event
|
|
126
|
+
* name, `data` the body (a literal or an expression), and `destination` an OPTIONAL routing target —
|
|
127
|
+
* omit it when absent (callers never pass `null`, so it is simply absent on the wire).
|
|
128
|
+
*/
|
|
129
|
+
export declare const emit: (es: {
|
|
130
|
+
name: string;
|
|
131
|
+
data: JsonLogicValue;
|
|
132
|
+
destination?: string;
|
|
133
|
+
}[]) => Record<string, unknown>;
|
|
134
|
+
/**
|
|
135
|
+
* The complete set of `_`-prefixed RESERVED effect keys the chain's `EffectExtractor` consumes and
|
|
136
|
+
* `StateMerger` strips from state (`ReservedKeys.scala:12-49`). Exported so a validator (Proposal 01)
|
|
137
|
+
* can reject an unknown `_`-prefixed key (a typo'd directive) instead of letting it silently leak into
|
|
138
|
+
* persisted state.
|
|
139
|
+
*/
|
|
140
|
+
export declare const RESERVED_EFFECT_KEYS: readonly ["_triggers", "_spawn", "_emit", "_transferAsset", "_scriptCall", "_addDependency", "_setDependencyActive"];
|
|
141
|
+
export {};
|