@ottochain/sdk 2.3.0 → 2.4.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/contracts/index.js +15 -8
- package/dist/cjs/apps/contracts/state-machines/contract-agreement.js +35 -40
- package/dist/cjs/apps/contracts/state-machines/contract-escrow.js +80 -37
- package/dist/cjs/apps/contracts/state-machines/contract-universal.js +4 -4
- package/dist/cjs/apps/corporate/index.js +2 -2
- package/dist/cjs/apps/corporate/state-machines/corp-board.js +169 -59
- package/dist/cjs/apps/corporate/state-machines/corp-entity.js +245 -47
- package/dist/cjs/apps/corporate/state-machines/corp-securities.js +407 -99
- package/dist/cjs/apps/corporate/state-machines/corp-shareholders.js +151 -37
- package/dist/cjs/apps/governance/index.js +14 -14
- package/dist/cjs/apps/governance/state-machines/dao-multisig.js +58 -40
- package/dist/cjs/apps/governance/state-machines/dao-reputation.js +46 -40
- package/dist/cjs/apps/governance/state-machines/dao-single.js +28 -11
- package/dist/cjs/apps/governance/state-machines/dao-token.js +67 -41
- package/dist/cjs/apps/governance/state-machines/governance-simple.js +93 -61
- package/dist/cjs/apps/governance/state-machines/governance-universal.js +2 -2
- package/dist/cjs/apps/identity/constants.js +55 -14
- package/dist/cjs/apps/identity/index.js +27 -11
- package/dist/cjs/apps/identity/state-machines/identity-agent.js +3 -3
- package/dist/cjs/apps/identity/state-machines/identity-oracle.js +25 -22
- package/dist/cjs/apps/identity/state-machines/identity-registry.js +288 -0
- package/dist/cjs/apps/identity/state-machines/identity-universal.js +3 -3
- package/dist/cjs/apps/identity/state-machines/index.js +3 -1
- package/dist/cjs/apps/index.js +19 -8
- package/dist/cjs/apps/lending/assets.js +223 -0
- package/dist/cjs/apps/lending/credit-scoring.js +87 -0
- package/dist/cjs/apps/lending/eligibility.js +121 -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 +412 -0
- package/dist/cjs/apps/markets/index.js +21 -11
- package/dist/cjs/apps/markets/state-machines/market-auction.js +14 -13
- package/dist/cjs/apps/markets/state-machines/market-crowdfund.js +29 -24
- package/dist/cjs/apps/markets/state-machines/market-group-buy.js +24 -26
- package/dist/cjs/apps/markets/state-machines/market-prediction.js +80 -53
- package/dist/cjs/apps/markets/state-machines/market-universal.js +5 -5
- package/dist/cjs/apps/oracles/index.js +2 -2
- package/dist/cjs/errors.js +3 -3
- package/dist/cjs/generated/google/protobuf/struct.js +4 -4
- 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 +50 -50
- package/dist/cjs/generated/ottochain/apps/corporate/v1/corporate.js +19 -20
- package/dist/cjs/generated/ottochain/apps/governance/v1/governance.js +13 -13
- package/dist/cjs/generated/ottochain/apps/identity/v1/attestation.js +4 -4
- package/dist/cjs/generated/ottochain/apps/identity/v1/identity.js +124 -130
- package/dist/cjs/generated/ottochain/apps/markets/v1/market.js +107 -107
- package/dist/cjs/generated/ottochain/v1/common.js +4 -4
- package/dist/cjs/generated/ottochain/v1/fiber.js +4 -4
- package/dist/cjs/index.js +41 -7
- package/dist/cjs/openapi.js +2 -0
- package/dist/cjs/ottochain/drop-nulls.js +1 -2
- package/dist/cjs/ottochain/genesis-manifest.js +11 -11
- package/dist/cjs/ottochain/index.js +23 -13
- package/dist/cjs/ottochain/metagraph-client.js +65 -8
- package/dist/cjs/ottochain/snapshot.js +11 -12
- package/dist/cjs/ottochain/transaction.js +57 -14
- package/dist/cjs/ottochain/types.js +16 -2
- package/dist/cjs/privacy/index.js +14 -0
- package/dist/cjs/privacy/sealed-bid.js +210 -0
- package/dist/cjs/privacy/shield-app.js +131 -0
- package/dist/cjs/schema/effects.js +40 -0
- package/dist/cjs/schema/fiber-app.js +19 -13
- package/dist/cjs/schema/guard-lint.js +352 -0
- package/dist/cjs/schema/guards.js +246 -0
- package/dist/cjs/signing.js +80 -0
- package/dist/cjs/types.js +2 -3
- package/dist/cjs/validation.js +8 -8
- 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/contracts/index.js +7 -3
- package/dist/esm/apps/contracts/state-machines/contract-agreement.js +35 -40
- package/dist/esm/apps/contracts/state-machines/contract-escrow.js +80 -37
- package/dist/esm/apps/contracts/state-machines/contract-universal.js +4 -4
- package/dist/esm/apps/corporate/state-machines/corp-board.js +169 -59
- package/dist/esm/apps/corporate/state-machines/corp-entity.js +245 -47
- package/dist/esm/apps/corporate/state-machines/corp-securities.js +407 -99
- package/dist/esm/apps/corporate/state-machines/corp-shareholders.js +151 -37
- package/dist/esm/apps/governance/state-machines/dao-multisig.js +58 -40
- package/dist/esm/apps/governance/state-machines/dao-reputation.js +46 -40
- package/dist/esm/apps/governance/state-machines/dao-single.js +28 -11
- package/dist/esm/apps/governance/state-machines/dao-token.js +67 -41
- package/dist/esm/apps/governance/state-machines/governance-simple.js +93 -61
- package/dist/esm/apps/governance/state-machines/governance-universal.js +2 -2
- package/dist/esm/apps/identity/constants.js +51 -12
- package/dist/esm/apps/identity/index.js +12 -7
- package/dist/esm/apps/identity/state-machines/identity-agent.js +3 -3
- package/dist/esm/apps/identity/state-machines/identity-oracle.js +25 -22
- package/dist/esm/apps/identity/state-machines/identity-registry.js +285 -0
- package/dist/esm/apps/identity/state-machines/identity-universal.js +3 -3
- package/dist/esm/apps/identity/state-machines/index.js +1 -0
- package/dist/esm/apps/index.js +1 -0
- package/dist/esm/apps/lending/assets.js +207 -0
- package/dist/esm/apps/lending/credit-scoring.js +81 -0
- package/dist/esm/apps/lending/eligibility.js +115 -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 +409 -0
- package/dist/esm/apps/markets/index.js +8 -4
- package/dist/esm/apps/markets/state-machines/market-auction.js +14 -13
- package/dist/esm/apps/markets/state-machines/market-crowdfund.js +29 -24
- package/dist/esm/apps/markets/state-machines/market-group-buy.js +24 -26
- package/dist/esm/apps/markets/state-machines/market-prediction.js +80 -53
- package/dist/esm/apps/markets/state-machines/market-universal.js +5 -5
- 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 +46 -46
- package/dist/esm/generated/ottochain/apps/identity/v1/identity.js +114 -120
- package/dist/esm/generated/ottochain/apps/markets/v1/market.js +100 -100
- package/dist/esm/index.js +21 -2
- package/dist/esm/openapi.js +1 -0
- package/dist/esm/ottochain/genesis-manifest.js +9 -9
- package/dist/esm/ottochain/index.js +2 -3
- package/dist/esm/ottochain/metagraph-client.js +65 -8
- package/dist/esm/ottochain/snapshot.js +4 -4
- package/dist/esm/ottochain/transaction.js +43 -3
- package/dist/esm/ottochain/types.js +15 -1
- package/dist/esm/privacy/index.js +6 -0
- package/dist/esm/privacy/sealed-bid.js +206 -0
- package/dist/esm/privacy/shield-app.js +127 -0
- package/dist/esm/schema/effects.js +35 -0
- package/dist/esm/schema/fiber-app.js +13 -6
- package/dist/esm/schema/guard-lint.js +346 -0
- package/dist/esm/schema/guards.js +229 -0
- package/dist/esm/signing.js +74 -0
- 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/contracts/index.d.ts +69 -209
- package/dist/types/apps/contracts/state-machines/contract-agreement.d.ts +20 -95
- package/dist/types/apps/contracts/state-machines/contract-escrow.d.ts +46 -112
- package/dist/types/apps/corporate/index.d.ts +1040 -304
- package/dist/types/apps/corporate/state-machines/corp-board.d.ts +188 -52
- package/dist/types/apps/corporate/state-machines/corp-entity.d.ts +267 -62
- package/dist/types/apps/corporate/state-machines/corp-securities.d.ts +355 -131
- package/dist/types/apps/corporate/state-machines/corp-shareholders.d.ts +225 -53
- package/dist/types/apps/governance/index.d.ts +296 -398
- package/dist/types/apps/governance/state-machines/dao-multisig.d.ts +77 -92
- package/dist/types/apps/governance/state-machines/dao-reputation.d.ts +42 -66
- package/dist/types/apps/governance/state-machines/dao-single.d.ts +25 -47
- package/dist/types/apps/governance/state-machines/dao-token.d.ts +60 -49
- package/dist/types/apps/governance/state-machines/governance-simple.d.ts +87 -117
- package/dist/types/apps/governance/state-machines/governance-universal.d.ts +2 -2
- package/dist/types/apps/identity/constants.d.ts +32 -4
- package/dist/types/apps/identity/index.d.ts +378 -94
- package/dist/types/apps/identity/state-machines/identity-oracle.d.ts +16 -87
- package/dist/types/apps/identity/state-machines/identity-registry.d.ts +379 -0
- package/dist/types/apps/identity/state-machines/index.d.ts +1 -0
- package/dist/types/apps/index.d.ts +1 -0
- 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 +548 -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 +528 -0
- package/dist/types/apps/markets/index.d.ts +108 -203
- package/dist/types/apps/markets/state-machines/market-auction.d.ts +13 -37
- package/dist/types/apps/markets/state-machines/market-crowdfund.d.ts +16 -34
- package/dist/types/apps/markets/state-machines/market-group-buy.d.ts +17 -43
- package/dist/types/apps/markets/state-machines/market-prediction.d.ts +51 -72
- package/dist/types/apps/markets/state-machines/market-universal.d.ts +5 -5
- package/dist/types/generated/index.d.ts +5 -5
- package/dist/types/generated/openapi.d.ts +1257 -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/index.d.ts +6 -2
- package/dist/types/openapi.d.ts +22 -0
- package/dist/types/ottochain/genesis-manifest.d.ts +5 -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 +33 -1
- package/dist/types/ottochain/types.d.ts +335 -30
- 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 +34 -0
- package/dist/types/schema/fiber-app.d.ts +1 -2
- package/dist/types/schema/guard-lint.d.ts +111 -0
- package/dist/types/schema/guards.d.ts +134 -0
- package/dist/types/signing.d.ts +45 -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 +27 -13
- 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
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* @example
|
|
7
7
|
* ```typescript
|
|
8
8
|
* import {
|
|
9
|
-
*
|
|
9
|
+
* State,
|
|
10
10
|
* Contract,
|
|
11
11
|
* getContractDefinition,
|
|
12
12
|
* CONTRACTS_DEFINITIONS
|
|
@@ -18,8 +18,12 @@
|
|
|
18
18
|
*
|
|
19
19
|
* @packageDocumentation
|
|
20
20
|
*/
|
|
21
|
-
// Re-export generated protobuf types (source of truth)
|
|
22
|
-
|
|
21
|
+
// Re-export generated protobuf types (source of truth).
|
|
22
|
+
// The nested lifecycle enum dropped its app prefix in the proto; under this
|
|
23
|
+
// app-scoped entrypoint it is unambiguously State.
|
|
24
|
+
export { State, Contract, ProposeContractRequest, AcceptContractRequest, CompleteContractRequest, RejectContractRequest, DisputeContractRequest, ContractDefinition, stateFromJSON, stateToJSON, } from "../../generated/ottochain/apps/contracts/v1/contract.js";
|
|
25
|
+
// Deprecated app-prefixed alias (renamed to State); kept for compat.
|
|
26
|
+
export { State as ContractState, stateFromJSON as contractStateFromJSON, stateToJSON as contractStateToJSON, } from "../../generated/ottochain/apps/contracts/v1/contract.js";
|
|
23
27
|
// ---------------------------------------------------------------------------
|
|
24
28
|
// State Machine Definitions (generated from JSON at build time)
|
|
25
29
|
// ---------------------------------------------------------------------------
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { defineFiberApp } from "../../../schema/fiber-app.js";
|
|
2
|
+
import { signerIsParty, signerIsAnyParty } from "../../../schema/guards.js";
|
|
2
3
|
/**
|
|
3
4
|
* Two-party agreement with mutual completion attestation and dispute resolution.
|
|
4
5
|
*/
|
|
@@ -33,7 +34,7 @@ export const contractAgreementDef = defineFiberApp({
|
|
|
33
34
|
},
|
|
34
35
|
},
|
|
35
36
|
createSchema: {
|
|
36
|
-
required: ["proposer", "counterparty"],
|
|
37
|
+
required: ["proposer", "counterparty", "arbitrator"],
|
|
37
38
|
properties: {
|
|
38
39
|
proposer: {
|
|
39
40
|
type: "address",
|
|
@@ -45,6 +46,11 @@ export const contractAgreementDef = defineFiberApp({
|
|
|
45
46
|
description: "DAG address of the counterparty",
|
|
46
47
|
immutable: true,
|
|
47
48
|
},
|
|
49
|
+
arbitrator: {
|
|
50
|
+
type: "address",
|
|
51
|
+
description: "DAG address of the arbitrator authorized to resolve a dispute",
|
|
52
|
+
immutable: true,
|
|
53
|
+
},
|
|
48
54
|
},
|
|
49
55
|
},
|
|
50
56
|
stateSchema: {
|
|
@@ -52,6 +58,7 @@ export const contractAgreementDef = defineFiberApp({
|
|
|
52
58
|
status: { type: "string" },
|
|
53
59
|
proposer: { type: "address" },
|
|
54
60
|
counterparty: { type: "address" },
|
|
61
|
+
arbitrator: { type: "address", immutable: true },
|
|
55
62
|
completions: { type: "array" },
|
|
56
63
|
acceptedAt: { type: "integer", nullable: true },
|
|
57
64
|
rejectedAt: { type: "integer", nullable: true },
|
|
@@ -75,9 +82,6 @@ export const contractAgreementDef = defineFiberApp({
|
|
|
75
82
|
dispute: { properties: { reason: { type: "string" } } },
|
|
76
83
|
resolve: {
|
|
77
84
|
properties: {
|
|
78
|
-
judicialRuling: { type: "boolean", nullable: true },
|
|
79
|
-
proposerApproves: { type: "boolean", nullable: true },
|
|
80
|
-
counterpartyApproves: { type: "boolean", nullable: true },
|
|
81
85
|
resolution: { type: "string" },
|
|
82
86
|
rulingId: { type: "string", nullable: true },
|
|
83
87
|
},
|
|
@@ -145,11 +149,11 @@ export const contractAgreementDef = defineFiberApp({
|
|
|
145
149
|
from: "PROPOSED",
|
|
146
150
|
to: "ACTIVE",
|
|
147
151
|
eventName: "accept",
|
|
148
|
-
guard:
|
|
152
|
+
guard: signerIsParty("state.counterparty"),
|
|
149
153
|
effect: {
|
|
150
154
|
merge: [
|
|
151
155
|
{ var: "state" },
|
|
152
|
-
{ status: "ACTIVE", acceptedAt: { var: "$
|
|
156
|
+
{ status: "ACTIVE", acceptedAt: { var: "$ordinal" } },
|
|
153
157
|
],
|
|
154
158
|
},
|
|
155
159
|
dependencies: [],
|
|
@@ -158,13 +162,13 @@ export const contractAgreementDef = defineFiberApp({
|
|
|
158
162
|
from: "PROPOSED",
|
|
159
163
|
to: "REJECTED",
|
|
160
164
|
eventName: "reject",
|
|
161
|
-
guard:
|
|
165
|
+
guard: signerIsParty("state.counterparty"),
|
|
162
166
|
effect: {
|
|
163
167
|
merge: [
|
|
164
168
|
{ var: "state" },
|
|
165
169
|
{
|
|
166
170
|
status: "REJECTED",
|
|
167
|
-
rejectedAt: { var: "$
|
|
171
|
+
rejectedAt: { var: "$ordinal" },
|
|
168
172
|
rejectReason: { var: "event.reason" },
|
|
169
173
|
},
|
|
170
174
|
],
|
|
@@ -175,11 +179,11 @@ export const contractAgreementDef = defineFiberApp({
|
|
|
175
179
|
from: "PROPOSED",
|
|
176
180
|
to: "CANCELLED",
|
|
177
181
|
eventName: "cancel",
|
|
178
|
-
guard:
|
|
182
|
+
guard: signerIsParty("state.proposer"),
|
|
179
183
|
effect: {
|
|
180
184
|
merge: [
|
|
181
185
|
{ var: "state" },
|
|
182
|
-
{ status: "CANCELLED", cancelledAt: { var: "$
|
|
186
|
+
{ status: "CANCELLED", cancelledAt: { var: "$ordinal" } },
|
|
183
187
|
],
|
|
184
188
|
},
|
|
185
189
|
dependencies: [],
|
|
@@ -190,14 +194,7 @@ export const contractAgreementDef = defineFiberApp({
|
|
|
190
194
|
eventName: "submit_completion",
|
|
191
195
|
guard: {
|
|
192
196
|
and: [
|
|
193
|
-
|
|
194
|
-
or: [
|
|
195
|
-
{ "===": [{ var: "event.agent" }, { var: "state.proposer" }] },
|
|
196
|
-
{
|
|
197
|
-
"===": [{ var: "event.agent" }, { var: "state.counterparty" }],
|
|
198
|
-
},
|
|
199
|
-
],
|
|
200
|
-
},
|
|
197
|
+
signerIsAnyParty(["state.proposer", "state.counterparty"]),
|
|
201
198
|
{
|
|
202
199
|
"!": [
|
|
203
200
|
{
|
|
@@ -221,7 +218,7 @@ export const contractAgreementDef = defineFiberApp({
|
|
|
221
218
|
{
|
|
222
219
|
agent: { var: "event.agent" },
|
|
223
220
|
proof: { var: "event.proof" },
|
|
224
|
-
submittedAt: { var: "$
|
|
221
|
+
submittedAt: { var: "$ordinal" },
|
|
225
222
|
},
|
|
226
223
|
],
|
|
227
224
|
],
|
|
@@ -235,11 +232,11 @@ export const contractAgreementDef = defineFiberApp({
|
|
|
235
232
|
from: "ACTIVE",
|
|
236
233
|
to: "COMPLETED",
|
|
237
234
|
eventName: "finalize",
|
|
238
|
-
guard: { ">=": [{
|
|
235
|
+
guard: { ">=": [{ length: [{ var: "state.completions" }] }, 2] },
|
|
239
236
|
effect: {
|
|
240
237
|
merge: [
|
|
241
238
|
{ var: "state" },
|
|
242
|
-
{ status: "COMPLETED", completedAt: { var: "$
|
|
239
|
+
{ status: "COMPLETED", completedAt: { var: "$ordinal" } },
|
|
243
240
|
],
|
|
244
241
|
},
|
|
245
242
|
dependencies: [],
|
|
@@ -248,18 +245,13 @@ export const contractAgreementDef = defineFiberApp({
|
|
|
248
245
|
from: "ACTIVE",
|
|
249
246
|
to: "DISPUTED",
|
|
250
247
|
eventName: "dispute",
|
|
251
|
-
guard:
|
|
252
|
-
or: [
|
|
253
|
-
{ "===": [{ var: "event.agent" }, { var: "state.proposer" }] },
|
|
254
|
-
{ "===": [{ var: "event.agent" }, { var: "state.counterparty" }] },
|
|
255
|
-
],
|
|
256
|
-
},
|
|
248
|
+
guard: signerIsAnyParty(["state.proposer", "state.counterparty"]),
|
|
257
249
|
effect: {
|
|
258
250
|
merge: [
|
|
259
251
|
{ var: "state" },
|
|
260
252
|
{
|
|
261
253
|
status: "DISPUTED",
|
|
262
|
-
disputedAt: { var: "$
|
|
254
|
+
disputedAt: { var: "$ordinal" },
|
|
263
255
|
disputeReason: { var: "event.reason" },
|
|
264
256
|
disputedBy: { var: "event.agent" },
|
|
265
257
|
},
|
|
@@ -271,13 +263,14 @@ export const contractAgreementDef = defineFiberApp({
|
|
|
271
263
|
from: "DISPUTED",
|
|
272
264
|
to: "COMPLETED",
|
|
273
265
|
eventName: "resolve",
|
|
266
|
+
// authority gate — an ARBITER/SLASHER attestation check layers on additively when the identity registry lands (see docs/design/app-hardening-identity-integration.md §4.2)
|
|
274
267
|
guard: {
|
|
275
268
|
or: [
|
|
276
|
-
|
|
269
|
+
signerIsParty("state.arbitrator"),
|
|
277
270
|
{
|
|
278
271
|
and: [
|
|
279
|
-
|
|
280
|
-
|
|
272
|
+
signerIsParty("state.proposer"),
|
|
273
|
+
signerIsParty("state.counterparty"),
|
|
281
274
|
],
|
|
282
275
|
},
|
|
283
276
|
],
|
|
@@ -287,9 +280,16 @@ export const contractAgreementDef = defineFiberApp({
|
|
|
287
280
|
{ var: "state" },
|
|
288
281
|
{
|
|
289
282
|
status: "COMPLETED",
|
|
290
|
-
resolvedAt: { var: "$
|
|
283
|
+
resolvedAt: { var: "$ordinal" },
|
|
291
284
|
resolution: { var: "event.resolution" },
|
|
292
|
-
rulingId
|
|
285
|
+
// rulingId is recorded only on the arbitrator-resolved path
|
|
286
|
+
rulingId: {
|
|
287
|
+
if: [
|
|
288
|
+
signerIsParty("state.arbitrator"),
|
|
289
|
+
{ var: "event.rulingId" },
|
|
290
|
+
null,
|
|
291
|
+
],
|
|
292
|
+
},
|
|
293
293
|
},
|
|
294
294
|
],
|
|
295
295
|
},
|
|
@@ -299,16 +299,11 @@ export const contractAgreementDef = defineFiberApp({
|
|
|
299
299
|
from: "ACTIVE",
|
|
300
300
|
to: "CANCELLED",
|
|
301
301
|
eventName: "cancel",
|
|
302
|
-
guard:
|
|
303
|
-
or: [
|
|
304
|
-
{ "===": [{ var: "event.agent" }, { var: "state.proposer" }] },
|
|
305
|
-
{ "===": [{ var: "event.agent" }, { var: "state.counterparty" }] },
|
|
306
|
-
],
|
|
307
|
-
},
|
|
302
|
+
guard: signerIsAnyParty(["state.proposer", "state.counterparty"]),
|
|
308
303
|
effect: {
|
|
309
304
|
merge: [
|
|
310
305
|
{ var: "state" },
|
|
311
|
-
{ status: "CANCELLED", cancelledAt: { var: "$
|
|
306
|
+
{ status: "CANCELLED", cancelledAt: { var: "$ordinal" } },
|
|
312
307
|
],
|
|
313
308
|
},
|
|
314
309
|
dependencies: [],
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { defineFiberApp } from "../../../schema/fiber-app.js";
|
|
2
|
+
import { signerIsParty } from "../../../schema/guards.js";
|
|
2
3
|
/**
|
|
3
4
|
* Asset custody with conditional release, dispute resolution, and split payments.
|
|
4
5
|
*/
|
|
@@ -38,7 +39,7 @@ export const contractEscrowDef = defineFiberApp({
|
|
|
38
39
|
},
|
|
39
40
|
},
|
|
40
41
|
createSchema: {
|
|
41
|
-
required: ["depositor", "beneficiary", "requiredAmount"],
|
|
42
|
+
required: ["depositor", "beneficiary", "requiredAmount", "arbiter"],
|
|
42
43
|
properties: {
|
|
43
44
|
depositor: {
|
|
44
45
|
type: "address",
|
|
@@ -48,6 +49,11 @@ export const contractEscrowDef = defineFiberApp({
|
|
|
48
49
|
type: "address",
|
|
49
50
|
description: "DAG address of the beneficiary",
|
|
50
51
|
},
|
|
52
|
+
arbiter: {
|
|
53
|
+
type: "address",
|
|
54
|
+
description: "DAG address of the arbiter authorized to rule on a dispute",
|
|
55
|
+
immutable: true,
|
|
56
|
+
},
|
|
51
57
|
requiredAmount: {
|
|
52
58
|
type: "number",
|
|
53
59
|
minimum: 0,
|
|
@@ -74,6 +80,7 @@ export const contractEscrowDef = defineFiberApp({
|
|
|
74
80
|
properties: {
|
|
75
81
|
depositor: { type: "address" },
|
|
76
82
|
beneficiary: { type: "address" },
|
|
83
|
+
arbiter: { type: "address", immutable: true },
|
|
77
84
|
requiredAmount: { type: "number" },
|
|
78
85
|
balance: { type: "number" },
|
|
79
86
|
fundedAt: { type: "integer", nullable: true },
|
|
@@ -108,16 +115,11 @@ export const contractEscrowDef = defineFiberApp({
|
|
|
108
115
|
dispute: {},
|
|
109
116
|
ruling: {
|
|
110
117
|
properties: {
|
|
111
|
-
judicialRuling: { type: "boolean" },
|
|
112
118
|
splits: { type: "array" },
|
|
113
119
|
rulingId: { type: "string" },
|
|
114
120
|
},
|
|
115
121
|
},
|
|
116
|
-
refund: {
|
|
117
|
-
properties: {
|
|
118
|
-
mutualConsent: { type: "boolean", nullable: true },
|
|
119
|
-
},
|
|
120
|
-
},
|
|
122
|
+
refund: {},
|
|
121
123
|
cancel: {},
|
|
122
124
|
},
|
|
123
125
|
states: {
|
|
@@ -202,14 +204,14 @@ export const contractEscrowDef = defineFiberApp({
|
|
|
202
204
|
eventName: "deposit",
|
|
203
205
|
guard: {
|
|
204
206
|
and: [
|
|
205
|
-
|
|
207
|
+
signerIsParty("state.depositor"),
|
|
206
208
|
{ ">=": [{ var: "event.amount" }, { var: "state.requiredAmount" }] },
|
|
207
209
|
],
|
|
208
210
|
},
|
|
209
211
|
effect: {
|
|
210
212
|
merge: [
|
|
211
213
|
{ var: "state" },
|
|
212
|
-
{ balance: { var: "event.amount" }, fundedAt: { var: "$
|
|
214
|
+
{ balance: { var: "event.amount" }, fundedAt: { var: "$ordinal" } },
|
|
213
215
|
],
|
|
214
216
|
},
|
|
215
217
|
dependencies: [],
|
|
@@ -220,12 +222,12 @@ export const contractEscrowDef = defineFiberApp({
|
|
|
220
222
|
eventName: "activate",
|
|
221
223
|
guard: {
|
|
222
224
|
or: [
|
|
223
|
-
|
|
225
|
+
signerIsParty("state.beneficiary"),
|
|
224
226
|
{ var: "state.autoActivate" },
|
|
225
227
|
],
|
|
226
228
|
},
|
|
227
229
|
effect: {
|
|
228
|
-
merge: [{ var: "state" }, { activatedAt: { var: "$
|
|
230
|
+
merge: [{ var: "state" }, { activatedAt: { var: "$ordinal" } }],
|
|
229
231
|
},
|
|
230
232
|
dependencies: [],
|
|
231
233
|
},
|
|
@@ -233,7 +235,7 @@ export const contractEscrowDef = defineFiberApp({
|
|
|
233
235
|
from: "ACTIVE",
|
|
234
236
|
to: "RELEASING",
|
|
235
237
|
eventName: "request_release",
|
|
236
|
-
guard:
|
|
238
|
+
guard: signerIsParty("state.beneficiary"),
|
|
237
239
|
effect: {
|
|
238
240
|
merge: [
|
|
239
241
|
{ var: "state" },
|
|
@@ -242,10 +244,10 @@ export const contractEscrowDef = defineFiberApp({
|
|
|
242
244
|
requestedBy: { var: "event.agent" },
|
|
243
245
|
amount: { var: "event.amount" },
|
|
244
246
|
reason: { var: "event.reason" },
|
|
245
|
-
requestedAt: { var: "$
|
|
247
|
+
requestedAt: { var: "$ordinal" },
|
|
246
248
|
},
|
|
247
249
|
releaseDeadline: {
|
|
248
|
-
"+": [{ var: "$
|
|
250
|
+
"+": [{ var: "$ordinal" }, { var: "state.releaseWindowMs" }],
|
|
249
251
|
},
|
|
250
252
|
},
|
|
251
253
|
],
|
|
@@ -258,15 +260,15 @@ export const contractEscrowDef = defineFiberApp({
|
|
|
258
260
|
eventName: "approve_release",
|
|
259
261
|
guard: {
|
|
260
262
|
or: [
|
|
261
|
-
|
|
262
|
-
{ ">=": [{ var: "$
|
|
263
|
+
signerIsParty("state.depositor"),
|
|
264
|
+
{ ">=": [{ var: "$ordinal" }, { var: "state.releaseDeadline" }] },
|
|
263
265
|
],
|
|
264
266
|
},
|
|
265
267
|
effect: {
|
|
266
268
|
merge: [
|
|
267
269
|
{ var: "state" },
|
|
268
270
|
{
|
|
269
|
-
releasedAt: { var: "$
|
|
271
|
+
releasedAt: { var: "$ordinal" },
|
|
270
272
|
releasedTo: { var: "state.beneficiary" },
|
|
271
273
|
},
|
|
272
274
|
],
|
|
@@ -279,24 +281,37 @@ export const contractEscrowDef = defineFiberApp({
|
|
|
279
281
|
eventName: "dispute",
|
|
280
282
|
guard: {
|
|
281
283
|
and: [
|
|
282
|
-
|
|
283
|
-
{ "<": [{ var: "$
|
|
284
|
+
signerIsParty("state.depositor"),
|
|
285
|
+
{ "<": [{ var: "$ordinal" }, { var: "state.releaseDeadline" }] },
|
|
284
286
|
],
|
|
285
287
|
},
|
|
286
288
|
effect: {
|
|
287
|
-
merge: [
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
289
|
+
merge: [
|
|
290
|
+
{ var: "state" },
|
|
291
|
+
{ disputedAt: { var: "$ordinal" } },
|
|
292
|
+
{
|
|
293
|
+
// A3 fix: transition-level `spawns` is dropped by the chain. No Judiciary state machine is
|
|
294
|
+
// defined to inline under `_spawn`, and escrow already resolves disputes via its own pinned
|
|
295
|
+
// `arbiter` (the `ruling` transition) — the spawned Judiciary was fire-and-forget (never read
|
|
296
|
+
// by escrow). So the dispute case is surfaced to the judiciary subsystem as an `_emit`
|
|
297
|
+
// notification instead of a child fiber.
|
|
298
|
+
_emit: [
|
|
299
|
+
{
|
|
300
|
+
name: "dispute_opened",
|
|
301
|
+
data: {
|
|
302
|
+
caseType: "escrow_dispute",
|
|
303
|
+
plaintiff: { var: "state.depositor" },
|
|
304
|
+
defendant: { var: "state.beneficiary" },
|
|
305
|
+
claim: {
|
|
306
|
+
escrowId: { var: "machineId" },
|
|
307
|
+
amount: { var: "state.balance" },
|
|
308
|
+
},
|
|
309
|
+
},
|
|
310
|
+
destination: "Judiciary",
|
|
311
|
+
},
|
|
312
|
+
],
|
|
298
313
|
},
|
|
299
|
-
|
|
314
|
+
],
|
|
300
315
|
},
|
|
301
316
|
dependencies: [],
|
|
302
317
|
},
|
|
@@ -304,7 +319,29 @@ export const contractEscrowDef = defineFiberApp({
|
|
|
304
319
|
from: "DISPUTED",
|
|
305
320
|
to: "SPLIT",
|
|
306
321
|
eventName: "ruling",
|
|
307
|
-
|
|
322
|
+
// authority gate — an ARBITER/SLASHER attestation check layers on additively when the identity registry lands (see docs/design/app-hardening-identity-integration.md §4.2)
|
|
323
|
+
guard: {
|
|
324
|
+
and: [
|
|
325
|
+
signerIsParty("state.arbiter"),
|
|
326
|
+
{
|
|
327
|
+
"===": [
|
|
328
|
+
{
|
|
329
|
+
reduce: [
|
|
330
|
+
{ var: "event.splits" },
|
|
331
|
+
{
|
|
332
|
+
"+": [
|
|
333
|
+
{ var: "accumulator" },
|
|
334
|
+
{ var: "current.amount" },
|
|
335
|
+
],
|
|
336
|
+
},
|
|
337
|
+
0,
|
|
338
|
+
],
|
|
339
|
+
},
|
|
340
|
+
{ var: "state.balance" },
|
|
341
|
+
],
|
|
342
|
+
},
|
|
343
|
+
],
|
|
344
|
+
},
|
|
308
345
|
effect: {
|
|
309
346
|
merge: [
|
|
310
347
|
{ var: "state" },
|
|
@@ -320,14 +357,20 @@ export const contractEscrowDef = defineFiberApp({
|
|
|
320
357
|
from: "ACTIVE",
|
|
321
358
|
to: "REFUNDED",
|
|
322
359
|
eventName: "refund",
|
|
360
|
+
// authority gate — an ARBITER/SLASHER attestation check layers on additively when the identity registry lands (see docs/design/app-hardening-identity-integration.md §4.2)
|
|
323
361
|
guard: {
|
|
324
362
|
or: [
|
|
325
|
-
{
|
|
326
|
-
|
|
363
|
+
{
|
|
364
|
+
and: [
|
|
365
|
+
signerIsParty("state.depositor"),
|
|
366
|
+
signerIsParty("state.beneficiary"),
|
|
367
|
+
],
|
|
368
|
+
},
|
|
369
|
+
{ ">=": [{ var: "$ordinal" }, { var: "state.expiresAt" }] },
|
|
327
370
|
],
|
|
328
371
|
},
|
|
329
372
|
effect: {
|
|
330
|
-
merge: [{ var: "state" }, { refundedAt: { var: "$
|
|
373
|
+
merge: [{ var: "state" }, { refundedAt: { var: "$ordinal" } }],
|
|
331
374
|
},
|
|
332
375
|
dependencies: [],
|
|
333
376
|
},
|
|
@@ -335,9 +378,9 @@ export const contractEscrowDef = defineFiberApp({
|
|
|
335
378
|
from: "CREATED",
|
|
336
379
|
to: "REFUNDED",
|
|
337
380
|
eventName: "cancel",
|
|
338
|
-
guard:
|
|
381
|
+
guard: signerIsParty("state.depositor"),
|
|
339
382
|
effect: {
|
|
340
|
-
merge: [{ var: "state" }, { refundedAt: { var: "$
|
|
383
|
+
merge: [{ var: "state" }, { refundedAt: { var: "$ordinal" } }],
|
|
341
384
|
},
|
|
342
385
|
dependencies: [],
|
|
343
386
|
},
|
|
@@ -74,7 +74,7 @@ export const contractUniversalDef = defineFiberApp({
|
|
|
74
74
|
effect: {
|
|
75
75
|
merge: [
|
|
76
76
|
{ var: "state" },
|
|
77
|
-
{ status: "ACTIVE", acceptedAt: { var: "$
|
|
77
|
+
{ status: "ACTIVE", acceptedAt: { var: "$ordinal" } },
|
|
78
78
|
],
|
|
79
79
|
},
|
|
80
80
|
dependencies: [],
|
|
@@ -87,7 +87,7 @@ export const contractUniversalDef = defineFiberApp({
|
|
|
87
87
|
effect: {
|
|
88
88
|
merge: [
|
|
89
89
|
{ var: "state" },
|
|
90
|
-
{ status: "CANCELLED", cancelledAt: { var: "$
|
|
90
|
+
{ status: "CANCELLED", cancelledAt: { var: "$ordinal" } },
|
|
91
91
|
],
|
|
92
92
|
},
|
|
93
93
|
dependencies: [],
|
|
@@ -100,7 +100,7 @@ export const contractUniversalDef = defineFiberApp({
|
|
|
100
100
|
effect: {
|
|
101
101
|
merge: [
|
|
102
102
|
{ var: "state" },
|
|
103
|
-
{ status: "COMPLETED", completedAt: { var: "$
|
|
103
|
+
{ status: "COMPLETED", completedAt: { var: "$ordinal" } },
|
|
104
104
|
],
|
|
105
105
|
},
|
|
106
106
|
dependencies: [],
|
|
@@ -113,7 +113,7 @@ export const contractUniversalDef = defineFiberApp({
|
|
|
113
113
|
effect: {
|
|
114
114
|
merge: [
|
|
115
115
|
{ var: "state" },
|
|
116
|
-
{ status: "CANCELLED", cancelledAt: { var: "$
|
|
116
|
+
{ status: "CANCELLED", cancelledAt: { var: "$ordinal" } },
|
|
117
117
|
],
|
|
118
118
|
},
|
|
119
119
|
dependencies: [],
|