@haneullabs/haneulns 1.0.2 → 1.2.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 (127) hide show
  1. package/CHANGELOG.md +108 -0
  2. package/dist/constants.d.mts +0 -1
  3. package/dist/constants.d.mts.map +1 -1
  4. package/dist/constants.mjs +20 -20
  5. package/dist/constants.mjs.map +1 -1
  6. package/dist/contracts/haneulns/controller.mjs +11 -4
  7. package/dist/contracts/haneulns/controller.mjs.map +1 -1
  8. package/dist/contracts/haneulns/deps/haneul/balance.mjs +2 -13
  9. package/dist/contracts/haneulns/deps/haneul/balance.mjs.map +1 -1
  10. package/dist/contracts/haneulns/deps/haneul/vec_map.mjs +1 -2
  11. package/dist/contracts/haneulns/deps/haneul/vec_map.mjs.map +1 -1
  12. package/dist/contracts/haneulns/deps/std/type_name.mjs +13 -10
  13. package/dist/contracts/haneulns/deps/std/type_name.mjs.map +1 -1
  14. package/dist/contracts/haneulns/domain.mjs +11 -16
  15. package/dist/contracts/haneulns/domain.mjs.map +1 -1
  16. package/dist/contracts/haneulns/haneulns.mjs +12 -9
  17. package/dist/contracts/haneulns/haneulns.mjs.map +1 -1
  18. package/dist/contracts/haneulns/name_record.mjs +14 -13
  19. package/dist/contracts/haneulns/name_record.mjs.map +1 -1
  20. package/dist/contracts/haneulns/payment.mjs +16 -17
  21. package/dist/contracts/haneulns/payment.mjs.map +1 -1
  22. package/dist/contracts/haneulns/pricing_config.mjs +1 -2
  23. package/dist/contracts/haneulns/pricing_config.mjs.map +1 -1
  24. package/dist/contracts/haneulns_coupons/coupon_house.mjs +4 -5
  25. package/dist/contracts/haneulns_coupons/coupon_house.mjs.map +1 -1
  26. package/dist/contracts/haneulns_coupons/data.mjs +2 -8
  27. package/dist/contracts/haneulns_coupons/data.mjs.map +1 -1
  28. package/dist/contracts/haneulns_coupons/deps/haneul/bag.mjs +4 -32
  29. package/dist/contracts/haneulns_coupons/deps/haneul/bag.mjs.map +1 -1
  30. package/dist/contracts/haneulns_discounts/deps/haneul/linked_table.mjs +5 -2
  31. package/dist/contracts/haneulns_discounts/deps/haneul/linked_table.mjs.map +1 -1
  32. package/dist/contracts/haneulns_discounts/deps/haneulns/pricing_config.mjs +2 -8
  33. package/dist/contracts/haneulns_discounts/deps/haneulns/pricing_config.mjs.map +1 -1
  34. package/dist/contracts/haneulns_discounts/discounts.mjs +3 -4
  35. package/dist/contracts/haneulns_discounts/discounts.mjs.map +1 -1
  36. package/dist/contracts/haneulns_discounts/free_claims.mjs +4 -5
  37. package/dist/contracts/haneulns_discounts/free_claims.mjs.map +1 -1
  38. package/dist/contracts/haneulns_payments/deps/haneul/vec_map.mjs +1 -2
  39. package/dist/contracts/haneulns_payments/deps/haneul/vec_map.mjs.map +1 -1
  40. package/dist/contracts/haneulns_payments/deps/std/type_name.mjs +13 -10
  41. package/dist/contracts/haneulns_payments/deps/std/type_name.mjs.map +1 -1
  42. package/dist/contracts/haneulns_payments/payments.mjs +4 -3
  43. package/dist/contracts/haneulns_payments/payments.mjs.map +1 -1
  44. package/dist/contracts/pyth/data_source.mjs +2 -8
  45. package/dist/contracts/pyth/data_source.mjs.map +1 -1
  46. package/dist/contracts/pyth/deps/0x0000000000000000000000000000000000000000000000000000000000000002/package.mjs +2 -8
  47. package/dist/contracts/pyth/deps/0x0000000000000000000000000000000000000000000000000000000000000002/package.mjs.map +1 -1
  48. package/dist/contracts/pyth/deps/0x0000000000000000000000000000000000000000000000000000000000000002/table.mjs +2 -8
  49. package/dist/contracts/pyth/deps/0x0000000000000000000000000000000000000000000000000000000000000002/table.mjs.map +1 -1
  50. package/dist/contracts/pyth/deps/0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94/bytes32.mjs +2 -8
  51. package/dist/contracts/pyth/deps/0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94/bytes32.mjs.map +1 -1
  52. package/dist/contracts/pyth/deps/0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94/consumed_vaas.mjs +2 -8
  53. package/dist/contracts/pyth/deps/0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94/consumed_vaas.mjs.map +1 -1
  54. package/dist/contracts/pyth/deps/0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94/external_address.mjs +2 -8
  55. package/dist/contracts/pyth/deps/0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94/external_address.mjs.map +1 -1
  56. package/dist/contracts/pyth/deps/0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94/set.mjs +2 -8
  57. package/dist/contracts/pyth/deps/0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94/set.mjs.map +1 -1
  58. package/dist/contracts/pyth/state.mjs +2 -8
  59. package/dist/contracts/pyth/state.mjs.map +1 -1
  60. package/dist/contracts/utils/index.mjs +97 -12
  61. package/dist/contracts/utils/index.mjs.map +1 -1
  62. package/dist/contracts/wormhole/bytes32.mjs +2 -8
  63. package/dist/contracts/wormhole/bytes32.mjs.map +1 -1
  64. package/dist/contracts/wormhole/consumed_vaas.mjs +2 -8
  65. package/dist/contracts/wormhole/consumed_vaas.mjs.map +1 -1
  66. package/dist/contracts/wormhole/deps/0x0000000000000000000000000000000000000000000000000000000000000002/balance.mjs +2 -8
  67. package/dist/contracts/wormhole/deps/0x0000000000000000000000000000000000000000000000000000000000000002/balance.mjs.map +1 -1
  68. package/dist/contracts/wormhole/deps/0x0000000000000000000000000000000000000000000000000000000000000002/package.mjs +2 -8
  69. package/dist/contracts/wormhole/deps/0x0000000000000000000000000000000000000000000000000000000000000002/package.mjs.map +1 -1
  70. package/dist/contracts/wormhole/deps/0x0000000000000000000000000000000000000000000000000000000000000002/table.mjs +2 -8
  71. package/dist/contracts/wormhole/deps/0x0000000000000000000000000000000000000000000000000000000000000002/table.mjs.map +1 -1
  72. package/dist/contracts/wormhole/external_address.mjs +2 -8
  73. package/dist/contracts/wormhole/external_address.mjs.map +1 -1
  74. package/dist/contracts/wormhole/fee_collector.mjs +2 -8
  75. package/dist/contracts/wormhole/fee_collector.mjs.map +1 -1
  76. package/dist/contracts/wormhole/set.mjs +2 -8
  77. package/dist/contracts/wormhole/set.mjs.map +1 -1
  78. package/dist/contracts/wormhole/state.mjs +2 -8
  79. package/dist/contracts/wormhole/state.mjs.map +1 -1
  80. package/dist/haneulns-client.d.mts +10 -10
  81. package/dist/haneulns-client.d.mts.map +1 -1
  82. package/dist/haneulns-client.mjs +9 -10
  83. package/dist/haneulns-client.mjs.map +1 -1
  84. package/dist/haneulns-transaction.d.mts +7 -8
  85. package/dist/haneulns-transaction.d.mts.map +1 -1
  86. package/dist/haneulns-transaction.mjs +4 -5
  87. package/dist/haneulns-transaction.mjs.map +1 -1
  88. package/dist/helpers.d.mts.map +1 -1
  89. package/dist/helpers.mjs +1 -2
  90. package/dist/helpers.mjs.map +1 -1
  91. package/dist/index.d.mts +4 -4
  92. package/dist/index.mjs +3 -4
  93. package/dist/pyth/PriceServiceConnection.mjs +1 -2
  94. package/dist/pyth/PriceServiceConnection.mjs.map +1 -1
  95. package/dist/pyth/pyth-helpers.mjs +1 -1
  96. package/dist/pyth/pyth-helpers.mjs.map +1 -1
  97. package/dist/pyth/pyth.mjs +8 -6
  98. package/dist/pyth/pyth.mjs.map +1 -1
  99. package/dist/types.d.mts +3 -3
  100. package/dist/types.d.mts.map +1 -1
  101. package/package.json +11 -12
  102. package/src/constants.ts +19 -19
  103. package/src/contracts/haneulns/admin.ts +2 -2
  104. package/src/contracts/haneulns/auction.ts +2 -2
  105. package/src/contracts/haneulns/config.ts +18 -18
  106. package/src/contracts/haneulns/constants.ts +4 -4
  107. package/src/contracts/haneulns/controller.ts +95 -1
  108. package/src/contracts/haneulns/core_config.ts +19 -19
  109. package/src/contracts/haneulns/domain.ts +18 -20
  110. package/src/contracts/haneulns/haneulns.ts +7 -7
  111. package/src/contracts/haneulns/haneulns_registration.ts +11 -11
  112. package/src/contracts/haneulns/name_record.ts +24 -29
  113. package/src/contracts/haneulns/payment.ts +23 -23
  114. package/src/contracts/haneulns/pricing_config.ts +16 -16
  115. package/src/contracts/haneulns/registry.ts +61 -75
  116. package/src/contracts/haneulns/subdomain_registration.ts +2 -2
  117. package/src/contracts/haneulns_coupons/coupon_house.ts +19 -19
  118. package/src/contracts/haneulns_coupons/range.ts +7 -7
  119. package/src/contracts/haneulns_coupons/rules.ts +27 -27
  120. package/src/contracts/haneulns_discounts/discounts.ts +7 -7
  121. package/src/contracts/haneulns_discounts/free_claims.ts +7 -7
  122. package/src/contracts/haneulns_payments/payments.ts +13 -13
  123. package/src/contracts/utils/index.ts +185 -24
  124. package/src/haneulns-client.ts +14 -14
  125. package/src/haneulns-transaction.ts +5 -5
  126. package/src/index.ts +3 -3
  127. package/src/types.ts +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"pyth.mjs","names":["#priceFeedObjectIdCache","#fetchPriceFeedObjectId","#priceTableInfo","#fetchPriceTableInfo","#wormholePackageId","#fetchWormholePackageId","WormholeState","#pythState","#fetchPythState","PythState","#getPythState"],"sources":["../../src/pyth/pyth.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { bcs } from '@haneullabs/haneul/bcs';\nimport type { ClientWithCoreApi } from '@haneullabs/haneul/client';\nimport type { Transaction, TransactionObjectArgument } from '@haneullabs/haneul/transactions';\nimport { coinWithBalance } from '@haneullabs/haneul/transactions';\nimport { fromBase64, fromHex, parseStructTag } from '@haneullabs/haneul/utils';\n\nimport type { HexString } from './PriceServiceConnection.js';\nimport { PriceServiceConnection } from './PriceServiceConnection.js';\nimport { extractVaaBytesFromAccumulatorMessage } from './pyth-helpers.js';\nimport { State as PythState } from '../contracts/pyth/state.js';\nimport { State as WormholeState } from '../contracts/wormhole/state.js';\n\nconst MAX_ARGUMENT_SIZE = 16 * 1024;\nexport type ObjectId = string;\nexport class HaneulPriceServiceConnection extends PriceServiceConnection {\n\t/**\n\t * Fetch price feed update data.\n\t *\n\t * @param priceIds Array of hex-encoded price IDs.\n\t * @returns Array of buffers containing the price update data.\n\t */\n\tasync getPriceFeedsUpdateData(priceIds: HexString[]): Promise<Uint8Array[]> {\n\t\tconst latestVaas = await this.getLatestVaas(priceIds);\n\t\treturn latestVaas.map((vaa) => fromBase64(vaa));\n\t}\n}\n\ntype ParsedPythState = ReturnType<typeof PythState.parse>;\n\nexport class HaneulPythClient {\n\t#pythState?: Promise<ParsedPythState>;\n\t#wormholePackageId?: Promise<ObjectId>;\n\t#priceFeedObjectIdCache: Map<HexString, Promise<ObjectId>> = new Map();\n\t#priceTableInfo?: Promise<{ id: ObjectId; fieldType: ObjectId }>;\n\tprovider: ClientWithCoreApi;\n\tpythStateId: ObjectId;\n\twormholeStateId: ObjectId;\n\n\tconstructor(provider: ClientWithCoreApi, pythStateId: ObjectId, wormholeStateId: ObjectId) {\n\t\tthis.provider = provider;\n\t\tthis.pythStateId = pythStateId;\n\t\tthis.wormholeStateId = wormholeStateId;\n\t}\n\t/**\n\t * Verifies the VAAs using the Wormhole contract.\n\t *\n\t * @param vaas Array of VAA buffers to verify.\n\t * @param tx Transaction block to add commands to.\n\t * @returns Array of verified VAAs.\n\t */\n\tasync verifyVaas(vaas: Uint8Array[], tx: Transaction) {\n\t\tconst wormholePackageId = await this.getWormholePackageId();\n\t\tconst verifiedVaas = [];\n\t\tfor (const vaa of vaas) {\n\t\t\tconst [verifiedVaa] = tx.moveCall({\n\t\t\t\ttarget: `${wormholePackageId}::vaa::parse_and_verify`,\n\t\t\t\targuments: [tx.object(this.wormholeStateId), tx.pure.vector('u8', vaa), tx.object.clock()],\n\t\t\t});\n\t\t\tverifiedVaas.push(verifiedVaa);\n\t\t}\n\t\treturn verifiedVaas;\n\t}\n\t/**\n\t * Adds the necessary commands for updating the Pyth price feeds to the transaction block.\n\t *\n\t * @param tx Transaction block to add commands to.\n\t * @param updates Array of price feed updates received from the price service.\n\t * @param feedIds Array of feed IDs to update (in hex format).\n\t * @param feeCoin Optional custom HANEUL coin to use for Pyth oracle fees. If not provided, uses gas coin.\n\t */\n\tasync updatePriceFeeds(\n\t\ttx: Transaction,\n\t\tupdates: Uint8Array[],\n\t\tfeedIds: HexString[],\n\t\tfeeCoin?: TransactionObjectArgument,\n\t): Promise<ObjectId[]> {\n\t\tconst packageId = await this.getPythPackageId();\n\t\tlet priceUpdatesHotPotato;\n\t\tif (updates.length > 1) {\n\t\t\tthrow new Error(\n\t\t\t\t'SDK does not support sending multiple accumulator messages in a single transaction',\n\t\t\t);\n\t\t}\n\t\tconst vaa = extractVaaBytesFromAccumulatorMessage(updates[0]);\n\t\tconst verifiedVaas = await this.verifyVaas([vaa], tx);\n\t\t[priceUpdatesHotPotato] = tx.moveCall({\n\t\t\ttarget: `${packageId}::pyth::create_authenticated_price_infos_using_accumulator`,\n\t\t\targuments: [\n\t\t\t\ttx.object(this.pythStateId),\n\t\t\t\ttx.pure(\n\t\t\t\t\tbcs\n\t\t\t\t\t\t.vector(bcs.U8)\n\t\t\t\t\t\t.serialize(Array.from(updates[0]), {\n\t\t\t\t\t\t\tmaxSize: MAX_ARGUMENT_SIZE,\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.toBytes(),\n\t\t\t\t),\n\t\t\t\tverifiedVaas[0],\n\t\t\t\ttx.object.clock(),\n\t\t\t],\n\t\t});\n\t\tconst priceInfoObjects: ObjectId[] = [];\n\t\tconst baseUpdateFee = await this.getBaseUpdateFee();\n\t\tfor (const feedId of feedIds) {\n\t\t\tconst priceInfoObjectId = await this.getPriceFeedObjectId(feedId);\n\t\t\tif (!priceInfoObjectId) {\n\t\t\t\tthrow new Error(`Price feed ${feedId} not found, please create it first`);\n\t\t\t}\n\t\t\tpriceInfoObjects.push(priceInfoObjectId);\n\n\t\t\tconst feePayment = feeCoin\n\t\t\t\t? tx.splitCoins(feeCoin, [tx.pure.u64(baseUpdateFee)])[0]\n\t\t\t\t: coinWithBalance({ balance: baseUpdateFee });\n\n\t\t\t[priceUpdatesHotPotato] = tx.moveCall({\n\t\t\t\ttarget: `${packageId}::pyth::update_single_price_feed`,\n\t\t\t\targuments: [\n\t\t\t\t\ttx.object(this.pythStateId),\n\t\t\t\t\tpriceUpdatesHotPotato,\n\t\t\t\t\ttx.object(priceInfoObjectId),\n\t\t\t\t\tfeePayment,\n\t\t\t\t\ttx.object.clock(),\n\t\t\t\t],\n\t\t\t});\n\t\t}\n\t\ttx.moveCall({\n\t\t\ttarget: `${packageId}::hot_potato_vector::destroy`,\n\t\t\targuments: [priceUpdatesHotPotato],\n\t\t\ttypeArguments: [`${packageId}::price_info::PriceInfo`],\n\t\t});\n\t\treturn priceInfoObjects;\n\t}\n\t/**\n\t * Get the price feed object ID for a given feed ID, caching the promise.\n\t * @param feedId\n\t */\n\tgetPriceFeedObjectId(feedId: HexString): Promise<ObjectId | undefined> {\n\t\tif (!this.#priceFeedObjectIdCache.has(feedId)) {\n\t\t\tthis.#priceFeedObjectIdCache.set(\n\t\t\t\tfeedId,\n\t\t\t\tthis.#fetchPriceFeedObjectId(feedId).catch((err) => {\n\t\t\t\t\t// Remove failed promises from the cache to allow retries\n\t\t\t\t\tthis.#priceFeedObjectIdCache.delete(feedId);\n\t\t\t\t\tthrow err;\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\treturn this.#priceFeedObjectIdCache.get(feedId)!;\n\t}\n\n\t/**\n\t * Fetches the price feed object ID for a given feed ID (no caching).\n\t * Throws an error if the object is not found.\n\t */\n\tasync #fetchPriceFeedObjectId(feedId: HexString): Promise<ObjectId> {\n\t\tconst { id: tableId, fieldType } = await this.getPriceTableInfo();\n\n\t\tconst result = await this.provider.core.getDynamicField({\n\t\t\tparentId: tableId,\n\t\t\tname: {\n\t\t\t\ttype: `${fieldType}::price_identifier::PriceIdentifier`,\n\t\t\t\tbcs: bcs.byteVector().serialize(fromHex(feedId)).toBytes(),\n\t\t\t},\n\t\t});\n\n\t\tif (!result.dynamicField) {\n\t\t\tthrow new Error(`Price feed object ID for feed ID ${feedId} not found.`);\n\t\t}\n\n\t\treturn bcs.Address.parse(result.dynamicField.value.bcs);\n\t}\n\n\t/**\n\t * Fetches the price table object ID for the current state ID, caching the promise.\n\t * @returns Price table object ID and field type\n\t */\n\tgetPriceTableInfo(): Promise<{ id: ObjectId; fieldType: ObjectId }> {\n\t\tif (!this.#priceTableInfo) {\n\t\t\tconst promise = this.#fetchPriceTableInfo().catch((err) => {\n\t\t\t\t// Clear the cached promise on error\n\t\t\t\tthis.#priceTableInfo = undefined;\n\t\t\t\tthrow err;\n\t\t\t});\n\n\t\t\tthis.#priceTableInfo = promise;\n\t\t}\n\n\t\treturn this.#priceTableInfo;\n\t}\n\n\t/**\n\t * Fetches the price table object ID and field type (no caching).\n\t * @returns Price table object ID and field type\n\t */\n\tasync #fetchPriceTableInfo(): Promise<{ id: ObjectId; fieldType: ObjectId }> {\n\t\tconst result = await this.provider.core.getDynamicObjectField({\n\t\t\tparentId: this.pythStateId,\n\t\t\tname: {\n\t\t\t\ttype: 'vector<u8>',\n\t\t\t\tbcs: bcs.string().serialize('price_info').toBytes(),\n\t\t\t},\n\t\t});\n\n\t\tif (!result.object) {\n\t\t\tthrow new Error('Price Table not found, contract may not be initialized');\n\t\t}\n\n\t\tconst tableType = parseStructTag(result.object.type);\n\t\tconst priceIdentifier = tableType.typeParams[0];\n\t\tif (\n\t\t\ttypeof priceIdentifier === 'object' &&\n\t\t\tpriceIdentifier !== null &&\n\t\t\tpriceIdentifier.name === 'PriceIdentifier' &&\n\t\t\t'address' in priceIdentifier\n\t\t) {\n\t\t\treturn { id: result.object.objectId, fieldType: priceIdentifier.address };\n\t\t} else {\n\t\t\tthrow new Error('fieldType not found');\n\t\t}\n\t}\n\t/**\n\t * Fetches the package ID for the Wormhole contract, with caching.\n\t */\n\tgetWormholePackageId(): Promise<ObjectId> {\n\t\tif (!this.#wormholePackageId) {\n\t\t\tthis.#wormholePackageId = this.#fetchWormholePackageId();\n\t\t}\n\t\treturn this.#wormholePackageId;\n\t}\n\n\t/**\n\t * Fetches the package ID for the Wormhole contract (no caching).\n\t */\n\tasync #fetchWormholePackageId(): Promise<ObjectId> {\n\t\tconst result = await this.provider.core.getObject({\n\t\t\tobjectId: this.wormholeStateId,\n\t\t\tinclude: { content: true },\n\t\t});\n\n\t\tif (!result.object?.content) {\n\t\t\tthrow new Error('Unable to fetch Wormhole state object');\n\t\t}\n\n\t\tconst state = WormholeState.parse(result.object.content);\n\t\treturn state.upgrade_cap.package;\n\t}\n\n\t/**\n\t * Fetches and caches the parsed Pyth state object.\n\t * This is shared between getPythPackageId and getBaseUpdateFee to avoid redundant fetches.\n\t */\n\t#getPythState(): Promise<ParsedPythState> {\n\t\tif (!this.#pythState) {\n\t\t\tthis.#pythState = this.#fetchPythState();\n\t\t}\n\t\treturn this.#pythState;\n\t}\n\n\t/**\n\t * Fetches the Pyth state object (no caching).\n\t */\n\tasync #fetchPythState(): Promise<ParsedPythState> {\n\t\tconst result = await this.provider.core.getObject({\n\t\t\tobjectId: this.pythStateId,\n\t\t\tinclude: { content: true },\n\t\t});\n\n\t\tif (!result.object?.content) {\n\t\t\tthrow new Error('Unable to fetch Pyth state object');\n\t\t}\n\n\t\treturn PythState.parse(result.object.content);\n\t}\n\n\t/**\n\t * Fetches the package ID for the Pyth contract, with caching.\n\t * Uses the shared Pyth state cache.\n\t */\n\tasync getPythPackageId(): Promise<ObjectId> {\n\t\tconst state = await this.#getPythState();\n\t\treturn state.upgrade_cap.package;\n\t}\n\n\t/**\n\t * Returns the cached base update fee, fetching it if necessary.\n\t * Uses the shared Pyth state cache.\n\t */\n\tasync getBaseUpdateFee(): Promise<number> {\n\t\tconst state = await this.#getPythState();\n\t\treturn Number(state.base_update_fee);\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"pyth.mjs","names":["#priceFeedObjectIdCache","#fetchPriceFeedObjectId","#priceTableInfo","#fetchPriceTableInfo","#wormholePackageId","#fetchWormholePackageId","WormholeState","#pythState","#fetchPythState","PythState","#getPythState"],"sources":["../../src/pyth/pyth.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { bcs } from '@haneullabs/haneul/bcs';\nimport type { ClientWithCoreApi } from '@haneullabs/haneul/client';\nimport type { Transaction, TransactionObjectArgument } from '@haneullabs/haneul/transactions';\nimport { coinWithBalance } from '@haneullabs/haneul/transactions';\nimport { fromBase64, fromHex, parseStructTag } from '@haneullabs/haneul/utils';\n\nimport type { HexString } from './PriceServiceConnection.js';\nimport { PriceServiceConnection } from './PriceServiceConnection.js';\nimport { extractVaaBytesFromAccumulatorMessage } from './pyth-helpers.js';\nimport { State as PythState } from '../contracts/pyth/state.js';\nimport { State as WormholeState } from '../contracts/wormhole/state.js';\n\nconst MAX_ARGUMENT_SIZE = 16 * 1024;\nexport type ObjectId = string;\nexport class HaneulPriceServiceConnection extends PriceServiceConnection {\n\t/**\n\t * Fetch price feed update data.\n\t *\n\t * @param priceIds Array of hex-encoded price IDs.\n\t * @returns Array of buffers containing the price update data.\n\t */\n\tasync getPriceFeedsUpdateData(priceIds: HexString[]): Promise<Uint8Array[]> {\n\t\tconst latestVaas = await this.getLatestVaas(priceIds);\n\t\treturn latestVaas.map((vaa) => fromBase64(vaa));\n\t}\n}\n\ntype ParsedPythState = ReturnType<typeof PythState.parse>;\n\nexport class HaneulPythClient {\n\t#pythState?: Promise<ParsedPythState>;\n\t#wormholePackageId?: Promise<ObjectId>;\n\t#priceFeedObjectIdCache: Map<HexString, Promise<ObjectId>> = new Map();\n\t#priceTableInfo?: Promise<{ id: ObjectId; fieldType: ObjectId }>;\n\tprovider: ClientWithCoreApi;\n\tpythStateId: ObjectId;\n\twormholeStateId: ObjectId;\n\n\tconstructor(provider: ClientWithCoreApi, pythStateId: ObjectId, wormholeStateId: ObjectId) {\n\t\tthis.provider = provider;\n\t\tthis.pythStateId = pythStateId;\n\t\tthis.wormholeStateId = wormholeStateId;\n\t}\n\t/**\n\t * Verifies the VAAs using the Wormhole contract.\n\t *\n\t * @param vaas Array of VAA buffers to verify.\n\t * @param tx Transaction block to add commands to.\n\t * @returns Array of verified VAAs.\n\t */\n\tasync verifyVaas(vaas: Uint8Array[], tx: Transaction) {\n\t\tconst wormholePackageId = await this.getWormholePackageId();\n\t\tconst verifiedVaas = [];\n\t\tfor (const vaa of vaas) {\n\t\t\tconst [verifiedVaa] = tx.moveCall({\n\t\t\t\ttarget: `${wormholePackageId}::vaa::parse_and_verify`,\n\t\t\t\targuments: [tx.object(this.wormholeStateId), tx.pure.vector('u8', vaa), tx.object.clock()],\n\t\t\t});\n\t\t\tverifiedVaas.push(verifiedVaa);\n\t\t}\n\t\treturn verifiedVaas;\n\t}\n\t/**\n\t * Adds the necessary commands for updating the Pyth price feeds to the transaction block.\n\t *\n\t * @param tx Transaction block to add commands to.\n\t * @param updates Array of price feed updates received from the price service.\n\t * @param feedIds Array of feed IDs to update (in hex format).\n\t * @param feeCoin Optional custom HANEUL coin to use for Pyth oracle fees. If not provided, uses gas coin.\n\t */\n\tasync updatePriceFeeds(\n\t\ttx: Transaction,\n\t\tupdates: Uint8Array[],\n\t\tfeedIds: HexString[],\n\t\tfeeCoin?: TransactionObjectArgument,\n\t): Promise<ObjectId[]> {\n\t\tconst packageId = await this.getPythPackageId();\n\t\tlet priceUpdatesHotPotato;\n\t\tif (updates.length > 1) {\n\t\t\tthrow new Error(\n\t\t\t\t'SDK does not support sending multiple accumulator messages in a single transaction',\n\t\t\t);\n\t\t}\n\t\tconst vaa = extractVaaBytesFromAccumulatorMessage(updates[0]);\n\t\tconst verifiedVaas = await this.verifyVaas([vaa], tx);\n\t\t[priceUpdatesHotPotato] = tx.moveCall({\n\t\t\ttarget: `${packageId}::pyth::create_authenticated_price_infos_using_accumulator`,\n\t\t\targuments: [\n\t\t\t\ttx.object(this.pythStateId),\n\t\t\t\ttx.pure(\n\t\t\t\t\tbcs\n\t\t\t\t\t\t.vector(bcs.U8)\n\t\t\t\t\t\t.serialize(Array.from(updates[0]), {\n\t\t\t\t\t\t\tmaxSize: MAX_ARGUMENT_SIZE,\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.toBytes(),\n\t\t\t\t),\n\t\t\t\tverifiedVaas[0],\n\t\t\t\ttx.object.clock(),\n\t\t\t],\n\t\t});\n\t\tconst priceInfoObjects: ObjectId[] = [];\n\t\tconst baseUpdateFee = await this.getBaseUpdateFee();\n\t\tfor (const feedId of feedIds) {\n\t\t\tconst priceInfoObjectId = await this.getPriceFeedObjectId(feedId);\n\t\t\tif (!priceInfoObjectId) {\n\t\t\t\tthrow new Error(`Price feed ${feedId} not found, please create it first`);\n\t\t\t}\n\t\t\tpriceInfoObjects.push(priceInfoObjectId);\n\n\t\t\tconst feePayment = feeCoin\n\t\t\t\t? tx.splitCoins(feeCoin, [tx.pure.u64(baseUpdateFee)])[0]\n\t\t\t\t: coinWithBalance({ balance: baseUpdateFee });\n\n\t\t\t[priceUpdatesHotPotato] = tx.moveCall({\n\t\t\t\ttarget: `${packageId}::pyth::update_single_price_feed`,\n\t\t\t\targuments: [\n\t\t\t\t\ttx.object(this.pythStateId),\n\t\t\t\t\tpriceUpdatesHotPotato,\n\t\t\t\t\ttx.object(priceInfoObjectId),\n\t\t\t\t\tfeePayment,\n\t\t\t\t\ttx.object.clock(),\n\t\t\t\t],\n\t\t\t});\n\t\t}\n\t\ttx.moveCall({\n\t\t\ttarget: `${packageId}::hot_potato_vector::destroy`,\n\t\t\targuments: [priceUpdatesHotPotato],\n\t\t\ttypeArguments: [`${packageId}::price_info::PriceInfo`],\n\t\t});\n\t\treturn priceInfoObjects;\n\t}\n\t/**\n\t * Get the price feed object ID for a given feed ID, caching the promise.\n\t * @param feedId\n\t */\n\tgetPriceFeedObjectId(feedId: HexString): Promise<ObjectId | undefined> {\n\t\tif (!this.#priceFeedObjectIdCache.has(feedId)) {\n\t\t\tthis.#priceFeedObjectIdCache.set(\n\t\t\t\tfeedId,\n\t\t\t\tthis.#fetchPriceFeedObjectId(feedId).catch((err) => {\n\t\t\t\t\t// Remove failed promises from the cache to allow retries\n\t\t\t\t\tthis.#priceFeedObjectIdCache.delete(feedId);\n\t\t\t\t\tthrow err;\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\treturn this.#priceFeedObjectIdCache.get(feedId)!;\n\t}\n\n\t/**\n\t * Fetches the price feed object ID for a given feed ID (no caching).\n\t * Throws an error if the object is not found.\n\t */\n\tasync #fetchPriceFeedObjectId(feedId: HexString): Promise<ObjectId> {\n\t\tconst { id: tableId, fieldType } = await this.getPriceTableInfo();\n\n\t\tconst result = await this.provider.core.getDynamicField({\n\t\t\tparentId: tableId,\n\t\t\tname: {\n\t\t\t\ttype: `${fieldType}::price_identifier::PriceIdentifier`,\n\t\t\t\tbcs: bcs.byteVector().serialize(fromHex(feedId)).toBytes(),\n\t\t\t},\n\t\t});\n\n\t\tif (!result.dynamicField) {\n\t\t\tthrow new Error(`Price feed object ID for feed ID ${feedId} not found.`);\n\t\t}\n\n\t\treturn bcs.Address.parse(result.dynamicField.value.bcs);\n\t}\n\n\t/**\n\t * Fetches the price table object ID for the current state ID, caching the promise.\n\t * @returns Price table object ID and field type\n\t */\n\tgetPriceTableInfo(): Promise<{ id: ObjectId; fieldType: ObjectId }> {\n\t\tif (!this.#priceTableInfo) {\n\t\t\tconst promise = this.#fetchPriceTableInfo().catch((err) => {\n\t\t\t\t// Clear the cached promise on error\n\t\t\t\tthis.#priceTableInfo = undefined;\n\t\t\t\tthrow err;\n\t\t\t});\n\n\t\t\tthis.#priceTableInfo = promise;\n\t\t}\n\n\t\treturn this.#priceTableInfo;\n\t}\n\n\t/**\n\t * Fetches the price table object ID and field type (no caching).\n\t * @returns Price table object ID and field type\n\t */\n\tasync #fetchPriceTableInfo(): Promise<{ id: ObjectId; fieldType: ObjectId }> {\n\t\tconst result = await this.provider.core.getDynamicObjectField({\n\t\t\tparentId: this.pythStateId,\n\t\t\tname: {\n\t\t\t\ttype: 'vector<u8>',\n\t\t\t\tbcs: bcs.string().serialize('price_info').toBytes(),\n\t\t\t},\n\t\t});\n\n\t\tif (!result.object) {\n\t\t\tthrow new Error('Price Table not found, contract may not be initialized');\n\t\t}\n\n\t\tconst tableType = parseStructTag(result.object.type);\n\t\tconst priceIdentifier = tableType.typeParams[0];\n\t\tif (\n\t\t\ttypeof priceIdentifier === 'object' &&\n\t\t\tpriceIdentifier !== null &&\n\t\t\tpriceIdentifier.name === 'PriceIdentifier' &&\n\t\t\t'address' in priceIdentifier\n\t\t) {\n\t\t\treturn { id: result.object.objectId, fieldType: priceIdentifier.address };\n\t\t} else {\n\t\t\tthrow new Error('fieldType not found');\n\t\t}\n\t}\n\t/**\n\t * Fetches the package ID for the Wormhole contract, with caching.\n\t */\n\tgetWormholePackageId(): Promise<ObjectId> {\n\t\tif (!this.#wormholePackageId) {\n\t\t\tthis.#wormholePackageId = this.#fetchWormholePackageId();\n\t\t}\n\t\treturn this.#wormholePackageId;\n\t}\n\n\t/**\n\t * Fetches the package ID for the Wormhole contract (no caching).\n\t */\n\tasync #fetchWormholePackageId(): Promise<ObjectId> {\n\t\tconst result = await this.provider.core.getObject({\n\t\t\tobjectId: this.wormholeStateId,\n\t\t\tinclude: { content: true },\n\t\t});\n\n\t\tif (!result.object?.content) {\n\t\t\tthrow new Error('Unable to fetch Wormhole state object');\n\t\t}\n\n\t\tconst state = WormholeState.parse(result.object.content);\n\t\treturn state.upgrade_cap.package;\n\t}\n\n\t/**\n\t * Fetches and caches the parsed Pyth state object.\n\t * This is shared between getPythPackageId and getBaseUpdateFee to avoid redundant fetches.\n\t */\n\t#getPythState(): Promise<ParsedPythState> {\n\t\tif (!this.#pythState) {\n\t\t\tthis.#pythState = this.#fetchPythState();\n\t\t}\n\t\treturn this.#pythState;\n\t}\n\n\t/**\n\t * Fetches the Pyth state object (no caching).\n\t */\n\tasync #fetchPythState(): Promise<ParsedPythState> {\n\t\tconst result = await this.provider.core.getObject({\n\t\t\tobjectId: this.pythStateId,\n\t\t\tinclude: { content: true },\n\t\t});\n\n\t\tif (!result.object?.content) {\n\t\t\tthrow new Error('Unable to fetch Pyth state object');\n\t\t}\n\n\t\treturn PythState.parse(result.object.content);\n\t}\n\n\t/**\n\t * Fetches the package ID for the Pyth contract, with caching.\n\t * Uses the shared Pyth state cache.\n\t */\n\tasync getPythPackageId(): Promise<ObjectId> {\n\t\tconst state = await this.#getPythState();\n\t\treturn state.upgrade_cap.package;\n\t}\n\n\t/**\n\t * Returns the cached base update fee, fetching it if necessary.\n\t * Uses the shared Pyth state cache.\n\t */\n\tasync getBaseUpdateFee(): Promise<number> {\n\t\tconst state = await this.#getPythState();\n\t\treturn Number(state.base_update_fee);\n\t}\n}\n"],"mappings":"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"}
package/dist/types.d.mts CHANGED
@@ -76,13 +76,13 @@ type ReceiptParams = {
76
76
  maxAmount?: bigint;
77
77
  priceInfoObjectId?: string | null;
78
78
  };
79
- type SuinsClientConfig = {
79
+ type HaneulnsClientConfig = {
80
80
  client: ClientWithCoreApi;
81
81
  network?: HaneulClientTypes.Network;
82
82
  packageInfo?: PackageInfo;
83
83
  };
84
- type SuinsPriceList = Map<[number, number], number>;
84
+ type HaneulnsPriceList = Map<[number, number], number>;
85
85
  type CoinTypeDiscount = Map<string, number>;
86
86
  //#endregion
87
- export { CoinTypeDiscount, Config, DiscountInfo, NameRecord, PackageInfo, ReceiptParams, RegistrationParams, RenewalParams, SuinsClientConfig, SuinsPriceList };
87
+ export { CoinTypeDiscount, Config, DiscountInfo, HaneulnsClientConfig, HaneulnsPriceList, NameRecord, PackageInfo, ReceiptParams, RegistrationParams, RenewalParams };
88
88
  //# sourceMappingURL=types.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.mts","names":[],"sources":["../src/types.ts"],"sourcesContent":[],"mappings":";;;;UAQiB,UAAA;;EAAA,IAAA,EAAA,MAAA;AAKjB;AAMiB,UANA,YAAA,CAmCM;EAGN,WAAA,EArCH,sBA0CD;EAeD,IAAA,EAAA,MAAM;EAEN,WAAA,CAAA,EAAU,OAAA;;AAGd,UAzDS,WAAA,CAyDT;EAEQ,SAAA,EAAA,MAAA;EAAY,WAAA,EAAA,MAAA;EAKhB,gBAAA,EAAA,MAAkB;EAIlB,QAAA,EAAA,MAAa;EAIb,gBAAa,EAAA;IACT,SAAA,EAAA,MAAA;IACK,eAAA,EAAA,MAAA;EACR,CAAA;EACL,iBAAA,EAAA,MAAA;EAAsB,4BAAA,EAAA,MAAA;EAKlB,OAAA,EAAA;IACH,SAAA,EAAA,MAAA;EACE,CAAA;EACI,QAAA,EAAA;IAAW,SAAA,EAAA,MAAA;EAGd,CAAA;EAEA,GAAA,EAAA;;;;;;;;;;;;SA5DJ,eAAe;;UAGN,UAAA;;;;;QAKV;;;;;KAeK,MAAA,GAAS,8BAA8B;KAEvC,UAAA;;cAEC;SACL;;iBAEQ;;;;KAKJ,kBAAA,GAAqB;;;KAIrB,aAAA,GAAgB;OACtB;;KAGM,aAAA;iBACI;sBACK;cACR;SACL;;;;KAKI,iBAAA;UACH;YACE,iBAAA,CAAkB;gBACd;;KAGH,cAAA,GAAiB;KAEjB,gBAAA,GAAmB"}
1
+ {"version":3,"file":"types.d.mts","names":[],"sources":["../src/types.ts"],"mappings":";;;;UAQiB,UAAA;EAChB,IAAA;EACA,IAAI;AAAA;AAAA,UAGY,YAAA;EAChB,WAAA,EAAa,sBAAsB;EACnC,IAAA;EACA,WAAA;AAAA;AAAA,UAGgB,WAAA;EAChB,SAAA;EACA,WAAA;EACA,gBAAA;EACA,QAAA;EACA,gBAAA;IACC,SAAA;IACA,eAAA;EAAA;EAED,iBAAA;EACA,4BAAA;EACA,OAAA;IACC,SAAA;EAAA;EAED,QAAA;IACC,SAAA;EAAA;EAED,GAAA;IACC,SAAA;IACA,KAAA;EAAA;EAED,eAAA;EACA,IAAA;IACC,WAAA;IACA,eAAA;EAAA;EAED,KAAA;IACC,SAAA;EAAA;EAED,KAAA,EAAO,MAAM,SAAS,UAAA;AAAA;AAAA,UAGN,UAAA;EAChB,IAAA;EACA,KAAA;EACA,aAAA;EACA,qBAAA;EACA,IAAA,EAAM,MAAM;EACZ,MAAA;EACA,WAAA;EACA,YAAA;AAAA;AAAA,KAYW,MAAA,GAAS,MAAM,wBAAwB,WAAA;AAAA,KAEvC,UAAA;EACX,KAAA;EACA,UAAA,EAAY,UAAA;EACZ,IAAA,GAAO,sBAAA;EACP,UAAA;EACA,YAAA,GAAe,YAAA;EACf,SAAA;EACA,iBAAA;AAAA;AAAA,KAGW,kBAAA,GAAqB,UAAU;EAC1C,MAAM;AAAA;AAAA,KAGK,aAAA,GAAgB,UAAA;EAC3B,GAAA,EAAK,sBAAsB;AAAA;AAAA,KAGhB,aAAA;EACX,aAAA,EAAe,yBAAA;EACf,kBAAA,EAAoB,yBAAA;EACpB,UAAA,EAAY,UAAA;EACZ,IAAA,GAAO,sBAAA;EACP,SAAA;EACA,iBAAA;AAAA;AAAA,KAGW,oBAAA;EACX,MAAA,EAAQ,iBAAA;EACR,OAAA,GAAU,iBAAA,CAAkB,OAAA;EAC5B,WAAA,GAAc,WAAA;AAAA;AAAA,KAGH,iBAAA,GAAoB,GAAG;AAAA,KAEvB,gBAAA,GAAmB,GAAG"}
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@haneullabs/haneulns",
3
3
  "author": "Haneul Labs <build@haneul-labs.com>",
4
- "description": "SuiNS SDK",
5
- "version": "1.0.2",
4
+ "description": "HaneulNS SDK",
5
+ "version": "1.2.5",
6
6
  "license": "Apache-2.0",
7
7
  "private": false,
8
8
  "type": "module",
@@ -10,7 +10,7 @@
10
10
  "types": "./dist/index.d.mts",
11
11
  "keywords": [
12
12
  "Haneul",
13
- "suins",
13
+ "haneulns",
14
14
  "haneullabs"
15
15
  ],
16
16
  "exports": {
@@ -30,27 +30,26 @@
30
30
  "node": ">=16"
31
31
  },
32
32
  "dependencies": {
33
- "axios": "^1.13.5",
33
+ "axios": "^1.17.0",
34
34
  "axios-retry": "^4.5.0"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@types/tmp": "^0.2.6",
38
38
  "ts-retry-promise": "^0.8.1",
39
- "typescript": "^5.9.3",
40
- "vite": "^7.3.1",
41
- "vitest": "^4.0.17",
42
- "@haneullabs/haneul": "^2.4.0",
43
- "@haneullabs/codegen": "^0.8.2"
39
+ "typescript": "^6.0.3",
40
+ "vite": "^8.0.16",
41
+ "vitest": "^4.1.8",
42
+ "@haneullabs/codegen": "^0.11.5"
44
43
  },
45
44
  "peerDependencies": {
46
- "@haneullabs/haneul": "^2.4.0"
45
+ "@haneullabs/haneul": "^2.20.3"
47
46
  },
48
47
  "repository": {
49
48
  "type": "git",
50
- "url": "git+https://github.com/GeunhwaJeong/ts-sdks.git"
49
+ "url": "git+https://github.com/GeunhwaJeong/haneul-ts-sdks.git"
51
50
  },
52
51
  "bugs": {
53
- "url": "https://github.com/mystenlabs/suins-contracts/issues"
52
+ "url": "https://github.com/GeunhwaJeong/haneulns-contracts/issues"
54
53
  },
55
54
  "scripts": {
56
55
  "codegen": "haneul-ts-codegen generate && pnpm lint:fix",
package/src/constants.ts CHANGED
@@ -16,46 +16,46 @@ export const ALLOWED_METADATA = {
16
16
 
17
17
  export const mainPackage: Config = {
18
18
  mainnet: {
19
- packageId: '0x71af035413ed499710980ed8adb010bbf2cc5cacf4ab37c7710a4bb87eb58ba5',
20
- packageIdV1: '0xd22b24490e0bae52676651b4f56660a5ff8022a2576e0089f79b3c88d44e08f0',
21
- packageIdPricing: '0x71af035413ed499710980ed8adb010bbf2cc5cacf4ab37c7710a4bb87eb58ba5',
22
- haneulns: '0x6e0ddefc0ad98889c04bab9639e512c21766c5e6366f89e696956d9be6952871',
19
+ packageId: '0x047dfbd82298ec1c2c70b5743a8c4a00614ff864a580069c635f2dad3a7c76fa',
20
+ packageIdV1: '0x047dfbd82298ec1c2c70b5743a8c4a00614ff864a580069c635f2dad3a7c76fa',
21
+ packageIdPricing: '0x047dfbd82298ec1c2c70b5743a8c4a00614ff864a580069c635f2dad3a7c76fa',
22
+ haneulns: '0x186ad0dd1d4d4bc84564b3c039a0d432ab4d4af851e07cc84f083cc5e850f6d0',
23
23
  discountsPackage: {
24
- packageId: '0x03f625d805339b1b0235ba8c503fa6ea62c88c02ddf14cd9d246d9e1febc0c76',
25
- discountHouseId: '0x4ce82dee11e6f4858509dcdba1a62985f12e5afb054df680a04f16790bfe1d04',
24
+ packageId: '0x0000000000000000000000000000000000000000000000000000000000000000',
25
+ discountHouseId: '0x0000000000000000000000000000000000000000000000000000000000000000',
26
26
  },
27
- subNamesPackageId: '0xe177697e191327901637f8d2c5ffbbde8b1aaac27ec1024c4b62d1ebd1cd7430',
27
+ subNamesPackageId: '0x3ebb0b633d4d56c2eaad2b1849fcc8cddbab832414e91b4159dd4a57c4a720d4',
28
28
  tempSubdomainsProxyPackageId:
29
- '0xf335dfbcb2020fc996250c0d6fd4655c5e2036b0606cac7408aa163f51340886',
29
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
30
30
  coupons: {
31
- packageId: '0xb162340524e0697461c307b9dc530c17e837b0f2c6d7f787da40d29d29681e5e',
31
+ packageId: '0x0000000000000000000000000000000000000000000000000000000000000000',
32
32
  },
33
33
  payments: {
34
- packageId: '0xdd0a4a34152a80d7841710e916a407b2a62961eee5b2188dcfdaa24194f66286',
34
+ packageId: '0x0000000000000000000000000000000000000000000000000000000000000000',
35
35
  },
36
36
  bbb: {
37
- packageId: '0x6268d072063a311f6f0a1db516d06d97c06a3fa6d10e797cad578937a47b3992',
38
- vault: '0x869f5100c0ecc0b35c7edad87ba3d488fd291bdba4a7aae84b70d188f440f393',
37
+ packageId: '0x0000000000000000000000000000000000000000000000000000000000000000',
38
+ vault: '0x0000000000000000000000000000000000000000000000000000000000000000',
39
39
  },
40
40
  pyth: {
41
- pythStateId: '0x1f9310238ee9298fb703c3419030b35b22bb1cc37113e3bb5007c99aec79e5b8',
42
- wormholeStateId: '0xaeab97f96cf9877fee2883315d459552b2b921edc16d7ceac6eab944dd88919c',
41
+ pythStateId: '0x0000000000000000000000000000000000000000000000000000000000000000',
42
+ wormholeStateId: '0x0000000000000000000000000000000000000000000000000000000000000000',
43
43
  },
44
44
  coins: {
45
45
  HANEUL: {
46
46
  type: '0x0000000000000000000000000000000000000000000000000000000000000002::haneul::HANEUL',
47
- feed: '0x23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744',
47
+ feed: '0x0000000000000000000000000000000000000000000000000000000000000000',
48
48
  },
49
49
  NS: {
50
- type: '0x5145494a5f5100e645e4b0aa950fa6b68f614e8c59e17bc5ded3495123a79178::ns::NS',
51
- feed: '0xbb5ff26e47a3a6cc7ec2fce1db996c2a145300edc5acaabe43bf9ff7c5dd5d32',
50
+ type: '0x0000000000000000000000000000000000000000000000000000000000000000::ns::NS',
51
+ feed: '0x0000000000000000000000000000000000000000000000000000000000000000',
52
52
  },
53
53
  USDC: {
54
- type: '0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC',
54
+ type: '0x6b7638d3d91245229f51f48d5c39bcb6ff7023ff022954a0bd94441d8ee20b4a::usdc::USDC',
55
55
  feed: '',
56
56
  },
57
57
  },
58
- registryTableId: '0xe64cd9db9f829c6cc405d9790bd71567ae07259855f4fba6f02c84f52298c106',
58
+ registryTableId: '0xf539703ae28a9f324729506626766909f800a7e40ec90c6f2c8e865103d96525',
59
59
  },
60
60
  testnet: {
61
61
  packageId: '0x40eee27b014a872f5c3330dcd5329aa55c7fe0fcc6e70c6498852e2e3727172e',
@@ -79,7 +79,7 @@ export function reserveDomain(options: ReserveDomainOptions) {
79
79
  export interface ReserveDomainsArguments {
80
80
  _: RawTransactionArgument<string>;
81
81
  haneulns: RawTransactionArgument<string>;
82
- domains: RawTransactionArgument<string[]>;
82
+ domains: RawTransactionArgument<Array<string>>;
83
83
  noYears: RawTransactionArgument<number>;
84
84
  }
85
85
  export interface ReserveDomainsOptions {
@@ -89,7 +89,7 @@ export interface ReserveDomainsOptions {
89
89
  | [
90
90
  _: RawTransactionArgument<string>,
91
91
  haneulns: RawTransactionArgument<string>,
92
- domains: RawTransactionArgument<string[]>,
92
+ domains: RawTransactionArgument<Array<string>>,
93
93
  noYears: RawTransactionArgument<number>,
94
94
  ];
95
95
  }
@@ -35,7 +35,7 @@ export const Auction = new MoveStruct({
35
35
  end_timestamp_ms: bcs.u64(),
36
36
  winner: bcs.Address,
37
37
  current_bid: coin.Coin,
38
- nft: haneulns_registration.SuinsRegistration,
38
+ nft: haneulns_registration.HaneulnsRegistration,
39
39
  },
40
40
  });
41
41
  export const AuctionStartedEvent = new MoveStruct({
@@ -284,7 +284,7 @@ export interface AdminFinalizeAuctionOptions {
284
284
  * provided `operation_limit`:
285
285
  *
286
286
  * - claim the winning bid and place in `AuctionHouse.balance`
287
- * - push the `SuinsRegistration` to the winner
287
+ * - push the `HaneulnsRegistration` to the winner
288
288
  * - push loosing bids back to their respective account owners
289
289
  *
290
290
  * Once all of the above has been done the auction is destroyed, freeing on-chain
@@ -3,7 +3,7 @@
3
3
  **************************************************************/
4
4
  import { MoveStruct, normalizeMoveArguments, type RawTransactionArgument } from '../utils/index.js';
5
5
  import { bcs } from '@haneullabs/haneul/bcs';
6
- import { type Transaction } from '@haneullabs/haneul/transactions';
6
+ import { type Transaction, type TransactionArgument } from '@haneullabs/haneul/transactions';
7
7
  const $moduleName = '@haneulns/core::config';
8
8
  export const Config = new MoveStruct({
9
9
  name: `${$moduleName}::Config`,
@@ -15,7 +15,7 @@ export const Config = new MoveStruct({
15
15
  },
16
16
  });
17
17
  export interface NewArguments {
18
- PublicKey: RawTransactionArgument<number[]>;
18
+ PublicKey: RawTransactionArgument<Array<number>>;
19
19
  ThreeCharPrice: RawTransactionArgument<number | bigint>;
20
20
  FourCharPrice: RawTransactionArgument<number | bigint>;
21
21
  FivePlusCharPrice: RawTransactionArgument<number | bigint>;
@@ -25,7 +25,7 @@ export interface NewOptions {
25
25
  arguments:
26
26
  | NewArguments
27
27
  | [
28
- PublicKey: RawTransactionArgument<number[]>,
28
+ PublicKey: RawTransactionArgument<Array<number>>,
29
29
  ThreeCharPrice: RawTransactionArgument<number | bigint>,
30
30
  FourCharPrice: RawTransactionArgument<number | bigint>,
31
31
  FivePlusCharPrice: RawTransactionArgument<number | bigint>,
@@ -49,7 +49,7 @@ export function _new(options: NewOptions) {
49
49
  }
50
50
  export interface SetPublicKeyOptions {
51
51
  package?: string;
52
- arguments: [_: RawTransactionArgument<string>, _: RawTransactionArgument<number[]>];
52
+ arguments: [_: TransactionArgument, _: RawTransactionArgument<Array<number>>];
53
53
  }
54
54
  export function setPublicKey(options: SetPublicKeyOptions) {
55
55
  const packageAddress = options.package ?? '@haneulns/core';
@@ -64,7 +64,7 @@ export function setPublicKey(options: SetPublicKeyOptions) {
64
64
  }
65
65
  export interface SetThreeCharPriceOptions {
66
66
  package?: string;
67
- arguments: [_: RawTransactionArgument<string>, _: RawTransactionArgument<number | bigint>];
67
+ arguments: [_: TransactionArgument, _: RawTransactionArgument<number | bigint>];
68
68
  }
69
69
  export function setThreeCharPrice(options: SetThreeCharPriceOptions) {
70
70
  const packageAddress = options.package ?? '@haneulns/core';
@@ -79,7 +79,7 @@ export function setThreeCharPrice(options: SetThreeCharPriceOptions) {
79
79
  }
80
80
  export interface SetFourCharPriceOptions {
81
81
  package?: string;
82
- arguments: [_: RawTransactionArgument<string>, _: RawTransactionArgument<number | bigint>];
82
+ arguments: [_: TransactionArgument, _: RawTransactionArgument<number | bigint>];
83
83
  }
84
84
  export function setFourCharPrice(options: SetFourCharPriceOptions) {
85
85
  const packageAddress = options.package ?? '@haneulns/core';
@@ -94,7 +94,7 @@ export function setFourCharPrice(options: SetFourCharPriceOptions) {
94
94
  }
95
95
  export interface SetFivePlusCharPriceOptions {
96
96
  package?: string;
97
- arguments: [_: RawTransactionArgument<string>, _: RawTransactionArgument<number | bigint>];
97
+ arguments: [_: TransactionArgument, _: RawTransactionArgument<number | bigint>];
98
98
  }
99
99
  export function setFivePlusCharPrice(options: SetFivePlusCharPriceOptions) {
100
100
  const packageAddress = options.package ?? '@haneulns/core';
@@ -110,7 +110,7 @@ export function setFivePlusCharPrice(options: SetFivePlusCharPriceOptions) {
110
110
  export interface CalculatePriceOptions {
111
111
  package?: string;
112
112
  arguments: [
113
- _: RawTransactionArgument<string>,
113
+ _: TransactionArgument,
114
114
  _: RawTransactionArgument<number>,
115
115
  _: RawTransactionArgument<number>,
116
116
  ];
@@ -127,11 +127,11 @@ export function calculatePrice(options: CalculatePriceOptions) {
127
127
  });
128
128
  }
129
129
  export interface PublicKeyArguments {
130
- _: RawTransactionArgument<string>;
130
+ _: TransactionArgument;
131
131
  }
132
132
  export interface PublicKeyOptions {
133
133
  package?: string;
134
- arguments: PublicKeyArguments | [_: RawTransactionArgument<string>];
134
+ arguments: PublicKeyArguments | [_: TransactionArgument];
135
135
  }
136
136
  export function publicKey(options: PublicKeyOptions) {
137
137
  const packageAddress = options.package ?? '@haneulns/core';
@@ -146,11 +146,11 @@ export function publicKey(options: PublicKeyOptions) {
146
146
  });
147
147
  }
148
148
  export interface ThreeCharPriceArguments {
149
- _: RawTransactionArgument<string>;
149
+ _: TransactionArgument;
150
150
  }
151
151
  export interface ThreeCharPriceOptions {
152
152
  package?: string;
153
- arguments: ThreeCharPriceArguments | [_: RawTransactionArgument<string>];
153
+ arguments: ThreeCharPriceArguments | [_: TransactionArgument];
154
154
  }
155
155
  export function threeCharPrice(options: ThreeCharPriceOptions) {
156
156
  const packageAddress = options.package ?? '@haneulns/core';
@@ -165,11 +165,11 @@ export function threeCharPrice(options: ThreeCharPriceOptions) {
165
165
  });
166
166
  }
167
167
  export interface FourCharPriceArguments {
168
- _: RawTransactionArgument<string>;
168
+ _: TransactionArgument;
169
169
  }
170
170
  export interface FourCharPriceOptions {
171
171
  package?: string;
172
- arguments: FourCharPriceArguments | [_: RawTransactionArgument<string>];
172
+ arguments: FourCharPriceArguments | [_: TransactionArgument];
173
173
  }
174
174
  export function fourCharPrice(options: FourCharPriceOptions) {
175
175
  const packageAddress = options.package ?? '@haneulns/core';
@@ -184,11 +184,11 @@ export function fourCharPrice(options: FourCharPriceOptions) {
184
184
  });
185
185
  }
186
186
  export interface FivePlusCharPriceArguments {
187
- _: RawTransactionArgument<string>;
187
+ _: TransactionArgument;
188
188
  }
189
189
  export interface FivePlusCharPriceOptions {
190
190
  package?: string;
191
- arguments: FivePlusCharPriceArguments | [_: RawTransactionArgument<string>];
191
+ arguments: FivePlusCharPriceArguments | [_: TransactionArgument];
192
192
  }
193
193
  export function fivePlusCharPrice(options: FivePlusCharPriceOptions) {
194
194
  const packageAddress = options.package ?? '@haneulns/core';
@@ -203,11 +203,11 @@ export function fivePlusCharPrice(options: FivePlusCharPriceOptions) {
203
203
  });
204
204
  }
205
205
  export interface AssertValidUserRegisterableDomainArguments {
206
- _: RawTransactionArgument<string>;
206
+ _: TransactionArgument;
207
207
  }
208
208
  export interface AssertValidUserRegisterableDomainOptions {
209
209
  package?: string;
210
- arguments: AssertValidUserRegisterableDomainArguments | [_: RawTransactionArgument<string>];
210
+ arguments: AssertValidUserRegisterableDomainArguments | [_: TransactionArgument];
211
211
  }
212
212
  export function assertValidUserRegisterableDomain(
213
213
  options: AssertValidUserRegisterableDomainOptions,
@@ -22,7 +22,7 @@ export function haneulTld(options: HaneulTldOptions = {}) {
22
22
  tx.moveCall({
23
23
  package: packageAddress,
24
24
  module: 'constants',
25
- function: 'sui_tld',
25
+ function: 'haneul_tld',
26
26
  });
27
27
  }
28
28
  export interface DefaultImageOptions {
@@ -39,18 +39,18 @@ export function defaultImage(options: DefaultImageOptions = {}) {
39
39
  function: 'default_image',
40
40
  });
41
41
  }
42
- export interface MistPerSuiOptions {
42
+ export interface GeunhwaPerHaneulOptions {
43
43
  package?: string;
44
44
  arguments?: [];
45
45
  }
46
46
  /** The amount of GEUNHWA in 1 HANEUL. */
47
- export function mistPerSui(options: MistPerSuiOptions = {}) {
47
+ export function geunhwaPerHaneul(options: GeunhwaPerHaneulOptions = {}) {
48
48
  const packageAddress = options.package ?? '@haneulns/core';
49
49
  return (tx: Transaction) =>
50
50
  tx.moveCall({
51
51
  package: packageAddress,
52
52
  module: 'constants',
53
- function: 'mist_per_sui',
53
+ function: 'geunhwa_per_haneul',
54
54
  });
55
55
  }
56
56
  export interface MinDomainLengthOptions {
@@ -2,14 +2,22 @@
2
2
  * THIS FILE IS GENERATED AND SHOULD NOT BE MANUALLY MODIFIED *
3
3
  **************************************************************/
4
4
  import {
5
- MoveTuple,
6
5
  MoveStruct,
6
+ MoveTuple,
7
7
  normalizeMoveArguments,
8
8
  type RawTransactionArgument,
9
9
  } from '../utils/index.js';
10
10
  import { bcs } from '@haneullabs/haneul/bcs';
11
11
  import { type Transaction } from '@haneullabs/haneul/transactions';
12
+ import * as domain from './domain.js';
12
13
  const $moduleName = '@haneulns/core::controller';
14
+ export const SubnamePrunedEvent = new MoveStruct({
15
+ name: `${$moduleName}::SubnamePrunedEvent`,
16
+ fields: {
17
+ subdomain: domain.Domain,
18
+ parent_domain: domain.Domain,
19
+ },
20
+ });
13
21
  export const ControllerV2 = new MoveTuple({
14
22
  name: `${$moduleName}::ControllerV2`,
15
23
  fields: [bcs.bool()],
@@ -267,3 +275,89 @@ export function burnExpiredSubname(options: BurnExpiredSubnameOptions) {
267
275
  arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames),
268
276
  });
269
277
  }
278
+ export interface PruneExpiredSubnameArguments {
279
+ haneulns: RawTransactionArgument<string>;
280
+ parent: RawTransactionArgument<string>;
281
+ subdomainName: RawTransactionArgument<string>;
282
+ }
283
+ export interface PruneExpiredSubnameOptions {
284
+ package?: string;
285
+ arguments:
286
+ | PruneExpiredSubnameArguments
287
+ | [
288
+ haneulns: RawTransactionArgument<string>,
289
+ parent: RawTransactionArgument<string>,
290
+ subdomainName: RawTransactionArgument<string>,
291
+ ];
292
+ }
293
+ /**
294
+ * Prunes an expired subdomain record from the registry by name, gated by ownership
295
+ * of the parent. This allows the parent holder to clean up expired subdomain
296
+ * records even when they don't possess the SubDomainRegistration object. After
297
+ * pruning, the subdomain name becomes available for re-registration. The orphaned
298
+ * SubDomainRegistration object (if it still exists) becomes useless.
299
+ *
300
+ * Use this when you control the parent domain but someone else holds the expired
301
+ * subdomain NFT.
302
+ */
303
+ export function pruneExpiredSubname(options: PruneExpiredSubnameOptions) {
304
+ const packageAddress = options.package ?? '@haneulns/core';
305
+ const argumentsTypes = [null, null, '0x1::string::String', '0x2::clock::Clock'] satisfies (
306
+ | string
307
+ | null
308
+ )[];
309
+ const parameterNames = ['haneulns', 'parent', 'subdomainName'];
310
+ return (tx: Transaction) =>
311
+ tx.moveCall({
312
+ package: packageAddress,
313
+ module: 'controller',
314
+ function: 'prune_expired_subname',
315
+ arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames),
316
+ });
317
+ }
318
+ export interface PruneExpiredSubnamesArguments {
319
+ haneulns: RawTransactionArgument<string>;
320
+ parent: RawTransactionArgument<string>;
321
+ subdomainNames: RawTransactionArgument<Array<string>>;
322
+ }
323
+ export interface PruneExpiredSubnamesOptions {
324
+ package?: string;
325
+ arguments:
326
+ | PruneExpiredSubnamesArguments
327
+ | [
328
+ haneulns: RawTransactionArgument<string>,
329
+ parent: RawTransactionArgument<string>,
330
+ subdomainNames: RawTransactionArgument<Array<string>>,
331
+ ];
332
+ }
333
+ /**
334
+ * Best-effort pruning of multiple expired subdomain records for a given parent.
335
+ *
336
+ * This function does **not** abort if individual entries are:
337
+ *
338
+ * - not subdomains,
339
+ * - not direct children of the parent,
340
+ * - missing from the registry,
341
+ * - not expired,
342
+ * - leaf records.
343
+ *
344
+ * It prunes what it can, emitting `SubnamePrunedEvent` for each successfully
345
+ * pruned record, and returns the total count of pruned entries.
346
+ */
347
+ export function pruneExpiredSubnames(options: PruneExpiredSubnamesOptions) {
348
+ const packageAddress = options.package ?? '@haneulns/core';
349
+ const argumentsTypes = [
350
+ null,
351
+ null,
352
+ 'vector<0x1::string::String>',
353
+ '0x2::clock::Clock',
354
+ ] satisfies (string | null)[];
355
+ const parameterNames = ['haneulns', 'parent', 'subdomainNames'];
356
+ return (tx: Transaction) =>
357
+ tx.moveCall({
358
+ package: packageAddress,
359
+ module: 'controller',
360
+ function: 'prune_expired_subnames',
361
+ arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames),
362
+ });
363
+ }