@midnames/sdk 1.0.3 → 1.0.5

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 (312) hide show
  1. package/dist/provider.js +1 -1
  2. package/node_modules/@midnames/ns/package.json +14 -14
  3. package/package.json +13 -11
  4. package/node_modules/@midnames/ns/.env +0 -10
  5. package/node_modules/@midnames/ns/.env.example +0 -11
  6. package/node_modules/@midnames/ns/.turbo/turbo-build.log +0 -2
  7. package/node_modules/@midnames/ns/.turbo/turbo-test.log +0 -13
  8. package/node_modules/@midnames/ns/midnight-level-db/000005.ldb +0 -0
  9. package/node_modules/@midnames/ns/midnight-level-db/000008.ldb +0 -0
  10. package/node_modules/@midnames/ns/midnight-level-db/000011.ldb +0 -0
  11. package/node_modules/@midnames/ns/midnight-level-db/000014.ldb +0 -0
  12. package/node_modules/@midnames/ns/midnight-level-db/000019.ldb +0 -0
  13. package/node_modules/@midnames/ns/midnight-level-db/000024.ldb +0 -0
  14. package/node_modules/@midnames/ns/midnight-level-db/000031.ldb +0 -0
  15. package/node_modules/@midnames/ns/midnight-level-db/000034.ldb +0 -0
  16. package/node_modules/@midnames/ns/midnight-level-db/000037.ldb +0 -0
  17. package/node_modules/@midnames/ns/midnight-level-db/000040.ldb +0 -0
  18. package/node_modules/@midnames/ns/midnight-level-db/000045.ldb +0 -0
  19. package/node_modules/@midnames/ns/midnight-level-db/000050.ldb +0 -0
  20. package/node_modules/@midnames/ns/midnight-level-db/000059.ldb +0 -0
  21. package/node_modules/@midnames/ns/midnight-level-db/000064.ldb +0 -0
  22. package/node_modules/@midnames/ns/midnight-level-db/000069.ldb +0 -0
  23. package/node_modules/@midnames/ns/midnight-level-db/000074.ldb +0 -0
  24. package/node_modules/@midnames/ns/midnight-level-db/000083.ldb +0 -0
  25. package/node_modules/@midnames/ns/midnight-level-db/000088.ldb +0 -0
  26. package/node_modules/@midnames/ns/midnight-level-db/000093.ldb +0 -0
  27. package/node_modules/@midnames/ns/midnight-level-db/000098.ldb +0 -0
  28. package/node_modules/@midnames/ns/midnight-level-db/000107.ldb +0 -0
  29. package/node_modules/@midnames/ns/midnight-level-db/000112.ldb +0 -0
  30. package/node_modules/@midnames/ns/midnight-level-db/000121.ldb +0 -0
  31. package/node_modules/@midnames/ns/midnight-level-db/000126.ldb +0 -0
  32. package/node_modules/@midnames/ns/midnight-level-db/000135.ldb +0 -0
  33. package/node_modules/@midnames/ns/midnight-level-db/000140.ldb +0 -0
  34. package/node_modules/@midnames/ns/midnight-level-db/000149.ldb +0 -0
  35. package/node_modules/@midnames/ns/midnight-level-db/000154.ldb +0 -0
  36. package/node_modules/@midnames/ns/midnight-level-db/000163.ldb +0 -0
  37. package/node_modules/@midnames/ns/midnight-level-db/000168.ldb +0 -0
  38. package/node_modules/@midnames/ns/midnight-level-db/000177.ldb +0 -0
  39. package/node_modules/@midnames/ns/midnight-level-db/000182.ldb +0 -0
  40. package/node_modules/@midnames/ns/midnight-level-db/000187.ldb +0 -0
  41. package/node_modules/@midnames/ns/midnight-level-db/000192.ldb +0 -0
  42. package/node_modules/@midnames/ns/midnight-level-db/000201.ldb +0 -0
  43. package/node_modules/@midnames/ns/midnight-level-db/000206.ldb +0 -0
  44. package/node_modules/@midnames/ns/midnight-level-db/000215.ldb +0 -0
  45. package/node_modules/@midnames/ns/midnight-level-db/000220.ldb +0 -0
  46. package/node_modules/@midnames/ns/midnight-level-db/000229.ldb +0 -0
  47. package/node_modules/@midnames/ns/midnight-level-db/000234.ldb +0 -0
  48. package/node_modules/@midnames/ns/midnight-level-db/000243.ldb +0 -0
  49. package/node_modules/@midnames/ns/midnight-level-db/000248.ldb +0 -0
  50. package/node_modules/@midnames/ns/midnight-level-db/000257.ldb +0 -0
  51. package/node_modules/@midnames/ns/midnight-level-db/000262.ldb +0 -0
  52. package/node_modules/@midnames/ns/midnight-level-db/000271.ldb +0 -0
  53. package/node_modules/@midnames/ns/midnight-level-db/000276.ldb +0 -0
  54. package/node_modules/@midnames/ns/midnight-level-db/000281.ldb +0 -0
  55. package/node_modules/@midnames/ns/midnight-level-db/000286.ldb +0 -0
  56. package/node_modules/@midnames/ns/midnight-level-db/000295.ldb +0 -0
  57. package/node_modules/@midnames/ns/midnight-level-db/000300.ldb +0 -0
  58. package/node_modules/@midnames/ns/midnight-level-db/000305.ldb +0 -0
  59. package/node_modules/@midnames/ns/midnight-level-db/000310.ldb +0 -0
  60. package/node_modules/@midnames/ns/midnight-level-db/000313.log +0 -0
  61. package/node_modules/@midnames/ns/midnight-level-db/000319.ldb +0 -0
  62. package/node_modules/@midnames/ns/midnight-level-db/000324.ldb +0 -0
  63. package/node_modules/@midnames/ns/midnight-level-db/000329.ldb +0 -0
  64. package/node_modules/@midnames/ns/midnight-level-db/000334.ldb +0 -0
  65. package/node_modules/@midnames/ns/midnight-level-db/000343.ldb +0 -0
  66. package/node_modules/@midnames/ns/midnight-level-db/000348.ldb +0 -0
  67. package/node_modules/@midnames/ns/midnight-level-db/000357.ldb +0 -0
  68. package/node_modules/@midnames/ns/midnight-level-db/000362.ldb +0 -0
  69. package/node_modules/@midnames/ns/midnight-level-db/000371.ldb +0 -0
  70. package/node_modules/@midnames/ns/midnight-level-db/000376.ldb +0 -0
  71. package/node_modules/@midnames/ns/midnight-level-db/000385.ldb +0 -0
  72. package/node_modules/@midnames/ns/midnight-level-db/000390.ldb +0 -0
  73. package/node_modules/@midnames/ns/midnight-level-db/000393.log +0 -0
  74. package/node_modules/@midnames/ns/midnight-level-db/CURRENT +0 -1
  75. package/node_modules/@midnames/ns/midnight-level-db/LOCK +0 -0
  76. package/node_modules/@midnames/ns/midnight-level-db/LOG +0 -3
  77. package/node_modules/@midnames/ns/midnight-level-db/LOG.old +0 -6
  78. package/node_modules/@midnames/ns/midnight-level-db/MANIFEST-000312 +0 -0
  79. package/node_modules/@midnames/ns/midnight-level-db/MANIFEST-000392 +0 -0
  80. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/README.md +0 -32
  81. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/built-ins.d.ts +0 -133
  82. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/built-ins.js +0 -216
  83. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/built-ins.js.map +0 -1
  84. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/casts.d.ts +0 -15
  85. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/casts.js +0 -65
  86. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/casts.js.map +0 -1
  87. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/circuit-context.d.ts +0 -66
  88. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/circuit-context.js +0 -150
  89. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/circuit-context.js.map +0 -1
  90. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/compact-types.d.ts +0 -209
  91. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/compact-types.js +0 -374
  92. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/compact-types.js.map +0 -1
  93. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/constants.d.ts +0 -13
  94. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/constants.js +0 -29
  95. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/constants.js.map +0 -1
  96. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/constructor-context.d.ts +0 -39
  97. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/constructor-context.js +0 -26
  98. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/constructor-context.js.map +0 -1
  99. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/contract-dependencies.d.ts +0 -175
  100. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/contract-dependencies.js +0 -288
  101. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/contract-dependencies.js.map +0 -1
  102. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/error.d.ts +0 -16
  103. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/error.js +0 -43
  104. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/error.js.map +0 -1
  105. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/index.d.ts +0 -15
  106. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/index.js +0 -30
  107. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/index.js.map +0 -1
  108. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/proof-data.d.ts +0 -27
  109. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/proof-data.js +0 -16
  110. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/proof-data.js.map +0 -1
  111. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/utils.d.ts +0 -19
  112. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/utils.js +0 -41
  113. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/utils.js.map +0 -1
  114. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/version.d.ts +0 -2
  115. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/version.js +0 -18
  116. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/version.js.map +0 -1
  117. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/witness.d.ts +0 -24
  118. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/witness.js +0 -26
  119. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/witness.js.map +0 -1
  120. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/zswap.d.ts +0 -172
  121. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/zswap.js +0 -141
  122. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/zswap.js.map +0 -1
  123. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/package.json +0 -57
  124. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/ledger-v8.d.ts +0 -3079
  125. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/midnight_ledger_wasm.js +0 -5
  126. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/midnight_ledger_wasm_bg.js +0 -10056
  127. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/midnight_ledger_wasm_bg.wasm +0 -0
  128. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/midnight_ledger_wasm_fs.js +0 -69
  129. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/package-lock.json +0 -12
  130. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/package.json +0 -34
  131. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline0.js +0 -1
  132. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline1.js +0 -1
  133. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline10.js +0 -1
  134. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline11.js +0 -1
  135. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline12.js +0 -1
  136. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline13.js +0 -1
  137. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline14.js +0 -1
  138. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline15.js +0 -1
  139. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline16.js +0 -1
  140. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline17.js +0 -1
  141. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline18.js +0 -1
  142. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline19.js +0 -1
  143. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline2.js +0 -1
  144. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline20.js +0 -1
  145. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline21.js +0 -1
  146. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline22.js +0 -1
  147. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline23.js +0 -1
  148. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline3.js +0 -1
  149. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline4.js +0 -1
  150. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline5.js +0 -1
  151. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline6.js +0 -1
  152. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline7.js +0 -1
  153. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline8.js +0 -1
  154. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline9.js +0 -1
  155. package/node_modules/@midnames/ns/reports/report.xml +0 -33
  156. package/node_modules/@midnames/ns/src/index.ts +0 -13
  157. package/node_modules/@midnames/ns/src/leaf.compact +0 -290
  158. package/node_modules/@midnames/ns/src/managed/leaf/compiler/contract-info.json +0 -534
  159. package/node_modules/@midnames/ns/src/managed/leaf/contract/index.d.ts +0 -197
  160. package/node_modules/@midnames/ns/src/managed/leaf/contract/index.js +0 -3094
  161. package/node_modules/@midnames/ns/src/managed/leaf/contract/index.js.map +0 -8
  162. package/node_modules/@midnames/ns/src/managed/leaf/keys/add_multiple_fields.prover +0 -0
  163. package/node_modules/@midnames/ns/src/managed/leaf/keys/add_multiple_fields.verifier +0 -0
  164. package/node_modules/@midnames/ns/src/managed/leaf/keys/buy_domain_for.prover +0 -0
  165. package/node_modules/@midnames/ns/src/managed/leaf/keys/buy_domain_for.verifier +0 -0
  166. package/node_modules/@midnames/ns/src/managed/leaf/keys/change_owner.prover +0 -0
  167. package/node_modules/@midnames/ns/src/managed/leaf/keys/change_owner.verifier +0 -0
  168. package/node_modules/@midnames/ns/src/managed/leaf/keys/clear_all_fields.prover +0 -0
  169. package/node_modules/@midnames/ns/src/managed/leaf/keys/clear_all_fields.verifier +0 -0
  170. package/node_modules/@midnames/ns/src/managed/leaf/keys/clear_field.prover +0 -0
  171. package/node_modules/@midnames/ns/src/managed/leaf/keys/clear_field.verifier +0 -0
  172. package/node_modules/@midnames/ns/src/managed/leaf/keys/insert_field.prover +0 -0
  173. package/node_modules/@midnames/ns/src/managed/leaf/keys/insert_field.verifier +0 -0
  174. package/node_modules/@midnames/ns/src/managed/leaf/keys/register_domain_for.prover +0 -0
  175. package/node_modules/@midnames/ns/src/managed/leaf/keys/register_domain_for.verifier +0 -0
  176. package/node_modules/@midnames/ns/src/managed/leaf/keys/set_resolver.prover +0 -0
  177. package/node_modules/@midnames/ns/src/managed/leaf/keys/set_resolver.verifier +0 -0
  178. package/node_modules/@midnames/ns/src/managed/leaf/keys/transfer_domain.prover +0 -0
  179. package/node_modules/@midnames/ns/src/managed/leaf/keys/transfer_domain.verifier +0 -0
  180. package/node_modules/@midnames/ns/src/managed/leaf/keys/update_color.prover +0 -0
  181. package/node_modules/@midnames/ns/src/managed/leaf/keys/update_color.verifier +0 -0
  182. package/node_modules/@midnames/ns/src/managed/leaf/keys/update_costs.prover +0 -0
  183. package/node_modules/@midnames/ns/src/managed/leaf/keys/update_costs.verifier +0 -0
  184. package/node_modules/@midnames/ns/src/managed/leaf/keys/update_domain_target.prover +0 -0
  185. package/node_modules/@midnames/ns/src/managed/leaf/keys/update_domain_target.verifier +0 -0
  186. package/node_modules/@midnames/ns/src/managed/leaf/keys/update_target_and_fields.prover +0 -0
  187. package/node_modules/@midnames/ns/src/managed/leaf/keys/update_target_and_fields.verifier +0 -0
  188. package/node_modules/@midnames/ns/src/managed/leaf/zkir/add_multiple_fields.bzkir +0 -0
  189. package/node_modules/@midnames/ns/src/managed/leaf/zkir/add_multiple_fields.zkir +0 -424
  190. package/node_modules/@midnames/ns/src/managed/leaf/zkir/buy_domain_for.bzkir +0 -0
  191. package/node_modules/@midnames/ns/src/managed/leaf/zkir/buy_domain_for.zkir +0 -1456
  192. package/node_modules/@midnames/ns/src/managed/leaf/zkir/change_owner.bzkir +0 -0
  193. package/node_modules/@midnames/ns/src/managed/leaf/zkir/change_owner.zkir +0 -57
  194. package/node_modules/@midnames/ns/src/managed/leaf/zkir/clear_all_fields.bzkir +0 -0
  195. package/node_modules/@midnames/ns/src/managed/leaf/zkir/clear_all_fields.zkir +0 -53
  196. package/node_modules/@midnames/ns/src/managed/leaf/zkir/clear_field.bzkir +0 -0
  197. package/node_modules/@midnames/ns/src/managed/leaf/zkir/clear_field.zkir +0 -58
  198. package/node_modules/@midnames/ns/src/managed/leaf/zkir/insert_field.bzkir +0 -0
  199. package/node_modules/@midnames/ns/src/managed/leaf/zkir/insert_field.zkir +0 -65
  200. package/node_modules/@midnames/ns/src/managed/leaf/zkir/register_domain_for.bzkir +0 -0
  201. package/node_modules/@midnames/ns/src/managed/leaf/zkir/register_domain_for.zkir +0 -401
  202. package/node_modules/@midnames/ns/src/managed/leaf/zkir/set_resolver.bzkir +0 -0
  203. package/node_modules/@midnames/ns/src/managed/leaf/zkir/set_resolver.zkir +0 -109
  204. package/node_modules/@midnames/ns/src/managed/leaf/zkir/transfer_domain.bzkir +0 -0
  205. package/node_modules/@midnames/ns/src/managed/leaf/zkir/transfer_domain.zkir +0 -212
  206. package/node_modules/@midnames/ns/src/managed/leaf/zkir/update_color.bzkir +0 -0
  207. package/node_modules/@midnames/ns/src/managed/leaf/zkir/update_color.zkir +0 -58
  208. package/node_modules/@midnames/ns/src/managed/leaf/zkir/update_costs.bzkir +0 -0
  209. package/node_modules/@midnames/ns/src/managed/leaf/zkir/update_costs.zkir +0 -88
  210. package/node_modules/@midnames/ns/src/managed/leaf/zkir/update_domain_target.bzkir +0 -0
  211. package/node_modules/@midnames/ns/src/managed/leaf/zkir/update_domain_target.zkir +0 -66
  212. package/node_modules/@midnames/ns/src/managed/leaf/zkir/update_target_and_fields.bzkir +0 -0
  213. package/node_modules/@midnames/ns/src/managed/leaf/zkir/update_target_and_fields.zkir +0 -450
  214. package/node_modules/@midnames/ns/src/test/batch-config.ts +0 -13
  215. package/node_modules/@midnames/ns/src/test/batch-deploy.ts +0 -914
  216. package/node_modules/@midnames/ns/src/test/contract.ts +0 -1228
  217. package/node_modules/@midnames/ns/src/test/derive_seed.ts +0 -102
  218. package/node_modules/@midnames/ns/src/test/example-deploy.config.ts +0 -76
  219. package/node_modules/@midnames/ns/src/test/midnight-level-db/000005.ldb +0 -0
  220. package/node_modules/@midnames/ns/src/test/midnight-level-db/000011.ldb +0 -0
  221. package/node_modules/@midnames/ns/src/test/midnight-level-db/000014.ldb +0 -0
  222. package/node_modules/@midnames/ns/src/test/midnight-level-db/000025.ldb +0 -0
  223. package/node_modules/@midnames/ns/src/test/midnight-level-db/000039.ldb +0 -0
  224. package/node_modules/@midnames/ns/src/test/midnight-level-db/000049.ldb +0 -0
  225. package/node_modules/@midnames/ns/src/test/midnight-level-db/000064.ldb +0 -0
  226. package/node_modules/@midnames/ns/src/test/midnight-level-db/000078.ldb +0 -0
  227. package/node_modules/@midnames/ns/src/test/midnight-level-db/000092.ldb +0 -0
  228. package/node_modules/@midnames/ns/src/test/midnight-level-db/000106.ldb +0 -0
  229. package/node_modules/@midnames/ns/src/test/midnight-level-db/000121.ldb +0 -0
  230. package/node_modules/@midnames/ns/src/test/midnight-level-db/000135.ldb +0 -0
  231. package/node_modules/@midnames/ns/src/test/midnight-level-db/000146.ldb +0 -0
  232. package/node_modules/@midnames/ns/src/test/midnight-level-db/000160.ldb +0 -0
  233. package/node_modules/@midnames/ns/src/test/midnight-level-db/000174.ldb +0 -0
  234. package/node_modules/@midnames/ns/src/test/midnight-level-db/000188.ldb +0 -0
  235. package/node_modules/@midnames/ns/src/test/midnight-level-db/000203.ldb +0 -0
  236. package/node_modules/@midnames/ns/src/test/midnight-level-db/000217.ldb +0 -0
  237. package/node_modules/@midnames/ns/src/test/midnight-level-db/000232.ldb +0 -0
  238. package/node_modules/@midnames/ns/src/test/midnight-level-db/000242.ldb +0 -0
  239. package/node_modules/@midnames/ns/src/test/midnight-level-db/000256.ldb +0 -0
  240. package/node_modules/@midnames/ns/src/test/midnight-level-db/000263.ldb +0 -0
  241. package/node_modules/@midnames/ns/src/test/midnight-level-db/000267.ldb +0 -0
  242. package/node_modules/@midnames/ns/src/test/midnight-level-db/000276.ldb +0 -0
  243. package/node_modules/@midnames/ns/src/test/midnight-level-db/000281.ldb +0 -0
  244. package/node_modules/@midnames/ns/src/test/midnight-level-db/000286.ldb +0 -0
  245. package/node_modules/@midnames/ns/src/test/midnight-level-db/000291.ldb +0 -0
  246. package/node_modules/@midnames/ns/src/test/midnight-level-db/000300.ldb +0 -0
  247. package/node_modules/@midnames/ns/src/test/midnight-level-db/000305.ldb +0 -0
  248. package/node_modules/@midnames/ns/src/test/midnight-level-db/000314.ldb +0 -0
  249. package/node_modules/@midnames/ns/src/test/midnight-level-db/000319.ldb +0 -0
  250. package/node_modules/@midnames/ns/src/test/midnight-level-db/000328.ldb +0 -0
  251. package/node_modules/@midnames/ns/src/test/midnight-level-db/000333.ldb +0 -0
  252. package/node_modules/@midnames/ns/src/test/midnight-level-db/000342.ldb +0 -0
  253. package/node_modules/@midnames/ns/src/test/midnight-level-db/000347.ldb +0 -0
  254. package/node_modules/@midnames/ns/src/test/midnight-level-db/000356.ldb +0 -0
  255. package/node_modules/@midnames/ns/src/test/midnight-level-db/000361.ldb +0 -0
  256. package/node_modules/@midnames/ns/src/test/midnight-level-db/000370.ldb +0 -0
  257. package/node_modules/@midnames/ns/src/test/midnight-level-db/000375.ldb +0 -0
  258. package/node_modules/@midnames/ns/src/test/midnight-level-db/000380.ldb +0 -0
  259. package/node_modules/@midnames/ns/src/test/midnight-level-db/000385.ldb +0 -0
  260. package/node_modules/@midnames/ns/src/test/midnight-level-db/000392.ldb +0 -0
  261. package/node_modules/@midnames/ns/src/test/midnight-level-db/000397.ldb +0 -0
  262. package/node_modules/@midnames/ns/src/test/midnight-level-db/000400.ldb +0 -0
  263. package/node_modules/@midnames/ns/src/test/midnight-level-db/000403.ldb +0 -0
  264. package/node_modules/@midnames/ns/src/test/midnight-level-db/000408.ldb +0 -0
  265. package/node_modules/@midnames/ns/src/test/midnight-level-db/000413.ldb +0 -0
  266. package/node_modules/@midnames/ns/src/test/midnight-level-db/000422.ldb +0 -0
  267. package/node_modules/@midnames/ns/src/test/midnight-level-db/000427.ldb +0 -0
  268. package/node_modules/@midnames/ns/src/test/midnight-level-db/000432.ldb +0 -0
  269. package/node_modules/@midnames/ns/src/test/midnight-level-db/000437.ldb +0 -0
  270. package/node_modules/@midnames/ns/src/test/midnight-level-db/000446.ldb +0 -0
  271. package/node_modules/@midnames/ns/src/test/midnight-level-db/000451.ldb +0 -0
  272. package/node_modules/@midnames/ns/src/test/midnight-level-db/000456.ldb +0 -0
  273. package/node_modules/@midnames/ns/src/test/midnight-level-db/000461.ldb +0 -0
  274. package/node_modules/@midnames/ns/src/test/midnight-level-db/000470.ldb +0 -0
  275. package/node_modules/@midnames/ns/src/test/midnight-level-db/000475.ldb +0 -0
  276. package/node_modules/@midnames/ns/src/test/midnight-level-db/000480.ldb +0 -0
  277. package/node_modules/@midnames/ns/src/test/midnight-level-db/000485.ldb +0 -0
  278. package/node_modules/@midnames/ns/src/test/midnight-level-db/000494.ldb +0 -0
  279. package/node_modules/@midnames/ns/src/test/midnight-level-db/000499.ldb +0 -0
  280. package/node_modules/@midnames/ns/src/test/midnight-level-db/000504.ldb +0 -0
  281. package/node_modules/@midnames/ns/src/test/midnight-level-db/000509.ldb +0 -0
  282. package/node_modules/@midnames/ns/src/test/midnight-level-db/000518.ldb +0 -0
  283. package/node_modules/@midnames/ns/src/test/midnight-level-db/000523.ldb +0 -0
  284. package/node_modules/@midnames/ns/src/test/midnight-level-db/000528.ldb +0 -0
  285. package/node_modules/@midnames/ns/src/test/midnight-level-db/000533.ldb +0 -0
  286. package/node_modules/@midnames/ns/src/test/midnight-level-db/000542.ldb +0 -0
  287. package/node_modules/@midnames/ns/src/test/midnight-level-db/000547.ldb +0 -0
  288. package/node_modules/@midnames/ns/src/test/midnight-level-db/000552.ldb +0 -0
  289. package/node_modules/@midnames/ns/src/test/midnight-level-db/000557.ldb +0 -0
  290. package/node_modules/@midnames/ns/src/test/midnight-level-db/000566.ldb +0 -0
  291. package/node_modules/@midnames/ns/src/test/midnight-level-db/000571.ldb +0 -0
  292. package/node_modules/@midnames/ns/src/test/midnight-level-db/000576.ldb +0 -0
  293. package/node_modules/@midnames/ns/src/test/midnight-level-db/000581.ldb +0 -0
  294. package/node_modules/@midnames/ns/src/test/midnight-level-db/000590.ldb +0 -0
  295. package/node_modules/@midnames/ns/src/test/midnight-level-db/000595.ldb +0 -0
  296. package/node_modules/@midnames/ns/src/test/midnight-level-db/000600.ldb +0 -0
  297. package/node_modules/@midnames/ns/src/test/midnight-level-db/000605.ldb +0 -0
  298. package/node_modules/@midnames/ns/src/test/midnight-level-db/000608.log +0 -0
  299. package/node_modules/@midnames/ns/src/test/midnight-level-db/CURRENT +0 -1
  300. package/node_modules/@midnames/ns/src/test/midnight-level-db/LOCK +0 -0
  301. package/node_modules/@midnames/ns/src/test/midnight-level-db/LOG +0 -3
  302. package/node_modules/@midnames/ns/src/test/midnight-level-db/LOG.old +0 -6
  303. package/node_modules/@midnames/ns/src/test/midnight-level-db/MANIFEST-000607 +0 -0
  304. package/node_modules/@midnames/ns/src/test/ns-simulator.ts +0 -115
  305. package/node_modules/@midnames/ns/src/test/ns.test.ts +0 -132
  306. package/node_modules/@midnames/ns/src/test/profile-fields.ts +0 -148
  307. package/node_modules/@midnames/ns/src/test/wallet.ts +0 -289
  308. package/node_modules/@midnames/ns/src/utils.ts +0 -16
  309. package/node_modules/@midnames/ns/src/witnesses.ts +0 -6
  310. package/node_modules/@midnames/ns/tsconfig.build.json +0 -5
  311. package/node_modules/@midnames/ns/tsconfig.json +0 -12
  312. package/node_modules/@midnames/ns/vitest.config.ts +0 -30
@@ -1,914 +0,0 @@
1
- import "dotenv/config";
2
- import type { DomainEntry, BatchDeployConfig } from "./batch-config";
3
-
4
- // ─── Midnight SDK Imports ───────────────────────────────────────────────────
5
- import * as ledger from "@midnight-ntwrk/ledger-v8";
6
- import {
7
- unshieldedToken,
8
- nativeToken,
9
- type UnprovenTransaction,
10
- } from "@midnight-ntwrk/ledger-v8";
11
- import {
12
- type MidnightProvider,
13
- type WalletProvider,
14
- } from "@midnight-ntwrk/midnight-js-types";
15
- import { setNetworkId } from "@midnight-ntwrk/midnight-js-network-id";
16
- import { NetworkId } from "@midnight-ntwrk/wallet-sdk-abstractions";
17
- import { httpClientProofProvider } from "@midnight-ntwrk/midnight-js-http-client-proof-provider";
18
- import { indexerPublicDataProvider } from "@midnight-ntwrk/midnight-js-indexer-public-data-provider";
19
- import { NodeZkConfigProvider } from "@midnight-ntwrk/midnight-js-node-zk-config-provider";
20
- import { levelPrivateStateProvider } from "@midnight-ntwrk/midnight-js-level-private-state-provider";
21
- import {
22
- createUnprovenCallTx,
23
- deployContract,
24
- findDeployedContract,
25
- type ContractProviders,
26
- type DeployedContract,
27
- type FoundContract,
28
- } from "@midnight-ntwrk/midnight-js-contracts";
29
-
30
- import { HDWallet, Roles } from "@midnight-ntwrk/wallet-sdk-hd";
31
- import { WalletFacade } from "@midnight-ntwrk/wallet-sdk-facade";
32
- import { ShieldedWallet } from "@midnight-ntwrk/wallet-sdk-shielded";
33
- import { DustWallet } from "@midnight-ntwrk/wallet-sdk-dust-wallet";
34
- import {
35
- createKeystore,
36
- InMemoryTransactionHistoryStorage,
37
- PublicKey as UnshieldedPublicKey,
38
- type UnshieldedKeystore,
39
- UnshieldedWallet,
40
- } from "@midnight-ntwrk/wallet-sdk-unshielded-wallet";
41
-
42
- import { CompiledContract } from "@midnight-ntwrk/compact-js";
43
- import { Leaf } from "../../dist";
44
- import { witnesses } from "../../dist/witnesses";
45
- import { domainToKey } from "../utils.js";
46
-
47
- import * as Rx from "rxjs";
48
- import * as path from "node:path";
49
- import { webcrypto } from "crypto";
50
- import { WebSocket } from "ws";
51
- import { Buffer } from "buffer";
52
- import { type Logger } from "pino";
53
- import pinoPretty from "pino-pretty";
54
- import pino from "pino";
55
- import * as bip39 from "@scure/bip39";
56
- import { wordlist as english } from "@scure/bip39/wordlists/english.js";
57
-
58
- // @ts-expect-error: Needed to enable WebSocket usage through apollo
59
- globalThis.WebSocket = WebSocket;
60
-
61
- // ─── Logger ─────────────────────────────────────────────────────────────────
62
- const logger: Logger = pino(
63
- {
64
- level:
65
- process.env.DEBUG_LEVEL !== undefined &&
66
- process.env.DEBUG_LEVEL !== null &&
67
- process.env.DEBUG_LEVEL !== ""
68
- ? process.env.DEBUG_LEVEL
69
- : "info",
70
- depthLimit: 20,
71
- },
72
- pinoPretty({
73
- colorize: true,
74
- sync: true,
75
- customColors: { debug: "green" },
76
- }),
77
- );
78
-
79
- // ─── Network Config ─────────────────────────────────────────────────────────
80
- interface NetworkConfig {
81
- readonly indexer: string;
82
- readonly indexerWS: string;
83
- readonly node: string;
84
- readonly proofServer: string;
85
- readonly networkId: string;
86
- }
87
-
88
- function makePreviewConfig(): NetworkConfig {
89
- const cfg = {
90
- indexer: "https://indexer.preview.midnight.network/api/v3/graphql",
91
- indexerWS: "wss://indexer.preview.midnight.network/api/v3/graphql/ws",
92
- node: "wss://rpc.preview.midnight.network",
93
- proofServer: "https://ps.midnames.com",
94
- networkId: "preview",
95
- };
96
- setNetworkId(cfg.networkId);
97
- return cfg;
98
- }
99
-
100
- function makePreprodConfig(): NetworkConfig {
101
- const cfg = {
102
- indexer: "https://indexer.preprod.midnight.network/api/v3/graphql",
103
- indexerWS: "wss://indexer.preprod.midnight.network/api/v3/graphql/ws",
104
- node: "wss://rpc.preprod.midnight.network",
105
- proofServer: "https://ps.midnames.com",
106
- networkId: "preprod",
107
- };
108
- setNetworkId(cfg.networkId);
109
- return cfg;
110
- }
111
-
112
- function makeStandaloneConfig(): NetworkConfig {
113
- const cfg = {
114
- indexer: "http://127.0.0.1:8088/api/v3/graphql",
115
- indexerWS: "ws://127.0.0.1:8088/api/v3/graphql/ws",
116
- node: "ws://127.0.0.1:9944",
117
- proofServer: "http://127.0.0.1:6300",
118
- networkId: "undeployed",
119
- };
120
- setNetworkId(cfg.networkId);
121
- return cfg;
122
- }
123
-
124
- // ─── Wallet Types & Helpers ─────────────────────────────────────────────────
125
- interface WalletContext {
126
- wallet: WalletFacade;
127
- shieldedSecretKeys: ledger.ZswapSecretKeys;
128
- dustSecretKey: ledger.DustSecretKey;
129
- unshieldedKeystore: UnshieldedKeystore;
130
- }
131
-
132
- type UnboundTransaction = ledger.Transaction<
133
- ledger.SignatureEnabled,
134
- ledger.Proof,
135
- ledger.PreBinding
136
- >;
137
-
138
- // ─── Contract Instance ──────────────────────────────────────────────────────
139
- const contractConfig = {
140
- privateStateStoreName: "nameservice-private-state",
141
- zkConfigPath: path.resolve(
142
- import.meta.dirname,
143
- "..",
144
- "..",
145
- "dist",
146
- "managed",
147
- "leaf",
148
- ),
149
- };
150
-
151
- const leafContractInstance = CompiledContract.make(
152
- "leaf-contract",
153
- Leaf.Contract,
154
- ).pipe(
155
- CompiledContract.withWitnesses(witnesses),
156
- CompiledContract.withCompiledFileAssets(contractConfig.zkConfigPath),
157
- );
158
-
159
- // ─── Address Parsing ────────────────────────────────────────────────────────
160
- function parseContractAddress(address: string): { bytes: Uint8Array } {
161
- let hexString: string;
162
- if (address.startsWith("0200")) {
163
- hexString = address.slice(4);
164
- } else if (address.startsWith("0x")) {
165
- hexString = address.slice(2);
166
- } else {
167
- hexString = address;
168
- }
169
- const bytes = new Uint8Array(Buffer.from(hexString, "hex"));
170
- return { bytes: bytes.length === 32 ? bytes : bytes.subarray(-32) };
171
- }
172
-
173
- const ZERO_ADDR =
174
- "0000000000000000000000000000000000000000000000000000000000000000";
175
-
176
- async function mnemonicToHexSeed(mnemonic: string): Promise<string> {
177
- if (!bip39.validateMnemonic(mnemonic, english)) {
178
- throw new Error("Invalid BIP39 mnemonic");
179
- }
180
- const seed = await bip39.mnemonicToSeed(mnemonic, "");
181
- return Buffer.from(seed).toString("hex");
182
- }
183
-
184
- async function resolveSeed(configSeed?: string): Promise<string> {
185
- const raw = configSeed ?? process.env.SEED;
186
- if (!raw) {
187
- throw new Error("No seed provided — set SEED in .env or walletSeed in config");
188
- }
189
- // If it looks like hex, use directly
190
- if (/^[0-9a-fA-F]{64,}$/.test(raw)) {
191
- return raw;
192
- }
193
- // Otherwise treat as BIP39 mnemonic
194
- return await mnemonicToHexSeed(raw);
195
- }
196
-
197
- // ─── Wallet Lifecycle ───────────────────────────────────────────────────────
198
- const waitForSync = (wallet: WalletFacade) =>
199
- Rx.firstValueFrom(
200
- wallet.state().pipe(
201
- Rx.throttleTime(5_000),
202
- Rx.tap((state) => {
203
- logger.info(`Waiting for wallet sync. Synced: ${state.isSynced}`);
204
- }),
205
- Rx.filter((state) => state.isSynced),
206
- ),
207
- );
208
-
209
- const waitForFunds = (wallet: WalletFacade) =>
210
- Rx.firstValueFrom(
211
- wallet.state().pipe(
212
- Rx.throttleTime(10_000),
213
- Rx.tap((state) => {
214
- const unshielded = state.unshielded?.balances[nativeToken().raw] ?? 0n;
215
- const shielded = state.shielded?.balances[nativeToken().raw] ?? 0n;
216
- logger.info(
217
- `Waiting for funds. Synced: ${state.isSynced}, Unshielded: ${unshielded}, Shielded: ${shielded}`,
218
- );
219
- }),
220
- Rx.filter((state) => state.isSynced),
221
- Rx.map(
222
- (s) =>
223
- (s.unshielded?.balances[nativeToken().raw] ?? 0n) +
224
- (s.shielded?.balances[nativeToken().raw] ?? 0n),
225
- ),
226
- Rx.filter((balance) => balance > 0n),
227
- ),
228
- );
229
-
230
- const displayWalletBalances = async (
231
- wallet: WalletFacade,
232
- ): Promise<{ unshielded: bigint; shielded: bigint; total: bigint }> => {
233
- const state = await Rx.firstValueFrom(wallet.state());
234
- const unshielded = state.unshielded?.balances[nativeToken().raw] ?? 0n;
235
- const shielded = state.shielded?.balances[nativeToken().raw] ?? 0n;
236
- const total = unshielded + shielded;
237
- logger.info(`Unshielded: ${unshielded}, Shielded: ${shielded}, Total: ${total} tSTAR`);
238
- return { unshielded, shielded, total };
239
- };
240
-
241
- const registerNightForDust = async (
242
- walletContext: WalletContext,
243
- ): Promise<boolean> => {
244
- const state = await Rx.firstValueFrom(
245
- walletContext.wallet.state().pipe(Rx.filter((s) => s.isSynced)),
246
- );
247
-
248
- const unregisteredNightUtxos =
249
- state.unshielded?.availableCoins.filter(
250
- (coin) =>
251
- coin.utxo.type === "0000000000000000000000000000000000000000000000000000000000000000" &&
252
- coin.meta.registeredForDustGeneration === false,
253
- ) ?? [];
254
-
255
- if (unregisteredNightUtxos.length === 0) {
256
- logger.info("No unshielded Night UTXOs available for dust registration");
257
- const dustBalance = state.dust
258
- ? state.dust.capabilities.coinsAndBalances.getWalletBalance(state.dust.state, new Date())
259
- : 0n;
260
- logger.info(`Current dust balance: ${dustBalance}`);
261
- return dustBalance > 0n;
262
- }
263
-
264
- logger.info(
265
- `Found ${unregisteredNightUtxos.length} unregistered Night UTXOs, registering for dust...`,
266
- );
267
-
268
- try {
269
- const recipe =
270
- await walletContext.wallet.registerNightUtxosForDustGeneration(
271
- unregisteredNightUtxos,
272
- walletContext.unshieldedKeystore.getPublicKey(),
273
- (payload) => walletContext.unshieldedKeystore.signData(payload),
274
- );
275
-
276
- const finalizedTx = await walletContext.wallet.finalizeTransaction(
277
- recipe.transaction,
278
- );
279
- const txId = await walletContext.wallet.submitTransaction(finalizedTx);
280
- logger.info(`Dust registration submitted: ${txId}`);
281
-
282
- logger.info("Waiting for dust to be generated...");
283
- await Rx.firstValueFrom(
284
- walletContext.wallet.state().pipe(
285
- Rx.throttleTime(5_000),
286
- Rx.tap((s) => {
287
- const dustBalance = s.dust
288
- ? s.dust.capabilities.coinsAndBalances.getWalletBalance(s.dust.state, new Date())
289
- : 0n;
290
- logger.debug(`Dust balance: ${dustBalance}`);
291
- }),
292
- Rx.filter((s) => {
293
- const dustBalance = s.dust
294
- ? s.dust.capabilities.coinsAndBalances.getWalletBalance(s.dust.state, new Date())
295
- : 0n;
296
- return dustBalance > 0n;
297
- }),
298
- ),
299
- );
300
-
301
- logger.info("Dust registration complete!");
302
- return true;
303
- } catch (e) {
304
- logger.error(`Failed to register Night UTXOs for dust: ${e}`);
305
- return false;
306
- }
307
- };
308
-
309
- const initWalletWithSeed = async (
310
- seed: Buffer,
311
- config: NetworkConfig,
312
- ): Promise<WalletContext> => {
313
- const hdWallet = HDWallet.fromSeed(seed);
314
- if (hdWallet.type !== "seedOk") {
315
- throw new Error("Failed to initialize HDWallet");
316
- }
317
-
318
- const derivationResult = hdWallet.hdWallet
319
- .selectAccount(0)
320
- .selectRoles([Roles.Zswap, Roles.NightExternal, Roles.Dust])
321
- .deriveKeysAt(0);
322
-
323
- if (derivationResult.type !== "keysDerived") {
324
- throw new Error("Failed to derive keys");
325
- }
326
-
327
- hdWallet.hdWallet.clear();
328
-
329
- const shieldedSecretKeys = ledger.ZswapSecretKeys.fromSeed(
330
- derivationResult.keys[Roles.Zswap],
331
- );
332
- const dustSecretKey = ledger.DustSecretKey.fromSeed(
333
- derivationResult.keys[Roles.Dust],
334
- );
335
- const unshieldedKeystore = createKeystore(
336
- derivationResult.keys[Roles.NightExternal],
337
- config.networkId as NetworkId.NetworkId,
338
- );
339
-
340
- const walletConfiguration = {
341
- networkId: config.networkId as NetworkId.NetworkId,
342
- costParameters: {
343
- additionalFeeOverhead: 1_000_000_000n,
344
- feeBlocksMargin: 5,
345
- },
346
- relayURL: new URL(config.node),
347
- provingServerUrl: new URL(config.proofServer),
348
- indexerClientConnection: {
349
- indexerHttpUrl: config.indexer,
350
- indexerWsUrl: config.indexerWS,
351
- },
352
- indexerUrl: config.indexerWS,
353
- };
354
-
355
- const facade = await WalletFacade.init({
356
- configuration: walletConfiguration,
357
- shielded: (config) =>
358
- ShieldedWallet(config).startWithSecretKeys(shieldedSecretKeys),
359
- dust: (config) =>
360
- DustWallet(config).startWithSecretKey(
361
- dustSecretKey,
362
- ledger.LedgerParameters.initialParameters().dust,
363
- ),
364
- unshielded: (config) =>
365
- UnshieldedWallet({
366
- ...config,
367
- txHistoryStorage: new InMemoryTransactionHistoryStorage(),
368
- }).startWithPublicKey(UnshieldedPublicKey.fromKeyStore(unshieldedKeystore)),
369
- });
370
- await facade.start(shieldedSecretKeys, dustSecretKey);
371
-
372
- return { wallet: facade, shieldedSecretKeys, dustSecretKey, unshieldedKeystore };
373
- };
374
-
375
- const buildWalletAndWaitForFunds = async (
376
- config: NetworkConfig,
377
- hexSeed: string,
378
- ): Promise<WalletContext> => {
379
- logger.info("Building wallet from hex seed...");
380
- const seed = Buffer.from(hexSeed, "hex");
381
- const walletContext = await initWalletWithSeed(seed, config);
382
-
383
- logger.info(
384
- `Wallet address: ${walletContext.unshieldedKeystore.getBech32Address().asString()}`,
385
- );
386
-
387
- logger.info("Waiting for wallet to sync...");
388
- await waitForSync(walletContext.wallet);
389
-
390
- const { total } = await displayWalletBalances(walletContext.wallet);
391
- if (total === 0n) {
392
- logger.info("Waiting to receive tokens...");
393
- await waitForFunds(walletContext.wallet);
394
- await displayWalletBalances(walletContext.wallet);
395
- }
396
-
397
- const dustRegistered = await registerNightForDust(walletContext);
398
- if (!dustRegistered) {
399
- logger.warn("Dust registration failed — deployment may fail without dust for fees");
400
- }
401
-
402
- return walletContext;
403
- };
404
-
405
- const createWalletAndMidnightProvider = async (
406
- walletContext: WalletContext,
407
- ): Promise<WalletProvider & MidnightProvider> => {
408
- await Rx.firstValueFrom(
409
- walletContext.wallet.state().pipe(Rx.filter((s) => s.isSynced)),
410
- );
411
-
412
- return {
413
- getCoinPublicKey(): ledger.CoinPublicKey {
414
- return walletContext.shieldedSecretKeys
415
- .coinPublicKey as unknown as ledger.CoinPublicKey;
416
- },
417
- getEncryptionPublicKey(): ledger.EncPublicKey {
418
- return walletContext.shieldedSecretKeys
419
- .encryptionPublicKey as unknown as ledger.EncPublicKey;
420
- },
421
- async balanceTx(
422
- tx: UnboundTransaction,
423
- ttl?: Date,
424
- ): Promise<ledger.FinalizedTransaction> {
425
- const txTtl = ttl ?? new Date(Date.now() + 30 * 60 * 1000);
426
- const recipe = await walletContext.wallet.balanceUnboundTransaction(tx, {
427
- shieldedSecretKeys: walletContext.shieldedSecretKeys,
428
- dustSecretKey: walletContext.dustSecretKey,
429
- }, { ttl: txTtl });
430
-
431
- const signSegment = (data: Uint8Array) =>
432
- walletContext.unshieldedKeystore.signData(data);
433
- const signedRecipe = await walletContext.wallet.signRecipe(recipe, signSegment);
434
-
435
- return await walletContext.wallet.finalizeRecipe(signedRecipe);
436
- },
437
- async submitTx(
438
- tx: ledger.FinalizedTransaction,
439
- ): Promise<ledger.TransactionId> {
440
- return await walletContext.wallet.submitTransaction(tx);
441
- },
442
- };
443
- };
444
-
445
- const configureProviders = async (
446
- walletContext: WalletContext,
447
- config: NetworkConfig,
448
- ) => {
449
- setNetworkId(config.networkId);
450
- const walletAndMidnightProvider =
451
- await createWalletAndMidnightProvider(walletContext);
452
-
453
- const zkConfig = new NodeZkConfigProvider<string>(contractConfig.zkConfigPath);
454
-
455
- return {
456
- privateStateProvider: levelPrivateStateProvider<"namespacePrivateState">({
457
- privateStoragePasswordProvider: () => "Batch-deploy-P4ssword!not-secret",
458
- accountId: "batch-deploy",
459
- }),
460
- publicDataProvider: indexerPublicDataProvider(
461
- config.indexer,
462
- config.indexerWS,
463
- ),
464
- zkConfigProvider: zkConfig,
465
- proofProvider: httpClientProofProvider(config.proofServer, zkConfig),
466
- walletProvider: walletAndMidnightProvider,
467
- midnightProvider: walletAndMidnightProvider,
468
- };
469
- };
470
-
471
- // ─── Contract Deployment ────────────────────────────────────────────────────
472
- async function deployLeafContract(
473
- providers: ContractProviders,
474
- parentDomain: string | null,
475
- parentResolver: string,
476
- target:
477
- | { tag: "Left"; value: { bytes: Uint8Array } }
478
- | { tag: "Right"; value: string },
479
- domain: string | null,
480
- initialFields: Array<[string, string]> = [],
481
- ) {
482
- logger.info(`Deploying leaf contract for domain: ${domain || "root"}`);
483
-
484
- // Build kvs parameter: Vector<10, Maybe<[string, string]>>
485
- const kvs: Array<{ is_some: boolean; value: [string, string] }> = [];
486
- for (const [key, value] of initialFields.slice(0, 10)) {
487
- kvs.push({ is_some: true, value: [key, value] });
488
- }
489
- while (kvs.length < 10) {
490
- kvs.push({ is_some: false, value: ["", ""] });
491
- }
492
-
493
- const deployedContract = await deployContract(providers, {
494
- compiledContract: leafContractInstance as any,
495
- privateStateId: "namespacePrivateState",
496
- initialPrivateState: { phantom: false },
497
- args: [
498
- parentDomain
499
- ? { is_some: true, value: domainToKey(parentDomain).key }
500
- : { is_some: false, value: new Uint8Array(32) },
501
- parseContractAddress(parentResolver),
502
- target.tag === "Left"
503
- ? {
504
- is_left: true,
505
- left: target.value,
506
- right: { bytes: new Uint8Array(32) },
507
- }
508
- : {
509
- is_left: false,
510
- left: { bytes: new Uint8Array(32) },
511
- right: parseContractAddress(target.value),
512
- },
513
- domain ? { is_some: true, value: domainToKey(domain).key } : { is_some: false, value: new Uint8Array(32) },
514
- // Shared coin color + per-tier costs: short (≤3 chars), medium (4 chars), long (5+ chars)
515
- new Uint8Array(Buffer.from(nativeToken().raw.toString().replace("0x", ""), "hex")),
516
- 100n,
517
- 10n,
518
- 1n,
519
- kvs,
520
- ],
521
- });
522
-
523
- logger.info(
524
- `Deployed at: ${deployedContract.deployTxData.public.contractAddress}`,
525
- );
526
- return deployedContract;
527
- }
528
-
529
- async function buyDomainFor(
530
- contract:
531
- | FoundContract<any>
532
- | DeployedContract<any>,
533
- ownerCoinPublicKey: Uint8Array,
534
- domainName: string,
535
- resolverAddress: string,
536
- providers: ContractProviders,
537
- ) {
538
- logger.info(`Buying domain: ${domainName}`);
539
-
540
- // 1. Build unproven call tx
541
- const { key: domainKey, len: domainLen } = domainToKey(domainName);
542
- const unprovenCallTxData = await createUnprovenCallTx(providers, {
543
- compiledContract: leafContractInstance as any,
544
- circuitId: "buy_domain_for",
545
- contractAddress: contract.deployTxData.public.contractAddress,
546
- args: [
547
- { bytes: ownerCoinPublicKey },
548
- domainKey,
549
- domainLen,
550
- parseContractAddress(resolverAddress),
551
- ],
552
- privateStateId: "namespacePrivateState",
553
- });
554
-
555
- const unprovenTx = unprovenCallTxData.private.unprovenTx;
556
-
557
- // 2. Prove using httpClientProofProvider (sends ZKIR to proof server)
558
- logger.info("Proving transaction...");
559
- const provedTx = await providers.proofProvider.proveTx(unprovenTx);
560
-
561
- // 3. Balance + finalize, then submit
562
- logger.info("Balancing and submitting transaction...");
563
- const finalizedTx = await providers.walletProvider.balanceTx(provedTx);
564
- const txId = await providers.midnightProvider.submitTx(finalizedTx);
565
-
566
- logger.info(`Domain ${domainName} purchased. Tx: ${txId}`);
567
- return { public: { txId } };
568
- }
569
-
570
- // ─── Service Check ──────────────────────────────────────────────────────────
571
- async function checkServiceAvailability(url: string): Promise<boolean> {
572
- try {
573
- if (url.startsWith("ws://") || url.startsWith("wss://")) {
574
- return new Promise<boolean>((resolve) => {
575
- const ws = new WebSocket(url);
576
- const timeoutId = setTimeout(() => {
577
- ws.close();
578
- resolve(false);
579
- }, 5000);
580
- ws.on("open", () => {
581
- clearTimeout(timeoutId);
582
- ws.close();
583
- resolve(true);
584
- });
585
- ws.on("error", () => {
586
- clearTimeout(timeoutId);
587
- resolve(false);
588
- });
589
- });
590
- }
591
- const controller = new AbortController();
592
- const timeoutId = setTimeout(() => controller.abort(), 5000);
593
- const response = await fetch(url, { signal: controller.signal, method: "GET" });
594
- clearTimeout(timeoutId);
595
- return response.status < 500;
596
- } catch {
597
- return false;
598
- }
599
- }
600
-
601
- async function checkAllServices(config: NetworkConfig): Promise<boolean> {
602
- logger.info("Checking service availability...");
603
- const services = [
604
- { name: "Indexer", url: config.indexer },
605
- { name: "Node", url: config.node },
606
- { name: "Proof Server", url: config.proofServer },
607
- ];
608
-
609
- const results = await Promise.all(
610
- services.map(async (service) => {
611
- const available = await checkServiceAvailability(service.url);
612
- logger.info(
613
- `${service.name} (${service.url}): ${available ? "Available" : "Unavailable"}`,
614
- );
615
- return { ...service, available };
616
- }),
617
- );
618
-
619
- const allAvailable = results.every((s) => s.available);
620
- if (!allAvailable) {
621
- logger.error("Some services are unavailable.");
622
- } else {
623
- logger.info("All services are available");
624
- }
625
- return allAvailable;
626
- }
627
-
628
- // ─── Topological Sort (Kahn's Algorithm) ────────────────────────────────────
629
- function topologicalSort(
630
- domains: DomainEntry[],
631
- tld: string,
632
- existingContracts: Record<string, string>,
633
- ): DomainEntry[] {
634
- // Build a set of all known domains (config + existing + TLD)
635
- const configDomainSet = new Set(domains.map((d) => d.domain));
636
- const existingSet = new Set(Object.keys(existingContracts));
637
-
638
- // Validate: every parent must exist in config, existingContracts, or be the TLD
639
- for (const entry of domains) {
640
- const parts = entry.domain.split(".");
641
- if (parts.length > 1) {
642
- const parentDomain = parts.slice(1).join(".");
643
- if (
644
- !configDomainSet.has(parentDomain) &&
645
- !existingSet.has(parentDomain) &&
646
- parentDomain !== tld
647
- ) {
648
- throw new Error(
649
- `Parent "${parentDomain}" for domain "${entry.domain}" is not in config or existingContracts`,
650
- );
651
- }
652
- }
653
- // Top-level domains have TLD as parent — always valid
654
- }
655
-
656
- // Build adjacency: parent -> children (only within config domains)
657
- const inDegree = new Map<string, number>();
658
- const children = new Map<string, string[]>();
659
-
660
- for (const entry of domains) {
661
- inDegree.set(entry.domain, 0);
662
- children.set(entry.domain, []);
663
- }
664
-
665
- for (const entry of domains) {
666
- const parts = entry.domain.split(".");
667
- if (parts.length > 1) {
668
- const parentDomain = parts.slice(1).join(".");
669
- if (configDomainSet.has(parentDomain)) {
670
- // Parent is in config — add edge
671
- children.get(parentDomain)!.push(entry.domain);
672
- inDegree.set(entry.domain, (inDegree.get(entry.domain) ?? 0) + 1);
673
- }
674
- // If parent is in existingContracts or is TLD, no dependency edge needed
675
- }
676
- }
677
-
678
- // Kahn's algorithm
679
- const queue: string[] = [];
680
- for (const [domain, degree] of inDegree) {
681
- if (degree === 0) queue.push(domain);
682
- }
683
-
684
- const sorted: string[] = [];
685
- while (queue.length > 0) {
686
- const current = queue.shift()!;
687
- sorted.push(current);
688
- for (const child of children.get(current) ?? []) {
689
- const newDegree = (inDegree.get(child) ?? 1) - 1;
690
- inDegree.set(child, newDegree);
691
- if (newDegree === 0) queue.push(child);
692
- }
693
- }
694
-
695
- if (sorted.length !== domains.length) {
696
- throw new Error(
697
- "Cycle detected in domain hierarchy — cannot determine deployment order",
698
- );
699
- }
700
-
701
- // Map sorted domain names back to DomainEntry objects
702
- const entryMap = new Map(domains.map((d) => [d.domain, d]));
703
- return sorted.map((name) => entryMap.get(name)!);
704
- }
705
-
706
- // ─── Validation ─────────────────────────────────────────────────────────────
707
- function validateConfig(config: BatchDeployConfig): void {
708
- const domainNames = config.domains.map((d) => d.domain);
709
- const duplicates = domainNames.filter(
710
- (name, i) => domainNames.indexOf(name) !== i,
711
- );
712
- if (duplicates.length > 0) {
713
- throw new Error(`Duplicate domains: ${duplicates.join(", ")}`);
714
- }
715
-
716
- for (const entry of config.domains) {
717
- if (entry.fields.length > 10) {
718
- throw new Error(
719
- `Domain "${entry.domain}" has ${entry.fields.length} fields (max 10)`,
720
- );
721
- }
722
- }
723
- }
724
-
725
- // ─── Orchestrator ───────────────────────────────────────────────────────────
726
- async function batchDeploy(config: BatchDeployConfig): Promise<void> {
727
- const tld = config.tld ?? "night";
728
- const existingContracts = config.existingContracts ?? {};
729
-
730
- // Validate
731
- validateConfig(config);
732
-
733
- // Sort domains topologically
734
- const sortedDomains = topologicalSort(config.domains, tld, existingContracts);
735
- logger.info(
736
- `Deployment order: ${sortedDomains.map((d) => d.domain).join(" -> ")}`,
737
- );
738
-
739
- // Setup network
740
- const networkConfig =
741
- config.network === "preview"
742
- ? makePreviewConfig()
743
- : config.network === "preprod"
744
- ? makePreprodConfig()
745
- : makeStandaloneConfig();
746
-
747
- // Check services
748
- const servicesOk = await checkAllServices(networkConfig);
749
- if (!servicesOk) {
750
- throw new Error("Required services are unavailable");
751
- }
752
-
753
- // Determine wallet seed
754
- const seed = await resolveSeed(config.walletSeed);
755
-
756
- const walletContext = await buildWalletAndWaitForFunds(networkConfig, seed);
757
-
758
- try {
759
- const providers = await configureProviders(walletContext, networkConfig);
760
-
761
- // Get coin public key for wallet target
762
- const coinPublicKey = walletContext.shieldedSecretKeys
763
- .coinPublicKey as unknown as ledger.CoinPublicKey;
764
- const coinPublicKeyBytes = new Uint8Array(
765
- (coinPublicKey as any).raw ||
766
- Buffer.from(coinPublicKey.toString().replace("0x", ""), "hex"),
767
- );
768
- const walletTarget = {
769
- tag: "Left" as const,
770
- value: { bytes: coinPublicKeyBytes },
771
- };
772
-
773
- // Track deployed contracts: domain -> contract
774
- const deployedContracts: Map<
775
- string,
776
- | FoundContract<any>
777
- | DeployedContract<any>
778
- > = new Map();
779
-
780
- // Load existing contracts
781
- for (const [domain, address] of Object.entries(existingContracts)) {
782
- logger.info(`Loading existing contract for "${domain}" at ${address}`);
783
- const found = await findDeployedContract(providers, {
784
- contractAddress: address,
785
- compiledContract: leafContractInstance as any,
786
- privateStateId: "namespacePrivateState",
787
- initialPrivateState: { phantom: false },
788
- });
789
- deployedContracts.set(domain, found);
790
- }
791
-
792
- // Deploy/join TLD
793
- let rootContract:
794
- | FoundContract<any>
795
- | DeployedContract<any>;
796
-
797
- if (config.tldContractAddress) {
798
- logger.info(
799
- `Joining existing TLD contract: ${config.tldContractAddress}`,
800
- );
801
- rootContract = await findDeployedContract(providers, {
802
- contractAddress: config.tldContractAddress,
803
- compiledContract: leafContractInstance as any,
804
- privateStateId: "namespacePrivateState",
805
- initialPrivateState: { phantom: false },
806
- });
807
- } else {
808
- rootContract = await deployLeafContract(
809
- providers,
810
- null,
811
- "0x" + ZERO_ADDR,
812
- walletTarget,
813
- tld,
814
- );
815
- }
816
- deployedContracts.set(tld, rootContract);
817
-
818
- // Deploy each domain in sorted order
819
- for (const entry of sortedDomains) {
820
- // Wait for indexer to catch up, then sync wallet state
821
- logger.info("Waiting for indexer to process recent blocks...");
822
- await new Promise((r) => setTimeout(r, 6_500));
823
- logger.info("Syncing wallet state before next deployment...");
824
- await waitForSync(walletContext.wallet);
825
- await displayWalletBalances(walletContext.wallet);
826
-
827
- // Re-register dust if depleted (only Night UTXOs)
828
- const hasDust = await registerNightForDust(walletContext);
829
- if (!hasDust) {
830
- logger.warn("Dust depleted — waiting for dust regeneration...");
831
- }
832
-
833
- const parts = entry.domain.split(".");
834
- const domainName = parts[0];
835
- const parentDomainPath = parts.length > 1 ? parts.slice(1).join(".") : tld;
836
-
837
- const parentContract = deployedContracts.get(parentDomainPath);
838
- if (!parentContract) {
839
- throw new Error(
840
- `Parent contract for "${parentDomainPath}" not found — this should not happen after topological sort`,
841
- );
842
- }
843
-
844
- const domainContract = await deployLeafContract(
845
- providers,
846
- parentDomainPath,
847
- parentContract.deployTxData.public.contractAddress,
848
- walletTarget,
849
- domainName,
850
- entry.fields,
851
- );
852
-
853
- deployedContracts.set(entry.domain, domainContract);
854
-
855
- // Wait for deploy TX to settle before buying
856
- logger.info("Waiting for deploy TX to settle...");
857
- await new Promise((r) => setTimeout(r, 6_500));
858
- await waitForSync(walletContext.wallet);
859
-
860
- await buyDomainFor(
861
- parentContract,
862
- coinPublicKeyBytes,
863
- domainName,
864
- domainContract.deployTxData.public.contractAddress,
865
- providers,
866
- );
867
- }
868
-
869
- // Print results
870
- logger.info("\n=== Deployed Contracts ===");
871
- const results: Record<string, string> = {};
872
- for (const [domain, contract] of deployedContracts) {
873
- const addr = contract.deployTxData.public.contractAddress;
874
- results[domain] = addr;
875
- logger.info(`${domain}: ${addr}`);
876
- }
877
-
878
- // Also output as JSON for scripting
879
- console.log(JSON.stringify(results, null, 2));
880
- } finally {
881
- try {
882
- await walletContext.wallet.stop();
883
- logger.info("Wallet closed");
884
- } catch (e) {
885
- logger.error(`Error closing wallet: ${e}`);
886
- }
887
- }
888
- }
889
-
890
- // ─── CLI Entry ──────────────────────────────────────────────────────────────
891
- if (import.meta.main) {
892
- const configPath = process.argv[2];
893
- if (!configPath) {
894
- console.error(
895
- "Usage: bun run batch-deploy.ts <config-file.ts>\n\nExample: bun run src/test/batch-deploy.ts src/test/example-deploy.config.ts",
896
- );
897
- process.exit(1);
898
- }
899
-
900
- const resolvedPath = path.resolve(configPath);
901
- const configModule = await import(resolvedPath);
902
- const deployConfig: BatchDeployConfig = configModule.config;
903
-
904
- if (!deployConfig) {
905
- console.error(
906
- `Config file must export a "config" named export of type BatchDeployConfig`,
907
- );
908
- process.exit(1);
909
- }
910
-
911
- await batchDeploy(deployConfig);
912
- }
913
-
914
- export { batchDeploy };