@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,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Asset-policy preset builders (§1.1 of the SDK std-lib/templates handoff).
|
|
3
|
+
*
|
|
4
|
+
* Each builder is a PURE function that emits the exact {@link CreateAssetPolicy} wire body the chain
|
|
5
|
+
* re-derives — no `Date.now()`/`Math.random()`/`crypto.randomUUID()`; fixed inputs → fixed output. The
|
|
6
|
+
* on-chain policy `schemaHash` and `logicHash` are both `RegistryShape.AssetPolicy.computeDigest` over
|
|
7
|
+
* `behavior`/`supply`/`morphisms`/`stateShape` (no JSON-Logic body), so these presets are pure data.
|
|
8
|
+
*
|
|
9
|
+
* Hard invariants (CLAUDE.md rule #1 — the signed canonical is frozen):
|
|
10
|
+
* - `behavior` is ALWAYS summed from {@link TOKEN_BEHAVIOR_BITS} (T=16, S=8, C=4, E=2, G=1), never a
|
|
11
|
+
* magic literal int.
|
|
12
|
+
* - `morphisms` is REQUIRED on the wire (presence required, emptiness meaningful) — emit `{}` when empty,
|
|
13
|
+
* NEVER omit it.
|
|
14
|
+
* - `supply` is REQUIRED — emit `{}` when there is no supply authority, never omit it.
|
|
15
|
+
* - Absent optionals are OMITTED, never emitted as `null`/`undefined` (the chain signs over
|
|
16
|
+
* `JCS(dropNulls(payload))`).
|
|
17
|
+
*
|
|
18
|
+
* @see src/ottochain/types.ts — CreateAssetPolicy, SupplyPolicy, MorphismSpec, MorphismKind, TOKEN_BEHAVIOR_BITS
|
|
19
|
+
*/
|
|
20
|
+
import { TOKEN_BEHAVIOR_BITS, type CreateAssetPolicy, type JsonLogicExpression, type MorphismKind, type MorphismSpec, type SupplyPolicy } from '../ottochain/types.js';
|
|
21
|
+
/** A behavior-bit NAME (a key of {@link TOKEN_BEHAVIOR_BITS}) — the only legal way to spell `behavior`. */
|
|
22
|
+
export type BehaviorBitName = keyof typeof TOKEN_BEHAVIOR_BITS;
|
|
23
|
+
/** Sum behavior bits from their NAMES — never a magic literal int (CLAUDE.md #1). */
|
|
24
|
+
export declare function sumBehavior(bits: readonly BehaviorBitName[]): number;
|
|
25
|
+
/**
|
|
26
|
+
* Derive the default `stateShape.typeName`: strip a trailing `.asset` label, PascalCase the remainder
|
|
27
|
+
* (splitting on `.`/`-`/`_`/space), then append `State`.
|
|
28
|
+
* `rvd.asset` → `RvdState`, `goods.asset` → `GoodsState`, `capped.asset` → `CappedState`.
|
|
29
|
+
*/
|
|
30
|
+
export declare function defaultStateTypeName(name: string): string;
|
|
31
|
+
/**
|
|
32
|
+
* Fungible currency. Behavior `T|S|C = 28` (transferable + splittable + combinable). Standard morphism
|
|
33
|
+
* set TRANSFER + FRACTIONALIZE + STAKE (`stakeable`, default true) + BURN (when `burnable`), all PUBLIC.
|
|
34
|
+
*
|
|
35
|
+
* Reproduces `riverdale-economy/rvd-policy.json` exactly via
|
|
36
|
+
* `fungiblePolicy({ name: 'rvd.asset', version: '1.0.0', mintable: true, burnable: true })`.
|
|
37
|
+
*/
|
|
38
|
+
export declare function fungiblePolicy(p: {
|
|
39
|
+
/** Registry name; conventionally ends `.asset`. */
|
|
40
|
+
name: string;
|
|
41
|
+
/** SemVer string. */
|
|
42
|
+
version: string;
|
|
43
|
+
/** `supply.decimals` — fractional precision; omit for whole-unit. */
|
|
44
|
+
decimals?: number;
|
|
45
|
+
/** `supply.maxSupply` — omit ⇒ uncapped. */
|
|
46
|
+
maxSupply?: number;
|
|
47
|
+
/** true ⇒ `supply.mintPolicy = {"==":[1,1]}` (open mint). */
|
|
48
|
+
mintable?: boolean;
|
|
49
|
+
/** true ⇒ `supply.burnPolicy = {"==":[1,1]}` AND a BURN morphism. */
|
|
50
|
+
burnable?: boolean;
|
|
51
|
+
/** JSON-Logic predicate that OVERRIDES `mintable`'s default mint guard (and enables minting). */
|
|
52
|
+
mintGuard?: JsonLogicExpression;
|
|
53
|
+
/** default true ⇒ a STAKE morphism. */
|
|
54
|
+
stakeable?: boolean;
|
|
55
|
+
/** `stateShape.typeName`; default `${PascalCase(name-without-.asset)}State`. */
|
|
56
|
+
stateTypeName?: string;
|
|
57
|
+
/** Off-chain links grab-bag; omitted when absent. */
|
|
58
|
+
metadata?: Record<string, string>;
|
|
59
|
+
}): CreateAssetPolicy;
|
|
60
|
+
/**
|
|
61
|
+
* Non-fungible token. Behavior `T = 16`, or `T|C = 20` with `combinable: true` (the riverdale
|
|
62
|
+
* `goods.asset`); `transferable: false` drops the T bit (a bound collectible). `morphisms` is `{}` by
|
|
63
|
+
* default (emitted explicitly, never omitted). Mintable by default ⇒ `supply.mintPolicy = {"==":[1,1]}`.
|
|
64
|
+
*
|
|
65
|
+
* Reproduces `riverdale-economy/goods-policy.json` exactly via
|
|
66
|
+
* `nftPolicy({ name: 'goods.asset', version: '1.0.0', combinable: true })`.
|
|
67
|
+
*/
|
|
68
|
+
export declare function nftPolicy(p: {
|
|
69
|
+
name: string;
|
|
70
|
+
version: string;
|
|
71
|
+
/** `T(16)` → `T|C(20)`. */
|
|
72
|
+
combinable?: boolean;
|
|
73
|
+
/** default true; false ⇒ drop the T bit (bound collectible: `0`, or `4` with `combinable`). */
|
|
74
|
+
transferable?: boolean;
|
|
75
|
+
/** default true ⇒ `supply.mintPolicy = {"==":[1,1]}`. */
|
|
76
|
+
mintable?: boolean;
|
|
77
|
+
/** JSON-Logic predicate that OVERRIDES the default mint guard. */
|
|
78
|
+
mintGuard?: JsonLogicExpression;
|
|
79
|
+
/** `supply.maxSupply` — omit ⇒ uncapped edition. */
|
|
80
|
+
maxSupply?: number;
|
|
81
|
+
/** `stateShape.typeName`; default `${PascalCase(name-without-.asset)}State`. */
|
|
82
|
+
stateTypeName?: string;
|
|
83
|
+
metadata?: Record<string, string>;
|
|
84
|
+
}): CreateAssetPolicy;
|
|
85
|
+
/**
|
|
86
|
+
* Soulbound token: non-transferable, governable only (`G = 1`; `+E = 3` when `expirable`). No TRANSFER
|
|
87
|
+
* morphism (`morphisms: {}`); minting is closed after issue (empty `supply`).
|
|
88
|
+
*/
|
|
89
|
+
export declare function soulboundPolicy(p: {
|
|
90
|
+
name: string;
|
|
91
|
+
version: string;
|
|
92
|
+
/** `+E(2)` ⇒ behavior `3`. */
|
|
93
|
+
expirable?: boolean;
|
|
94
|
+
/** `stateShape.typeName`; default `${PascalCase(name-without-.asset)}State`. */
|
|
95
|
+
stateTypeName?: string;
|
|
96
|
+
metadata?: Record<string, string>;
|
|
97
|
+
}): CreateAssetPolicy;
|
|
98
|
+
/**
|
|
99
|
+
* Escape hatch: declare `behavior` by NAME (summed from {@link TOKEN_BEHAVIOR_BITS}, never a magic int)
|
|
100
|
+
* and pass `supply` + `morphisms` through raw. Use when no preset fits.
|
|
101
|
+
*
|
|
102
|
+
* Reproduces `riverdale-economy/capped-policy.json` exactly via
|
|
103
|
+
* `customPolicy({ name: 'capped.asset', version: '1.0.0',
|
|
104
|
+
* behavior: ['transferable', 'splittable', 'combinable'],
|
|
105
|
+
* supply: { maxSupply: 100, mintPolicy: { '==': [1, 1] } }, morphisms: {} })`.
|
|
106
|
+
*/
|
|
107
|
+
export declare function customPolicy(p: {
|
|
108
|
+
name: string;
|
|
109
|
+
version: string;
|
|
110
|
+
/** Behavior-bit NAMES summed to the int (e.g. `['transferable','combinable']` ⇒ 20). Never a literal. */
|
|
111
|
+
behavior: readonly BehaviorBitName[];
|
|
112
|
+
/** Raw supply authority, passed through verbatim. */
|
|
113
|
+
supply: SupplyPolicy;
|
|
114
|
+
/** Raw morphism map, passed through verbatim (emit `{}` when empty, never omit). */
|
|
115
|
+
morphisms: Partial<Record<MorphismKind, MorphismSpec>>;
|
|
116
|
+
/** `stateShape.typeName`; default `${PascalCase(name-without-.asset)}State`. */
|
|
117
|
+
stateTypeName?: string;
|
|
118
|
+
metadata?: Record<string, string>;
|
|
119
|
+
}): CreateAssetPolicy;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@ottochain/sdk/templates` — the fiber & asset authoring template catalog.
|
|
3
|
+
*
|
|
4
|
+
* Typed builders that emit the EXACT canonical wire shapes app authors otherwise hand-roll as raw
|
|
5
|
+
* JSON-Logic (asset policies, versioned machines, effect directives, migrations, seeded state). Every
|
|
6
|
+
* builder is additive and pure — it returns the same wire shape the chain re-derives, so a template
|
|
7
|
+
* output signs to byte-identical `JCS(dropNulls(payload))` (CLAUDE.md rule #1). Hand-rolled JSON keeps
|
|
8
|
+
* working; these just make the recurring shapes typed, named, and mistake-resistant.
|
|
9
|
+
*
|
|
10
|
+
* Origin: the fiber-ergonomics program (ottochain `docs/proposals/fiber-ergonomics/`), Phase A — the
|
|
11
|
+
* `riverdale-economy` e2e is the migration proof (each preset reproduces its checked-in golden JSON).
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* import {
|
|
15
|
+
* fungiblePolicy, machine, transition, effect, guard,
|
|
16
|
+
* transferAsset, triggers, spawn, seedState, seedFields,
|
|
17
|
+
* } from '@ottochain/sdk/templates';
|
|
18
|
+
*/
|
|
19
|
+
export * from './asset-policy.js';
|
|
20
|
+
export * from './machine.js';
|
|
21
|
+
export * from './migration.js';
|
|
22
|
+
export * from './state-shape.js';
|
|
23
|
+
export * from '../schema/effects.js';
|
|
24
|
+
export * as guard from '../schema/guards.js';
|
|
25
|
+
export { defineFiberApp, toProtoDefinition, constrained, unconstrained, immutable, projectFiberPolicy, } from '../schema/fiber-app.js';
|
|
26
|
+
export type { FiberAppDefinition, Transition, ProtoStateMachineDefinition, FiberPolicy, FiberPolicyDials, } from '../schema/fiber-app.js';
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Versioned-machine skeleton + `transition()` / `effect()` composition (handoff §1.2).
|
|
3
|
+
*
|
|
4
|
+
* Two moves:
|
|
5
|
+
* 1. `transition()` / `effect()` build the wire `Transition` + its flat effect map from typed
|
|
6
|
+
* fragments instead of a hand-rolled JSON blob.
|
|
7
|
+
* 2. `machine()` is a versioned-package SKELETON that OWNS exactly ONE canonical wire definition
|
|
8
|
+
* (`toProtoDefinition(app)`, computed once) and hands the SAME object to BOTH `publishVersion()`
|
|
9
|
+
* and `create()`. That is the verified-binding invariant (F9): because publish and create cannot
|
|
10
|
+
* drift, the chain's `definition.computeDigest` equals the registered `logicHash` and the bind
|
|
11
|
+
* admits the fiber. The skeleton REUSES `toProtoDefinition` (the one canonicalization path) — it
|
|
12
|
+
* never re-derives the wire shape.
|
|
13
|
+
*
|
|
14
|
+
* Guardrail (CLAUDE.md #1): every builder here is a pure function emitting the exact wire shape the
|
|
15
|
+
* chain re-derives. Absent optionals (`metadata`/`participants`/`parentFiberId`/`migration`) are
|
|
16
|
+
* OMITTED, never `null`; required-no-default fields (`strict` on publish, `dependencies: []` per
|
|
17
|
+
* transition) are ALWAYS present.
|
|
18
|
+
*/
|
|
19
|
+
import { type Transition, type JsonLogicRule, type DependencySpec, type FiberAppDefinition, type ProtoStateMachineDefinition } from '../schema/fiber-app.js';
|
|
20
|
+
import type { MachineShape, PublishMachineVersion, CreateStateMachine, UpgradeFiber, SemVer, JsonLogicValue, JsonLogicExpression } from '../ottochain/types.js';
|
|
21
|
+
/** Authoring shape for {@link transition} — `on` is the event name (mapped to the wire `eventName`). */
|
|
22
|
+
export interface TransitionSpec<TState extends string = string, TEvent extends string = string> {
|
|
23
|
+
from: TState;
|
|
24
|
+
to: TState;
|
|
25
|
+
/** Event that fires this transition. Mapped to the wire key `eventName`. */
|
|
26
|
+
on: TEvent;
|
|
27
|
+
/** JSON-Logic predicate; defaults to the always-true `{ "==": [1, 1] }` when omitted. */
|
|
28
|
+
guard?: JsonLogicRule;
|
|
29
|
+
/** The flat effect map (build it with {@link effect}). Passed through verbatim. */
|
|
30
|
+
effect?: JsonLogicRule;
|
|
31
|
+
/**
|
|
32
|
+
* Dependencies for this transition. Defaults to `[]` (ALWAYS present — the chain
|
|
33
|
+
* `Transition.dependencies: Set[UUID]` has no default; omitting it diverges the canonical).
|
|
34
|
+
* `toProtoDefinition` later drops any non-string {@link DependencySpec} authoring entries.
|
|
35
|
+
*/
|
|
36
|
+
dependencies?: readonly (string | DependencySpec)[];
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Build a wire {@link Transition} from a typed spec.
|
|
40
|
+
*
|
|
41
|
+
* - `on` → `eventName` (the wire key);
|
|
42
|
+
* - `guard` defaults to `{ "==": [1, 1] }`;
|
|
43
|
+
* - `dependencies` defaults to `[]` and is ALWAYS present;
|
|
44
|
+
* - `effect` is passed through (build it with {@link effect}).
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```ts
|
|
48
|
+
* transition({
|
|
49
|
+
* from: 'debt_current', to: 'debt_current', on: 'buy',
|
|
50
|
+
* effect: effect(
|
|
51
|
+
* { status: 'debt_current', purchaseCount: { '+': [{ var: 'state.purchaseCount' }, 1] } },
|
|
52
|
+
* triggers([...]), transferAsset([...]),
|
|
53
|
+
* ),
|
|
54
|
+
* });
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export declare function transition<TState extends string = string, TEvent extends string = string>(t: TransitionSpec<TState, TEvent>): Transition<TState, TEvent>;
|
|
58
|
+
/**
|
|
59
|
+
* Compose an effect into ONE FLAT map: the state-update fields PLUS any `_`-directive fragments,
|
|
60
|
+
* all in a single object (`Object.assign({}, stateUpdate, ...directives)`).
|
|
61
|
+
*
|
|
62
|
+
* Riverdale effects are flat maps that mix `_`-reserved directives (`_triggers`, `_transferAsset`,
|
|
63
|
+
* `_spawn`, …) with plain state-update fields — they are NOT `merge`-wrapped. Each directive fragment
|
|
64
|
+
* is a `Record` (e.g. the output of `transferAsset(...)` / `triggers(...)`), spread in here. Later
|
|
65
|
+
* fragments override earlier keys (`Object.assign` semantics).
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```ts
|
|
69
|
+
* effect(
|
|
70
|
+
* { status: 'debt_current', purchaseCount: { '+': [{ var: 'state.purchaseCount' }, 1] } },
|
|
71
|
+
* { _triggers: [...] },
|
|
72
|
+
* transferAsset([{ assetId: { var: 'event.payAssetId' }, recipient: toFiber({ var: 'event.retailerId' }) }]),
|
|
73
|
+
* );
|
|
74
|
+
* // => { status, purchaseCount, _triggers, _transferAsset }
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
export declare function effect(stateUpdate: Record<string, unknown>, ...directives: Record<string, unknown>[]): Record<string, unknown>;
|
|
78
|
+
/** The machine package spec: identity (`name`@`version`) + the one canonical `app` + its schema shape. */
|
|
79
|
+
export interface MachineSpec<TState extends string = string, TEvent extends string = string> {
|
|
80
|
+
/** Full registry name `labels.tld` (e.g. `"consumer.package"`). */
|
|
81
|
+
name: string;
|
|
82
|
+
/** SemVer string (e.g. `"1.0.0"`). */
|
|
83
|
+
version: SemVer;
|
|
84
|
+
/** The typed fiber app; projected ONCE to the canonical wire definition via `toProtoDefinition`. */
|
|
85
|
+
app: FiberAppDefinition<TState, TEvent>;
|
|
86
|
+
/** The advisory proto projection the chain stores for discovery (carried onto `PublishMachineVersion.machineShape`). */
|
|
87
|
+
schemaShape: MachineShape;
|
|
88
|
+
}
|
|
89
|
+
/** Options for {@link Machine.publishVersion}. */
|
|
90
|
+
export interface PublishVersionOptions {
|
|
91
|
+
/** Opt-in runtime conformance gate (#33). Defaults to `false` (REQUIRED on the wire — never omitted). */
|
|
92
|
+
strict?: boolean;
|
|
93
|
+
/** Optional off-chain links grab-bag; OMITTED when absent (never `null`). */
|
|
94
|
+
metadata?: Record<string, string>;
|
|
95
|
+
/**
|
|
96
|
+
* Base64 of the proto FileDescriptorSet. REQUIRED on the wire `PublishMachineVersion` (the chain
|
|
97
|
+
* base64-validates + hashes it, then drops the bytes), so it is ALWAYS present; defaults to the empty
|
|
98
|
+
* string `''` (valid empty base64) when the skeleton has no descriptor set bound. The verified binding
|
|
99
|
+
* hangs on `definition.computeDigest`, NOT on this field.
|
|
100
|
+
*/
|
|
101
|
+
schemaB64?: string;
|
|
102
|
+
}
|
|
103
|
+
/** Options for {@link Machine.create}. */
|
|
104
|
+
export interface CreateOptions {
|
|
105
|
+
fiberId: string;
|
|
106
|
+
/** Seeded fiber state (e.g. from `seedState(...)`); pre-seed accumulators so no field reads `null`. */
|
|
107
|
+
initialData: JsonLogicValue;
|
|
108
|
+
/** Optional DAG addresses authorized to sign transitions; OMITTED when absent (never `null`). */
|
|
109
|
+
participants?: string[];
|
|
110
|
+
/** Optional parent fiber UUID; OMITTED when absent (never `null`). */
|
|
111
|
+
parentFiberId?: string;
|
|
112
|
+
}
|
|
113
|
+
/** Options for {@link Machine.upgradeFrom}. */
|
|
114
|
+
export interface UpgradeOptions {
|
|
115
|
+
fiberId: string;
|
|
116
|
+
targetSequenceNumber: number;
|
|
117
|
+
/** Optional JSON-Logic migration transform of the prior state; OMITTED when absent (never `null`). */
|
|
118
|
+
migration?: JsonLogicExpression;
|
|
119
|
+
}
|
|
120
|
+
/** The versioned-machine skeleton returned by {@link machine}. */
|
|
121
|
+
export interface Machine {
|
|
122
|
+
/** The ONE canonical wire definition (`toProtoDefinition(app)`), shared by publish + create. */
|
|
123
|
+
wireDefinition(): ProtoStateMachineDefinition;
|
|
124
|
+
/** The `PublishMachineVersion` body — its `definition` is the SAME object as `wireDefinition()`. */
|
|
125
|
+
publishVersion(o?: PublishVersionOptions): PublishMachineVersion;
|
|
126
|
+
/** The `CreateStateMachine` body — references `name@version` via `schemaRef` + the SAME `definition`. */
|
|
127
|
+
create(o: CreateOptions): CreateStateMachine;
|
|
128
|
+
/** The `UpgradeFiber` body — re-pins to `name@version` with the SAME `newDefinition`. */
|
|
129
|
+
upgradeFrom(o: UpgradeOptions): UpgradeFiber;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Build a versioned-machine skeleton that binds publish + create to ONE canonical definition.
|
|
133
|
+
*
|
|
134
|
+
* The definition is projected ONCE here (`toProtoDefinition(spec.app)`) and the SAME reference is handed
|
|
135
|
+
* to `wireDefinition()`, `publishVersion().definition`, `create().definition`, and
|
|
136
|
+
* `upgradeFrom().newDefinition` — so they cannot drift and the chain's verified binding admits the fiber
|
|
137
|
+
* (F9). REUSES `toProtoDefinition` (the single canonicalization path); never re-derives the wire shape.
|
|
138
|
+
*/
|
|
139
|
+
export declare function machine<TState extends string = string, TEvent extends string = string>(spec: MachineSpec<TState, TEvent>): Machine;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migration builders — the `UpgradeFiber.migration` JSON-Logic transform applied on a version upgrade.
|
|
3
|
+
*
|
|
4
|
+
* THE FOOT-GUN (F9): a migration's evaluation root is the BARE prior state, not `state.x`.
|
|
5
|
+
* The chain evaluates the migration expression against `sm.stateData` directly
|
|
6
|
+
* (`MeteredEvaluator.eval(expr, sm.stateData, Migration)`, FiberEngine.scala:300), so:
|
|
7
|
+
* - `{ var: '' }` => the WHOLE prior state object
|
|
8
|
+
* - `{ var: 'loyaltyPoints' }` => the top-level `loyaltyPoints` field
|
|
9
|
+
* This is UNLIKE an effect, where the root is the transition context and you read `{ var: 'state.x' }`.
|
|
10
|
+
* Writing `state.loyaltyPoints` in a migration silently reads `undefined`. These helpers hide that
|
|
11
|
+
* asymmetry by pinning the bare-state root for you.
|
|
12
|
+
*
|
|
13
|
+
* `migration` is `Option` on `UpgradeFiber` — when there is no transform, OMIT the key (never send `null`).
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Seed / overwrite top-level state fields on a version upgrade.
|
|
17
|
+
* Emits `{ merge: [{ var: '' }, fields] }` — merges `fields` onto the bare prior state, so existing
|
|
18
|
+
* fields are preserved and the named fields are added or overwritten.
|
|
19
|
+
*
|
|
20
|
+
* The `{ var: '' }` root is the BARE prior state (NOT `state.x` like an effect) — that asymmetry is
|
|
21
|
+
* exactly the F9 foot-gun this helper hides.
|
|
22
|
+
*
|
|
23
|
+
* @example seedFields({ loyaltyPoints: 0 }) // => { merge: [{ var: '' }, { loyaltyPoints: 0 }] }
|
|
24
|
+
*/
|
|
25
|
+
export declare const seedFields: (fields: Record<string, unknown>) => unknown;
|
|
26
|
+
/**
|
|
27
|
+
* General migration transform with the bare-state root made explicit. `build` receives `{ var: '' }`
|
|
28
|
+
* (the whole prior state) and returns the migration JSON-Logic.
|
|
29
|
+
*
|
|
30
|
+
* @example migration((s) => ({ merge: [s, { x: 1 }] })) // => { merge: [{ var: '' }, { x: 1 }] }
|
|
31
|
+
*/
|
|
32
|
+
export declare const migration: (build: (priorState: {
|
|
33
|
+
var: "";
|
|
34
|
+
}) => unknown) => unknown;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* State-shape-with-defaults — the SDK half of Proposal 01's "declared state shape" (removes F5).
|
|
3
|
+
*
|
|
4
|
+
* A declared shape carries a `default` (and optional `type`) per field. It seeds `initialData` so every
|
|
5
|
+
* accumulator starts at a concrete value — a counter read via `{ '+': [{ var: 'state.x' }, ...] }` never
|
|
6
|
+
* resolves `null` because `x` was never written. It also yields the set of declared field names for
|
|
7
|
+
* Proposal 01's var-path checks.
|
|
8
|
+
*/
|
|
9
|
+
import type { SchemaFieldType } from '../schema/fiber-app.js';
|
|
10
|
+
export interface StateShape {
|
|
11
|
+
fields: Record<string, {
|
|
12
|
+
default: unknown;
|
|
13
|
+
type?: SchemaFieldType;
|
|
14
|
+
}>;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Build `initialData` by overlaying `overrides` onto each field's declared `default`.
|
|
18
|
+
* Every declared field gets a concrete value, so no field reads `null` at runtime. An override for a
|
|
19
|
+
* field replaces that field's default; overrides for undeclared fields are ignored (only declared fields
|
|
20
|
+
* are emitted). Determinism: pure function of its inputs, stable key order (declared order).
|
|
21
|
+
*
|
|
22
|
+
* @example seedState({ fields: { purchaseCount: { default: 0 }, status: { default: 'ACTIVE' } } })
|
|
23
|
+
* // => { purchaseCount: 0, status: 'ACTIVE' }
|
|
24
|
+
*/
|
|
25
|
+
export declare function seedState(shape: StateShape, overrides?: Record<string, unknown>): Record<string, unknown>;
|
|
26
|
+
/**
|
|
27
|
+
* The set of declared state-field names — the fields the effects may read.
|
|
28
|
+
* Feeds Proposal 01's var-path checks (a `{ var: 'state.foo' }` whose `foo` is not declared is suspect).
|
|
29
|
+
*/
|
|
30
|
+
export declare function declaredFields(shape: StateShape): Set<string>;
|