@ottochain/sdk 2.4.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 +1 -1
- package/dist/cjs/apps/contracts/state-machines/contract-agreement.js +126 -148
- package/dist/cjs/apps/contracts/state-machines/contract-escrow.js +153 -174
- package/dist/cjs/apps/contracts/state-machines/contract-universal.js +46 -58
- package/dist/cjs/apps/corporate/state-machines/corp-board.js +415 -481
- package/dist/cjs/apps/corporate/state-machines/corp-entity.js +368 -440
- package/dist/cjs/apps/corporate/state-machines/corp-securities.js +532 -647
- package/dist/cjs/apps/corporate/state-machines/corp-shareholders.js +499 -603
- package/dist/cjs/apps/governance/index.js +7 -7
- package/dist/cjs/apps/governance/state-machines/dao-multisig.js +170 -209
- package/dist/cjs/apps/governance/state-machines/dao-reputation.js +161 -214
- package/dist/cjs/apps/governance/state-machines/dao-single.js +92 -92
- package/dist/cjs/apps/governance/state-machines/dao-token.js +169 -223
- package/dist/cjs/apps/governance/state-machines/governance-simple.js +185 -217
- package/dist/cjs/apps/governance/state-machines/governance-universal.js +64 -64
- package/dist/cjs/apps/identity/constants.js +16 -24
- package/dist/cjs/apps/identity/index.js +1 -1
- package/dist/cjs/apps/identity/state-machines/identity-agent.js +124 -158
- package/dist/cjs/apps/identity/state-machines/identity-oracle.js +151 -169
- package/dist/cjs/apps/identity/state-machines/identity-registry.js +89 -115
- package/dist/cjs/apps/identity/state-machines/identity-universal.js +51 -57
- package/dist/cjs/apps/index.js +4 -1
- package/dist/cjs/apps/lending/assets.js +41 -17
- package/dist/cjs/apps/lending/credit-scoring.js +4 -4
- package/dist/cjs/apps/lending/eligibility.js +9 -25
- package/dist/cjs/apps/lending/index.js +1 -1
- package/dist/cjs/apps/lending/state-machines/lending-zk-loan.js +177 -156
- package/dist/cjs/apps/markets/index.js +1 -1
- package/dist/cjs/apps/markets/state-machines/market-auction.js +115 -134
- package/dist/cjs/apps/markets/state-machines/market-crowdfund.js +122 -137
- package/dist/cjs/apps/markets/state-machines/market-group-buy.js +158 -177
- package/dist/cjs/apps/markets/state-machines/market-prediction.js +193 -227
- package/dist/cjs/apps/markets/state-machines/market-universal.js +65 -80
- package/dist/cjs/apps/oracles/index.js +1 -1
- package/dist/cjs/apps/privacy/index.js +67 -0
- package/dist/cjs/apps/privacy/state-machines/index.js +17 -0
- package/dist/cjs/apps/privacy/state-machines/mixer-ddhRing.js +286 -0
- package/dist/cjs/apps/privacy/state-machines/note-pool.js +476 -0
- package/dist/cjs/apps/staked-pool/assets.js +103 -0
- package/dist/cjs/apps/staked-pool/base.js +498 -0
- package/dist/cjs/apps/staked-pool/consumer.js +55 -0
- package/dist/cjs/apps/staked-pool/index.js +83 -0
- package/dist/cjs/apps/staked-pool/state-machines/index.js +12 -0
- package/dist/cjs/apps/staked-pool/state-machines/staked-pool-base.js +49 -0
- package/dist/cjs/apps/staked-pool/state-machines/staked-pool-oracle.js +131 -0
- package/dist/cjs/generated/google/protobuf/struct.js +1 -1
- package/dist/cjs/generated/google/protobuf/timestamp.js +1 -1
- package/dist/cjs/generated/ottochain/apps/contracts/v1/contract.js +1 -1
- package/dist/cjs/generated/ottochain/apps/corporate/v1/corporate.js +1 -1
- package/dist/cjs/generated/ottochain/apps/governance/v1/governance.js +1 -1
- package/dist/cjs/generated/ottochain/apps/identity/v1/attestation.js +1 -1
- package/dist/cjs/generated/ottochain/apps/identity/v1/identity.js +1 -1
- package/dist/cjs/generated/ottochain/apps/markets/v1/market.js +1 -1
- package/dist/cjs/generated/ottochain/v1/common.js +1 -1
- package/dist/cjs/generated/ottochain/v1/fiber.js +40 -2
- package/dist/cjs/generated/ottochain/v1/messages.js +1 -1
- package/dist/cjs/generated/ottochain/v1/records.js +1 -1
- package/dist/cjs/index.js +20 -3
- package/dist/cjs/ottochain/genesis-manifest.js +6 -0
- package/dist/cjs/ottochain/metagraph-client.js +16 -8
- package/dist/cjs/ottochain/snapshot.js +2 -4
- package/dist/cjs/ottochain/transaction.js +10 -0
- package/dist/cjs/privacy/sealed-bid.js +85 -82
- package/dist/cjs/privacy/shield-app.js +32 -32
- package/dist/cjs/schema/effects.js +117 -1
- package/dist/cjs/schema/fiber-app.js +132 -3
- package/dist/cjs/schema/guard-lint.js +3 -12
- package/dist/cjs/schema/guards.js +38 -38
- package/dist/cjs/templates/asset-policy.js +190 -0
- package/dist/cjs/templates/index.js +86 -0
- package/dist/cjs/templates/machine.js +130 -0
- package/dist/cjs/templates/migration.js +39 -0
- package/dist/cjs/templates/state-shape.js +38 -0
- package/dist/cjs/validation.js +1 -3
- package/dist/esm/apps/compute/index.js +29 -0
- package/dist/esm/apps/compute/state-machines/compute-rule110.js +161 -0
- package/dist/esm/apps/compute/state-machines/index.js +5 -0
- package/dist/esm/apps/contracts/index.js +4 -4
- package/dist/esm/apps/contracts/state-machines/contract-agreement.js +128 -150
- package/dist/esm/apps/contracts/state-machines/contract-escrow.js +155 -176
- package/dist/esm/apps/contracts/state-machines/contract-universal.js +47 -59
- package/dist/esm/apps/corporate/index.js +2 -2
- package/dist/esm/apps/corporate/state-machines/corp-board.js +418 -484
- package/dist/esm/apps/corporate/state-machines/corp-entity.js +371 -443
- package/dist/esm/apps/corporate/state-machines/corp-securities.js +535 -650
- package/dist/esm/apps/corporate/state-machines/corp-shareholders.js +502 -606
- package/dist/esm/apps/governance/index.js +10 -10
- package/dist/esm/apps/governance/state-machines/dao-multisig.js +172 -211
- package/dist/esm/apps/governance/state-machines/dao-reputation.js +163 -216
- package/dist/esm/apps/governance/state-machines/dao-single.js +94 -94
- package/dist/esm/apps/governance/state-machines/dao-token.js +171 -225
- package/dist/esm/apps/governance/state-machines/governance-simple.js +187 -219
- package/dist/esm/apps/governance/state-machines/governance-universal.js +65 -65
- package/dist/esm/apps/identity/constants.js +18 -26
- package/dist/esm/apps/identity/index.js +8 -8
- package/dist/esm/apps/identity/state-machines/identity-agent.js +125 -159
- package/dist/esm/apps/identity/state-machines/identity-oracle.js +153 -171
- package/dist/esm/apps/identity/state-machines/identity-registry.js +91 -117
- package/dist/esm/apps/identity/state-machines/identity-universal.js +52 -58
- package/dist/esm/apps/index.js +9 -6
- package/dist/esm/apps/lending/assets.js +41 -17
- package/dist/esm/apps/lending/credit-scoring.js +6 -6
- package/dist/esm/apps/lending/eligibility.js +10 -26
- package/dist/esm/apps/lending/index.js +5 -5
- package/dist/esm/apps/lending/state-machines/lending-zk-loan.js +178 -157
- package/dist/esm/apps/markets/index.js +5 -5
- package/dist/esm/apps/markets/state-machines/market-auction.js +117 -136
- package/dist/esm/apps/markets/state-machines/market-crowdfund.js +124 -139
- package/dist/esm/apps/markets/state-machines/market-group-buy.js +160 -179
- package/dist/esm/apps/markets/state-machines/market-prediction.js +195 -229
- package/dist/esm/apps/markets/state-machines/market-universal.js +66 -81
- package/dist/esm/apps/oracles/index.js +3 -3
- package/dist/esm/apps/privacy/index.js +56 -0
- package/dist/esm/apps/privacy/state-machines/index.js +6 -0
- package/dist/esm/apps/privacy/state-machines/mixer-ddhRing.js +282 -0
- package/dist/esm/apps/privacy/state-machines/note-pool.js +470 -0
- package/dist/esm/apps/staked-pool/assets.js +91 -0
- package/dist/esm/apps/staked-pool/base.js +493 -0
- package/dist/esm/apps/staked-pool/consumer.js +49 -0
- package/dist/esm/apps/staked-pool/index.js +60 -0
- package/dist/esm/apps/staked-pool/state-machines/index.js +6 -0
- package/dist/esm/apps/staked-pool/state-machines/staked-pool-base.js +46 -0
- package/dist/esm/apps/staked-pool/state-machines/staked-pool-oracle.js +127 -0
- package/dist/esm/generated/google/protobuf/struct.js +1 -1
- package/dist/esm/generated/google/protobuf/timestamp.js +1 -1
- package/dist/esm/generated/ottochain/apps/contracts/v1/contract.js +1 -1
- package/dist/esm/generated/ottochain/apps/corporate/v1/corporate.js +1 -1
- package/dist/esm/generated/ottochain/apps/governance/v1/governance.js +1 -1
- package/dist/esm/generated/ottochain/apps/identity/v1/attestation.js +1 -1
- package/dist/esm/generated/ottochain/apps/identity/v1/identity.js +1 -1
- package/dist/esm/generated/ottochain/apps/markets/v1/market.js +1 -1
- package/dist/esm/generated/ottochain/v1/common.js +1 -1
- package/dist/esm/generated/ottochain/v1/fiber.js +40 -2
- package/dist/esm/generated/ottochain/v1/messages.js +1 -1
- package/dist/esm/generated/ottochain/v1/records.js +1 -1
- package/dist/esm/index.js +10 -4
- package/dist/esm/ottochain/genesis-manifest.js +6 -0
- package/dist/esm/ottochain/metagraph-client.js +16 -8
- package/dist/esm/ottochain/snapshot.js +2 -4
- package/dist/esm/ottochain/transaction.js +8 -0
- package/dist/esm/privacy/index.js +2 -2
- package/dist/esm/privacy/sealed-bid.js +87 -84
- package/dist/esm/privacy/shield-app.js +33 -33
- package/dist/esm/schema/effects.js +110 -0
- package/dist/esm/schema/fiber-app.js +127 -3
- package/dist/esm/schema/guard-lint.js +3 -12
- package/dist/esm/schema/guards.js +36 -37
- package/dist/esm/templates/asset-policy.js +182 -0
- package/dist/esm/templates/index.js +41 -0
- package/dist/esm/templates/machine.js +125 -0
- package/dist/esm/templates/migration.js +34 -0
- package/dist/esm/templates/state-shape.js +34 -0
- package/dist/esm/validation.js +1 -3
- package/dist/esm/zk/index.js +4 -4
- package/dist/types/apps/compute/index.d.ts +176 -0
- package/dist/types/apps/compute/state-machines/compute-rule110.d.ts +157 -0
- package/dist/types/apps/compute/state-machines/index.d.ts +5 -0
- package/dist/types/apps/contracts/index.d.ts +14 -14
- package/dist/types/apps/contracts/state-machines/contract-agreement.d.ts +3 -3
- package/dist/types/apps/contracts/state-machines/contract-escrow.d.ts +3 -3
- package/dist/types/apps/contracts/state-machines/contract-universal.d.ts +4 -4
- package/dist/types/apps/corporate/index.d.ts +162 -162
- package/dist/types/apps/corporate/state-machines/corp-board.d.ts +88 -88
- package/dist/types/apps/corporate/state-machines/corp-entity.d.ts +14 -14
- package/dist/types/apps/corporate/state-machines/corp-securities.d.ts +18 -18
- package/dist/types/apps/corporate/state-machines/corp-shareholders.d.ts +43 -43
- package/dist/types/apps/governance/index.d.ts +81 -81
- package/dist/types/apps/governance/state-machines/dao-multisig.d.ts +16 -16
- package/dist/types/apps/governance/state-machines/dao-reputation.d.ts +22 -22
- package/dist/types/apps/governance/state-machines/dao-token.d.ts +21 -21
- package/dist/types/apps/governance/state-machines/governance-simple.d.ts +11 -11
- package/dist/types/apps/governance/state-machines/governance-universal.d.ts +4 -4
- package/dist/types/apps/identity/constants.d.ts +2 -2
- package/dist/types/apps/identity/index.d.ts +70 -70
- package/dist/types/apps/identity/state-machines/identity-agent.d.ts +23 -23
- package/dist/types/apps/identity/state-machines/identity-oracle.d.ts +11 -11
- package/dist/types/apps/identity/state-machines/identity-registry.d.ts +27 -27
- package/dist/types/apps/identity/state-machines/identity-universal.d.ts +4 -4
- package/dist/types/apps/index.d.ts +9 -6
- package/dist/types/apps/lending/assets.d.ts +2 -2
- package/dist/types/apps/lending/credit-scoring.d.ts +5 -5
- package/dist/types/apps/lending/eligibility.d.ts +2 -2
- package/dist/types/apps/lending/index.d.ts +20 -12
- package/dist/types/apps/lending/state-machines/lending-zk-loan.d.ts +15 -7
- package/dist/types/apps/markets/index.d.ts +76 -76
- package/dist/types/apps/markets/state-machines/market-auction.d.ts +12 -12
- package/dist/types/apps/markets/state-machines/market-crowdfund.d.ts +19 -19
- package/dist/types/apps/markets/state-machines/market-group-buy.d.ts +18 -18
- package/dist/types/apps/markets/state-machines/market-prediction.d.ts +15 -15
- package/dist/types/apps/markets/state-machines/market-universal.d.ts +7 -7
- package/dist/types/apps/oracles/index.d.ts +1 -1
- package/dist/types/apps/privacy/index.d.ts +328 -0
- package/dist/types/apps/privacy/state-machines/index.d.ts +6 -0
- package/dist/types/apps/privacy/state-machines/mixer-ddhRing.d.ts +337 -0
- package/dist/types/apps/privacy/state-machines/note-pool.d.ts +196 -0
- package/dist/types/apps/staked-pool/assets.d.ts +53 -0
- package/dist/types/apps/staked-pool/base.d.ts +80 -0
- package/dist/types/apps/staked-pool/consumer.d.ts +29 -0
- package/dist/types/apps/staked-pool/index.d.ts +51 -0
- package/dist/types/apps/staked-pool/state-machines/index.d.ts +6 -0
- package/dist/types/apps/staked-pool/state-machines/staked-pool-base.d.ts +8 -0
- package/dist/types/apps/staked-pool/state-machines/staked-pool-oracle.d.ts +34 -0
- package/dist/types/generated/openapi.d.ts +13 -0
- package/dist/types/generated/ottochain/v1/fiber.d.ts +7 -0
- package/dist/types/index.d.ts +3 -3
- package/dist/types/openapi.d.ts +4 -2
- package/dist/types/ottochain/genesis-manifest.d.ts +6 -0
- package/dist/types/ottochain/transaction.d.ts +9 -1
- package/dist/types/ottochain/types.d.ts +1 -1
- package/dist/types/privacy/index.d.ts +2 -2
- package/dist/types/privacy/sealed-bid.d.ts +9 -9
- package/dist/types/privacy/shield-app.d.ts +1 -1
- package/dist/types/schema/effects.d.ts +107 -0
- package/dist/types/schema/fiber-app.d.ts +281 -0
- package/dist/types/schema/guards.d.ts +12 -0
- package/dist/types/templates/asset-policy.d.ts +119 -0
- package/dist/types/templates/index.d.ts +26 -0
- package/dist/types/templates/machine.d.ts +139 -0
- package/dist/types/templates/migration.d.ts +34 -0
- package/dist/types/templates/state-shape.d.ts +30 -0
- package/dist/types/zk/index.d.ts +4 -4
- package/package.json +31 -13
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineFiberApp } from
|
|
1
|
+
import { defineFiberApp } from '../../../schema/fiber-app.js';
|
|
2
2
|
/**
|
|
3
3
|
* Privacy-preserving zk-loan — a private-finance lending fiber modeled on Midnight's
|
|
4
4
|
* zkLoan example, integrated with OttoChain's asset subsystem.
|
|
@@ -32,251 +32,262 @@ import { defineFiberApp } from "../../../schema/fiber-app.js";
|
|
|
32
32
|
*/
|
|
33
33
|
export const lendingZkLoanDef = defineFiberApp({
|
|
34
34
|
metadata: {
|
|
35
|
-
name:
|
|
36
|
-
app:
|
|
37
|
-
type:
|
|
38
|
-
version:
|
|
39
|
-
description:
|
|
35
|
+
name: 'LendingZkLoan',
|
|
36
|
+
app: 'lending',
|
|
37
|
+
type: 'zkLoan',
|
|
38
|
+
version: '1.0.0',
|
|
39
|
+
description: 'Privacy-preserving collateralized loan: the borrower proves loan eligibility (collateral coverage / credit-score floor) in zero-knowledge without revealing the financials; collateral, principal and repayment are asset-subsystem tokens driven by the loan lifecycle.',
|
|
40
40
|
crossReferences: {
|
|
41
41
|
borrowerIdentityId: "Links to the borrower's IdentityAgent",
|
|
42
42
|
lenderIdentityId: "Links to the lender's IdentityAgent (loan originator)",
|
|
43
43
|
collateralAssetId: "Asset instance locked as collateral (held by the loan's escrow fiber)",
|
|
44
|
-
debtAssetId:
|
|
44
|
+
debtAssetId: 'Asset instance representing the outstanding loan principal/debt minted to the borrower',
|
|
45
45
|
},
|
|
46
46
|
},
|
|
47
47
|
createSchema: {
|
|
48
48
|
required: [
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
49
|
+
'borrower',
|
|
50
|
+
'lender',
|
|
51
|
+
'principalAmount',
|
|
52
|
+
'collateralAssetId',
|
|
53
|
+
'collateralPolicy',
|
|
54
|
+
'debtPolicy',
|
|
55
|
+
'lendingRuleVKey',
|
|
56
|
+
'lendingRuleLogicHash',
|
|
57
|
+
'keccakTrue',
|
|
58
58
|
],
|
|
59
59
|
properties: {
|
|
60
60
|
borrower: {
|
|
61
|
-
type:
|
|
62
|
-
description:
|
|
61
|
+
type: 'address',
|
|
62
|
+
description: 'DAG address of the borrower',
|
|
63
63
|
immutable: true,
|
|
64
64
|
},
|
|
65
65
|
lender: {
|
|
66
|
-
type:
|
|
67
|
-
description:
|
|
66
|
+
type: 'address',
|
|
67
|
+
description: 'DAG address of the lender / loan originator',
|
|
68
68
|
immutable: true,
|
|
69
69
|
},
|
|
70
70
|
principalAmount: {
|
|
71
|
-
type:
|
|
72
|
-
description:
|
|
71
|
+
type: 'integer',
|
|
72
|
+
description: 'PUBLIC loan principal (asset minor-units). The financials backing eligibility stay private.',
|
|
73
73
|
minimum: 1,
|
|
74
74
|
immutable: true,
|
|
75
75
|
},
|
|
76
76
|
collateralAssetId: {
|
|
77
|
-
type:
|
|
78
|
-
description:
|
|
77
|
+
type: 'uuid',
|
|
78
|
+
description: 'Asset instance id pledged as collateral (its private valuation is never revealed).',
|
|
79
79
|
immutable: true,
|
|
80
80
|
},
|
|
81
81
|
collateralPolicy: {
|
|
82
|
-
type:
|
|
82
|
+
type: 'string',
|
|
83
83
|
description: "Collateral asset policy name (e.g. 'collateral-vault-v1.asset').",
|
|
84
84
|
immutable: true,
|
|
85
85
|
},
|
|
86
86
|
debtPolicy: {
|
|
87
|
-
type:
|
|
87
|
+
type: 'string',
|
|
88
88
|
description: "Debt/loan-token asset policy name (e.g. 'loan-debt-v1.asset').",
|
|
89
89
|
immutable: true,
|
|
90
90
|
},
|
|
91
91
|
escrowFiberId: {
|
|
92
|
-
type:
|
|
93
|
-
description:
|
|
92
|
+
type: 'uuid',
|
|
93
|
+
description: 'Fiber that custodies the locked collateral (AssetHolder.Fiber). Defaults to this loan fiber.',
|
|
94
94
|
},
|
|
95
95
|
lendingRuleVKey: {
|
|
96
|
-
type:
|
|
97
|
-
description:
|
|
96
|
+
type: 'hash',
|
|
97
|
+
description: 'PINNED SP1 program verifying key (bytes32, 0x-hex) for the eligibility circuit.',
|
|
98
98
|
immutable: true,
|
|
99
99
|
},
|
|
100
100
|
lendingRuleLogicHash: {
|
|
101
|
-
type:
|
|
101
|
+
type: 'hash',
|
|
102
102
|
description: "PINNED logicHash of the public lending rule = keccak256(canonicalize(rule)). The proof's committed exprHash must equal this.",
|
|
103
103
|
immutable: true,
|
|
104
104
|
},
|
|
105
105
|
keccakTrue: {
|
|
106
|
-
type:
|
|
106
|
+
type: 'hash',
|
|
107
107
|
description: "PINNED keccak256(canonicalize(true)) — the outputHash a 'rule returned true' proof must commit.",
|
|
108
108
|
immutable: true,
|
|
109
109
|
},
|
|
110
110
|
dueOrdinal: {
|
|
111
|
-
type:
|
|
112
|
-
description:
|
|
111
|
+
type: 'integer',
|
|
112
|
+
description: 'Optional snapshot ordinal by which repayment is due.',
|
|
113
113
|
minimum: 0,
|
|
114
114
|
},
|
|
115
115
|
},
|
|
116
116
|
},
|
|
117
117
|
stateSchema: {
|
|
118
118
|
properties: {
|
|
119
|
-
status: { type:
|
|
120
|
-
borrower: { type:
|
|
121
|
-
lender: { type:
|
|
122
|
-
principalAmount: { type:
|
|
123
|
-
collateralAssetId: { type:
|
|
124
|
-
collateralPolicy: { type:
|
|
125
|
-
debtPolicy: { type:
|
|
126
|
-
escrowFiberId: { type:
|
|
127
|
-
debtAssetId: { type:
|
|
128
|
-
lendingRuleVKey: { type:
|
|
129
|
-
lendingRuleLogicHash: { type:
|
|
130
|
-
keccakTrue: { type:
|
|
131
|
-
dueOrdinal: { type:
|
|
132
|
-
lockedAt: { type:
|
|
133
|
-
originatedAt: { type:
|
|
134
|
-
repaidAt: { type:
|
|
135
|
-
defaultedAt: { type:
|
|
136
|
-
liquidatedAt: { type:
|
|
119
|
+
status: { type: 'string', computed: true },
|
|
120
|
+
borrower: { type: 'address', immutable: true },
|
|
121
|
+
lender: { type: 'address', immutable: true },
|
|
122
|
+
principalAmount: { type: 'integer', immutable: true },
|
|
123
|
+
collateralAssetId: { type: 'uuid', immutable: true },
|
|
124
|
+
collateralPolicy: { type: 'string', immutable: true },
|
|
125
|
+
debtPolicy: { type: 'string', immutable: true },
|
|
126
|
+
escrowFiberId: { type: 'uuid' },
|
|
127
|
+
debtAssetId: { type: 'uuid', computed: true },
|
|
128
|
+
lendingRuleVKey: { type: 'hash', immutable: true },
|
|
129
|
+
lendingRuleLogicHash: { type: 'hash', immutable: true },
|
|
130
|
+
keccakTrue: { type: 'hash', immutable: true },
|
|
131
|
+
dueOrdinal: { type: 'integer' },
|
|
132
|
+
lockedAt: { type: 'integer', computed: true },
|
|
133
|
+
originatedAt: { type: 'integer', computed: true },
|
|
134
|
+
repaidAt: { type: 'integer', computed: true },
|
|
135
|
+
defaultedAt: { type: 'integer', computed: true },
|
|
136
|
+
liquidatedAt: { type: 'integer', computed: true },
|
|
137
137
|
},
|
|
138
138
|
},
|
|
139
139
|
eventSchemas: {
|
|
140
140
|
lock_collateral: {
|
|
141
|
-
description:
|
|
141
|
+
description: 'Borrower locks the pledged collateral asset into the loan escrow fiber (drives an asset Transfer/Mint into AssetHolder.Fiber).',
|
|
142
142
|
},
|
|
143
143
|
originate: {
|
|
144
144
|
description: "Lender originates the loan after the borrower's zk eligibility proof verifies. The witness carries the SP1-Groth16 {publicValues, proof}; the guard binds them to the pinned public lending rule. The effect mints the debt/principal asset to the borrower.",
|
|
145
|
-
required: [
|
|
145
|
+
required: ['witness', 'debtAssetId'],
|
|
146
146
|
properties: {
|
|
147
147
|
witness: {
|
|
148
|
-
type:
|
|
149
|
-
description:
|
|
148
|
+
type: 'object',
|
|
149
|
+
description: 'Eligibility-proof witness: { publicValues: 0x-hex, proof: 0x-hex }. Exposed to the guard under the reserved `witness` key.',
|
|
150
150
|
properties: {
|
|
151
|
-
publicValues: {
|
|
152
|
-
|
|
151
|
+
publicValues: {
|
|
152
|
+
type: 'string',
|
|
153
|
+
description: 'abi_encode(JlvmPublicValues), 0x-hex.',
|
|
154
|
+
},
|
|
155
|
+
proof: {
|
|
156
|
+
type: 'string',
|
|
157
|
+
description: 'SP1-Groth16 proof bytes, 0x-hex.',
|
|
158
|
+
},
|
|
153
159
|
},
|
|
154
|
-
required: [
|
|
160
|
+
required: ['publicValues', 'proof'],
|
|
155
161
|
},
|
|
156
162
|
debtAssetId: {
|
|
157
|
-
type:
|
|
158
|
-
description:
|
|
163
|
+
type: 'uuid',
|
|
164
|
+
description: 'Asset instance id for the debt/principal token minted to the borrower.',
|
|
159
165
|
},
|
|
160
166
|
},
|
|
161
167
|
},
|
|
162
168
|
repay: {
|
|
163
|
-
description:
|
|
169
|
+
description: 'Borrower repays the principal (drives a Burn of the debt token); on success the collateral is released back to the borrower via the escrow fiber.',
|
|
164
170
|
},
|
|
165
171
|
default_loan: {
|
|
166
|
-
description:
|
|
172
|
+
description: 'Mark the loan defaulted once past due (drives the collateral toward liquidation).',
|
|
167
173
|
},
|
|
168
174
|
liquidate: {
|
|
169
|
-
description:
|
|
175
|
+
description: 'Lender liquidates a defaulted loan: the locked collateral is transferred to the lender via the escrow fiber.',
|
|
170
176
|
},
|
|
171
177
|
cancel: {
|
|
172
|
-
description:
|
|
173
|
-
properties: { reason: { type:
|
|
178
|
+
description: 'Cancel a loan request before collateral is locked.',
|
|
179
|
+
properties: { reason: { type: 'string' } },
|
|
174
180
|
},
|
|
175
181
|
},
|
|
176
182
|
states: {
|
|
177
183
|
REQUESTED: {
|
|
178
|
-
id:
|
|
184
|
+
id: 'REQUESTED',
|
|
179
185
|
isFinal: false,
|
|
180
186
|
metadata: {
|
|
181
|
-
label:
|
|
182
|
-
description:
|
|
183
|
-
category:
|
|
187
|
+
label: 'Requested',
|
|
188
|
+
description: 'Loan requested; collateral not yet locked, eligibility not yet proven.',
|
|
189
|
+
category: 'initial',
|
|
184
190
|
},
|
|
185
191
|
},
|
|
186
192
|
COLLATERAL_LOCKED: {
|
|
187
|
-
id:
|
|
193
|
+
id: 'COLLATERAL_LOCKED',
|
|
188
194
|
isFinal: false,
|
|
189
195
|
metadata: {
|
|
190
|
-
label:
|
|
196
|
+
label: 'Collateral Locked',
|
|
191
197
|
description: "Collateral asset escrowed in the loan fiber; awaiting the lender's zk-gated origination.",
|
|
192
|
-
category:
|
|
198
|
+
category: 'pending',
|
|
193
199
|
},
|
|
194
200
|
},
|
|
195
201
|
ACTIVE: {
|
|
196
|
-
id:
|
|
202
|
+
id: 'ACTIVE',
|
|
197
203
|
isFinal: false,
|
|
198
204
|
metadata: {
|
|
199
|
-
label:
|
|
200
|
-
description:
|
|
201
|
-
category:
|
|
205
|
+
label: 'Active',
|
|
206
|
+
description: 'Loan originated (eligibility proven in zk); principal minted to the borrower.',
|
|
207
|
+
category: 'active',
|
|
202
208
|
},
|
|
203
209
|
},
|
|
204
210
|
DEFAULTED: {
|
|
205
|
-
id:
|
|
211
|
+
id: 'DEFAULTED',
|
|
206
212
|
isFinal: false,
|
|
207
213
|
metadata: {
|
|
208
|
-
label:
|
|
209
|
-
description:
|
|
210
|
-
category:
|
|
214
|
+
label: 'Defaulted',
|
|
215
|
+
description: 'Loan past due and unpaid; collateral pending liquidation.',
|
|
216
|
+
category: 'pending',
|
|
211
217
|
},
|
|
212
218
|
},
|
|
213
219
|
REPAID: {
|
|
214
|
-
id:
|
|
220
|
+
id: 'REPAID',
|
|
215
221
|
isFinal: true,
|
|
216
222
|
metadata: {
|
|
217
|
-
label:
|
|
218
|
-
description:
|
|
219
|
-
category:
|
|
223
|
+
label: 'Repaid',
|
|
224
|
+
description: 'Principal repaid (debt burned) and collateral released to the borrower.',
|
|
225
|
+
category: 'terminal',
|
|
220
226
|
},
|
|
221
227
|
},
|
|
222
228
|
LIQUIDATED: {
|
|
223
|
-
id:
|
|
229
|
+
id: 'LIQUIDATED',
|
|
224
230
|
isFinal: true,
|
|
225
231
|
metadata: {
|
|
226
|
-
label:
|
|
227
|
-
description:
|
|
228
|
-
category:
|
|
232
|
+
label: 'Liquidated',
|
|
233
|
+
description: 'Defaulted loan settled by transferring the collateral to the lender.',
|
|
234
|
+
category: 'terminal',
|
|
229
235
|
},
|
|
230
236
|
},
|
|
231
237
|
CANCELLED: {
|
|
232
|
-
id:
|
|
238
|
+
id: 'CANCELLED',
|
|
233
239
|
isFinal: true,
|
|
234
240
|
metadata: {
|
|
235
|
-
label:
|
|
236
|
-
description:
|
|
237
|
-
category:
|
|
241
|
+
label: 'Cancelled',
|
|
242
|
+
description: 'Loan request cancelled before any collateral was locked.',
|
|
243
|
+
category: 'terminal',
|
|
238
244
|
},
|
|
239
245
|
},
|
|
240
246
|
},
|
|
241
|
-
initialState:
|
|
247
|
+
initialState: 'REQUESTED',
|
|
242
248
|
transitions: [
|
|
243
249
|
// Borrower locks collateral into the escrow fiber.
|
|
244
250
|
{
|
|
245
|
-
from:
|
|
246
|
-
to:
|
|
247
|
-
eventName:
|
|
251
|
+
from: 'REQUESTED',
|
|
252
|
+
to: 'COLLATERAL_LOCKED',
|
|
253
|
+
eventName: 'lock_collateral',
|
|
248
254
|
guard: {
|
|
249
255
|
and: [
|
|
250
|
-
{
|
|
251
|
-
|
|
256
|
+
{
|
|
257
|
+
in: [{ var: 'state.borrower' }, { map: [{ var: 'proofs' }, { var: 'address' }] }],
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
'===': [{ var: 'event.assetId' }, { var: 'state.collateralAssetId' }],
|
|
261
|
+
},
|
|
252
262
|
],
|
|
253
263
|
},
|
|
254
264
|
effect: {
|
|
255
|
-
merge: [
|
|
256
|
-
{ var: "state" },
|
|
257
|
-
{ status: "COLLATERAL_LOCKED", lockedAt: { var: "$ordinal" } },
|
|
258
|
-
],
|
|
265
|
+
merge: [{ var: 'state' }, { status: 'COLLATERAL_LOCKED', lockedAt: { var: '$ordinal' } }],
|
|
259
266
|
},
|
|
260
267
|
dependencies: [],
|
|
261
268
|
},
|
|
262
269
|
// Cancel a request before any collateral is locked.
|
|
263
270
|
{
|
|
264
|
-
from:
|
|
265
|
-
to:
|
|
266
|
-
eventName:
|
|
271
|
+
from: 'REQUESTED',
|
|
272
|
+
to: 'CANCELLED',
|
|
273
|
+
eventName: 'cancel',
|
|
267
274
|
guard: {
|
|
268
275
|
or: [
|
|
269
|
-
{
|
|
270
|
-
|
|
276
|
+
{
|
|
277
|
+
in: [{ var: 'state.borrower' }, { map: [{ var: 'proofs' }, { var: 'address' }] }],
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
in: [{ var: 'state.lender' }, { map: [{ var: 'proofs' }, { var: 'address' }] }],
|
|
281
|
+
},
|
|
271
282
|
],
|
|
272
283
|
},
|
|
273
284
|
effect: {
|
|
274
285
|
merge: [
|
|
275
|
-
{ var:
|
|
286
|
+
{ var: 'state' },
|
|
276
287
|
{
|
|
277
|
-
status:
|
|
278
|
-
cancelledAt: { var:
|
|
279
|
-
reason: { var:
|
|
288
|
+
status: 'CANCELLED',
|
|
289
|
+
cancelledAt: { var: '$ordinal' },
|
|
290
|
+
reason: { var: 'event.reason' },
|
|
280
291
|
},
|
|
281
292
|
],
|
|
282
293
|
},
|
|
@@ -296,33 +307,39 @@ export const lendingZkLoanDef = defineFiberApp({
|
|
|
296
307
|
// 4. outputHash == keccakTrue — the rule evaluated to true
|
|
297
308
|
// 5. ok bit (last hex pair of word 3) == "01" — the JLVM run did not error
|
|
298
309
|
{
|
|
299
|
-
from:
|
|
300
|
-
to:
|
|
301
|
-
eventName:
|
|
310
|
+
from: 'COLLATERAL_LOCKED',
|
|
311
|
+
to: 'ACTIVE',
|
|
312
|
+
eventName: 'originate',
|
|
302
313
|
guard: {
|
|
303
314
|
and: [
|
|
304
|
-
{
|
|
315
|
+
{
|
|
316
|
+
in: [{ var: 'state.lender' }, { map: [{ var: 'proofs' }, { var: 'address' }] }],
|
|
317
|
+
},
|
|
305
318
|
{
|
|
306
319
|
groth16_verify: [
|
|
307
|
-
{ var:
|
|
308
|
-
{ var:
|
|
309
|
-
{ var:
|
|
320
|
+
{ var: 'state.lendingRuleVKey' },
|
|
321
|
+
{ var: 'event.witness.publicValues' },
|
|
322
|
+
{ var: 'event.witness.proof' },
|
|
310
323
|
],
|
|
311
324
|
},
|
|
312
325
|
{
|
|
313
|
-
|
|
314
|
-
{
|
|
315
|
-
|
|
326
|
+
'===': [
|
|
327
|
+
{
|
|
328
|
+
cat: ['0x', { substr: [{ var: 'event.witness.publicValues' }, 2, 64] }],
|
|
329
|
+
},
|
|
330
|
+
{ var: 'state.lendingRuleLogicHash' },
|
|
316
331
|
],
|
|
317
332
|
},
|
|
318
333
|
{
|
|
319
|
-
|
|
320
|
-
{
|
|
321
|
-
|
|
334
|
+
'===': [
|
|
335
|
+
{
|
|
336
|
+
cat: ['0x', { substr: [{ var: 'event.witness.publicValues' }, 130, 64] }],
|
|
337
|
+
},
|
|
338
|
+
{ var: 'state.keccakTrue' },
|
|
322
339
|
],
|
|
323
340
|
},
|
|
324
341
|
{
|
|
325
|
-
|
|
342
|
+
'===': [{ substr: [{ var: 'event.witness.publicValues' }, 256, 2] }, '01'],
|
|
326
343
|
},
|
|
327
344
|
],
|
|
328
345
|
},
|
|
@@ -330,11 +347,11 @@ export const lendingZkLoanDef = defineFiberApp({
|
|
|
330
347
|
// debt asset id, and activates the loan.
|
|
331
348
|
effect: {
|
|
332
349
|
merge: [
|
|
333
|
-
{ var:
|
|
350
|
+
{ var: 'state' },
|
|
334
351
|
{
|
|
335
|
-
status:
|
|
336
|
-
originatedAt: { var:
|
|
337
|
-
debtAssetId: { var:
|
|
352
|
+
status: 'ACTIVE',
|
|
353
|
+
originatedAt: { var: '$ordinal' },
|
|
354
|
+
debtAssetId: { var: 'event.debtAssetId' },
|
|
338
355
|
},
|
|
339
356
|
],
|
|
340
357
|
},
|
|
@@ -342,22 +359,27 @@ export const lendingZkLoanDef = defineFiberApp({
|
|
|
342
359
|
},
|
|
343
360
|
// Borrower repays — debt is burned, collateral released back to the borrower.
|
|
344
361
|
{
|
|
345
|
-
from:
|
|
346
|
-
to:
|
|
347
|
-
eventName:
|
|
348
|
-
guard: {
|
|
362
|
+
from: 'ACTIVE',
|
|
363
|
+
to: 'REPAID',
|
|
364
|
+
eventName: 'repay',
|
|
365
|
+
guard: {
|
|
366
|
+
in: [{ var: 'state.borrower' }, { map: [{ var: 'proofs' }, { var: 'address' }] }],
|
|
367
|
+
},
|
|
349
368
|
// Release the escrowed collateral back to the borrower. The loan fiber HOLDS the collateral
|
|
350
369
|
// (locked as AssetHolder.Fiber), so it emits the reserved `_transferAsset` directive from inside
|
|
351
370
|
// the effect — the engine extracts `_`-prefixed keys (it is NOT merged into state). A transition-
|
|
352
371
|
// level `emits` block is silently dropped by toProtoDefinition, which would strand the collateral.
|
|
353
372
|
effect: {
|
|
354
373
|
merge: [
|
|
355
|
-
{ var:
|
|
374
|
+
{ var: 'state' },
|
|
356
375
|
{
|
|
357
|
-
status:
|
|
358
|
-
repaidAt: { var:
|
|
376
|
+
status: 'REPAID',
|
|
377
|
+
repaidAt: { var: '$ordinal' },
|
|
359
378
|
_transferAsset: [
|
|
360
|
-
{
|
|
379
|
+
{
|
|
380
|
+
assetId: { var: 'state.collateralAssetId' },
|
|
381
|
+
recipient: { Wallet: { address: { var: 'state.borrower' } } },
|
|
382
|
+
},
|
|
361
383
|
],
|
|
362
384
|
},
|
|
363
385
|
],
|
|
@@ -366,39 +388,38 @@ export const lendingZkLoanDef = defineFiberApp({
|
|
|
366
388
|
},
|
|
367
389
|
// Loan goes past due → defaulted.
|
|
368
390
|
{
|
|
369
|
-
from:
|
|
370
|
-
to:
|
|
371
|
-
eventName:
|
|
391
|
+
from: 'ACTIVE',
|
|
392
|
+
to: 'DEFAULTED',
|
|
393
|
+
eventName: 'default_loan',
|
|
372
394
|
guard: {
|
|
373
|
-
and: [
|
|
374
|
-
{ var: "state.dueOrdinal" },
|
|
375
|
-
{ ">=": [{ var: "$ordinal" }, { var: "state.dueOrdinal" }] },
|
|
376
|
-
],
|
|
395
|
+
and: [{ var: 'state.dueOrdinal' }, { '>=': [{ var: '$ordinal' }, { var: 'state.dueOrdinal' }] }],
|
|
377
396
|
},
|
|
378
397
|
effect: {
|
|
379
|
-
merge: [
|
|
380
|
-
{ var: "state" },
|
|
381
|
-
{ status: "DEFAULTED", defaultedAt: { var: "$ordinal" } },
|
|
382
|
-
],
|
|
398
|
+
merge: [{ var: 'state' }, { status: 'DEFAULTED', defaultedAt: { var: '$ordinal' } }],
|
|
383
399
|
},
|
|
384
400
|
dependencies: [],
|
|
385
401
|
},
|
|
386
402
|
// Lender liquidates a defaulted loan — collateral transferred to the lender.
|
|
387
403
|
{
|
|
388
|
-
from:
|
|
389
|
-
to:
|
|
390
|
-
eventName:
|
|
391
|
-
guard: {
|
|
404
|
+
from: 'DEFAULTED',
|
|
405
|
+
to: 'LIQUIDATED',
|
|
406
|
+
eventName: 'liquidate',
|
|
407
|
+
guard: {
|
|
408
|
+
in: [{ var: 'state.lender' }, { map: [{ var: 'proofs' }, { var: 'address' }] }],
|
|
409
|
+
},
|
|
392
410
|
// Transfer the escrowed collateral to the lender via the reserved `_transferAsset` directive
|
|
393
411
|
// inside the effect (the loan fiber holds it). A transition-level `emits` block is dropped by the engine.
|
|
394
412
|
effect: {
|
|
395
413
|
merge: [
|
|
396
|
-
{ var:
|
|
414
|
+
{ var: 'state' },
|
|
397
415
|
{
|
|
398
|
-
status:
|
|
399
|
-
liquidatedAt: { var:
|
|
416
|
+
status: 'LIQUIDATED',
|
|
417
|
+
liquidatedAt: { var: '$ordinal' },
|
|
400
418
|
_transferAsset: [
|
|
401
|
-
{
|
|
419
|
+
{
|
|
420
|
+
assetId: { var: 'state.collateralAssetId' },
|
|
421
|
+
recipient: { Wallet: { address: { var: 'state.lender' } } },
|
|
422
|
+
},
|
|
402
423
|
],
|
|
403
424
|
},
|
|
404
425
|
],
|
|
@@ -22,14 +22,14 @@
|
|
|
22
22
|
// Re-export generated protobuf types (source of truth).
|
|
23
23
|
// The nested lifecycle/kind enums dropped their app prefix in the proto; under
|
|
24
24
|
// this app-scoped entrypoint they are unambiguously Type / State.
|
|
25
|
-
export { Type, State, Commitment, Resolution, Market, CreateMarketRequest, CommitToMarketRequest, SubmitResolutionRequest, CancelMarketRequest, MarketDefinition, typeFromJSON, typeToJSON, stateFromJSON, stateToJSON, } from
|
|
25
|
+
export { Type, State, Commitment, Resolution, Market, CreateMarketRequest, CommitToMarketRequest, SubmitResolutionRequest, CancelMarketRequest, MarketDefinition, typeFromJSON, typeToJSON, stateFromJSON, stateToJSON, } from '../../generated/ottochain/apps/markets/v1/market.js';
|
|
26
26
|
// Deprecated app-prefixed aliases (renamed to Type / State); kept for compat.
|
|
27
|
-
export { Type as MarketType, State as MarketState, typeFromJSON as marketTypeFromJSON, typeToJSON as marketTypeToJSON, stateFromJSON as marketStateFromJSON, stateToJSON as marketStateToJSON, } from
|
|
27
|
+
export { Type as MarketType, State as MarketState, typeFromJSON as marketTypeFromJSON, typeToJSON as marketTypeToJSON, stateFromJSON as marketStateFromJSON, stateToJSON as marketStateToJSON, } from '../../generated/ottochain/apps/markets/v1/market.js';
|
|
28
28
|
// ---------------------------------------------------------------------------
|
|
29
29
|
// State Machine Definitions (generated from JSON at build time)
|
|
30
30
|
// ---------------------------------------------------------------------------
|
|
31
|
-
import { marketUniversalDef, marketPredictionDef, marketAuctionDef, marketCrowdfundDef, marketGroupBuyDef, } from
|
|
32
|
-
export { marketUniversalDef, marketPredictionDef, marketAuctionDef, marketCrowdfundDef, marketGroupBuyDef
|
|
31
|
+
import { marketUniversalDef, marketPredictionDef, marketAuctionDef, marketCrowdfundDef, marketGroupBuyDef, } from './state-machines/index.js';
|
|
32
|
+
export { marketUniversalDef, marketPredictionDef, marketAuctionDef, marketCrowdfundDef, marketGroupBuyDef };
|
|
33
33
|
/** All market state machine definitions */
|
|
34
34
|
export const MARKETS_DEFINITIONS = {
|
|
35
35
|
universal: marketUniversalDef,
|
|
@@ -42,6 +42,6 @@ export const MARKETS_DEFINITIONS = {
|
|
|
42
42
|
* Get a market state machine definition by type.
|
|
43
43
|
* @param type - 'universal' | 'prediction' | 'auction' | 'crowdfund' | 'groupBuy' (default: 'universal')
|
|
44
44
|
*/
|
|
45
|
-
export function getMarketDefinition(type =
|
|
45
|
+
export function getMarketDefinition(type = 'universal') {
|
|
46
46
|
return MARKETS_DEFINITIONS[type];
|
|
47
47
|
}
|