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