@midnames/sdk 1.0.3 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/provider.js +1 -1
- package/node_modules/@midnames/ns/package.json +14 -14
- package/package.json +13 -11
- package/node_modules/@midnames/ns/.env +0 -10
- package/node_modules/@midnames/ns/.env.example +0 -11
- package/node_modules/@midnames/ns/.turbo/turbo-build.log +0 -2
- package/node_modules/@midnames/ns/.turbo/turbo-test.log +0 -13
- package/node_modules/@midnames/ns/midnight-level-db/000005.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000008.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000011.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000014.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000019.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000024.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000031.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000034.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000037.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000040.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000045.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000050.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000059.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000064.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000069.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000074.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000083.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000088.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000093.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000098.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000107.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000112.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000121.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000126.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000135.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000140.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000149.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000154.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000163.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000168.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000177.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000182.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000187.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000192.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000201.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000206.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000215.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000220.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000229.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000234.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000243.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000248.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000257.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000262.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000271.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000276.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000281.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000286.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000295.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000300.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000305.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000310.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000313.log +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000319.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000324.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000329.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000334.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000343.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000348.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000357.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000362.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000371.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000376.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000385.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000390.ldb +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/000393.log +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/CURRENT +0 -1
- package/node_modules/@midnames/ns/midnight-level-db/LOCK +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/LOG +0 -3
- package/node_modules/@midnames/ns/midnight-level-db/LOG.old +0 -6
- package/node_modules/@midnames/ns/midnight-level-db/MANIFEST-000312 +0 -0
- package/node_modules/@midnames/ns/midnight-level-db/MANIFEST-000392 +0 -0
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/README.md +0 -32
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/built-ins.d.ts +0 -133
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/built-ins.js +0 -216
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/built-ins.js.map +0 -1
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/casts.d.ts +0 -15
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/casts.js +0 -65
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/casts.js.map +0 -1
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/circuit-context.d.ts +0 -66
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/circuit-context.js +0 -150
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/circuit-context.js.map +0 -1
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/compact-types.d.ts +0 -209
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/compact-types.js +0 -374
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/compact-types.js.map +0 -1
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/constants.d.ts +0 -13
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/constants.js +0 -29
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/constants.js.map +0 -1
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/constructor-context.d.ts +0 -39
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/constructor-context.js +0 -26
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/constructor-context.js.map +0 -1
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/contract-dependencies.d.ts +0 -175
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/contract-dependencies.js +0 -288
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/contract-dependencies.js.map +0 -1
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/error.d.ts +0 -16
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/error.js +0 -43
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/error.js.map +0 -1
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/index.d.ts +0 -15
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/index.js +0 -30
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/index.js.map +0 -1
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/proof-data.d.ts +0 -27
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/proof-data.js +0 -16
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/proof-data.js.map +0 -1
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/utils.d.ts +0 -19
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/utils.js +0 -41
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/utils.js.map +0 -1
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/version.d.ts +0 -2
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/version.js +0 -18
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/version.js.map +0 -1
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/witness.d.ts +0 -24
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/witness.js +0 -26
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/witness.js.map +0 -1
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/zswap.d.ts +0 -172
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/zswap.js +0 -141
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/zswap.js.map +0 -1
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/package.json +0 -57
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/ledger-v8.d.ts +0 -3079
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/midnight_ledger_wasm.js +0 -5
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/midnight_ledger_wasm_bg.js +0 -10056
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/midnight_ledger_wasm_bg.wasm +0 -0
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/midnight_ledger_wasm_fs.js +0 -69
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/package-lock.json +0 -12
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/package.json +0 -34
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline0.js +0 -1
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline1.js +0 -1
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline10.js +0 -1
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline11.js +0 -1
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline12.js +0 -1
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline13.js +0 -1
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline14.js +0 -1
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline15.js +0 -1
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline16.js +0 -1
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline17.js +0 -1
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline18.js +0 -1
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline19.js +0 -1
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline2.js +0 -1
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline20.js +0 -1
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline21.js +0 -1
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline22.js +0 -1
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline23.js +0 -1
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline3.js +0 -1
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline4.js +0 -1
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline5.js +0 -1
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline6.js +0 -1
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline7.js +0 -1
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline8.js +0 -1
- package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline9.js +0 -1
- package/node_modules/@midnames/ns/reports/report.xml +0 -33
- package/node_modules/@midnames/ns/src/index.ts +0 -13
- package/node_modules/@midnames/ns/src/leaf.compact +0 -290
- package/node_modules/@midnames/ns/src/managed/leaf/compiler/contract-info.json +0 -534
- package/node_modules/@midnames/ns/src/managed/leaf/contract/index.d.ts +0 -197
- package/node_modules/@midnames/ns/src/managed/leaf/contract/index.js +0 -3094
- package/node_modules/@midnames/ns/src/managed/leaf/contract/index.js.map +0 -8
- package/node_modules/@midnames/ns/src/managed/leaf/keys/add_multiple_fields.prover +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/keys/add_multiple_fields.verifier +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/keys/buy_domain_for.prover +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/keys/buy_domain_for.verifier +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/keys/change_owner.prover +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/keys/change_owner.verifier +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/keys/clear_all_fields.prover +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/keys/clear_all_fields.verifier +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/keys/clear_field.prover +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/keys/clear_field.verifier +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/keys/insert_field.prover +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/keys/insert_field.verifier +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/keys/register_domain_for.prover +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/keys/register_domain_for.verifier +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/keys/set_resolver.prover +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/keys/set_resolver.verifier +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/keys/transfer_domain.prover +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/keys/transfer_domain.verifier +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/keys/update_color.prover +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/keys/update_color.verifier +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/keys/update_costs.prover +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/keys/update_costs.verifier +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/keys/update_domain_target.prover +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/keys/update_domain_target.verifier +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/keys/update_target_and_fields.prover +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/keys/update_target_and_fields.verifier +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/zkir/add_multiple_fields.bzkir +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/zkir/add_multiple_fields.zkir +0 -424
- package/node_modules/@midnames/ns/src/managed/leaf/zkir/buy_domain_for.bzkir +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/zkir/buy_domain_for.zkir +0 -1456
- package/node_modules/@midnames/ns/src/managed/leaf/zkir/change_owner.bzkir +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/zkir/change_owner.zkir +0 -57
- package/node_modules/@midnames/ns/src/managed/leaf/zkir/clear_all_fields.bzkir +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/zkir/clear_all_fields.zkir +0 -53
- package/node_modules/@midnames/ns/src/managed/leaf/zkir/clear_field.bzkir +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/zkir/clear_field.zkir +0 -58
- package/node_modules/@midnames/ns/src/managed/leaf/zkir/insert_field.bzkir +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/zkir/insert_field.zkir +0 -65
- package/node_modules/@midnames/ns/src/managed/leaf/zkir/register_domain_for.bzkir +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/zkir/register_domain_for.zkir +0 -401
- package/node_modules/@midnames/ns/src/managed/leaf/zkir/set_resolver.bzkir +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/zkir/set_resolver.zkir +0 -109
- package/node_modules/@midnames/ns/src/managed/leaf/zkir/transfer_domain.bzkir +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/zkir/transfer_domain.zkir +0 -212
- package/node_modules/@midnames/ns/src/managed/leaf/zkir/update_color.bzkir +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/zkir/update_color.zkir +0 -58
- package/node_modules/@midnames/ns/src/managed/leaf/zkir/update_costs.bzkir +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/zkir/update_costs.zkir +0 -88
- package/node_modules/@midnames/ns/src/managed/leaf/zkir/update_domain_target.bzkir +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/zkir/update_domain_target.zkir +0 -66
- package/node_modules/@midnames/ns/src/managed/leaf/zkir/update_target_and_fields.bzkir +0 -0
- package/node_modules/@midnames/ns/src/managed/leaf/zkir/update_target_and_fields.zkir +0 -450
- package/node_modules/@midnames/ns/src/test/batch-config.ts +0 -13
- package/node_modules/@midnames/ns/src/test/batch-deploy.ts +0 -914
- package/node_modules/@midnames/ns/src/test/contract.ts +0 -1228
- package/node_modules/@midnames/ns/src/test/derive_seed.ts +0 -102
- package/node_modules/@midnames/ns/src/test/example-deploy.config.ts +0 -76
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000005.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000011.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000014.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000025.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000039.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000049.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000064.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000078.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000092.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000106.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000121.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000135.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000146.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000160.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000174.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000188.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000203.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000217.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000232.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000242.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000256.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000263.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000267.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000276.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000281.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000286.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000291.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000300.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000305.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000314.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000319.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000328.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000333.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000342.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000347.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000356.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000361.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000370.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000375.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000380.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000385.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000392.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000397.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000400.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000403.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000408.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000413.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000422.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000427.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000432.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000437.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000446.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000451.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000456.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000461.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000470.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000475.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000480.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000485.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000494.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000499.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000504.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000509.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000518.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000523.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000528.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000533.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000542.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000547.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000552.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000557.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000566.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000571.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000576.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000581.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000590.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000595.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000600.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000605.ldb +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/000608.log +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/CURRENT +0 -1
- package/node_modules/@midnames/ns/src/test/midnight-level-db/LOCK +0 -0
- package/node_modules/@midnames/ns/src/test/midnight-level-db/LOG +0 -3
- package/node_modules/@midnames/ns/src/test/midnight-level-db/LOG.old +0 -6
- package/node_modules/@midnames/ns/src/test/midnight-level-db/MANIFEST-000607 +0 -0
- package/node_modules/@midnames/ns/src/test/ns-simulator.ts +0 -115
- package/node_modules/@midnames/ns/src/test/ns.test.ts +0 -132
- package/node_modules/@midnames/ns/src/test/profile-fields.ts +0 -148
- package/node_modules/@midnames/ns/src/test/wallet.ts +0 -289
- package/node_modules/@midnames/ns/src/utils.ts +0 -16
- package/node_modules/@midnames/ns/src/witnesses.ts +0 -6
- package/node_modules/@midnames/ns/tsconfig.build.json +0 -5
- package/node_modules/@midnames/ns/tsconfig.json +0 -12
- package/node_modules/@midnames/ns/vitest.config.ts +0 -30
|
@@ -1,1228 +0,0 @@
|
|
|
1
|
-
import { type Wallet } from "@midnight-ntwrk/wallet-api";
|
|
2
|
-
import {
|
|
3
|
-
createCoinInfo,
|
|
4
|
-
encodeContractAddress,
|
|
5
|
-
nativeToken,
|
|
6
|
-
} from "@midnight-ntwrk/ledger";
|
|
7
|
-
import * as whd from "@midnight-ntwrk/wallet-sdk-hd";
|
|
8
|
-
import {
|
|
9
|
-
getZswapNetworkId,
|
|
10
|
-
NetworkId,
|
|
11
|
-
setNetworkId,
|
|
12
|
-
} from "@midnight-ntwrk/midnight-js-network-id";
|
|
13
|
-
import { type Resource } from "@midnight-ntwrk/wallet";
|
|
14
|
-
import {
|
|
15
|
-
findDeployedContract,
|
|
16
|
-
deployContract,
|
|
17
|
-
type ContractProviders,
|
|
18
|
-
} from "@midnight-ntwrk/midnight-js-contracts";
|
|
19
|
-
import {
|
|
20
|
-
MidnightBech32m,
|
|
21
|
-
ShieldedCoinPublicKey,
|
|
22
|
-
} from "@midnight-ntwrk/wallet-sdk-address-format";
|
|
23
|
-
|
|
24
|
-
import { CompiledContract } from "@midnight-ntwrk/compact-js";
|
|
25
|
-
import { Leaf } from "../../dist";
|
|
26
|
-
import { witnesses } from "../../dist/witnesses";
|
|
27
|
-
|
|
28
|
-
// Import MidnamesSDK
|
|
29
|
-
import {
|
|
30
|
-
resolveDomain,
|
|
31
|
-
getDomainProfile,
|
|
32
|
-
getDomainInfo,
|
|
33
|
-
getDomainFields,
|
|
34
|
-
getDomainSettings,
|
|
35
|
-
// Import operations
|
|
36
|
-
insertField as sdkInsertField,
|
|
37
|
-
clearField as sdkClearField,
|
|
38
|
-
clearAllFields as sdkClearAllFields,
|
|
39
|
-
addMultipleFields as sdkAddMultipleFields,
|
|
40
|
-
updateDomainTarget as sdkUpdateDomainTarget,
|
|
41
|
-
updateDomainCost as sdkUpdateDomainCost,
|
|
42
|
-
updateDomainColor as sdkUpdateDomainColor,
|
|
43
|
-
registerDomainFor as sdkRegisterDomainFor,
|
|
44
|
-
buyDomainFor as sdkBuyDomainFor,
|
|
45
|
-
type Result,
|
|
46
|
-
} from "../../../midnames-sdk";
|
|
47
|
-
import { indexerPublicDataProvider } from "@midnight-ntwrk/midnight-js-indexer-public-data-provider";
|
|
48
|
-
|
|
49
|
-
import { type Logger } from "pino";
|
|
50
|
-
import pinoPretty from "pino-pretty";
|
|
51
|
-
import pino from "pino";
|
|
52
|
-
import * as bip39 from "@scure/bip39";
|
|
53
|
-
import { wordlist as english } from "@scure/bip39/wordlists/english";
|
|
54
|
-
|
|
55
|
-
// Import configurations and helper functions from full.ts
|
|
56
|
-
import {
|
|
57
|
-
type Config,
|
|
58
|
-
TestnetConfig,
|
|
59
|
-
StandaloneConfig,
|
|
60
|
-
buildWalletAndWaitForFunds,
|
|
61
|
-
configureProviders,
|
|
62
|
-
} from "./full";
|
|
63
|
-
|
|
64
|
-
// JSON output mode detection
|
|
65
|
-
const isJSONMode = process.env.OUTPUT_MODE === 'json';
|
|
66
|
-
|
|
67
|
-
// Logger setup - suppress output in JSON mode
|
|
68
|
-
const logger: Logger = isJSONMode
|
|
69
|
-
? pino({ level: 'silent' }) // Silent in JSON mode
|
|
70
|
-
: pino(
|
|
71
|
-
{
|
|
72
|
-
level:
|
|
73
|
-
process.env.DEBUG_LEVEL !== undefined &&
|
|
74
|
-
process.env.DEBUG_LEVEL !== null &&
|
|
75
|
-
process.env.DEBUG_LEVEL !== ""
|
|
76
|
-
? process.env.DEBUG_LEVEL
|
|
77
|
-
: "info",
|
|
78
|
-
depthLimit: 20,
|
|
79
|
-
},
|
|
80
|
-
pinoPretty({
|
|
81
|
-
colorize: true,
|
|
82
|
-
sync: true,
|
|
83
|
-
customColors: {
|
|
84
|
-
debug: "green",
|
|
85
|
-
},
|
|
86
|
-
})
|
|
87
|
-
);
|
|
88
|
-
|
|
89
|
-
// Leaf contract instance - need zkConfigPath for CompiledContract
|
|
90
|
-
const contractZkConfigPath = new URL("../../dist/managed/leaf", import.meta.url).pathname;
|
|
91
|
-
const leafContractInstance = CompiledContract.make("leaf-contract", Leaf.Contract).pipe(
|
|
92
|
-
CompiledContract.withWitnesses(witnesses),
|
|
93
|
-
CompiledContract.withCompiledFileAssets(contractZkConfigPath),
|
|
94
|
-
);
|
|
95
|
-
|
|
96
|
-
// Helper function to convert BIP39 mnemonic to seed using HD derivation
|
|
97
|
-
async function mnemonicToSeed(mnemonic: string): Promise<string> {
|
|
98
|
-
if (!bip39.validateMnemonic(mnemonic, english)) {
|
|
99
|
-
throw new Error("Invalid BIP39 mnemonic");
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
// Convert mnemonic to BIP39 seed (512 bits)
|
|
103
|
-
const bip39Seed = await bip39.mnemonicToSeed(mnemonic, ""); // Empty passphrase
|
|
104
|
-
|
|
105
|
-
// Use HD derivation with Midnight's path: m/44'/2400'/0'/3/0 (Zswap role)
|
|
106
|
-
const hdWalletResult = whd.HDWallet.fromSeed(bip39Seed);
|
|
107
|
-
|
|
108
|
-
if (hdWalletResult.type !== 'seedOk') {
|
|
109
|
-
throw new Error(`Failed to create HD wallet: ${hdWalletResult.error}`);
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
// Derive key for Zswap role (role 3, index 0)
|
|
113
|
-
const derivationResult = hdWalletResult.hdWallet
|
|
114
|
-
.selectAccount(0)
|
|
115
|
-
.selectRole(whd.Roles.Zswap) // Role 3
|
|
116
|
-
.deriveKeyAt(0);
|
|
117
|
-
|
|
118
|
-
if (derivationResult.type !== 'keyDerived') {
|
|
119
|
-
throw new Error("Failed to derive key");
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
// Convert to hex string (32 bytes)
|
|
123
|
-
return Buffer.from(derivationResult.key).toString('hex');
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
// Helper function to get seed from environment or parameter
|
|
127
|
-
async function getSeedFromEnv(): Promise<string> {
|
|
128
|
-
const seedEnv = process.env.SEED;
|
|
129
|
-
if (!seedEnv) {
|
|
130
|
-
throw new Error("SEED environment variable is required");
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
// Check if it's a hex seed (64 chars) or BIP39 mnemonic
|
|
134
|
-
if (/^[0-9a-fA-F]{64}$/.test(seedEnv)) {
|
|
135
|
-
// It's already a hex seed
|
|
136
|
-
return seedEnv;
|
|
137
|
-
} else {
|
|
138
|
-
// Assume it's a BIP39 mnemonic
|
|
139
|
-
return await mnemonicToSeed(seedEnv);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
// Helper function to determine if a command is read-only (doesn't need wallet)
|
|
144
|
-
function isReadOnlyCommand(command: string): boolean {
|
|
145
|
-
const readOnlyCommands = ['query', 'resolve', 'info', 'fields', 'settings'];
|
|
146
|
-
return readOnlyCommands.includes(command);
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
// Helper function to parse domain string and validate format
|
|
150
|
-
function parseDomainName(domain: string): { domainName: string; parentDomain: string; isValid: boolean } {
|
|
151
|
-
const parts = domain.split('.');
|
|
152
|
-
if (parts.length < 2 || parts[parts.length - 1] !== 'night') {
|
|
153
|
-
return { domainName: '', parentDomain: '', isValid: false };
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
if (parts.length === 2) {
|
|
157
|
-
// Top-level domain like "domain.night"
|
|
158
|
-
return {
|
|
159
|
-
domainName: parts[0],
|
|
160
|
-
parentDomain: 'night',
|
|
161
|
-
isValid: true
|
|
162
|
-
};
|
|
163
|
-
} else {
|
|
164
|
-
// Subdomain like "sub.domain.night"
|
|
165
|
-
return {
|
|
166
|
-
domainName: parts[0],
|
|
167
|
-
parentDomain: parts.slice(1).join('.'),
|
|
168
|
-
isValid: true
|
|
169
|
-
};
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
// Helper function to get domain's resolver contract address using SDK
|
|
174
|
-
async function getDomainResolverAddress(
|
|
175
|
-
publicDataProvider: any,
|
|
176
|
-
fullDomain: string
|
|
177
|
-
): Promise<string | null> {
|
|
178
|
-
try {
|
|
179
|
-
// Use the SDK's domain profile to get the contract address
|
|
180
|
-
const result = await getDomainProfile(fullDomain, { provider: publicDataProvider });
|
|
181
|
-
if (!result.success) {
|
|
182
|
-
return null;
|
|
183
|
-
}
|
|
184
|
-
return result.data.info?.resolver || null;
|
|
185
|
-
} catch {
|
|
186
|
-
return null;
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
// Helper function to create a valid CoinInfo for payment
|
|
191
|
-
function createPaymentCoin(value: bigint = 1n) {
|
|
192
|
-
const coinInfo = createCoinInfo(nativeToken(), value);
|
|
193
|
-
return {
|
|
194
|
-
nonce: new Uint8Array(Buffer.from(coinInfo.nonce, 'hex')),
|
|
195
|
-
color: encodeContractAddress(nativeToken()),
|
|
196
|
-
value: coinInfo.value,
|
|
197
|
-
};
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
// Helper function to parse address
|
|
201
|
-
function parseAddress(address: string): { bytes: Uint8Array } {
|
|
202
|
-
const bech32Parsed = MidnightBech32m.parse(address);
|
|
203
|
-
const coinPublicKey = ShieldedCoinPublicKey.codec.decode(
|
|
204
|
-
getZswapNetworkId(),
|
|
205
|
-
bech32Parsed
|
|
206
|
-
);
|
|
207
|
-
return { bytes: new Uint8Array(coinPublicKey.data) };
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
// Helper function to parse contract addresses properly
|
|
211
|
-
function parseContractAddress(address: string): { bytes: Uint8Array } {
|
|
212
|
-
let hexString: string;
|
|
213
|
-
|
|
214
|
-
if (address.startsWith("0200")) {
|
|
215
|
-
// SDK format: remove "0200" prefix
|
|
216
|
-
hexString = address.slice(4);
|
|
217
|
-
} else if (address.startsWith("0x")) {
|
|
218
|
-
// Hex format: remove "0x" prefix
|
|
219
|
-
hexString = address.slice(2);
|
|
220
|
-
} else {
|
|
221
|
-
// Assume raw hex
|
|
222
|
-
hexString = address;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
const bytes = new Uint8Array(Buffer.from(hexString, "hex"));
|
|
226
|
-
// Ensure exactly 32 bytes
|
|
227
|
-
return { bytes: bytes.length === 32 ? bytes : bytes.subarray(-32) };
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
// Helper function to parse target (wallet or contract address)
|
|
231
|
-
function parseTarget(target: string): { tag: "Left"; value: { bytes: Uint8Array } } | { tag: "Right"; value: string } {
|
|
232
|
-
if (target.startsWith("0x") || target.startsWith("02")) {
|
|
233
|
-
// Contract address
|
|
234
|
-
return {
|
|
235
|
-
tag: "Right",
|
|
236
|
-
value: target
|
|
237
|
-
};
|
|
238
|
-
} else {
|
|
239
|
-
// Wallet address
|
|
240
|
-
return {
|
|
241
|
-
tag: "Left",
|
|
242
|
-
value: parseAddress(target)
|
|
243
|
-
};
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
// Helper to handle SDK Results
|
|
248
|
-
function handleResult<T>(result: Result<T>, context: string): T {
|
|
249
|
-
if (!result.success) {
|
|
250
|
-
throw new Error(`${context}: ${result.error.message}`);
|
|
251
|
-
}
|
|
252
|
-
return result.data;
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
// JSON output helpers
|
|
256
|
-
interface JSONResponse {
|
|
257
|
-
success: boolean;
|
|
258
|
-
command: string;
|
|
259
|
-
domain?: string;
|
|
260
|
-
data?: any;
|
|
261
|
-
error?: string;
|
|
262
|
-
metadata: {
|
|
263
|
-
network?: string;
|
|
264
|
-
timestamp: string;
|
|
265
|
-
};
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
function createJSONResponse(
|
|
269
|
-
success: boolean,
|
|
270
|
-
command: string,
|
|
271
|
-
domain?: string,
|
|
272
|
-
data?: any,
|
|
273
|
-
error?: string,
|
|
274
|
-
network?: string
|
|
275
|
-
): JSONResponse {
|
|
276
|
-
return {
|
|
277
|
-
success,
|
|
278
|
-
command,
|
|
279
|
-
domain,
|
|
280
|
-
data: data || null,
|
|
281
|
-
error: error || null,
|
|
282
|
-
metadata: {
|
|
283
|
-
network,
|
|
284
|
-
timestamp: new Date().toISOString()
|
|
285
|
-
}
|
|
286
|
-
};
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
function outputJSON(response: JSONResponse) {
|
|
290
|
-
console.log(JSON.stringify(response, null, 2));
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
function logOrCollect(message: string, data?: any) {
|
|
294
|
-
if (!isJSONMode) {
|
|
295
|
-
if (data) {
|
|
296
|
-
logger.info(message, data);
|
|
297
|
-
} else {
|
|
298
|
-
logger.info(message);
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
// In JSON mode, we collect data and output at the end
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
// Helper to join a domain's contract
|
|
305
|
-
async function joinDomainContract(
|
|
306
|
-
providers: ContractProviders<typeof leafContractInstance>,
|
|
307
|
-
domainContractAddress: string
|
|
308
|
-
) {
|
|
309
|
-
return await findDeployedContract(providers, {
|
|
310
|
-
contractAddress: domainContractAddress,
|
|
311
|
-
contract: leafContractInstance,
|
|
312
|
-
privateStateId: "namespacePrivateState",
|
|
313
|
-
initialPrivateState: { phantom: false },
|
|
314
|
-
});
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
// =========================================
|
|
318
|
-
// QUERY COMMANDS
|
|
319
|
-
// =========================================
|
|
320
|
-
|
|
321
|
-
async function queryDomain(
|
|
322
|
-
publicDataProvider: any,
|
|
323
|
-
fullDomain: string,
|
|
324
|
-
networkType?: string
|
|
325
|
-
) {
|
|
326
|
-
logOrCollect(`Querying domain: ${fullDomain}`);
|
|
327
|
-
|
|
328
|
-
const result = await getDomainProfile(fullDomain, { provider: publicDataProvider });
|
|
329
|
-
const profile = handleResult(result, "Get domain profile");
|
|
330
|
-
|
|
331
|
-
if (isJSONMode) {
|
|
332
|
-
// Format data for JSON output
|
|
333
|
-
const jsonData = {
|
|
334
|
-
domain: profile.fullDomain,
|
|
335
|
-
resolvedTarget: profile.resolvedTarget || null,
|
|
336
|
-
info: profile.info || null,
|
|
337
|
-
settings: profile.settings ? {
|
|
338
|
-
coinColor: `0x${Buffer.from(profile.settings.coinColor).toString('hex')}`,
|
|
339
|
-
costs: {
|
|
340
|
-
short: profile.settings.costs.short.toString(),
|
|
341
|
-
medium: profile.settings.costs.medium.toString(),
|
|
342
|
-
long: profile.settings.costs.long.toString(),
|
|
343
|
-
}
|
|
344
|
-
} : null,
|
|
345
|
-
fields: profile.fields.length > 0 ? Object.fromEntries(profile.fields) : {}
|
|
346
|
-
};
|
|
347
|
-
|
|
348
|
-
return createJSONResponse(true, "query", fullDomain, jsonData, undefined, networkType);
|
|
349
|
-
} else {
|
|
350
|
-
// Original logger output
|
|
351
|
-
logger.info(`=== Domain Profile: ${profile.fullDomain} ===`);
|
|
352
|
-
logger.info(`Resolved Target: ${profile.resolvedTarget || 'N/A'}`);
|
|
353
|
-
|
|
354
|
-
if (profile.info) {
|
|
355
|
-
logger.info(`Owner: ${profile.info.owner}`);
|
|
356
|
-
logger.info(`Resolver: ${profile.info.resolver}`);
|
|
357
|
-
if (profile.info.contractAddress) {
|
|
358
|
-
logger.info(`Contract Address: ${profile.info.contractAddress}`);
|
|
359
|
-
}
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
if (profile.settings) {
|
|
363
|
-
logger.info(`Coin Color: 0x${Buffer.from(profile.settings.coinColor).toString('hex')}`);
|
|
364
|
-
logger.info(`Domain Costs: short=${profile.settings.costs.short}, medium=${profile.settings.costs.medium}, long=${profile.settings.costs.long}`);
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
logger.info(`\n=== Domain Fields ===`);
|
|
368
|
-
if (profile.fields.length > 0) {
|
|
369
|
-
for (const [key, value] of profile.fields) {
|
|
370
|
-
logger.info(`${key}: ${value}`);
|
|
371
|
-
}
|
|
372
|
-
} else {
|
|
373
|
-
logger.info("No fields set");
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
return profile;
|
|
377
|
-
}
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
async function resolveDomainCommand(
|
|
381
|
-
publicDataProvider: any,
|
|
382
|
-
fullDomain: string,
|
|
383
|
-
networkType?: string
|
|
384
|
-
) {
|
|
385
|
-
logOrCollect(`Resolving domain: ${fullDomain}`);
|
|
386
|
-
|
|
387
|
-
const result = await resolveDomain(fullDomain, { provider: publicDataProvider });
|
|
388
|
-
const target = handleResult(result, "Resolve domain");
|
|
389
|
-
|
|
390
|
-
if (isJSONMode) {
|
|
391
|
-
const jsonData = {
|
|
392
|
-
domain: fullDomain,
|
|
393
|
-
target: target
|
|
394
|
-
};
|
|
395
|
-
return createJSONResponse(true, "resolve", fullDomain, jsonData, undefined, networkType);
|
|
396
|
-
} else {
|
|
397
|
-
logger.info(`${fullDomain} → ${target}`);
|
|
398
|
-
return target;
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
|
|
402
|
-
async function getDomainInfo(
|
|
403
|
-
publicDataProvider: any,
|
|
404
|
-
fullDomain: string,
|
|
405
|
-
networkType?: string
|
|
406
|
-
) {
|
|
407
|
-
logOrCollect(`Getting domain info: ${fullDomain}`);
|
|
408
|
-
|
|
409
|
-
const result = await getDomainInfo(fullDomain, { provider: publicDataProvider });
|
|
410
|
-
const info = handleResult(result, "Get domain info");
|
|
411
|
-
|
|
412
|
-
if (isJSONMode) {
|
|
413
|
-
return createJSONResponse(true, "info", fullDomain, info, undefined, networkType);
|
|
414
|
-
} else {
|
|
415
|
-
logger.info(`Domain: ${fullDomain}`);
|
|
416
|
-
logger.info(`Owner: ${info.owner}`);
|
|
417
|
-
logger.info(`Resolver: ${info.resolver}`);
|
|
418
|
-
if (info.contractAddress) {
|
|
419
|
-
logger.info(`Contract Address: ${info.contractAddress}`);
|
|
420
|
-
}
|
|
421
|
-
return info;
|
|
422
|
-
}
|
|
423
|
-
}
|
|
424
|
-
|
|
425
|
-
async function getDomainFieldsCommand(
|
|
426
|
-
publicDataProvider: any,
|
|
427
|
-
fullDomain: string,
|
|
428
|
-
networkType?: string
|
|
429
|
-
) {
|
|
430
|
-
logOrCollect(`Getting domain fields: ${fullDomain}`);
|
|
431
|
-
|
|
432
|
-
const result = await getDomainFields(fullDomain, { provider: publicDataProvider });
|
|
433
|
-
const fields = handleResult(result, "Get domain fields");
|
|
434
|
-
|
|
435
|
-
if (isJSONMode) {
|
|
436
|
-
const jsonData = {
|
|
437
|
-
domain: fullDomain,
|
|
438
|
-
fields: fields.length > 0 ? Object.fromEntries(fields) : {}
|
|
439
|
-
};
|
|
440
|
-
return createJSONResponse(true, "fields", fullDomain, jsonData, undefined, networkType);
|
|
441
|
-
} else {
|
|
442
|
-
logger.info(`=== Fields for ${fullDomain} ===`);
|
|
443
|
-
if (fields.length > 0) {
|
|
444
|
-
for (const [key, value] of fields) {
|
|
445
|
-
logger.info(`${key}: ${value}`);
|
|
446
|
-
}
|
|
447
|
-
} else {
|
|
448
|
-
logger.info("No fields set");
|
|
449
|
-
}
|
|
450
|
-
return fields;
|
|
451
|
-
}
|
|
452
|
-
}
|
|
453
|
-
|
|
454
|
-
async function getDomainSettingsCommand(
|
|
455
|
-
publicDataProvider: any,
|
|
456
|
-
fullDomain: string,
|
|
457
|
-
networkType?: string
|
|
458
|
-
) {
|
|
459
|
-
logOrCollect(`Getting domain settings: ${fullDomain}`);
|
|
460
|
-
|
|
461
|
-
const result = await getDomainSettings(fullDomain, { provider: publicDataProvider });
|
|
462
|
-
const settings = handleResult(result, "Get domain settings");
|
|
463
|
-
|
|
464
|
-
if (isJSONMode) {
|
|
465
|
-
const jsonData = {
|
|
466
|
-
domain: fullDomain,
|
|
467
|
-
coinColor: `0x${Buffer.from(settings.coinColor).toString('hex')}`,
|
|
468
|
-
costs: {
|
|
469
|
-
short: settings.costs.short.toString(),
|
|
470
|
-
medium: settings.costs.medium.toString(),
|
|
471
|
-
long: settings.costs.long.toString(),
|
|
472
|
-
}
|
|
473
|
-
};
|
|
474
|
-
return createJSONResponse(true, "settings", fullDomain, jsonData, undefined, networkType);
|
|
475
|
-
} else {
|
|
476
|
-
logger.info(`=== Settings for ${fullDomain} ===`);
|
|
477
|
-
logger.info(`Coin Color: 0x${Buffer.from(settings.coinColor).toString('hex')}`);
|
|
478
|
-
logger.info(`Domain Costs: short=${settings.costs.short}, medium=${settings.costs.medium}, long=${settings.costs.long}`);
|
|
479
|
-
return settings;
|
|
480
|
-
}
|
|
481
|
-
}
|
|
482
|
-
|
|
483
|
-
// =========================================
|
|
484
|
-
// FIELD COMMANDS
|
|
485
|
-
// =========================================
|
|
486
|
-
|
|
487
|
-
async function insertField(
|
|
488
|
-
providers: ContractProviders<typeof leafContractInstance>,
|
|
489
|
-
fullDomain: string,
|
|
490
|
-
key: string,
|
|
491
|
-
value: string
|
|
492
|
-
) {
|
|
493
|
-
logger.info(`Setting field ${key} = ${value} for domain: ${fullDomain}`);
|
|
494
|
-
|
|
495
|
-
const result = await sdkInsertField(fullDomain, key, value, providers);
|
|
496
|
-
if (!result.success) {
|
|
497
|
-
throw new Error(result.error.message);
|
|
498
|
-
}
|
|
499
|
-
|
|
500
|
-
logger.info(`Field updated. Tx: ${result.data.transactionId}`);
|
|
501
|
-
return { public: { txId: result.data.transactionId } };
|
|
502
|
-
}
|
|
503
|
-
|
|
504
|
-
async function clearField(
|
|
505
|
-
providers: ContractProviders<typeof leafContractInstance>,
|
|
506
|
-
fullDomain: string,
|
|
507
|
-
key: string,
|
|
508
|
-
networkType?: string
|
|
509
|
-
) {
|
|
510
|
-
logOrCollect(`Clearing field ${key} for domain: ${fullDomain}`);
|
|
511
|
-
|
|
512
|
-
const result = await sdkClearField(fullDomain, key, providers);
|
|
513
|
-
if (!result.success) {
|
|
514
|
-
throw new Error(result.error.message);
|
|
515
|
-
}
|
|
516
|
-
|
|
517
|
-
if (isJSONMode) {
|
|
518
|
-
const jsonData = {
|
|
519
|
-
domain: fullDomain,
|
|
520
|
-
clearedField: key,
|
|
521
|
-
transactionId: result.data.transactionId
|
|
522
|
-
};
|
|
523
|
-
return createJSONResponse(true, "clear-field", fullDomain, jsonData, undefined, networkType);
|
|
524
|
-
} else {
|
|
525
|
-
logger.info(`Field cleared. Tx: ${result.data.transactionId}`);
|
|
526
|
-
return { public: { txId: result.data.transactionId } };
|
|
527
|
-
}
|
|
528
|
-
}
|
|
529
|
-
|
|
530
|
-
async function clearAllFields(
|
|
531
|
-
providers: ContractProviders<typeof leafContractInstance>,
|
|
532
|
-
fullDomain: string,
|
|
533
|
-
networkType?: string
|
|
534
|
-
) {
|
|
535
|
-
logOrCollect(`Clearing all fields for domain: ${fullDomain}`);
|
|
536
|
-
|
|
537
|
-
const result = await sdkClearAllFields(fullDomain, providers);
|
|
538
|
-
if (!result.success) {
|
|
539
|
-
throw new Error(result.error.message);
|
|
540
|
-
}
|
|
541
|
-
|
|
542
|
-
if (isJSONMode) {
|
|
543
|
-
const jsonData = {
|
|
544
|
-
domain: fullDomain,
|
|
545
|
-
operation: "clear_all_fields",
|
|
546
|
-
transactionId: result.data.transactionId
|
|
547
|
-
};
|
|
548
|
-
return createJSONResponse(true, "clear-all-fields", fullDomain, jsonData, undefined, networkType);
|
|
549
|
-
} else {
|
|
550
|
-
logger.info(`All fields cleared. Tx: ${result.data.transactionId}`);
|
|
551
|
-
return { public: { txId: result.data.transactionId } };
|
|
552
|
-
}
|
|
553
|
-
}
|
|
554
|
-
|
|
555
|
-
async function addFields(
|
|
556
|
-
providers: ContractProviders<typeof leafContractInstance>,
|
|
557
|
-
fullDomain: string,
|
|
558
|
-
fields: Array<[string, string]>,
|
|
559
|
-
networkType?: string
|
|
560
|
-
) {
|
|
561
|
-
logOrCollect(`Adding ${fields.length} fields to domain: ${fullDomain}`);
|
|
562
|
-
|
|
563
|
-
if (fields.length > 10) {
|
|
564
|
-
throw new Error("Maximum of 10 fields can be added at once");
|
|
565
|
-
}
|
|
566
|
-
|
|
567
|
-
const result = await sdkAddMultipleFields(fullDomain, fields, providers);
|
|
568
|
-
if (!result.success) {
|
|
569
|
-
throw new Error(result.error.message);
|
|
570
|
-
}
|
|
571
|
-
|
|
572
|
-
if (isJSONMode) {
|
|
573
|
-
const jsonData = {
|
|
574
|
-
domain: fullDomain,
|
|
575
|
-
fieldsAdded: Object.fromEntries(fields),
|
|
576
|
-
transactionId: result.data.transactionId
|
|
577
|
-
};
|
|
578
|
-
return createJSONResponse(true, "add-fields", fullDomain, jsonData, undefined, networkType);
|
|
579
|
-
} else {
|
|
580
|
-
logger.info(`Fields added. Tx: ${result.data.transactionId}`);
|
|
581
|
-
return { public: { txId: result.data.transactionId } };
|
|
582
|
-
}
|
|
583
|
-
}
|
|
584
|
-
|
|
585
|
-
// =========================================
|
|
586
|
-
// DOMAIN OPERATIONS
|
|
587
|
-
// =========================================
|
|
588
|
-
|
|
589
|
-
async function updateTarget(
|
|
590
|
-
providers: ContractProviders<typeof leafContractInstance>,
|
|
591
|
-
fullDomain: string,
|
|
592
|
-
target: string,
|
|
593
|
-
networkType?: string
|
|
594
|
-
) {
|
|
595
|
-
logOrCollect(`Updating target for domain ${fullDomain} to: ${target}`);
|
|
596
|
-
|
|
597
|
-
const result = await sdkUpdateDomainTarget(fullDomain, target, providers);
|
|
598
|
-
if (!result.success) {
|
|
599
|
-
throw new Error(result.error.message);
|
|
600
|
-
}
|
|
601
|
-
|
|
602
|
-
const targetValue = parseTarget(target);
|
|
603
|
-
|
|
604
|
-
if (isJSONMode) {
|
|
605
|
-
const jsonData = {
|
|
606
|
-
domain: fullDomain,
|
|
607
|
-
newTarget: target,
|
|
608
|
-
targetType: targetValue.tag === "Left" ? "wallet" : "contract",
|
|
609
|
-
transactionId: result.data.transactionId
|
|
610
|
-
};
|
|
611
|
-
return createJSONResponse(true, "update-target", fullDomain, jsonData, undefined, networkType);
|
|
612
|
-
} else {
|
|
613
|
-
logger.info(`Target updated. Tx: ${result.data.transactionId}`);
|
|
614
|
-
return { public: { txId: result.data.transactionId } };
|
|
615
|
-
}
|
|
616
|
-
}
|
|
617
|
-
|
|
618
|
-
async function updateCost(
|
|
619
|
-
providers: ContractProviders<typeof leafContractInstance>,
|
|
620
|
-
fullDomain: string,
|
|
621
|
-
cost: string,
|
|
622
|
-
networkType?: string
|
|
623
|
-
) {
|
|
624
|
-
logOrCollect(`Updating cost for domain ${fullDomain} to: ${cost}`);
|
|
625
|
-
|
|
626
|
-
const result = await sdkUpdateDomainCost(fullDomain, BigInt(cost), providers);
|
|
627
|
-
if (!result.success) {
|
|
628
|
-
throw new Error(result.error.message);
|
|
629
|
-
}
|
|
630
|
-
|
|
631
|
-
if (isJSONMode) {
|
|
632
|
-
const jsonData = {
|
|
633
|
-
domain: fullDomain,
|
|
634
|
-
newCost: cost,
|
|
635
|
-
transactionId: result.data.transactionId
|
|
636
|
-
};
|
|
637
|
-
return createJSONResponse(true, "update-cost", fullDomain, jsonData, undefined, networkType);
|
|
638
|
-
} else {
|
|
639
|
-
logger.info(`Cost updated. Tx: ${result.data.transactionId}`);
|
|
640
|
-
return { public: { txId: result.data.transactionId } };
|
|
641
|
-
}
|
|
642
|
-
}
|
|
643
|
-
|
|
644
|
-
async function updateColor(
|
|
645
|
-
providers: ContractProviders<typeof leafContractInstance>,
|
|
646
|
-
fullDomain: string,
|
|
647
|
-
color: string,
|
|
648
|
-
networkType?: string
|
|
649
|
-
) {
|
|
650
|
-
logOrCollect(`Updating color for domain ${fullDomain} to: ${color}`);
|
|
651
|
-
|
|
652
|
-
const colorBytes = new Uint8Array(Buffer.from(color.replace("0x", ""), "hex"));
|
|
653
|
-
const result = await sdkUpdateDomainColor(fullDomain, colorBytes, providers);
|
|
654
|
-
if (!result.success) {
|
|
655
|
-
throw new Error(result.error.message);
|
|
656
|
-
}
|
|
657
|
-
|
|
658
|
-
if (isJSONMode) {
|
|
659
|
-
const jsonData = {
|
|
660
|
-
domain: fullDomain,
|
|
661
|
-
newColor: color.startsWith("0x") ? color : `0x${color}`,
|
|
662
|
-
transactionId: result.data.transactionId
|
|
663
|
-
};
|
|
664
|
-
return createJSONResponse(true, "update-color", fullDomain, jsonData, undefined, networkType);
|
|
665
|
-
} else {
|
|
666
|
-
logger.info(`Color updated. Tx: ${result.data.transactionId}`);
|
|
667
|
-
return { public: { txId: result.data.transactionId } };
|
|
668
|
-
}
|
|
669
|
-
}
|
|
670
|
-
|
|
671
|
-
// =========================================
|
|
672
|
-
// SUBDOMAIN OPERATIONS
|
|
673
|
-
// =========================================
|
|
674
|
-
|
|
675
|
-
async function registerSubdomain(
|
|
676
|
-
providers: ContractProviders<typeof leafContractInstance>,
|
|
677
|
-
parentDomain: string,
|
|
678
|
-
subdomainName: string,
|
|
679
|
-
owner?: string,
|
|
680
|
-
networkType?: string
|
|
681
|
-
) {
|
|
682
|
-
logOrCollect(`Registering subdomain ${subdomainName} under ${parentDomain}`);
|
|
683
|
-
|
|
684
|
-
const parentContractAddress = await getDomainResolverAddress(providers.publicDataProvider, parentDomain);
|
|
685
|
-
if (!parentContractAddress) {
|
|
686
|
-
throw new Error("Could not find parent domain resolver contract");
|
|
687
|
-
}
|
|
688
|
-
|
|
689
|
-
// Get parent domain settings for the new contract
|
|
690
|
-
const parentSettingsResult = await getDomainSettings(parentDomain, { provider: providers.publicDataProvider });
|
|
691
|
-
const parentSettings = handleResult(parentSettingsResult, "Get parent domain settings");
|
|
692
|
-
|
|
693
|
-
// Deploy new leaf contract for the subdomain
|
|
694
|
-
const targetAddress = owner ? parseAddress(owner) : parseAddress(providers.walletProvider.coinPublicKey);
|
|
695
|
-
|
|
696
|
-
const targetEither = {
|
|
697
|
-
is_left: true,
|
|
698
|
-
left: targetAddress,
|
|
699
|
-
right: { bytes: new Uint8Array(32) },
|
|
700
|
-
};
|
|
701
|
-
|
|
702
|
-
const deployedContract = await deployContract(providers, {
|
|
703
|
-
compiledContract: leafContractInstance,
|
|
704
|
-
privateStateId: "namespacePrivateState",
|
|
705
|
-
initialPrivateState: { phantom: false },
|
|
706
|
-
args: [
|
|
707
|
-
// Parent domain
|
|
708
|
-
{ is_some: true, value: parentDomain },
|
|
709
|
-
// Parent resolver address
|
|
710
|
-
parseContractAddress(parentContractAddress),
|
|
711
|
-
// Domain target
|
|
712
|
-
targetEither,
|
|
713
|
-
// Domain name
|
|
714
|
-
{ is_some: true, value: subdomainName },
|
|
715
|
-
// Coin color (from parent)
|
|
716
|
-
parentSettings.coinColor,
|
|
717
|
-
// Per-tier costs (from parent)
|
|
718
|
-
parentSettings.costs.short,
|
|
719
|
-
parentSettings.costs.medium,
|
|
720
|
-
parentSettings.costs.long,
|
|
721
|
-
// Initial fields (empty)
|
|
722
|
-
Array(10).fill({ is_some: false, value: ["", ""] }),
|
|
723
|
-
],
|
|
724
|
-
});
|
|
725
|
-
|
|
726
|
-
const newContractAddress = deployedContract.deployTxData.public.contractAddress;
|
|
727
|
-
|
|
728
|
-
// Register the subdomain in the parent contract
|
|
729
|
-
const ownerAddress = owner || providers.walletProvider.coinPublicKey;
|
|
730
|
-
const registerResult = await sdkRegisterDomainFor(
|
|
731
|
-
parentDomain,
|
|
732
|
-
ownerAddress,
|
|
733
|
-
subdomainName,
|
|
734
|
-
newContractAddress,
|
|
735
|
-
providers
|
|
736
|
-
);
|
|
737
|
-
|
|
738
|
-
if (!registerResult.success) {
|
|
739
|
-
throw new Error(registerResult.error.message);
|
|
740
|
-
}
|
|
741
|
-
|
|
742
|
-
const returnData = {
|
|
743
|
-
deployTx: deployedContract.deployTxData.public.txId,
|
|
744
|
-
registerTx: registerResult.data.transactionId,
|
|
745
|
-
contractAddress: newContractAddress
|
|
746
|
-
};
|
|
747
|
-
|
|
748
|
-
if (isJSONMode) {
|
|
749
|
-
const jsonData = {
|
|
750
|
-
parentDomain: parentDomain,
|
|
751
|
-
subdomainName: subdomainName,
|
|
752
|
-
fullDomain: `${subdomainName}.${parentDomain}`,
|
|
753
|
-
owner: owner || providers.walletProvider.coinPublicKey,
|
|
754
|
-
parentContractAddress: parentContractAddress,
|
|
755
|
-
newContractAddress: newContractAddress,
|
|
756
|
-
deployTransactionId: deployedContract.deployTxData.public.txId,
|
|
757
|
-
registerTransactionId: registerResult.data.transactionId
|
|
758
|
-
};
|
|
759
|
-
return createJSONResponse(true, "register", `${subdomainName}.${parentDomain}`, jsonData, undefined, networkType);
|
|
760
|
-
} else {
|
|
761
|
-
logger.info(`Subdomain registered. Deploy Tx: ${deployedContract.deployTxData.public.txId}, Register Tx: ${registerResult.data.transactionId}`);
|
|
762
|
-
logger.info(`New contract address: ${newContractAddress}`);
|
|
763
|
-
return returnData;
|
|
764
|
-
}
|
|
765
|
-
}
|
|
766
|
-
|
|
767
|
-
async function buySubdomain(
|
|
768
|
-
providers: ContractProviders<typeof leafContractInstance>,
|
|
769
|
-
parentDomain: string,
|
|
770
|
-
subdomainName: string,
|
|
771
|
-
owner?: string,
|
|
772
|
-
paymentAmount?: string,
|
|
773
|
-
networkType?: string
|
|
774
|
-
) {
|
|
775
|
-
logOrCollect(`Buying subdomain ${subdomainName} under ${parentDomain}`);
|
|
776
|
-
|
|
777
|
-
const parentContractAddress = await getDomainResolverAddress(providers.publicDataProvider, parentDomain);
|
|
778
|
-
if (!parentContractAddress) {
|
|
779
|
-
throw new Error("Could not find parent domain resolver contract");
|
|
780
|
-
}
|
|
781
|
-
|
|
782
|
-
// Get parent domain settings
|
|
783
|
-
const parentSettingsResult = await getDomainSettings(parentDomain, { provider: providers.publicDataProvider });
|
|
784
|
-
const parentSettings = handleResult(parentSettingsResult, "Get parent domain settings");
|
|
785
|
-
|
|
786
|
-
// Deploy new leaf contract for the subdomain
|
|
787
|
-
const targetAddress = owner ? parseAddress(owner) : parseAddress(providers.walletProvider.coinPublicKey);
|
|
788
|
-
|
|
789
|
-
const targetEither = {
|
|
790
|
-
is_left: true,
|
|
791
|
-
left: targetAddress,
|
|
792
|
-
right: { bytes: new Uint8Array(32) },
|
|
793
|
-
};
|
|
794
|
-
|
|
795
|
-
const deployedContract = await deployContract(providers, {
|
|
796
|
-
compiledContract: leafContractInstance,
|
|
797
|
-
privateStateId: "namespacePrivateState",
|
|
798
|
-
initialPrivateState: { phantom: false },
|
|
799
|
-
args: [
|
|
800
|
-
// Parent domain
|
|
801
|
-
{ is_some: true, value: parentDomain },
|
|
802
|
-
// Parent resolver address
|
|
803
|
-
parseContractAddress(parentContractAddress),
|
|
804
|
-
// Domain target
|
|
805
|
-
targetEither,
|
|
806
|
-
// Domain name
|
|
807
|
-
{ is_some: true, value: subdomainName },
|
|
808
|
-
// Coin color (from parent)
|
|
809
|
-
parentSettings.coinColor,
|
|
810
|
-
// Per-tier costs (from parent)
|
|
811
|
-
parentSettings.costs.short,
|
|
812
|
-
parentSettings.costs.medium,
|
|
813
|
-
parentSettings.costs.long,
|
|
814
|
-
// Initial fields (empty)
|
|
815
|
-
Array(10).fill({ is_some: false, value: ["", ""] }),
|
|
816
|
-
],
|
|
817
|
-
});
|
|
818
|
-
|
|
819
|
-
const newContractAddress = deployedContract.deployTxData.public.contractAddress;
|
|
820
|
-
|
|
821
|
-
// Buy the subdomain in the parent contract
|
|
822
|
-
const ownerAddress = owner || providers.walletProvider.coinPublicKey;
|
|
823
|
-
const payment = paymentAmount ? BigInt(paymentAmount) : parentSettings.costs.short;
|
|
824
|
-
|
|
825
|
-
const buyResult = await sdkBuyDomainFor(
|
|
826
|
-
parentDomain,
|
|
827
|
-
ownerAddress,
|
|
828
|
-
subdomainName,
|
|
829
|
-
newContractAddress,
|
|
830
|
-
payment,
|
|
831
|
-
providers
|
|
832
|
-
);
|
|
833
|
-
|
|
834
|
-
if (!buyResult.success) {
|
|
835
|
-
throw new Error(buyResult.error.message);
|
|
836
|
-
}
|
|
837
|
-
|
|
838
|
-
const returnData = {
|
|
839
|
-
deployTx: deployedContract.deployTxData.public.txId,
|
|
840
|
-
buyTx: buyResult.data.transactionId,
|
|
841
|
-
contractAddress: newContractAddress
|
|
842
|
-
};
|
|
843
|
-
|
|
844
|
-
if (isJSONMode) {
|
|
845
|
-
const jsonData = {
|
|
846
|
-
parentDomain: parentDomain,
|
|
847
|
-
subdomainName: subdomainName,
|
|
848
|
-
fullDomain: `${subdomainName}.${parentDomain}`,
|
|
849
|
-
owner: owner || providers.walletProvider.coinPublicKey,
|
|
850
|
-
parentContractAddress: parentContractAddress,
|
|
851
|
-
newContractAddress: newContractAddress,
|
|
852
|
-
paymentAmount: payment.toString(),
|
|
853
|
-
deployTransactionId: deployedContract.deployTxData.public.txId,
|
|
854
|
-
buyTransactionId: buyResult.data.transactionId
|
|
855
|
-
};
|
|
856
|
-
return createJSONResponse(true, "buy", `${subdomainName}.${parentDomain}`, jsonData, undefined, networkType);
|
|
857
|
-
} else {
|
|
858
|
-
logger.info(`Subdomain purchased. Deploy Tx: ${deployedContract.deployTxData.public.txId}, Buy Tx: ${buyResult.data.transactionId}`);
|
|
859
|
-
logger.info(`New contract address: ${newContractAddress}`);
|
|
860
|
-
return returnData;
|
|
861
|
-
}
|
|
862
|
-
}
|
|
863
|
-
|
|
864
|
-
// Usage function
|
|
865
|
-
function showUsage() {
|
|
866
|
-
console.log(`
|
|
867
|
-
Midnight Name Service - Domain-Centric CLI Tool
|
|
868
|
-
|
|
869
|
-
Usage:
|
|
870
|
-
bun run contract.ts <network> <domain> <command> [args...]
|
|
871
|
-
|
|
872
|
-
Networks:
|
|
873
|
-
standalone Use local standalone network
|
|
874
|
-
testnet Use remote testnet
|
|
875
|
-
|
|
876
|
-
Query Commands:
|
|
877
|
-
query Query domain profile (all info)
|
|
878
|
-
resolve Resolve domain to target address
|
|
879
|
-
info Get domain ownership info
|
|
880
|
-
fields List all domain fields
|
|
881
|
-
settings Get domain cost and color settings
|
|
882
|
-
|
|
883
|
-
Field Management:
|
|
884
|
-
insert-field <key> <value> Add/update a field
|
|
885
|
-
clear-field <key> Remove a field
|
|
886
|
-
clear-all-fields Clear all fields
|
|
887
|
-
add-fields <key1:value1,key2:value2> Add multiple fields (max 10)
|
|
888
|
-
|
|
889
|
-
Domain Operations:
|
|
890
|
-
update-target <address> Update what the domain points to
|
|
891
|
-
update-cost <amount> Update subdomain cost
|
|
892
|
-
update-color <hex> Update accepted token type
|
|
893
|
-
|
|
894
|
-
Subdomain Operations:
|
|
895
|
-
register <subdomain> [owner] Register new subdomain (free for owner)
|
|
896
|
-
buy <subdomain> [owner] [payment] Buy new subdomain (requires payment)
|
|
897
|
-
|
|
898
|
-
Special Cases:
|
|
899
|
-
# Buy domain with implicit subdomain name
|
|
900
|
-
buy Buy domain using domain name as subdomain
|
|
901
|
-
register Register domain using domain name as subdomain
|
|
902
|
-
|
|
903
|
-
Environment Variables:
|
|
904
|
-
SEED BIP39 mnemonic or 64-character hex seed (required)
|
|
905
|
-
|
|
906
|
-
Examples:
|
|
907
|
-
export SEED="word1 word2 ... word12"
|
|
908
|
-
|
|
909
|
-
# Query operations
|
|
910
|
-
bun run contract.ts testnet some.domain.night query
|
|
911
|
-
bun run contract.ts testnet some.domain.night resolve
|
|
912
|
-
bun run contract.ts testnet some.domain.night fields
|
|
913
|
-
|
|
914
|
-
# Field management
|
|
915
|
-
bun run contract.ts testnet some.domain.night insert-field avatar https://picsum.photos/400/550
|
|
916
|
-
bun run contract.ts testnet some.domain.night clear-all-fields
|
|
917
|
-
bun run contract.ts testnet some.domain.night add-fields "name:John,bio:Web3 Developer"
|
|
918
|
-
|
|
919
|
-
# Domain operations
|
|
920
|
-
bun run contract.ts testnet some.domain.night update-target mn_...
|
|
921
|
-
bun run contract.ts testnet some.domain.night update-cost 1000
|
|
922
|
-
|
|
923
|
-
# Subdomain operations
|
|
924
|
-
bun run contract.ts testnet domain.night register sub
|
|
925
|
-
bun run contract.ts testnet domain.night buy newsub
|
|
926
|
-
|
|
927
|
-
# Auto-create domain
|
|
928
|
-
bun run contract.ts testnet another.domain.night buy
|
|
929
|
-
bun run contract.ts testnet another.domain.night register
|
|
930
|
-
`);
|
|
931
|
-
}
|
|
932
|
-
|
|
933
|
-
// Main function
|
|
934
|
-
async function main() {
|
|
935
|
-
const args = process.argv.slice(2);
|
|
936
|
-
|
|
937
|
-
try {
|
|
938
|
-
if (args.length < 3) {
|
|
939
|
-
if (isJSONMode) {
|
|
940
|
-
outputJSON(createJSONResponse(false, "unknown", undefined, undefined, "Insufficient arguments. Expected: <network> <domain> <command> [args...]"));
|
|
941
|
-
process.exit(1);
|
|
942
|
-
}
|
|
943
|
-
showUsage();
|
|
944
|
-
process.exit(1);
|
|
945
|
-
}
|
|
946
|
-
|
|
947
|
-
const networkType = args[0];
|
|
948
|
-
const fullDomain = args[1];
|
|
949
|
-
const command = args[2];
|
|
950
|
-
const commandArgs = args.slice(3);
|
|
951
|
-
|
|
952
|
-
if (!["testnet", "standalone"].includes(networkType)) {
|
|
953
|
-
if (isJSONMode) {
|
|
954
|
-
outputJSON(createJSONResponse(false, command, fullDomain, undefined, "Invalid network type. Use 'testnet' or 'standalone'", networkType));
|
|
955
|
-
process.exit(1);
|
|
956
|
-
}
|
|
957
|
-
logger.error("Invalid network type. Use 'testnet' or 'standalone'");
|
|
958
|
-
showUsage();
|
|
959
|
-
process.exit(1);
|
|
960
|
-
}
|
|
961
|
-
|
|
962
|
-
const parsed = parseDomainName(fullDomain);
|
|
963
|
-
if (!parsed.isValid) {
|
|
964
|
-
if (isJSONMode) {
|
|
965
|
-
outputJSON(createJSONResponse(false, command, fullDomain, undefined, `Invalid domain format: ${fullDomain}. Expected format like "domain.night" or "sub.domain.night"`, networkType));
|
|
966
|
-
process.exit(1);
|
|
967
|
-
}
|
|
968
|
-
logger.error(`Invalid domain format: ${fullDomain}. Expected format like "domain.night" or "sub.domain.night"`);
|
|
969
|
-
process.exit(1);
|
|
970
|
-
}
|
|
971
|
-
|
|
972
|
-
logOrCollect(`Starting ${command} on ${networkType} network for domain: ${fullDomain}`);
|
|
973
|
-
|
|
974
|
-
// Set network ID
|
|
975
|
-
if (networkType === "testnet") {
|
|
976
|
-
setNetworkId(NetworkId.TestNet);
|
|
977
|
-
} else {
|
|
978
|
-
// For standalone, we'll set it in the config
|
|
979
|
-
// setNetworkId will be called by the config
|
|
980
|
-
}
|
|
981
|
-
|
|
982
|
-
// Check if this is a read-only command
|
|
983
|
-
if (isReadOnlyCommand(command)) {
|
|
984
|
-
logger.info("Read-only command detected - skipping wallet initialization");
|
|
985
|
-
|
|
986
|
-
// Create just a PublicDataProvider for read operations
|
|
987
|
-
let publicDataProvider: any;
|
|
988
|
-
if (networkType === "testnet") {
|
|
989
|
-
publicDataProvider = indexerPublicDataProvider(
|
|
990
|
-
"https://indexer.testnet-02.midnight.network/api/v1/graphql",
|
|
991
|
-
"wss://indexer.testnet-02.midnight.network/api/v1/graphql/ws"
|
|
992
|
-
);
|
|
993
|
-
} else {
|
|
994
|
-
// For standalone, we need to detect the ports first
|
|
995
|
-
const config = new StandaloneConfig();
|
|
996
|
-
await config.detectRunningContainerPorts();
|
|
997
|
-
publicDataProvider = indexerPublicDataProvider(
|
|
998
|
-
config.indexer,
|
|
999
|
-
config.indexerWS
|
|
1000
|
-
);
|
|
1001
|
-
}
|
|
1002
|
-
|
|
1003
|
-
// Execute read-only command
|
|
1004
|
-
let result: any;
|
|
1005
|
-
switch (command) {
|
|
1006
|
-
case "query":
|
|
1007
|
-
result = await queryDomain(publicDataProvider, fullDomain, networkType);
|
|
1008
|
-
break;
|
|
1009
|
-
|
|
1010
|
-
case "resolve":
|
|
1011
|
-
result = await resolveDomainCommand(publicDataProvider, fullDomain, networkType);
|
|
1012
|
-
break;
|
|
1013
|
-
|
|
1014
|
-
case "info":
|
|
1015
|
-
result = await getDomainInfo(publicDataProvider, fullDomain, networkType);
|
|
1016
|
-
break;
|
|
1017
|
-
|
|
1018
|
-
case "fields":
|
|
1019
|
-
result = await getDomainFieldsCommand(publicDataProvider, fullDomain, networkType);
|
|
1020
|
-
break;
|
|
1021
|
-
|
|
1022
|
-
case "settings":
|
|
1023
|
-
result = await getDomainSettingsCommand(publicDataProvider, fullDomain, networkType);
|
|
1024
|
-
break;
|
|
1025
|
-
|
|
1026
|
-
default:
|
|
1027
|
-
if (isJSONMode) {
|
|
1028
|
-
outputJSON(createJSONResponse(false, command, fullDomain, undefined, `Unknown read command: ${command}`, networkType));
|
|
1029
|
-
process.exit(1);
|
|
1030
|
-
}
|
|
1031
|
-
logger.error(`Unknown read command: ${command}`);
|
|
1032
|
-
showUsage();
|
|
1033
|
-
process.exit(1);
|
|
1034
|
-
}
|
|
1035
|
-
|
|
1036
|
-
// Output result for JSON mode
|
|
1037
|
-
if (isJSONMode && result) {
|
|
1038
|
-
outputJSON(result);
|
|
1039
|
-
} else if (!isJSONMode) {
|
|
1040
|
-
logger.info(`Read command ${command} completed successfully`);
|
|
1041
|
-
}
|
|
1042
|
-
return;
|
|
1043
|
-
}
|
|
1044
|
-
|
|
1045
|
-
// For write commands, proceed with full wallet initialization
|
|
1046
|
-
logOrCollect("Write command detected - initializing wallet");
|
|
1047
|
-
|
|
1048
|
-
// Configure network
|
|
1049
|
-
let config: Config;
|
|
1050
|
-
if (networkType === "testnet") {
|
|
1051
|
-
config = new TestnetConfig();
|
|
1052
|
-
} else {
|
|
1053
|
-
config = new StandaloneConfig();
|
|
1054
|
-
await (config as StandaloneConfig).detectRunningContainerPorts();
|
|
1055
|
-
}
|
|
1056
|
-
|
|
1057
|
-
let wallet: (Wallet & Resource) | null = null;
|
|
1058
|
-
|
|
1059
|
-
try {
|
|
1060
|
-
// Get seed from environment
|
|
1061
|
-
const seed = await getSeedFromEnv();
|
|
1062
|
-
logOrCollect("Using seed from SEED environment variable");
|
|
1063
|
-
|
|
1064
|
-
// Build wallet
|
|
1065
|
-
wallet = await buildWalletAndWaitForFunds(config, seed);
|
|
1066
|
-
|
|
1067
|
-
// Configure providers
|
|
1068
|
-
const providers = await configureProviders(wallet, config);
|
|
1069
|
-
|
|
1070
|
-
// Execute write command
|
|
1071
|
-
let writeResult: any;
|
|
1072
|
-
switch (command) {
|
|
1073
|
-
// Field management
|
|
1074
|
-
case "insert-field":
|
|
1075
|
-
if (commandArgs.length < 2) {
|
|
1076
|
-
if (isJSONMode) {
|
|
1077
|
-
outputJSON(createJSONResponse(false, command, fullDomain, undefined, "insert-field requires <key> <value>", networkType));
|
|
1078
|
-
process.exit(1);
|
|
1079
|
-
}
|
|
1080
|
-
logger.error("insert-field requires <key> <value>");
|
|
1081
|
-
process.exit(1);
|
|
1082
|
-
}
|
|
1083
|
-
await insertField(providers, fullDomain, commandArgs[0], commandArgs[1]);
|
|
1084
|
-
break;
|
|
1085
|
-
|
|
1086
|
-
case "clear-field":
|
|
1087
|
-
if (commandArgs.length < 1) {
|
|
1088
|
-
if (isJSONMode) {
|
|
1089
|
-
outputJSON(createJSONResponse(false, command, fullDomain, undefined, "clear-field requires <key>", networkType));
|
|
1090
|
-
process.exit(1);
|
|
1091
|
-
}
|
|
1092
|
-
logger.error("clear-field requires <key>");
|
|
1093
|
-
process.exit(1);
|
|
1094
|
-
}
|
|
1095
|
-
writeResult = await clearField(providers, fullDomain, commandArgs[0], networkType);
|
|
1096
|
-
break;
|
|
1097
|
-
|
|
1098
|
-
case "clear-all-fields":
|
|
1099
|
-
writeResult = await clearAllFields(providers, fullDomain, networkType);
|
|
1100
|
-
break;
|
|
1101
|
-
|
|
1102
|
-
case "add-fields":
|
|
1103
|
-
if (commandArgs.length < 1) {
|
|
1104
|
-
if (isJSONMode) {
|
|
1105
|
-
outputJSON(createJSONResponse(false, command, fullDomain, undefined, "add-fields requires <key1:value1,key2:value2,...>", networkType));
|
|
1106
|
-
process.exit(1);
|
|
1107
|
-
}
|
|
1108
|
-
logger.error("add-fields requires <key1:value1,key2:value2,...>");
|
|
1109
|
-
process.exit(1);
|
|
1110
|
-
}
|
|
1111
|
-
{
|
|
1112
|
-
const fieldPairs = commandArgs[0].split(',').map(pair => {
|
|
1113
|
-
const [key, value] = pair.split(':');
|
|
1114
|
-
return [key.trim(), value.trim()] as [string, string];
|
|
1115
|
-
});
|
|
1116
|
-
writeResult = await addFields(providers, fullDomain, fieldPairs, networkType);
|
|
1117
|
-
}
|
|
1118
|
-
break;
|
|
1119
|
-
|
|
1120
|
-
// Domain operations
|
|
1121
|
-
case "update-target":
|
|
1122
|
-
if (commandArgs.length < 1) {
|
|
1123
|
-
if (isJSONMode) {
|
|
1124
|
-
outputJSON(createJSONResponse(false, command, fullDomain, undefined, "update-target requires <address>", networkType));
|
|
1125
|
-
process.exit(1);
|
|
1126
|
-
}
|
|
1127
|
-
logger.error("update-target requires <address>");
|
|
1128
|
-
process.exit(1);
|
|
1129
|
-
}
|
|
1130
|
-
writeResult = await updateTarget(providers, fullDomain, commandArgs[0], networkType);
|
|
1131
|
-
break;
|
|
1132
|
-
|
|
1133
|
-
case "update-cost":
|
|
1134
|
-
if (commandArgs.length < 1) {
|
|
1135
|
-
if (isJSONMode) {
|
|
1136
|
-
outputJSON(createJSONResponse(false, command, fullDomain, undefined, "update-cost requires <amount>", networkType));
|
|
1137
|
-
process.exit(1);
|
|
1138
|
-
}
|
|
1139
|
-
logger.error("update-cost requires <amount>");
|
|
1140
|
-
process.exit(1);
|
|
1141
|
-
}
|
|
1142
|
-
writeResult = await updateCost(providers, fullDomain, commandArgs[0], networkType);
|
|
1143
|
-
break;
|
|
1144
|
-
|
|
1145
|
-
case "update-color":
|
|
1146
|
-
if (commandArgs.length < 1) {
|
|
1147
|
-
if (isJSONMode) {
|
|
1148
|
-
outputJSON(createJSONResponse(false, command, fullDomain, undefined, "update-color requires <hex>", networkType));
|
|
1149
|
-
process.exit(1);
|
|
1150
|
-
}
|
|
1151
|
-
logger.error("update-color requires <hex>");
|
|
1152
|
-
process.exit(1);
|
|
1153
|
-
}
|
|
1154
|
-
writeResult = await updateColor(providers, fullDomain, commandArgs[0], networkType);
|
|
1155
|
-
break;
|
|
1156
|
-
|
|
1157
|
-
// Subdomain operations
|
|
1158
|
-
case "register":
|
|
1159
|
-
if (commandArgs.length === 0) {
|
|
1160
|
-
// Auto-register: use domain name as subdomain
|
|
1161
|
-
writeResult = await registerSubdomain(providers, parsed.parentDomain, parsed.domainName, commandArgs[1], networkType);
|
|
1162
|
-
} else {
|
|
1163
|
-
// Register specified subdomain
|
|
1164
|
-
writeResult = await registerSubdomain(providers, fullDomain, commandArgs[0], commandArgs[1], networkType);
|
|
1165
|
-
}
|
|
1166
|
-
break;
|
|
1167
|
-
|
|
1168
|
-
case "buy":
|
|
1169
|
-
if (commandArgs.length === 0) {
|
|
1170
|
-
// Auto-buy: use domain name as subdomain
|
|
1171
|
-
writeResult = await buySubdomain(providers, parsed.parentDomain, parsed.domainName, commandArgs[1], commandArgs[2], networkType);
|
|
1172
|
-
} else {
|
|
1173
|
-
// Buy specified subdomain
|
|
1174
|
-
writeResult = await buySubdomain(providers, fullDomain, commandArgs[0], commandArgs[1], commandArgs[2], networkType);
|
|
1175
|
-
}
|
|
1176
|
-
break;
|
|
1177
|
-
|
|
1178
|
-
default:
|
|
1179
|
-
if (isJSONMode) {
|
|
1180
|
-
outputJSON(createJSONResponse(false, command, fullDomain, undefined, `Unknown command: ${command}`, networkType));
|
|
1181
|
-
process.exit(1);
|
|
1182
|
-
}
|
|
1183
|
-
logger.error(`Unknown command: ${command}`);
|
|
1184
|
-
showUsage();
|
|
1185
|
-
process.exit(1);
|
|
1186
|
-
}
|
|
1187
|
-
|
|
1188
|
-
// Output result for JSON mode
|
|
1189
|
-
if (isJSONMode && writeResult) {
|
|
1190
|
-
outputJSON(writeResult);
|
|
1191
|
-
} else if (!isJSONMode) {
|
|
1192
|
-
logger.info(`Command ${command} completed successfully`);
|
|
1193
|
-
}
|
|
1194
|
-
|
|
1195
|
-
} catch (error) {
|
|
1196
|
-
if (isJSONMode) {
|
|
1197
|
-
outputJSON(createJSONResponse(false, command, fullDomain, undefined, error instanceof Error ? error.message : String(error), networkType));
|
|
1198
|
-
process.exit(1);
|
|
1199
|
-
}
|
|
1200
|
-
logger.error(`Command failed: ${error instanceof Error ? error.message : String(error)}`, error);
|
|
1201
|
-
throw error;
|
|
1202
|
-
} finally {
|
|
1203
|
-
if (wallet) {
|
|
1204
|
-
await wallet.close();
|
|
1205
|
-
logOrCollect("Wallet closed");
|
|
1206
|
-
}
|
|
1207
|
-
}
|
|
1208
|
-
|
|
1209
|
-
} catch (error) {
|
|
1210
|
-
if (isJSONMode) {
|
|
1211
|
-
outputJSON(createJSONResponse(false, "main", undefined, undefined, error instanceof Error ? error.message : String(error)));
|
|
1212
|
-
process.exit(1);
|
|
1213
|
-
}
|
|
1214
|
-
logger.error(`Main execution failed: ${error instanceof Error ? error.message : String(error)}`, error);
|
|
1215
|
-
process.exit(1);
|
|
1216
|
-
}
|
|
1217
|
-
}
|
|
1218
|
-
|
|
1219
|
-
if (import.meta.main) {
|
|
1220
|
-
main().catch((error) => {
|
|
1221
|
-
if (isJSONMode) {
|
|
1222
|
-
outputJSON(createJSONResponse(false, "main", undefined, undefined, error instanceof Error ? error.message : String(error)));
|
|
1223
|
-
} else {
|
|
1224
|
-
console.error(error);
|
|
1225
|
-
}
|
|
1226
|
-
process.exit(1);
|
|
1227
|
-
});
|
|
1228
|
-
}
|