@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
|
@@ -35,251 +35,262 @@ const fiber_app_js_1 = require("../../../schema/fiber-app.js");
|
|
|
35
35
|
*/
|
|
36
36
|
exports.lendingZkLoanDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
37
37
|
metadata: {
|
|
38
|
-
name:
|
|
39
|
-
app:
|
|
40
|
-
type:
|
|
41
|
-
version:
|
|
42
|
-
description:
|
|
38
|
+
name: 'LendingZkLoan',
|
|
39
|
+
app: 'lending',
|
|
40
|
+
type: 'zkLoan',
|
|
41
|
+
version: '1.0.0',
|
|
42
|
+
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.',
|
|
43
43
|
crossReferences: {
|
|
44
44
|
borrowerIdentityId: "Links to the borrower's IdentityAgent",
|
|
45
45
|
lenderIdentityId: "Links to the lender's IdentityAgent (loan originator)",
|
|
46
46
|
collateralAssetId: "Asset instance locked as collateral (held by the loan's escrow fiber)",
|
|
47
|
-
debtAssetId:
|
|
47
|
+
debtAssetId: 'Asset instance representing the outstanding loan principal/debt minted to the borrower',
|
|
48
48
|
},
|
|
49
49
|
},
|
|
50
50
|
createSchema: {
|
|
51
51
|
required: [
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
52
|
+
'borrower',
|
|
53
|
+
'lender',
|
|
54
|
+
'principalAmount',
|
|
55
|
+
'collateralAssetId',
|
|
56
|
+
'collateralPolicy',
|
|
57
|
+
'debtPolicy',
|
|
58
|
+
'lendingRuleVKey',
|
|
59
|
+
'lendingRuleLogicHash',
|
|
60
|
+
'keccakTrue',
|
|
61
61
|
],
|
|
62
62
|
properties: {
|
|
63
63
|
borrower: {
|
|
64
|
-
type:
|
|
65
|
-
description:
|
|
64
|
+
type: 'address',
|
|
65
|
+
description: 'DAG address of the borrower',
|
|
66
66
|
immutable: true,
|
|
67
67
|
},
|
|
68
68
|
lender: {
|
|
69
|
-
type:
|
|
70
|
-
description:
|
|
69
|
+
type: 'address',
|
|
70
|
+
description: 'DAG address of the lender / loan originator',
|
|
71
71
|
immutable: true,
|
|
72
72
|
},
|
|
73
73
|
principalAmount: {
|
|
74
|
-
type:
|
|
75
|
-
description:
|
|
74
|
+
type: 'integer',
|
|
75
|
+
description: 'PUBLIC loan principal (asset minor-units). The financials backing eligibility stay private.',
|
|
76
76
|
minimum: 1,
|
|
77
77
|
immutable: true,
|
|
78
78
|
},
|
|
79
79
|
collateralAssetId: {
|
|
80
|
-
type:
|
|
81
|
-
description:
|
|
80
|
+
type: 'uuid',
|
|
81
|
+
description: 'Asset instance id pledged as collateral (its private valuation is never revealed).',
|
|
82
82
|
immutable: true,
|
|
83
83
|
},
|
|
84
84
|
collateralPolicy: {
|
|
85
|
-
type:
|
|
85
|
+
type: 'string',
|
|
86
86
|
description: "Collateral asset policy name (e.g. 'collateral-vault-v1.asset').",
|
|
87
87
|
immutable: true,
|
|
88
88
|
},
|
|
89
89
|
debtPolicy: {
|
|
90
|
-
type:
|
|
90
|
+
type: 'string',
|
|
91
91
|
description: "Debt/loan-token asset policy name (e.g. 'loan-debt-v1.asset').",
|
|
92
92
|
immutable: true,
|
|
93
93
|
},
|
|
94
94
|
escrowFiberId: {
|
|
95
|
-
type:
|
|
96
|
-
description:
|
|
95
|
+
type: 'uuid',
|
|
96
|
+
description: 'Fiber that custodies the locked collateral (AssetHolder.Fiber). Defaults to this loan fiber.',
|
|
97
97
|
},
|
|
98
98
|
lendingRuleVKey: {
|
|
99
|
-
type:
|
|
100
|
-
description:
|
|
99
|
+
type: 'hash',
|
|
100
|
+
description: 'PINNED SP1 program verifying key (bytes32, 0x-hex) for the eligibility circuit.',
|
|
101
101
|
immutable: true,
|
|
102
102
|
},
|
|
103
103
|
lendingRuleLogicHash: {
|
|
104
|
-
type:
|
|
104
|
+
type: 'hash',
|
|
105
105
|
description: "PINNED logicHash of the public lending rule = keccak256(canonicalize(rule)). The proof's committed exprHash must equal this.",
|
|
106
106
|
immutable: true,
|
|
107
107
|
},
|
|
108
108
|
keccakTrue: {
|
|
109
|
-
type:
|
|
109
|
+
type: 'hash',
|
|
110
110
|
description: "PINNED keccak256(canonicalize(true)) — the outputHash a 'rule returned true' proof must commit.",
|
|
111
111
|
immutable: true,
|
|
112
112
|
},
|
|
113
113
|
dueOrdinal: {
|
|
114
|
-
type:
|
|
115
|
-
description:
|
|
114
|
+
type: 'integer',
|
|
115
|
+
description: 'Optional snapshot ordinal by which repayment is due.',
|
|
116
116
|
minimum: 0,
|
|
117
117
|
},
|
|
118
118
|
},
|
|
119
119
|
},
|
|
120
120
|
stateSchema: {
|
|
121
121
|
properties: {
|
|
122
|
-
status: { type:
|
|
123
|
-
borrower: { type:
|
|
124
|
-
lender: { type:
|
|
125
|
-
principalAmount: { type:
|
|
126
|
-
collateralAssetId: { type:
|
|
127
|
-
collateralPolicy: { type:
|
|
128
|
-
debtPolicy: { type:
|
|
129
|
-
escrowFiberId: { type:
|
|
130
|
-
debtAssetId: { type:
|
|
131
|
-
lendingRuleVKey: { type:
|
|
132
|
-
lendingRuleLogicHash: { type:
|
|
133
|
-
keccakTrue: { type:
|
|
134
|
-
dueOrdinal: { type:
|
|
135
|
-
lockedAt: { type:
|
|
136
|
-
originatedAt: { type:
|
|
137
|
-
repaidAt: { type:
|
|
138
|
-
defaultedAt: { type:
|
|
139
|
-
liquidatedAt: { type:
|
|
122
|
+
status: { type: 'string', computed: true },
|
|
123
|
+
borrower: { type: 'address', immutable: true },
|
|
124
|
+
lender: { type: 'address', immutable: true },
|
|
125
|
+
principalAmount: { type: 'integer', immutable: true },
|
|
126
|
+
collateralAssetId: { type: 'uuid', immutable: true },
|
|
127
|
+
collateralPolicy: { type: 'string', immutable: true },
|
|
128
|
+
debtPolicy: { type: 'string', immutable: true },
|
|
129
|
+
escrowFiberId: { type: 'uuid' },
|
|
130
|
+
debtAssetId: { type: 'uuid', computed: true },
|
|
131
|
+
lendingRuleVKey: { type: 'hash', immutable: true },
|
|
132
|
+
lendingRuleLogicHash: { type: 'hash', immutable: true },
|
|
133
|
+
keccakTrue: { type: 'hash', immutable: true },
|
|
134
|
+
dueOrdinal: { type: 'integer' },
|
|
135
|
+
lockedAt: { type: 'integer', computed: true },
|
|
136
|
+
originatedAt: { type: 'integer', computed: true },
|
|
137
|
+
repaidAt: { type: 'integer', computed: true },
|
|
138
|
+
defaultedAt: { type: 'integer', computed: true },
|
|
139
|
+
liquidatedAt: { type: 'integer', computed: true },
|
|
140
140
|
},
|
|
141
141
|
},
|
|
142
142
|
eventSchemas: {
|
|
143
143
|
lock_collateral: {
|
|
144
|
-
description:
|
|
144
|
+
description: 'Borrower locks the pledged collateral asset into the loan escrow fiber (drives an asset Transfer/Mint into AssetHolder.Fiber).',
|
|
145
145
|
},
|
|
146
146
|
originate: {
|
|
147
147
|
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.",
|
|
148
|
-
required: [
|
|
148
|
+
required: ['witness', 'debtAssetId'],
|
|
149
149
|
properties: {
|
|
150
150
|
witness: {
|
|
151
|
-
type:
|
|
152
|
-
description:
|
|
151
|
+
type: 'object',
|
|
152
|
+
description: 'Eligibility-proof witness: { publicValues: 0x-hex, proof: 0x-hex }. Exposed to the guard under the reserved `witness` key.',
|
|
153
153
|
properties: {
|
|
154
|
-
publicValues: {
|
|
155
|
-
|
|
154
|
+
publicValues: {
|
|
155
|
+
type: 'string',
|
|
156
|
+
description: 'abi_encode(JlvmPublicValues), 0x-hex.',
|
|
157
|
+
},
|
|
158
|
+
proof: {
|
|
159
|
+
type: 'string',
|
|
160
|
+
description: 'SP1-Groth16 proof bytes, 0x-hex.',
|
|
161
|
+
},
|
|
156
162
|
},
|
|
157
|
-
required: [
|
|
163
|
+
required: ['publicValues', 'proof'],
|
|
158
164
|
},
|
|
159
165
|
debtAssetId: {
|
|
160
|
-
type:
|
|
161
|
-
description:
|
|
166
|
+
type: 'uuid',
|
|
167
|
+
description: 'Asset instance id for the debt/principal token minted to the borrower.',
|
|
162
168
|
},
|
|
163
169
|
},
|
|
164
170
|
},
|
|
165
171
|
repay: {
|
|
166
|
-
description:
|
|
172
|
+
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.',
|
|
167
173
|
},
|
|
168
174
|
default_loan: {
|
|
169
|
-
description:
|
|
175
|
+
description: 'Mark the loan defaulted once past due (drives the collateral toward liquidation).',
|
|
170
176
|
},
|
|
171
177
|
liquidate: {
|
|
172
|
-
description:
|
|
178
|
+
description: 'Lender liquidates a defaulted loan: the locked collateral is transferred to the lender via the escrow fiber.',
|
|
173
179
|
},
|
|
174
180
|
cancel: {
|
|
175
|
-
description:
|
|
176
|
-
properties: { reason: { type:
|
|
181
|
+
description: 'Cancel a loan request before collateral is locked.',
|
|
182
|
+
properties: { reason: { type: 'string' } },
|
|
177
183
|
},
|
|
178
184
|
},
|
|
179
185
|
states: {
|
|
180
186
|
REQUESTED: {
|
|
181
|
-
id:
|
|
187
|
+
id: 'REQUESTED',
|
|
182
188
|
isFinal: false,
|
|
183
189
|
metadata: {
|
|
184
|
-
label:
|
|
185
|
-
description:
|
|
186
|
-
category:
|
|
190
|
+
label: 'Requested',
|
|
191
|
+
description: 'Loan requested; collateral not yet locked, eligibility not yet proven.',
|
|
192
|
+
category: 'initial',
|
|
187
193
|
},
|
|
188
194
|
},
|
|
189
195
|
COLLATERAL_LOCKED: {
|
|
190
|
-
id:
|
|
196
|
+
id: 'COLLATERAL_LOCKED',
|
|
191
197
|
isFinal: false,
|
|
192
198
|
metadata: {
|
|
193
|
-
label:
|
|
199
|
+
label: 'Collateral Locked',
|
|
194
200
|
description: "Collateral asset escrowed in the loan fiber; awaiting the lender's zk-gated origination.",
|
|
195
|
-
category:
|
|
201
|
+
category: 'pending',
|
|
196
202
|
},
|
|
197
203
|
},
|
|
198
204
|
ACTIVE: {
|
|
199
|
-
id:
|
|
205
|
+
id: 'ACTIVE',
|
|
200
206
|
isFinal: false,
|
|
201
207
|
metadata: {
|
|
202
|
-
label:
|
|
203
|
-
description:
|
|
204
|
-
category:
|
|
208
|
+
label: 'Active',
|
|
209
|
+
description: 'Loan originated (eligibility proven in zk); principal minted to the borrower.',
|
|
210
|
+
category: 'active',
|
|
205
211
|
},
|
|
206
212
|
},
|
|
207
213
|
DEFAULTED: {
|
|
208
|
-
id:
|
|
214
|
+
id: 'DEFAULTED',
|
|
209
215
|
isFinal: false,
|
|
210
216
|
metadata: {
|
|
211
|
-
label:
|
|
212
|
-
description:
|
|
213
|
-
category:
|
|
217
|
+
label: 'Defaulted',
|
|
218
|
+
description: 'Loan past due and unpaid; collateral pending liquidation.',
|
|
219
|
+
category: 'pending',
|
|
214
220
|
},
|
|
215
221
|
},
|
|
216
222
|
REPAID: {
|
|
217
|
-
id:
|
|
223
|
+
id: 'REPAID',
|
|
218
224
|
isFinal: true,
|
|
219
225
|
metadata: {
|
|
220
|
-
label:
|
|
221
|
-
description:
|
|
222
|
-
category:
|
|
226
|
+
label: 'Repaid',
|
|
227
|
+
description: 'Principal repaid (debt burned) and collateral released to the borrower.',
|
|
228
|
+
category: 'terminal',
|
|
223
229
|
},
|
|
224
230
|
},
|
|
225
231
|
LIQUIDATED: {
|
|
226
|
-
id:
|
|
232
|
+
id: 'LIQUIDATED',
|
|
227
233
|
isFinal: true,
|
|
228
234
|
metadata: {
|
|
229
|
-
label:
|
|
230
|
-
description:
|
|
231
|
-
category:
|
|
235
|
+
label: 'Liquidated',
|
|
236
|
+
description: 'Defaulted loan settled by transferring the collateral to the lender.',
|
|
237
|
+
category: 'terminal',
|
|
232
238
|
},
|
|
233
239
|
},
|
|
234
240
|
CANCELLED: {
|
|
235
|
-
id:
|
|
241
|
+
id: 'CANCELLED',
|
|
236
242
|
isFinal: true,
|
|
237
243
|
metadata: {
|
|
238
|
-
label:
|
|
239
|
-
description:
|
|
240
|
-
category:
|
|
244
|
+
label: 'Cancelled',
|
|
245
|
+
description: 'Loan request cancelled before any collateral was locked.',
|
|
246
|
+
category: 'terminal',
|
|
241
247
|
},
|
|
242
248
|
},
|
|
243
249
|
},
|
|
244
|
-
initialState:
|
|
250
|
+
initialState: 'REQUESTED',
|
|
245
251
|
transitions: [
|
|
246
252
|
// Borrower locks collateral into the escrow fiber.
|
|
247
253
|
{
|
|
248
|
-
from:
|
|
249
|
-
to:
|
|
250
|
-
eventName:
|
|
254
|
+
from: 'REQUESTED',
|
|
255
|
+
to: 'COLLATERAL_LOCKED',
|
|
256
|
+
eventName: 'lock_collateral',
|
|
251
257
|
guard: {
|
|
252
258
|
and: [
|
|
253
|
-
{
|
|
254
|
-
|
|
259
|
+
{
|
|
260
|
+
in: [{ var: 'state.borrower' }, { map: [{ var: 'proofs' }, { var: 'address' }] }],
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
'===': [{ var: 'event.assetId' }, { var: 'state.collateralAssetId' }],
|
|
264
|
+
},
|
|
255
265
|
],
|
|
256
266
|
},
|
|
257
267
|
effect: {
|
|
258
|
-
merge: [
|
|
259
|
-
{ var: "state" },
|
|
260
|
-
{ status: "COLLATERAL_LOCKED", lockedAt: { var: "$ordinal" } },
|
|
261
|
-
],
|
|
268
|
+
merge: [{ var: 'state' }, { status: 'COLLATERAL_LOCKED', lockedAt: { var: '$ordinal' } }],
|
|
262
269
|
},
|
|
263
270
|
dependencies: [],
|
|
264
271
|
},
|
|
265
272
|
// Cancel a request before any collateral is locked.
|
|
266
273
|
{
|
|
267
|
-
from:
|
|
268
|
-
to:
|
|
269
|
-
eventName:
|
|
274
|
+
from: 'REQUESTED',
|
|
275
|
+
to: 'CANCELLED',
|
|
276
|
+
eventName: 'cancel',
|
|
270
277
|
guard: {
|
|
271
278
|
or: [
|
|
272
|
-
{
|
|
273
|
-
|
|
279
|
+
{
|
|
280
|
+
in: [{ var: 'state.borrower' }, { map: [{ var: 'proofs' }, { var: 'address' }] }],
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
in: [{ var: 'state.lender' }, { map: [{ var: 'proofs' }, { var: 'address' }] }],
|
|
284
|
+
},
|
|
274
285
|
],
|
|
275
286
|
},
|
|
276
287
|
effect: {
|
|
277
288
|
merge: [
|
|
278
|
-
{ var:
|
|
289
|
+
{ var: 'state' },
|
|
279
290
|
{
|
|
280
|
-
status:
|
|
281
|
-
cancelledAt: { var:
|
|
282
|
-
reason: { var:
|
|
291
|
+
status: 'CANCELLED',
|
|
292
|
+
cancelledAt: { var: '$ordinal' },
|
|
293
|
+
reason: { var: 'event.reason' },
|
|
283
294
|
},
|
|
284
295
|
],
|
|
285
296
|
},
|
|
@@ -299,33 +310,39 @@ exports.lendingZkLoanDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
299
310
|
// 4. outputHash == keccakTrue — the rule evaluated to true
|
|
300
311
|
// 5. ok bit (last hex pair of word 3) == "01" — the JLVM run did not error
|
|
301
312
|
{
|
|
302
|
-
from:
|
|
303
|
-
to:
|
|
304
|
-
eventName:
|
|
313
|
+
from: 'COLLATERAL_LOCKED',
|
|
314
|
+
to: 'ACTIVE',
|
|
315
|
+
eventName: 'originate',
|
|
305
316
|
guard: {
|
|
306
317
|
and: [
|
|
307
|
-
{
|
|
318
|
+
{
|
|
319
|
+
in: [{ var: 'state.lender' }, { map: [{ var: 'proofs' }, { var: 'address' }] }],
|
|
320
|
+
},
|
|
308
321
|
{
|
|
309
322
|
groth16_verify: [
|
|
310
|
-
{ var:
|
|
311
|
-
{ var:
|
|
312
|
-
{ var:
|
|
323
|
+
{ var: 'state.lendingRuleVKey' },
|
|
324
|
+
{ var: 'event.witness.publicValues' },
|
|
325
|
+
{ var: 'event.witness.proof' },
|
|
313
326
|
],
|
|
314
327
|
},
|
|
315
328
|
{
|
|
316
|
-
|
|
317
|
-
{
|
|
318
|
-
|
|
329
|
+
'===': [
|
|
330
|
+
{
|
|
331
|
+
cat: ['0x', { substr: [{ var: 'event.witness.publicValues' }, 2, 64] }],
|
|
332
|
+
},
|
|
333
|
+
{ var: 'state.lendingRuleLogicHash' },
|
|
319
334
|
],
|
|
320
335
|
},
|
|
321
336
|
{
|
|
322
|
-
|
|
323
|
-
{
|
|
324
|
-
|
|
337
|
+
'===': [
|
|
338
|
+
{
|
|
339
|
+
cat: ['0x', { substr: [{ var: 'event.witness.publicValues' }, 130, 64] }],
|
|
340
|
+
},
|
|
341
|
+
{ var: 'state.keccakTrue' },
|
|
325
342
|
],
|
|
326
343
|
},
|
|
327
344
|
{
|
|
328
|
-
|
|
345
|
+
'===': [{ substr: [{ var: 'event.witness.publicValues' }, 256, 2] }, '01'],
|
|
329
346
|
},
|
|
330
347
|
],
|
|
331
348
|
},
|
|
@@ -333,11 +350,11 @@ exports.lendingZkLoanDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
333
350
|
// debt asset id, and activates the loan.
|
|
334
351
|
effect: {
|
|
335
352
|
merge: [
|
|
336
|
-
{ var:
|
|
353
|
+
{ var: 'state' },
|
|
337
354
|
{
|
|
338
|
-
status:
|
|
339
|
-
originatedAt: { var:
|
|
340
|
-
debtAssetId: { var:
|
|
355
|
+
status: 'ACTIVE',
|
|
356
|
+
originatedAt: { var: '$ordinal' },
|
|
357
|
+
debtAssetId: { var: 'event.debtAssetId' },
|
|
341
358
|
},
|
|
342
359
|
],
|
|
343
360
|
},
|
|
@@ -345,22 +362,27 @@ exports.lendingZkLoanDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
345
362
|
},
|
|
346
363
|
// Borrower repays — debt is burned, collateral released back to the borrower.
|
|
347
364
|
{
|
|
348
|
-
from:
|
|
349
|
-
to:
|
|
350
|
-
eventName:
|
|
351
|
-
guard: {
|
|
365
|
+
from: 'ACTIVE',
|
|
366
|
+
to: 'REPAID',
|
|
367
|
+
eventName: 'repay',
|
|
368
|
+
guard: {
|
|
369
|
+
in: [{ var: 'state.borrower' }, { map: [{ var: 'proofs' }, { var: 'address' }] }],
|
|
370
|
+
},
|
|
352
371
|
// Release the escrowed collateral back to the borrower. The loan fiber HOLDS the collateral
|
|
353
372
|
// (locked as AssetHolder.Fiber), so it emits the reserved `_transferAsset` directive from inside
|
|
354
373
|
// the effect — the engine extracts `_`-prefixed keys (it is NOT merged into state). A transition-
|
|
355
374
|
// level `emits` block is silently dropped by toProtoDefinition, which would strand the collateral.
|
|
356
375
|
effect: {
|
|
357
376
|
merge: [
|
|
358
|
-
{ var:
|
|
377
|
+
{ var: 'state' },
|
|
359
378
|
{
|
|
360
|
-
status:
|
|
361
|
-
repaidAt: { var:
|
|
379
|
+
status: 'REPAID',
|
|
380
|
+
repaidAt: { var: '$ordinal' },
|
|
362
381
|
_transferAsset: [
|
|
363
|
-
{
|
|
382
|
+
{
|
|
383
|
+
assetId: { var: 'state.collateralAssetId' },
|
|
384
|
+
recipient: { Wallet: { address: { var: 'state.borrower' } } },
|
|
385
|
+
},
|
|
364
386
|
],
|
|
365
387
|
},
|
|
366
388
|
],
|
|
@@ -369,39 +391,38 @@ exports.lendingZkLoanDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
369
391
|
},
|
|
370
392
|
// Loan goes past due → defaulted.
|
|
371
393
|
{
|
|
372
|
-
from:
|
|
373
|
-
to:
|
|
374
|
-
eventName:
|
|
394
|
+
from: 'ACTIVE',
|
|
395
|
+
to: 'DEFAULTED',
|
|
396
|
+
eventName: 'default_loan',
|
|
375
397
|
guard: {
|
|
376
|
-
and: [
|
|
377
|
-
{ var: "state.dueOrdinal" },
|
|
378
|
-
{ ">=": [{ var: "$ordinal" }, { var: "state.dueOrdinal" }] },
|
|
379
|
-
],
|
|
398
|
+
and: [{ var: 'state.dueOrdinal' }, { '>=': [{ var: '$ordinal' }, { var: 'state.dueOrdinal' }] }],
|
|
380
399
|
},
|
|
381
400
|
effect: {
|
|
382
|
-
merge: [
|
|
383
|
-
{ var: "state" },
|
|
384
|
-
{ status: "DEFAULTED", defaultedAt: { var: "$ordinal" } },
|
|
385
|
-
],
|
|
401
|
+
merge: [{ var: 'state' }, { status: 'DEFAULTED', defaultedAt: { var: '$ordinal' } }],
|
|
386
402
|
},
|
|
387
403
|
dependencies: [],
|
|
388
404
|
},
|
|
389
405
|
// Lender liquidates a defaulted loan — collateral transferred to the lender.
|
|
390
406
|
{
|
|
391
|
-
from:
|
|
392
|
-
to:
|
|
393
|
-
eventName:
|
|
394
|
-
guard: {
|
|
407
|
+
from: 'DEFAULTED',
|
|
408
|
+
to: 'LIQUIDATED',
|
|
409
|
+
eventName: 'liquidate',
|
|
410
|
+
guard: {
|
|
411
|
+
in: [{ var: 'state.lender' }, { map: [{ var: 'proofs' }, { var: 'address' }] }],
|
|
412
|
+
},
|
|
395
413
|
// Transfer the escrowed collateral to the lender via the reserved `_transferAsset` directive
|
|
396
414
|
// inside the effect (the loan fiber holds it). A transition-level `emits` block is dropped by the engine.
|
|
397
415
|
effect: {
|
|
398
416
|
merge: [
|
|
399
|
-
{ var:
|
|
417
|
+
{ var: 'state' },
|
|
400
418
|
{
|
|
401
|
-
status:
|
|
402
|
-
liquidatedAt: { var:
|
|
419
|
+
status: 'LIQUIDATED',
|
|
420
|
+
liquidatedAt: { var: '$ordinal' },
|
|
403
421
|
_transferAsset: [
|
|
404
|
-
{
|
|
422
|
+
{
|
|
423
|
+
assetId: { var: 'state.collateralAssetId' },
|
|
424
|
+
recipient: { Wallet: { address: { var: 'state.lender' } } },
|
|
425
|
+
},
|
|
405
426
|
],
|
|
406
427
|
},
|
|
407
428
|
],
|
|
@@ -70,6 +70,6 @@ exports.MARKETS_DEFINITIONS = {
|
|
|
70
70
|
* Get a market state machine definition by type.
|
|
71
71
|
* @param type - 'universal' | 'prediction' | 'auction' | 'crowdfund' | 'groupBuy' (default: 'universal')
|
|
72
72
|
*/
|
|
73
|
-
function getMarketDefinition(type =
|
|
73
|
+
function getMarketDefinition(type = 'universal') {
|
|
74
74
|
return exports.MARKETS_DEFINITIONS[type];
|
|
75
75
|
}
|