@ottochain/sdk 0.2.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 (330) hide show
  1. package/README.md +305 -0
  2. package/dist/apps/contracts/index.d.ts +21 -0
  3. package/dist/apps/contracts/index.js +39 -0
  4. package/dist/apps/contracts/types.d.ts +24 -0
  5. package/dist/apps/contracts/types.js +48 -0
  6. package/dist/apps/identity/index.d.ts +22 -0
  7. package/dist/apps/identity/index.js +40 -0
  8. package/dist/apps/identity/types.d.ts +30 -0
  9. package/dist/apps/identity/types.js +53 -0
  10. package/dist/apps/index.d.ts +29 -0
  11. package/dist/apps/index.js +60 -0
  12. package/dist/apps/markets/index.d.ts +26 -0
  13. package/dist/apps/markets/index.js +46 -0
  14. package/dist/apps/markets/types.d.ts +185 -0
  15. package/dist/apps/markets/types.js +252 -0
  16. package/dist/apps/oracles/index.d.ts +26 -0
  17. package/dist/apps/oracles/index.js +46 -0
  18. package/dist/apps/oracles/types.d.ts +211 -0
  19. package/dist/apps/oracles/types.js +306 -0
  20. package/dist/cjs/apps/contracts/index.js +60 -0
  21. package/dist/cjs/apps/contracts/state-machines/contract.json +420 -0
  22. package/dist/cjs/apps/contracts/state-machines/escrow.json +426 -0
  23. package/dist/cjs/apps/contracts/types.js +48 -0
  24. package/dist/cjs/apps/corporate/index.js +112 -0
  25. package/dist/cjs/apps/corporate/state-machines/corporate-board.json +1064 -0
  26. package/dist/cjs/apps/corporate/state-machines/corporate-bylaws.json +751 -0
  27. package/dist/cjs/apps/corporate/state-machines/corporate-committee.json +957 -0
  28. package/dist/cjs/apps/corporate/state-machines/corporate-compliance.json +1293 -0
  29. package/dist/cjs/apps/corporate/state-machines/corporate-entity.json +861 -0
  30. package/dist/cjs/apps/corporate/state-machines/corporate-officers.json +843 -0
  31. package/dist/cjs/apps/corporate/state-machines/corporate-proxy.json +783 -0
  32. package/dist/cjs/apps/corporate/state-machines/corporate-resolution.json +1174 -0
  33. package/dist/cjs/apps/corporate/state-machines/corporate-securities.json +1215 -0
  34. package/dist/cjs/apps/corporate/state-machines/corporate-shareholders.json +1298 -0
  35. package/dist/cjs/apps/corporate/types.js +44 -0
  36. package/dist/cjs/apps/governance/index.js +203 -0
  37. package/dist/cjs/apps/governance/state-machines/dao-multisig.json +711 -0
  38. package/dist/cjs/apps/governance/state-machines/dao-single.json +258 -0
  39. package/dist/cjs/apps/governance/state-machines/dao-threshold.json +660 -0
  40. package/dist/cjs/apps/governance/state-machines/dao-token.json +680 -0
  41. package/dist/cjs/apps/governance/state-machines/governance-constitution.json +401 -0
  42. package/dist/cjs/apps/governance/state-machines/governance-executive.json +441 -0
  43. package/dist/cjs/apps/governance/state-machines/governance-judiciary.json +626 -0
  44. package/dist/cjs/apps/governance/state-machines/governance-legislature.json +726 -0
  45. package/dist/cjs/apps/governance/state-machines/governance-simple.json +679 -0
  46. package/dist/cjs/apps/governance/types.js +42 -0
  47. package/dist/cjs/apps/identity/constants.js +58 -0
  48. package/dist/cjs/apps/identity/index.js +78 -0
  49. package/dist/cjs/apps/identity/state-machines/agent-identity.json +320 -0
  50. package/dist/cjs/apps/identity/types.js +53 -0
  51. package/dist/cjs/apps/index.js +58 -0
  52. package/dist/cjs/apps/markets/index.js +55 -0
  53. package/dist/cjs/apps/markets/state-machines/market-universal.json +354 -0
  54. package/dist/cjs/apps/markets/types.js +219 -0
  55. package/dist/cjs/apps/oracles/index.js +62 -0
  56. package/dist/cjs/apps/oracles/state-machines/oracle.json +452 -0
  57. package/dist/cjs/apps/oracles/types.js +282 -0
  58. package/dist/cjs/errors.js +293 -0
  59. package/dist/cjs/generated/google/protobuf/struct.js +514 -0
  60. package/dist/cjs/generated/google/protobuf/timestamp.js +92 -0
  61. package/dist/cjs/generated/index.js +150 -0
  62. package/dist/cjs/generated/ottochain/apps/contracts/v1/contract.js +873 -0
  63. package/dist/cjs/generated/ottochain/apps/contracts/v1/contract_pb.js +100 -0
  64. package/dist/cjs/generated/ottochain/apps/corporate/v1/corporate.js +4515 -0
  65. package/dist/cjs/generated/ottochain/apps/corporate/v1/corporate_pb.js +392 -0
  66. package/dist/cjs/generated/ottochain/apps/governance/v1/governance.js +3255 -0
  67. package/dist/cjs/generated/ottochain/apps/governance/v1/governance_pb.js +235 -0
  68. package/dist/cjs/generated/ottochain/apps/identity/v1/agent.js +619 -0
  69. package/dist/cjs/generated/ottochain/apps/identity/v1/agent_pb.js +116 -0
  70. package/dist/cjs/generated/ottochain/apps/identity/v1/attestation.js +780 -0
  71. package/dist/cjs/generated/ottochain/apps/identity/v1/attestation_pb.js +79 -0
  72. package/dist/cjs/generated/ottochain/apps/markets/v1/market.js +1261 -0
  73. package/dist/cjs/generated/ottochain/apps/markets/v1/market_pb.js +151 -0
  74. package/dist/cjs/generated/ottochain/apps/oracles/v1/oracle.js +1223 -0
  75. package/dist/cjs/generated/ottochain/apps/oracles/v1/oracle_pb.js +109 -0
  76. package/dist/cjs/generated/ottochain/v1/common.js +10 -0
  77. package/dist/cjs/generated/ottochain/v1/common_pb.js +37 -0
  78. package/dist/cjs/generated/ottochain/v1/fiber.js +1057 -0
  79. package/dist/cjs/generated/ottochain/v1/fiber_pb.js +86 -0
  80. package/dist/cjs/generated/ottochain/v1/messages.js +740 -0
  81. package/dist/cjs/generated/ottochain/v1/messages_pb.js +44 -0
  82. package/dist/cjs/generated/ottochain/v1/records.js +1253 -0
  83. package/dist/cjs/generated/ottochain/v1/records_pb.js +44 -0
  84. package/dist/cjs/index.js +79 -0
  85. package/dist/cjs/metakit/binary.js +58 -0
  86. package/dist/cjs/metakit/canonicalize.js +40 -0
  87. package/dist/cjs/metakit/codec.js +45 -0
  88. package/dist/cjs/metakit/currency-transaction.js +319 -0
  89. package/dist/cjs/metakit/currency-types.js +13 -0
  90. package/dist/cjs/metakit/hash.js +84 -0
  91. package/dist/cjs/metakit/index.js +74 -0
  92. package/dist/cjs/metakit/network/client.js +78 -0
  93. package/dist/cjs/metakit/network/currency-l1-client.js +101 -0
  94. package/dist/cjs/metakit/network/data-l1-client.js +76 -0
  95. package/dist/cjs/metakit/network/index.js +16 -0
  96. package/dist/cjs/metakit/network/types.js +20 -0
  97. package/dist/cjs/metakit/sign.js +120 -0
  98. package/dist/cjs/metakit/signed-object.js +100 -0
  99. package/dist/cjs/metakit/types.js +14 -0
  100. package/dist/cjs/metakit/verify.js +217 -0
  101. package/dist/cjs/metakit/wallet.js +127 -0
  102. package/dist/cjs/ottochain/index.js +47 -0
  103. package/dist/cjs/ottochain/metagraph-client.js +157 -0
  104. package/dist/cjs/ottochain/snapshot.js +110 -0
  105. package/dist/cjs/ottochain/types.js +11 -0
  106. package/dist/cjs/package.json +1 -0
  107. package/dist/cjs/types.js +25 -0
  108. package/dist/cjs/validation.js +312 -0
  109. package/dist/errors.d.ts +221 -0
  110. package/dist/errors.js +293 -0
  111. package/dist/esm/apps/contracts/index.js +42 -0
  112. package/dist/esm/apps/contracts/state-machines/contract.json +420 -0
  113. package/dist/esm/apps/contracts/state-machines/escrow.json +426 -0
  114. package/dist/esm/apps/contracts/types.js +44 -0
  115. package/dist/esm/apps/corporate/index.js +57 -0
  116. package/dist/esm/apps/corporate/state-machines/corporate-board.json +1064 -0
  117. package/dist/esm/apps/corporate/state-machines/corporate-bylaws.json +751 -0
  118. package/dist/esm/apps/corporate/state-machines/corporate-committee.json +957 -0
  119. package/dist/esm/apps/corporate/state-machines/corporate-compliance.json +1293 -0
  120. package/dist/esm/apps/corporate/state-machines/corporate-entity.json +861 -0
  121. package/dist/esm/apps/corporate/state-machines/corporate-officers.json +843 -0
  122. package/dist/esm/apps/corporate/state-machines/corporate-proxy.json +783 -0
  123. package/dist/esm/apps/corporate/state-machines/corporate-resolution.json +1174 -0
  124. package/dist/esm/apps/corporate/state-machines/corporate-securities.json +1215 -0
  125. package/dist/esm/apps/corporate/state-machines/corporate-shareholders.json +1298 -0
  126. package/dist/esm/apps/corporate/types.js +38 -0
  127. package/dist/esm/apps/governance/index.js +154 -0
  128. package/dist/esm/apps/governance/state-machines/dao-multisig.json +711 -0
  129. package/dist/esm/apps/governance/state-machines/dao-single.json +258 -0
  130. package/dist/esm/apps/governance/state-machines/dao-threshold.json +660 -0
  131. package/dist/esm/apps/governance/state-machines/dao-token.json +680 -0
  132. package/dist/esm/apps/governance/state-machines/governance-constitution.json +401 -0
  133. package/dist/esm/apps/governance/state-machines/governance-executive.json +441 -0
  134. package/dist/esm/apps/governance/state-machines/governance-judiciary.json +626 -0
  135. package/dist/esm/apps/governance/state-machines/governance-legislature.json +726 -0
  136. package/dist/esm/apps/governance/state-machines/governance-simple.json +679 -0
  137. package/dist/esm/apps/governance/types.js +35 -0
  138. package/dist/esm/apps/identity/constants.js +53 -0
  139. package/dist/esm/apps/identity/index.js +50 -0
  140. package/dist/esm/apps/identity/state-machines/agent-identity.json +320 -0
  141. package/dist/esm/apps/identity/types.js +50 -0
  142. package/dist/esm/apps/index.js +32 -0
  143. package/dist/esm/apps/markets/index.js +34 -0
  144. package/dist/esm/apps/markets/state-machines/market-universal.json +354 -0
  145. package/dist/esm/apps/markets/types.js +206 -0
  146. package/dist/esm/apps/oracles/index.js +42 -0
  147. package/dist/esm/apps/oracles/state-machines/oracle.json +452 -0
  148. package/dist/esm/apps/oracles/types.js +267 -0
  149. package/dist/esm/errors.js +283 -0
  150. package/dist/esm/generated/google/protobuf/struct.js +508 -0
  151. package/dist/esm/generated/google/protobuf/timestamp.js +89 -0
  152. package/dist/esm/generated/index.js +26 -0
  153. package/dist/esm/generated/ottochain/apps/contracts/v1/contract.js +867 -0
  154. package/dist/esm/generated/ottochain/apps/contracts/v1/contract_pb.js +97 -0
  155. package/dist/esm/generated/ottochain/apps/corporate/v1/corporate.js +4493 -0
  156. package/dist/esm/generated/ottochain/apps/corporate/v1/corporate_pb.js +389 -0
  157. package/dist/esm/generated/ottochain/apps/governance/v1/governance.js +3240 -0
  158. package/dist/esm/generated/ottochain/apps/governance/v1/governance_pb.js +232 -0
  159. package/dist/esm/generated/ottochain/apps/identity/v1/agent.js +610 -0
  160. package/dist/esm/generated/ottochain/apps/identity/v1/agent_pb.js +113 -0
  161. package/dist/esm/generated/ottochain/apps/identity/v1/attestation.js +774 -0
  162. package/dist/esm/generated/ottochain/apps/identity/v1/attestation_pb.js +76 -0
  163. package/dist/esm/generated/ottochain/apps/markets/v1/market.js +1252 -0
  164. package/dist/esm/generated/ottochain/apps/markets/v1/market_pb.js +148 -0
  165. package/dist/esm/generated/ottochain/apps/oracles/v1/oracle.js +1217 -0
  166. package/dist/esm/generated/ottochain/apps/oracles/v1/oracle_pb.js +106 -0
  167. package/dist/esm/generated/ottochain/v1/common.js +7 -0
  168. package/dist/esm/generated/ottochain/v1/common_pb.js +34 -0
  169. package/dist/esm/generated/ottochain/v1/fiber.js +1051 -0
  170. package/dist/esm/generated/ottochain/v1/fiber_pb.js +83 -0
  171. package/dist/esm/generated/ottochain/v1/messages.js +737 -0
  172. package/dist/esm/generated/ottochain/v1/messages_pb.js +41 -0
  173. package/dist/esm/generated/ottochain/v1/records.js +1250 -0
  174. package/dist/esm/generated/ottochain/v1/records_pb.js +41 -0
  175. package/dist/esm/index.js +33 -0
  176. package/dist/esm/metakit/binary.js +53 -0
  177. package/dist/esm/metakit/canonicalize.js +33 -0
  178. package/dist/esm/metakit/codec.js +38 -0
  179. package/dist/esm/metakit/currency-transaction.js +306 -0
  180. package/dist/esm/metakit/currency-types.js +10 -0
  181. package/dist/esm/metakit/hash.js +77 -0
  182. package/dist/esm/metakit/index.js +30 -0
  183. package/dist/esm/metakit/network/client.js +74 -0
  184. package/dist/esm/metakit/network/currency-l1-client.js +97 -0
  185. package/dist/esm/metakit/network/data-l1-client.js +72 -0
  186. package/dist/esm/metakit/network/index.js +9 -0
  187. package/dist/esm/metakit/network/types.js +16 -0
  188. package/dist/esm/metakit/sign.js +114 -0
  189. package/dist/esm/metakit/signed-object.js +94 -0
  190. package/dist/esm/metakit/types.js +11 -0
  191. package/dist/esm/metakit/verify.js +210 -0
  192. package/dist/esm/metakit/wallet.js +117 -0
  193. package/dist/esm/ottochain/index.js +13 -0
  194. package/dist/esm/ottochain/metagraph-client.js +153 -0
  195. package/dist/esm/ottochain/snapshot.js +100 -0
  196. package/dist/esm/ottochain/types.js +10 -0
  197. package/dist/esm/package.json +1 -0
  198. package/dist/esm/types.js +20 -0
  199. package/dist/esm/validation.js +301 -0
  200. package/dist/generated/index.d.ts +15 -0
  201. package/dist/generated/index.js +34 -0
  202. package/dist/generated/ottochain/apps/contracts/v1/contract_pb.d.ts +274 -0
  203. package/dist/generated/ottochain/apps/contracts/v1/contract_pb.js +100 -0
  204. package/dist/generated/ottochain/apps/identity/v1/agent_pb.d.ts +211 -0
  205. package/dist/generated/ottochain/apps/identity/v1/agent_pb.js +116 -0
  206. package/dist/generated/ottochain/apps/identity/v1/attestation_pb.d.ts +238 -0
  207. package/dist/generated/ottochain/apps/identity/v1/attestation_pb.js +79 -0
  208. package/dist/generated/ottochain/apps/markets/v1/market_pb.d.ts +436 -0
  209. package/dist/generated/ottochain/apps/markets/v1/market_pb.js +151 -0
  210. package/dist/generated/ottochain/apps/oracles/v1/oracle_pb.d.ts +393 -0
  211. package/dist/generated/ottochain/apps/oracles/v1/oracle_pb.js +109 -0
  212. package/dist/generated/ottochain/v1/common_pb.d.ts +86 -0
  213. package/dist/generated/ottochain/v1/common_pb.js +37 -0
  214. package/dist/generated/ottochain/v1/fiber_pb.d.ts +292 -0
  215. package/dist/generated/ottochain/v1/fiber_pb.js +86 -0
  216. package/dist/generated/ottochain/v1/messages_pb.d.ts +190 -0
  217. package/dist/generated/ottochain/v1/messages_pb.js +44 -0
  218. package/dist/generated/ottochain/v1/records_pb.d.ts +221 -0
  219. package/dist/generated/ottochain/v1/records_pb.js +44 -0
  220. package/dist/index.d.ts +21 -0
  221. package/dist/index.js +77 -0
  222. package/dist/metakit/binary.d.ts +38 -0
  223. package/dist/metakit/binary.js +58 -0
  224. package/dist/metakit/canonicalize.d.ts +26 -0
  225. package/dist/metakit/canonicalize.js +40 -0
  226. package/dist/metakit/codec.d.ts +16 -0
  227. package/dist/metakit/codec.js +45 -0
  228. package/dist/metakit/currency-transaction.d.ts +157 -0
  229. package/dist/metakit/currency-transaction.js +319 -0
  230. package/dist/metakit/currency-types.d.ts +55 -0
  231. package/dist/metakit/currency-types.js +13 -0
  232. package/dist/metakit/hash.d.ts +50 -0
  233. package/dist/metakit/hash.js +84 -0
  234. package/dist/metakit/index.d.ts +23 -0
  235. package/dist/metakit/index.js +74 -0
  236. package/dist/metakit/network/client.d.ts +23 -0
  237. package/dist/metakit/network/client.js +78 -0
  238. package/dist/metakit/network/currency-l1-client.d.ts +71 -0
  239. package/dist/metakit/network/currency-l1-client.js +101 -0
  240. package/dist/metakit/network/data-l1-client.d.ts +57 -0
  241. package/dist/metakit/network/data-l1-client.js +76 -0
  242. package/dist/metakit/network/index.d.ts +10 -0
  243. package/dist/metakit/network/index.js +16 -0
  244. package/dist/metakit/network/types.d.ts +74 -0
  245. package/dist/metakit/network/types.js +20 -0
  246. package/dist/metakit/sign.d.ts +65 -0
  247. package/dist/metakit/sign.js +120 -0
  248. package/dist/metakit/signed-object.d.ts +66 -0
  249. package/dist/metakit/signed-object.js +100 -0
  250. package/dist/metakit/types.d.ts +67 -0
  251. package/dist/metakit/types.js +14 -0
  252. package/dist/metakit/verify.d.ts +55 -0
  253. package/dist/metakit/verify.js +217 -0
  254. package/dist/metakit/wallet.d.ts +70 -0
  255. package/dist/metakit/wallet.js +127 -0
  256. package/dist/ottochain/index.d.ts +13 -0
  257. package/dist/ottochain/index.js +45 -0
  258. package/dist/ottochain/metagraph-client.d.ts +111 -0
  259. package/dist/ottochain/metagraph-client.js +157 -0
  260. package/dist/ottochain/snapshot.d.ts +86 -0
  261. package/dist/ottochain/snapshot.js +110 -0
  262. package/dist/ottochain/types.d.ts +278 -0
  263. package/dist/ottochain/types.js +11 -0
  264. package/dist/types/apps/contracts/index.d.ts +30 -0
  265. package/dist/types/apps/contracts/types.d.ts +24 -0
  266. package/dist/types/apps/corporate/index.d.ts +27 -0
  267. package/dist/types/apps/corporate/types.d.ts +9861 -0
  268. package/dist/types/apps/governance/index.d.ts +77 -0
  269. package/dist/types/apps/governance/types.d.ts +344 -0
  270. package/dist/types/apps/identity/constants.d.ts +27 -0
  271. package/dist/types/apps/identity/index.d.ts +39 -0
  272. package/dist/types/apps/identity/types.d.ts +30 -0
  273. package/dist/types/apps/index.d.ts +31 -0
  274. package/dist/types/apps/markets/index.d.ts +26 -0
  275. package/dist/types/apps/markets/types.d.ts +155 -0
  276. package/dist/types/apps/oracles/index.d.ts +34 -0
  277. package/dist/types/apps/oracles/types.d.ts +193 -0
  278. package/dist/types/errors.d.ts +221 -0
  279. package/dist/types/generated/google/protobuf/struct.d.ts +134 -0
  280. package/dist/types/generated/google/protobuf/timestamp.d.ts +134 -0
  281. package/dist/types/generated/index.d.ts +18 -0
  282. package/dist/types/generated/ottochain/apps/contracts/v1/contract.d.ts +112 -0
  283. package/dist/types/generated/ottochain/apps/contracts/v1/contract_pb.d.ts +274 -0
  284. package/dist/types/generated/ottochain/apps/corporate/v1/corporate.d.ts +376 -0
  285. package/dist/types/generated/ottochain/apps/corporate/v1/corporate_pb.d.ts +1172 -0
  286. package/dist/types/generated/ottochain/apps/governance/v1/governance.d.ts +296 -0
  287. package/dist/types/generated/ottochain/apps/governance/v1/governance_pb.d.ts +772 -0
  288. package/dist/types/generated/ottochain/apps/identity/v1/agent.d.ts +94 -0
  289. package/dist/types/generated/ottochain/apps/identity/v1/agent_pb.d.ts +211 -0
  290. package/dist/types/generated/ottochain/apps/identity/v1/attestation.d.ts +102 -0
  291. package/dist/types/generated/ottochain/apps/identity/v1/attestation_pb.d.ts +238 -0
  292. package/dist/types/generated/ottochain/apps/markets/v1/market.d.ts +174 -0
  293. package/dist/types/generated/ottochain/apps/markets/v1/market_pb.d.ts +436 -0
  294. package/dist/types/generated/ottochain/apps/oracles/v1/oracle.d.ts +150 -0
  295. package/dist/types/generated/ottochain/apps/oracles/v1/oracle_pb.d.ts +393 -0
  296. package/dist/types/generated/ottochain/v1/common.d.ts +1 -0
  297. package/dist/types/generated/ottochain/v1/common_pb.d.ts +86 -0
  298. package/dist/types/generated/ottochain/v1/fiber.d.ts +130 -0
  299. package/dist/types/generated/ottochain/v1/fiber_pb.d.ts +292 -0
  300. package/dist/types/generated/ottochain/v1/messages.d.ts +89 -0
  301. package/dist/types/generated/ottochain/v1/messages_pb.d.ts +190 -0
  302. package/dist/types/generated/ottochain/v1/records.d.ts +128 -0
  303. package/dist/types/generated/ottochain/v1/records_pb.d.ts +221 -0
  304. package/dist/types/index.d.ts +22 -0
  305. package/dist/types/metakit/binary.d.ts +38 -0
  306. package/dist/types/metakit/canonicalize.d.ts +26 -0
  307. package/dist/types/metakit/codec.d.ts +16 -0
  308. package/dist/types/metakit/currency-transaction.d.ts +157 -0
  309. package/dist/types/metakit/currency-types.d.ts +55 -0
  310. package/dist/types/metakit/hash.d.ts +50 -0
  311. package/dist/types/metakit/index.d.ts +23 -0
  312. package/dist/types/metakit/network/client.d.ts +23 -0
  313. package/dist/types/metakit/network/currency-l1-client.d.ts +71 -0
  314. package/dist/types/metakit/network/data-l1-client.d.ts +57 -0
  315. package/dist/types/metakit/network/index.d.ts +10 -0
  316. package/dist/types/metakit/network/types.d.ts +74 -0
  317. package/dist/types/metakit/sign.d.ts +65 -0
  318. package/dist/types/metakit/signed-object.d.ts +66 -0
  319. package/dist/types/metakit/types.d.ts +67 -0
  320. package/dist/types/metakit/verify.d.ts +55 -0
  321. package/dist/types/metakit/wallet.d.ts +70 -0
  322. package/dist/types/ottochain/index.d.ts +13 -0
  323. package/dist/types/ottochain/metagraph-client.d.ts +111 -0
  324. package/dist/types/ottochain/snapshot.d.ts +86 -0
  325. package/dist/types/ottochain/types.d.ts +210 -0
  326. package/dist/types/types.d.ts +51 -0
  327. package/dist/types/validation.d.ts +449 -0
  328. package/dist/validation.d.ts +449 -0
  329. package/dist/validation.js +312 -0
  330. package/package.json +136 -0
@@ -0,0 +1,41 @@
1
+ // @generated by protoc-gen-es v2.2.0 with parameter "target=ts,import_extension=.js"
2
+ // @generated from file ottochain/v1/records.proto (package ottochain.v1, syntax proto3)
3
+ /* eslint-disable */
4
+ import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv1";
5
+ import { file_ottochain_v1_common } from "./common_pb.js";
6
+ import { file_ottochain_v1_fiber } from "./fiber_pb.js";
7
+ import { file_google_protobuf_struct } from "@bufbuild/protobuf/wkt";
8
+ /**
9
+ * Describes the file ottochain/v1/records.proto.
10
+ */
11
+ export const file_ottochain_v1_records = /*@__PURE__*/ fileDesc("ChpvdHRvY2hhaW4vdjEvcmVjb3Jkcy5wcm90bxIMb3R0b2NoYWluLnYxIsIFChdTdGF0ZU1hY2hpbmVGaWJlclJlY29yZBIQCghmaWJlcl9pZBgBIAEoCRI3ChBjcmVhdGlvbl9vcmRpbmFsGAIgASgLMh0ub3R0b2NoYWluLnYxLlNuYXBzaG90T3JkaW5hbBI+ChdwcmV2aW91c191cGRhdGVfb3JkaW5hbBgDIAEoCzIdLm90dG9jaGFpbi52MS5TbmFwc2hvdE9yZGluYWwSPAoVbGF0ZXN0X3VwZGF0ZV9vcmRpbmFsGAQgASgLMh0ub3R0b2NoYWluLnYxLlNuYXBzaG90T3JkaW5hbBI4CgpkZWZpbml0aW9uGAUgASgLMiQub3R0b2NoYWluLnYxLlN0YXRlTWFjaGluZURlZmluaXRpb24SLAoNY3VycmVudF9zdGF0ZRgGIAEoCzIVLm90dG9jaGFpbi52MS5TdGF0ZUlkEioKCnN0YXRlX2RhdGEYByABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWUSMAoPc3RhdGVfZGF0YV9oYXNoGAggASgLMhcub3R0b2NoYWluLnYxLkhhc2hWYWx1ZRIzCg9zZXF1ZW5jZV9udW1iZXIYCSABKAsyGi5vdHRvY2hhaW4udjEuRmliZXJPcmRpbmFsEiUKBm93bmVycxgKIAMoCzIVLm90dG9jaGFpbi52MS5BZGRyZXNzEikKBnN0YXR1cxgLIAEoDjIZLm90dG9jaGFpbi52MS5GaWJlclN0YXR1cxI1CgxsYXN0X3JlY2VpcHQYDCABKAsyGi5vdHRvY2hhaW4udjEuRXZlbnRSZWNlaXB0SACIAQESHAoPcGFyZW50X2ZpYmVyX2lkGA0gASgJSAGIAQESFwoPY2hpbGRfZmliZXJfaWRzGA4gAygJQg8KDV9sYXN0X3JlY2VpcHRCEgoQX3BhcmVudF9maWJlcl9pZCLrBAoRU2NyaXB0RmliZXJSZWNvcmQSEAoIZmliZXJfaWQYASABKAkSNwoQY3JlYXRpb25fb3JkaW5hbBgCIAEoCzIdLm90dG9jaGFpbi52MS5TbmFwc2hvdE9yZGluYWwSPAoVbGF0ZXN0X3VwZGF0ZV9vcmRpbmFsGAMgASgLMh0ub3R0b2NoYWluLnYxLlNuYXBzaG90T3JkaW5hbBIuCg5zY3JpcHRfcHJvZ3JhbRgEIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZRIvCgpzdGF0ZV9kYXRhGAUgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlSACIAQESNQoPc3RhdGVfZGF0YV9oYXNoGAYgASgLMhcub3R0b2NoYWluLnYxLkhhc2hWYWx1ZUgBiAEBEjkKDmFjY2Vzc19jb250cm9sGAcgASgLMiEub3R0b2NoYWluLnYxLkFjY2Vzc0NvbnRyb2xQb2xpY3kSMwoPc2VxdWVuY2VfbnVtYmVyGAggASgLMhoub3R0b2NoYWluLnYxLkZpYmVyT3JkaW5hbBIlCgZvd25lcnMYCSADKAsyFS5vdHRvY2hhaW4udjEuQWRkcmVzcxIpCgZzdGF0dXMYCiABKA4yGS5vdHRvY2hhaW4udjEuRmliZXJTdGF0dXMSPAoPbGFzdF9pbnZvY2F0aW9uGAsgASgLMh4ub3R0b2NoYWluLnYxLlNjcmlwdEludm9jYXRpb25IAogBAUINCgtfc3RhdGVfZGF0YUISChBfc3RhdGVfZGF0YV9oYXNoQhIKEF9sYXN0X2ludm9jYXRpb24iuwEKC0ZpYmVyQ29tbWl0EiwKC3JlY29yZF9oYXNoGAEgASgLMhcub3R0b2NoYWluLnYxLkhhc2hWYWx1ZRI1Cg9zdGF0ZV9kYXRhX2hhc2gYAiABKAsyFy5vdHRvY2hhaW4udjEuSGFzaFZhbHVlSACIAQESMwoPc2VxdWVuY2VfbnVtYmVyGAMgASgLMhoub3R0b2NoYWluLnYxLkZpYmVyT3JkaW5hbEISChBfc3RhdGVfZGF0YV9oYXNoIrgCCgxPbkNoYWluU3RhdGUSQwoNZmliZXJfY29tbWl0cxgBIAMoCzIsLm90dG9jaGFpbi52MS5PbkNoYWluU3RhdGUuRmliZXJDb21taXRzRW50cnkSPwoLbGF0ZXN0X2xvZ3MYAiADKAsyKi5vdHRvY2hhaW4udjEuT25DaGFpblN0YXRlLkxhdGVzdExvZ3NFbnRyeRpOChFGaWJlckNvbW1pdHNFbnRyeRILCgNrZXkYASABKAkSKAoFdmFsdWUYAiABKAsyGS5vdHRvY2hhaW4udjEuRmliZXJDb21taXQ6AjgBGlIKD0xhdGVzdExvZ3NFbnRyeRILCgNrZXkYASABKAkSLgoFdmFsdWUYAiABKAsyHy5vdHRvY2hhaW4udjEuRmliZXJMb2dFbnRyeUxpc3Q6AjgBIkEKEUZpYmVyTG9nRW50cnlMaXN0EiwKB2VudHJpZXMYASADKAsyGy5vdHRvY2hhaW4udjEuRmliZXJMb2dFbnRyeSLGAgoPQ2FsY3VsYXRlZFN0YXRlEkgKDnN0YXRlX21hY2hpbmVzGAEgAygLMjAub3R0b2NoYWluLnYxLkNhbGN1bGF0ZWRTdGF0ZS5TdGF0ZU1hY2hpbmVzRW50cnkSOwoHc2NyaXB0cxgCIAMoCzIqLm90dG9jaGFpbi52MS5DYWxjdWxhdGVkU3RhdGUuU2NyaXB0c0VudHJ5GlsKElN0YXRlTWFjaGluZXNFbnRyeRILCgNrZXkYASABKAkSNAoFdmFsdWUYAiABKAsyJS5vdHRvY2hhaW4udjEuU3RhdGVNYWNoaW5lRmliZXJSZWNvcmQ6AjgBGk8KDFNjcmlwdHNFbnRyeRILCgNrZXkYASABKAkSLgoFdmFsdWUYAiABKAsyHy5vdHRvY2hhaW4udjEuU2NyaXB0RmliZXJSZWNvcmQ6AjgBQnEKEGNvbS5vdHRvY2hhaW4udjFCDFJlY29yZHNQcm90b1ABogIDT1hYqgIMT3R0b2NoYWluLlYxygIMT3R0b2NoYWluXFYx4gIYT3R0b2NoYWluXFYxXEdQQk1ldGFkYXRh6gINT3R0b2NoYWluOjpWMWIGcHJvdG8z", [file_ottochain_v1_common, file_ottochain_v1_fiber, file_google_protobuf_struct]);
12
+ /**
13
+ * Describes the message ottochain.v1.StateMachineFiberRecord.
14
+ * Use `create(StateMachineFiberRecordSchema)` to create a new message.
15
+ */
16
+ export const StateMachineFiberRecordSchema = /*@__PURE__*/ messageDesc(file_ottochain_v1_records, 0);
17
+ /**
18
+ * Describes the message ottochain.v1.ScriptFiberRecord.
19
+ * Use `create(ScriptFiberRecordSchema)` to create a new message.
20
+ */
21
+ export const ScriptFiberRecordSchema = /*@__PURE__*/ messageDesc(file_ottochain_v1_records, 1);
22
+ /**
23
+ * Describes the message ottochain.v1.FiberCommit.
24
+ * Use `create(FiberCommitSchema)` to create a new message.
25
+ */
26
+ export const FiberCommitSchema = /*@__PURE__*/ messageDesc(file_ottochain_v1_records, 2);
27
+ /**
28
+ * Describes the message ottochain.v1.OnChainState.
29
+ * Use `create(OnChainStateSchema)` to create a new message.
30
+ */
31
+ export const OnChainStateSchema = /*@__PURE__*/ messageDesc(file_ottochain_v1_records, 3);
32
+ /**
33
+ * Describes the message ottochain.v1.FiberLogEntryList.
34
+ * Use `create(FiberLogEntryListSchema)` to create a new message.
35
+ */
36
+ export const FiberLogEntryListSchema = /*@__PURE__*/ messageDesc(file_ottochain_v1_records, 4);
37
+ /**
38
+ * Describes the message ottochain.v1.CalculatedState.
39
+ * Use `create(CalculatedStateSchema)` to create a new message.
40
+ */
41
+ export const CalculatedStateSchema = /*@__PURE__*/ messageDesc(file_ottochain_v1_records, 5);
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Ottochain SDK
3
+ *
4
+ * Unified SDK combining metakit framework operations with ottochain domain types.
5
+ *
6
+ * Structure:
7
+ * - `metakit` — Signing, encoding, hashing, and network clients for Constellation metagraphs
8
+ * - `generated` — Protobuf-generated types (source of truth)
9
+ * - `apps/identity` — Agent Identity application types
10
+ * - `apps/contracts` — Contract application types
11
+ * - `errors` — Custom error classes for structured error handling
12
+ * - `validation` — Input validation with Zod schemas
13
+ *
14
+ * @packageDocumentation
15
+ */
16
+ // Type aliases for semantic clarity (matches wire format)
17
+ export * from './types.js';
18
+ // Metakit utilities (signing, hashing, HTTP client)
19
+ export * from './metakit/index.js';
20
+ // Generated protobuf types (canonical definitions)
21
+ export * from './generated/index.js';
22
+ // Custom error classes
23
+ export { OttoChainError, NetworkError, ValidationError, SigningError, TransactionError, ErrorCode, isErrorCode, wrapError, } from './errors.js';
24
+ // Validation schemas and helpers
25
+ export {
26
+ // Schemas
27
+ DagAddressSchema, PrivateKeySchema, PublicKeySchema, KeyPairSchema, SignatureProofSchema, SignedSchema, TransactionReferenceSchema, CurrencyTransactionValueSchema, CurrencyTransactionSchema, TransferParamsSchema, AgentIdentityRegistrationSchema, PlatformLinkSchema, ContractTermsSchema, ProposeContractRequestSchema, AcceptContractRequestSchema, CompleteContractRequestSchema,
28
+ // Helpers
29
+ validate, validatePrivateKey, validatePublicKey, validateAddress, validateKeyPair, safeParse, assert, } from './validation.js';
30
+ // Error classes
31
+ export * from './errors.js';
32
+ // Validation schemas and helpers
33
+ export * from './validation.js';
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Binary Encoding
3
+ *
4
+ * Converts JSON data to binary format for cryptographic operations.
5
+ * Supports both regular encoding and DataUpdate encoding with Constellation prefix.
6
+ */
7
+ import { canonicalize } from './canonicalize.js';
8
+ import { CONSTELLATION_PREFIX } from './types.js';
9
+ /**
10
+ * Convert data to binary bytes for signing
11
+ *
12
+ * For regular data:
13
+ * JSON -> RFC 8785 canonicalization -> UTF-8 bytes
14
+ *
15
+ * For DataUpdate (isDataUpdate=true):
16
+ * JSON -> RFC 8785 -> UTF-8 -> Base64 -> prepend Constellation prefix -> UTF-8 bytes
17
+ *
18
+ * @param data - Any JSON-serializable object
19
+ * @param isDataUpdate - If true, applies DataUpdate encoding with Constellation prefix
20
+ * @returns Binary bytes as Uint8Array
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * // Regular encoding
25
+ * const bytes = toBytes({ action: 'test' });
26
+ *
27
+ * // DataUpdate encoding
28
+ * const updateBytes = toBytes({ action: 'test' }, true);
29
+ * ```
30
+ */
31
+ export function toBytes(data, isDataUpdate = false) {
32
+ const canonicalJson = canonicalize(data);
33
+ const utf8Bytes = new TextEncoder().encode(canonicalJson);
34
+ if (isDataUpdate) {
35
+ // Base64 encode the UTF-8 bytes
36
+ const base64String = Buffer.from(utf8Bytes).toString('base64');
37
+ // Create the wrapped string with Constellation prefix
38
+ const wrappedString = `${CONSTELLATION_PREFIX}${base64String.length}\n${base64String}`;
39
+ return new TextEncoder().encode(wrappedString);
40
+ }
41
+ return utf8Bytes;
42
+ }
43
+ /**
44
+ * Encode data as a DataUpdate with Constellation prefix
45
+ *
46
+ * This is equivalent to `toBytes(data, true)`.
47
+ *
48
+ * @param data - Any JSON-serializable object
49
+ * @returns Binary bytes with Constellation prefix
50
+ */
51
+ export function encodeDataUpdate(data) {
52
+ return toBytes(data, true);
53
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * RFC 8785 JSON Canonicalization
3
+ *
4
+ * Provides deterministic JSON serialization according to RFC 8785.
5
+ * This ensures identical JSON objects always produce identical strings.
6
+ */
7
+ import canonicalizeLib from 'canonicalize';
8
+ /**
9
+ * Canonicalize JSON data according to RFC 8785
10
+ *
11
+ * Key features:
12
+ * - Object keys sorted by UTF-16BE binary comparison
13
+ * - Numbers serialized in shortest decimal representation
14
+ * - No whitespace
15
+ * - Proper Unicode escaping
16
+ *
17
+ * @param data - Any JSON-serializable object
18
+ * @returns Canonical JSON string
19
+ * @throws Error if data cannot be serialized to JSON
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * const canonical = canonicalize({ b: 2, a: 1 });
24
+ * // Returns: '{"a":1,"b":2}'
25
+ * ```
26
+ */
27
+ export function canonicalize(data) {
28
+ const result = canonicalizeLib(data);
29
+ if (result === undefined) {
30
+ throw new Error('Failed to canonicalize data: data cannot be serialized to JSON');
31
+ }
32
+ return result;
33
+ }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Codec Utilities
3
+ *
4
+ * Encoding/decoding utilities for the Constellation signature protocol.
5
+ * Re-exports from binary.ts for backwards compatibility and provides additional utilities.
6
+ */
7
+ export { toBytes, encodeDataUpdate } from './binary.js';
8
+ export { CONSTELLATION_PREFIX } from './types.js';
9
+ /**
10
+ * Decode a DataUpdate encoded message back to its original JSON
11
+ *
12
+ * @param bytes - DataUpdate encoded bytes
13
+ * @returns Decoded JSON object
14
+ * @throws Error if bytes are not valid DataUpdate encoding
15
+ */
16
+ export function decodeDataUpdate(bytes) {
17
+ const text = new TextDecoder().decode(bytes);
18
+ // Validate prefix
19
+ if (!text.startsWith('\x19Constellation Signed Data:\n')) {
20
+ throw new Error('Invalid DataUpdate encoding: missing Constellation prefix');
21
+ }
22
+ // Parse the format: \x19Constellation Signed Data:\n{length}\n{base64}
23
+ const withoutPrefix = text.slice('\x19Constellation Signed Data:\n'.length);
24
+ const newlineIndex = withoutPrefix.indexOf('\n');
25
+ if (newlineIndex === -1) {
26
+ throw new Error('Invalid DataUpdate encoding: missing length delimiter');
27
+ }
28
+ const lengthStr = withoutPrefix.slice(0, newlineIndex);
29
+ const base64Data = withoutPrefix.slice(newlineIndex + 1);
30
+ const expectedLength = parseInt(lengthStr, 10);
31
+ if (isNaN(expectedLength) || base64Data.length !== expectedLength) {
32
+ throw new Error('Invalid DataUpdate encoding: length mismatch');
33
+ }
34
+ // Decode base64 to UTF-8 JSON
35
+ const jsonBytes = Buffer.from(base64Data, 'base64');
36
+ const jsonString = new TextDecoder().decode(jsonBytes);
37
+ return JSON.parse(jsonString);
38
+ }
@@ -0,0 +1,306 @@
1
+ /**
2
+ * Currency transaction operations for metagraph token transfers
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+ import { TransactionV2, txEncode, keyStore, } from '@stardust-collective/dag4-keystore';
7
+ import { TOKEN_DECIMALS } from './currency-types.js';
8
+ import { getAddress } from './wallet.js';
9
+ import { normalizeSignatureToLowS } from './verify.js';
10
+ /**
11
+ * Convert token amount to smallest units
12
+ *
13
+ * @param amount - Amount in token units (e.g., 100.5)
14
+ * @returns Amount in smallest units (1e-8)
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * const units = tokenToUnits(100.5); // 10050000000
19
+ * ```
20
+ */
21
+ export function tokenToUnits(amount) {
22
+ return Math.floor(amount * 1e8);
23
+ }
24
+ /**
25
+ * Convert smallest units to token amount
26
+ *
27
+ * @param units - Amount in smallest units
28
+ * @returns Amount in token units
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * const tokens = unitsToToken(10050000000); // 100.5
33
+ * ```
34
+ */
35
+ export function unitsToToken(units) {
36
+ return units * TOKEN_DECIMALS;
37
+ }
38
+ /**
39
+ * Validate DAG address format
40
+ *
41
+ * @param address - DAG address to validate
42
+ * @returns True if address is valid
43
+ *
44
+ * @example
45
+ * ```typescript
46
+ * const valid = isValidDagAddress('DAG...');
47
+ * ```
48
+ */
49
+ export function isValidDagAddress(address) {
50
+ return keyStore.validateDagAddress(address);
51
+ }
52
+ /**
53
+ * Create a metagraph token transaction
54
+ *
55
+ * @param params - Transfer parameters
56
+ * @param privateKey - Private key to sign with (hex string)
57
+ * @param lastRef - Reference to last accepted transaction
58
+ * @returns Signed currency transaction
59
+ *
60
+ * @throws If addresses are invalid or amount is too small
61
+ *
62
+ * @example
63
+ * ```typescript
64
+ * const tx = await createCurrencyTransaction(
65
+ * { destination: 'DAG...', amount: 100.5, fee: 0 },
66
+ * privateKey,
67
+ * { hash: 'abc123...', ordinal: 5 }
68
+ * );
69
+ * ```
70
+ */
71
+ export async function createCurrencyTransaction(params, privateKey, lastRef) {
72
+ // Get source address from private key
73
+ const publicKey = keyStore.getPublicKeyFromPrivate(privateKey);
74
+ const source = getAddress(publicKey);
75
+ // Validate addresses
76
+ if (!isValidDagAddress(source)) {
77
+ throw new Error('Invalid source address');
78
+ }
79
+ if (!isValidDagAddress(params.destination)) {
80
+ throw new Error('Invalid destination address');
81
+ }
82
+ if (source === params.destination) {
83
+ throw new Error('Source and destination addresses cannot be the same');
84
+ }
85
+ // Convert amounts to smallest units
86
+ const amount = tokenToUnits(params.amount);
87
+ const fee = tokenToUnits(params.fee ?? 0);
88
+ // Validate amounts
89
+ if (amount < 1) {
90
+ throw new Error('Transfer amount must be greater than 1e-8');
91
+ }
92
+ if (fee < 0) {
93
+ throw new Error('Fee must be greater than or equal to zero');
94
+ }
95
+ // Use dag4.js TransactionV2 to create and encode the transaction
96
+ const txProps = {
97
+ fromAddress: source,
98
+ toAddress: params.destination,
99
+ amount,
100
+ fee,
101
+ lastTxRef: lastRef,
102
+ };
103
+ const tx = new TransactionV2(txProps);
104
+ // Get encoded transaction for hashing
105
+ const encodedTx = tx.getEncoded();
106
+ // Kryo serialize - v2 uses setReferences = false (matching dag4.js behavior)
107
+ const serializedTx = txEncode.kryoSerialize(encodedTx, false);
108
+ // Hash the serialized transaction
109
+ const hash = keyStore.sha256(Buffer.from(serializedTx, 'hex'));
110
+ // Sign the hash
111
+ const signature = await keyStore.sign(privateKey, hash);
112
+ // Get uncompressed public key
113
+ const uncompressedPublicKey = publicKey.length === 128 ? '04' + publicKey : publicKey;
114
+ // Verify signature
115
+ const success = keyStore.verify(uncompressedPublicKey, hash, signature);
116
+ if (!success) {
117
+ throw new Error('Sign-Verify failed');
118
+ }
119
+ // Add signature proof (remove '04' prefix from public key)
120
+ const proof = {
121
+ id: uncompressedPublicKey.substring(2),
122
+ signature,
123
+ };
124
+ tx.addSignature(proof);
125
+ return tx.getPostTransaction();
126
+ }
127
+ /**
128
+ * Create multiple metagraph token transactions (batch)
129
+ *
130
+ * @param transfers - Array of transfer parameters
131
+ * @param privateKey - Private key to sign with
132
+ * @param lastRef - Reference to last accepted transaction
133
+ * @returns Array of signed currency transactions
134
+ *
135
+ * @throws If any address is invalid or amount is too small
136
+ *
137
+ * @example
138
+ * ```typescript
139
+ * const txns = await createCurrencyTransactionBatch(
140
+ * [
141
+ * { destination: 'DAG...1', amount: 10 },
142
+ * { destination: 'DAG...2', amount: 20 },
143
+ * ],
144
+ * privateKey,
145
+ * { hash: 'abc123...', ordinal: 5 }
146
+ * );
147
+ * ```
148
+ */
149
+ export async function createCurrencyTransactionBatch(transfers, privateKey, lastRef) {
150
+ const transactions = [];
151
+ let currentRef = { ...lastRef };
152
+ for (const transfer of transfers) {
153
+ const tx = await createCurrencyTransaction(transfer, privateKey, currentRef);
154
+ // Calculate hash for next transaction's parent reference
155
+ const hash = await hashCurrencyTransaction(tx);
156
+ // Update reference for next transaction
157
+ currentRef = {
158
+ hash: hash.value,
159
+ ordinal: currentRef.ordinal + 1,
160
+ };
161
+ transactions.push(tx);
162
+ }
163
+ return transactions;
164
+ }
165
+ /**
166
+ * Add a signature to an existing currency transaction (for multi-sig)
167
+ *
168
+ * @param transaction - Transaction to sign
169
+ * @param privateKey - Private key to sign with
170
+ * @returns Transaction with additional signature
171
+ *
172
+ * @throws If sign-verify fails
173
+ *
174
+ * @example
175
+ * ```typescript
176
+ * const signedTx = await signCurrencyTransaction(tx, privateKey2);
177
+ * ```
178
+ */
179
+ export async function signCurrencyTransaction(transaction, privateKey) {
180
+ // Reconstruct TransactionV2 from PostTransaction
181
+ const tx = TransactionV2.fromPostTransaction(transaction);
182
+ // Restore existing proofs (fromPostTransaction doesn't copy them)
183
+ for (const existingProof of transaction.proofs) {
184
+ tx.addSignature(existingProof);
185
+ }
186
+ // Get encoded transaction
187
+ const encodedTx = tx.getEncoded();
188
+ // Kryo serialize - v2 uses setReferences = false (matching dag4.js behavior)
189
+ const serializedTx = txEncode.kryoSerialize(encodedTx, false);
190
+ const hash = keyStore.sha256(Buffer.from(serializedTx, 'hex'));
191
+ // Sign the hash
192
+ const publicKey = keyStore.getPublicKeyFromPrivate(privateKey);
193
+ const signature = await keyStore.sign(privateKey, hash);
194
+ // Verify signature
195
+ const uncompressedPublicKey = publicKey.length === 128 ? '04' + publicKey : publicKey;
196
+ const success = keyStore.verify(uncompressedPublicKey, hash, signature);
197
+ if (!success) {
198
+ throw new Error('Sign-Verify failed');
199
+ }
200
+ // Add new proof
201
+ const proof = {
202
+ id: uncompressedPublicKey.substring(2),
203
+ signature,
204
+ };
205
+ tx.addSignature(proof);
206
+ return tx.getPostTransaction();
207
+ }
208
+ /**
209
+ * Verify all signatures on a currency transaction
210
+ *
211
+ * @param transaction - Transaction to verify
212
+ * @returns Verification result with valid/invalid proofs
213
+ *
214
+ * @example
215
+ * ```typescript
216
+ * const result = await verifyCurrencyTransaction(tx);
217
+ * console.log('Valid:', result.isValid);
218
+ * ```
219
+ */
220
+ export async function verifyCurrencyTransaction(transaction) {
221
+ // Reconstruct TransactionV2 to get encoded form
222
+ const tx = TransactionV2.fromPostTransaction(transaction);
223
+ // Get hash
224
+ const encodedTx = tx.getEncoded();
225
+ // Kryo serialize - v2 uses setReferences = false (matching dag4.js behavior)
226
+ const serializedTx = txEncode.kryoSerialize(encodedTx, false);
227
+ const hash = keyStore.sha256(Buffer.from(serializedTx, 'hex'));
228
+ const validProofs = [];
229
+ const invalidProofs = [];
230
+ // Verify each proof
231
+ for (const proof of transaction.proofs) {
232
+ const publicKey = '04' + proof.id; // Add back the '04' prefix
233
+ // Normalize signature to low-S form for BIP 62/146 compatibility
234
+ const normalizedSignature = normalizeSignatureToLowS(proof.signature);
235
+ const isValid = keyStore.verify(publicKey, hash, normalizedSignature);
236
+ if (isValid) {
237
+ validProofs.push(proof);
238
+ }
239
+ else {
240
+ invalidProofs.push(proof);
241
+ }
242
+ }
243
+ return {
244
+ isValid: invalidProofs.length === 0 && validProofs.length > 0,
245
+ validProofs,
246
+ invalidProofs,
247
+ };
248
+ }
249
+ /**
250
+ * Encode a currency transaction for hashing
251
+ *
252
+ * @param transaction - Transaction to encode
253
+ * @returns Hex-encoded string
254
+ *
255
+ * @example
256
+ * ```typescript
257
+ * const encoded = encodeCurrencyTransaction(tx);
258
+ * ```
259
+ */
260
+ export function encodeCurrencyTransaction(transaction) {
261
+ const tx = TransactionV2.fromPostTransaction(transaction);
262
+ return tx.getEncoded();
263
+ }
264
+ /**
265
+ * Hash a currency transaction
266
+ *
267
+ * @param transaction - Transaction to hash
268
+ * @returns Hash object with value and bytes
269
+ *
270
+ * @example
271
+ * ```typescript
272
+ * const hash = await hashCurrencyTransaction(tx);
273
+ * console.log('Hash:', hash.value);
274
+ * ```
275
+ */
276
+ export async function hashCurrencyTransaction(transaction) {
277
+ const encoded = encodeCurrencyTransaction(transaction);
278
+ // Kryo serialize - v2 uses setReferences = false (matching dag4.js behavior)
279
+ const serialized = txEncode.kryoSerialize(encoded, false);
280
+ const hash = keyStore.sha256(Buffer.from(serialized, 'hex'));
281
+ return {
282
+ value: hash,
283
+ bytes: Buffer.from(hash, 'hex'),
284
+ };
285
+ }
286
+ /**
287
+ * Get transaction reference from a currency transaction
288
+ * Useful for chaining transactions
289
+ *
290
+ * @param transaction - Transaction to extract reference from
291
+ * @param ordinal - Ordinal number for this transaction
292
+ * @returns Transaction reference
293
+ *
294
+ * @example
295
+ * ```typescript
296
+ * const ref = await getTransactionReference(tx, 6);
297
+ * // Use ref as lastRef for next transaction
298
+ * ```
299
+ */
300
+ export async function getTransactionReference(transaction, ordinal) {
301
+ const hash = await hashCurrencyTransaction(transaction);
302
+ return {
303
+ hash: hash.value,
304
+ ordinal,
305
+ };
306
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Currency transaction types for metagraph token transfers
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+ /**
7
+ * Token decimals constant (1e-8)
8
+ * Same as DAG_DECIMALS from dag4.js
9
+ */
10
+ export const TOKEN_DECIMALS = 1e-8;
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Hashing Utilities
3
+ *
4
+ * SHA-256 and SHA-512 hashing for the Constellation signature protocol.
5
+ */
6
+ import { sha256 } from 'js-sha256';
7
+ import { sha512 } from 'js-sha512';
8
+ import { toBytes } from './binary.js';
9
+ /**
10
+ * Compute SHA-256 hash of canonical JSON data
11
+ *
12
+ * @param data - Any JSON-serializable object
13
+ * @returns Hash object with hex string and raw bytes
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const hashResult = hash({ action: 'test' });
18
+ * console.log(hashResult.value); // 64-char hex string
19
+ * ```
20
+ */
21
+ export function hash(data) {
22
+ const bytes = toBytes(data, false);
23
+ return hashBytes(bytes);
24
+ }
25
+ /**
26
+ * Compute SHA-256 hash of raw bytes
27
+ *
28
+ * @param bytes - Input bytes
29
+ * @returns Hash object with hex string and raw bytes
30
+ */
31
+ export function hashBytes(bytes) {
32
+ const hashArray = sha256.array(bytes);
33
+ const hashUint8 = new Uint8Array(hashArray);
34
+ const hashHex = sha256.hex(bytes);
35
+ return {
36
+ value: hashHex,
37
+ bytes: hashUint8,
38
+ };
39
+ }
40
+ /**
41
+ * Compute the full signing digest according to Constellation protocol
42
+ *
43
+ * Protocol:
44
+ * 1. Serialize data to binary (with optional DataUpdate prefix)
45
+ * 2. Compute SHA-256 hash
46
+ * 3. Convert hash to hex string
47
+ * 4. Treat hex string as UTF-8 bytes (NOT hex decode)
48
+ * 5. Compute SHA-512 of those bytes
49
+ * 6. Truncate to 32 bytes for secp256k1 signing
50
+ *
51
+ * @param data - Any JSON-serializable object
52
+ * @param isDataUpdate - Whether to apply DataUpdate encoding
53
+ * @returns 32-byte digest ready for ECDSA signing
54
+ */
55
+ export function computeDigest(data, isDataUpdate = false) {
56
+ // Step 1: Serialize to binary
57
+ const dataBytes = toBytes(data, isDataUpdate);
58
+ // Step 2: SHA-256 hash
59
+ const sha256Hash = hashBytes(dataBytes);
60
+ // Step 3-4: Hex string as UTF-8 bytes (critical: NOT hex decode)
61
+ const hexAsUtf8 = new TextEncoder().encode(sha256Hash.value);
62
+ // Step 5: SHA-512
63
+ const sha512Hash = sha512.array(hexAsUtf8);
64
+ // Step 6: Truncate to 32 bytes
65
+ return new Uint8Array(sha512Hash.slice(0, 32));
66
+ }
67
+ /**
68
+ * Compute SHA-256 hash of data with optional DataUpdate encoding
69
+ *
70
+ * @param data - Any JSON-serializable object
71
+ * @param isDataUpdate - Whether to apply DataUpdate encoding
72
+ * @returns Hash object
73
+ */
74
+ export function hashData(data, isDataUpdate = false) {
75
+ const bytes = toBytes(data, isDataUpdate);
76
+ return hashBytes(bytes);
77
+ }
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Metakit SDK
3
+ *
4
+ * Reusable signing, encoding, and network operations for Constellation metagraphs.
5
+ * This module is framework-level functionality, independent of any specific metagraph domain.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ export { ALGORITHM, CONSTELLATION_PREFIX } from './types.js';
10
+ // Canonicalization
11
+ export { canonicalize } from './canonicalize.js';
12
+ // Binary encoding
13
+ export { toBytes, encodeDataUpdate } from './binary.js';
14
+ // Hashing
15
+ export { hash, hashBytes, hashData, computeDigest } from './hash.js';
16
+ // Codec utilities
17
+ export { decodeDataUpdate } from './codec.js';
18
+ // Signing
19
+ export { sign, signDataUpdate, signHash } from './sign.js';
20
+ // Verification
21
+ export { verify, verifyHash, verifySignature } from './verify.js';
22
+ // High-level API
23
+ export { createSignedObject, addSignature, batchSign } from './signed-object.js';
24
+ // Wallet utilities
25
+ export { generateKeyPair, keyPairFromPrivateKey, getPublicKeyHex, getPublicKeyId, getAddress, isValidPrivateKey, isValidPublicKey, } from './wallet.js';
26
+ export { TOKEN_DECIMALS } from './currency-types.js';
27
+ // Currency transaction operations
28
+ export { createCurrencyTransaction, createCurrencyTransactionBatch, signCurrencyTransaction, verifyCurrencyTransaction, encodeCurrencyTransaction, hashCurrencyTransaction, getTransactionReference, isValidDagAddress, tokenToUnits, unitsToToken, } from './currency-transaction.js';
29
+ // Network operations
30
+ export { CurrencyL1Client, DataL1Client, HttpClient, NetworkError } from './network/index.js';