@haneullabs/haneulns 0.1.0 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (222) hide show
  1. package/CHANGELOG.md +125 -53
  2. package/README.md +3 -3
  3. package/dist/constants.d.mts +15 -0
  4. package/dist/constants.d.mts.map +1 -0
  5. package/dist/constants.mjs +90 -0
  6. package/dist/constants.mjs.map +1 -0
  7. package/dist/contracts/haneulns/controller.mjs +62 -0
  8. package/dist/contracts/haneulns/controller.mjs.map +1 -0
  9. package/dist/contracts/haneulns/deps/haneul/balance.mjs +21 -0
  10. package/dist/contracts/haneulns/deps/haneul/balance.mjs.map +1 -0
  11. package/dist/contracts/haneulns/deps/haneul/vec_map.mjs +37 -0
  12. package/dist/contracts/haneulns/deps/haneul/vec_map.mjs.map +1 -0
  13. package/dist/contracts/haneulns/deps/std/type_name.mjs +17 -0
  14. package/dist/contracts/haneulns/deps/std/type_name.mjs.map +1 -0
  15. package/dist/contracts/haneulns/domain.mjs +23 -0
  16. package/dist/contracts/haneulns/domain.mjs.map +1 -0
  17. package/dist/contracts/haneulns/haneulns.mjs +68 -0
  18. package/dist/contracts/haneulns/haneulns.mjs.map +1 -0
  19. package/dist/contracts/haneulns/name_record.mjs +27 -0
  20. package/dist/contracts/haneulns/name_record.mjs.map +1 -0
  21. package/dist/contracts/haneulns/payment.mjs +162 -0
  22. package/dist/contracts/haneulns/payment.mjs.map +1 -0
  23. package/dist/contracts/haneulns/pricing_config.mjs +25 -0
  24. package/dist/contracts/haneulns/pricing_config.mjs.map +1 -0
  25. package/dist/contracts/haneulns_coupons/coupon_house.mjs +59 -0
  26. package/dist/contracts/haneulns_coupons/coupon_house.mjs.map +1 -0
  27. package/dist/contracts/haneulns_coupons/data.mjs +16 -0
  28. package/dist/contracts/haneulns_coupons/data.mjs.map +1 -0
  29. package/dist/contracts/haneulns_coupons/deps/haneul/bag.mjs +43 -0
  30. package/dist/contracts/haneulns_coupons/deps/haneul/bag.mjs.map +1 -0
  31. package/dist/contracts/haneulns_discounts/deps/haneul/linked_table.mjs +27 -0
  32. package/dist/contracts/haneulns_discounts/deps/haneul/linked_table.mjs.map +1 -0
  33. package/dist/contracts/haneulns_discounts/deps/haneulns/pricing_config.mjs +16 -0
  34. package/dist/contracts/haneulns_discounts/deps/haneulns/pricing_config.mjs.map +1 -0
  35. package/dist/contracts/haneulns_discounts/discounts.mjs +51 -0
  36. package/dist/contracts/haneulns_discounts/discounts.mjs.map +1 -0
  37. package/dist/contracts/haneulns_discounts/free_claims.mjs +60 -0
  38. package/dist/contracts/haneulns_discounts/free_claims.mjs.map +1 -0
  39. package/dist/contracts/haneulns_payments/deps/haneul/vec_map.mjs +37 -0
  40. package/dist/contracts/haneulns_payments/deps/haneul/vec_map.mjs.map +1 -0
  41. package/dist/contracts/haneulns_payments/deps/std/type_name.mjs +17 -0
  42. package/dist/contracts/haneulns_payments/deps/std/type_name.mjs.map +1 -0
  43. package/dist/contracts/haneulns_payments/payments.mjs +145 -0
  44. package/dist/contracts/haneulns_payments/payments.mjs.map +1 -0
  45. package/dist/contracts/pyth/data_source.mjs +20 -0
  46. package/dist/contracts/pyth/data_source.mjs.map +1 -0
  47. package/dist/contracts/pyth/deps/0x0000000000000000000000000000000000000000000000000000000000000002/package.mjs +21 -0
  48. package/dist/contracts/pyth/deps/0x0000000000000000000000000000000000000000000000000000000000000002/package.mjs.map +1 -0
  49. package/dist/contracts/pyth/deps/0x0000000000000000000000000000000000000000000000000000000000000002/table.mjs +19 -0
  50. package/dist/contracts/pyth/deps/0x0000000000000000000000000000000000000000000000000000000000000002/table.mjs.map +1 -0
  51. package/dist/contracts/pyth/deps/0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94/bytes32.mjs +16 -0
  52. package/dist/contracts/pyth/deps/0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94/bytes32.mjs.map +1 -0
  53. package/dist/contracts/pyth/deps/0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94/consumed_vaas.mjs +16 -0
  54. package/dist/contracts/pyth/deps/0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94/consumed_vaas.mjs.map +1 -0
  55. package/dist/contracts/pyth/deps/0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94/external_address.mjs +16 -0
  56. package/dist/contracts/pyth/deps/0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94/external_address.mjs.map +1 -0
  57. package/dist/contracts/pyth/deps/0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94/set.mjs +16 -0
  58. package/dist/contracts/pyth/deps/0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94/set.mjs.map +1 -0
  59. package/dist/contracts/pyth/state.mjs +28 -0
  60. package/dist/contracts/pyth/state.mjs.map +1 -0
  61. package/dist/contracts/utils/index.mjs +120 -0
  62. package/dist/contracts/utils/index.mjs.map +1 -0
  63. package/dist/contracts/wormhole/bytes32.mjs +16 -0
  64. package/dist/contracts/wormhole/bytes32.mjs.map +1 -0
  65. package/dist/contracts/wormhole/consumed_vaas.mjs +16 -0
  66. package/dist/contracts/wormhole/consumed_vaas.mjs.map +1 -0
  67. package/dist/contracts/wormhole/deps/0x0000000000000000000000000000000000000000000000000000000000000002/balance.mjs +16 -0
  68. package/dist/contracts/wormhole/deps/0x0000000000000000000000000000000000000000000000000000000000000002/balance.mjs.map +1 -0
  69. package/dist/contracts/wormhole/deps/0x0000000000000000000000000000000000000000000000000000000000000002/package.mjs +21 -0
  70. package/dist/contracts/wormhole/deps/0x0000000000000000000000000000000000000000000000000000000000000002/package.mjs.map +1 -0
  71. package/dist/contracts/wormhole/deps/0x0000000000000000000000000000000000000000000000000000000000000002/table.mjs +19 -0
  72. package/dist/contracts/wormhole/deps/0x0000000000000000000000000000000000000000000000000000000000000002/table.mjs.map +1 -0
  73. package/dist/contracts/wormhole/external_address.mjs +16 -0
  74. package/dist/contracts/wormhole/external_address.mjs.map +1 -0
  75. package/dist/contracts/wormhole/fee_collector.mjs +20 -0
  76. package/dist/contracts/wormhole/fee_collector.mjs.map +1 -0
  77. package/dist/contracts/wormhole/set.mjs +16 -0
  78. package/dist/contracts/wormhole/set.mjs.map +1 -0
  79. package/dist/contracts/wormhole/state.mjs +31 -0
  80. package/dist/contracts/wormhole/state.mjs.map +1 -0
  81. package/dist/haneulns-client.d.mts +76 -0
  82. package/dist/haneulns-client.d.mts.map +1 -0
  83. package/dist/haneulns-client.mjs +205 -0
  84. package/dist/haneulns-client.mjs.map +1 -0
  85. package/dist/haneulns-transaction.d.mts +144 -0
  86. package/dist/haneulns-transaction.d.mts.map +1 -0
  87. package/dist/haneulns-transaction.mjs +384 -0
  88. package/dist/haneulns-transaction.mjs.map +1 -0
  89. package/dist/helpers.d.mts +22 -0
  90. package/dist/helpers.d.mts.map +1 -0
  91. package/dist/helpers.mjs +45 -0
  92. package/dist/helpers.mjs.map +1 -0
  93. package/dist/index.d.mts +6 -0
  94. package/dist/index.mjs +6 -0
  95. package/dist/pyth/PriceServiceConnection.mjs +35 -0
  96. package/dist/pyth/PriceServiceConnection.mjs.map +1 -0
  97. package/dist/pyth/pyth-helpers.mjs +18 -0
  98. package/dist/pyth/pyth-helpers.mjs.map +1 -0
  99. package/dist/pyth/pyth.mjs +219 -0
  100. package/dist/pyth/pyth.mjs.map +1 -0
  101. package/dist/types.d.mts +88 -0
  102. package/dist/types.d.mts.map +1 -0
  103. package/package.json +24 -20
  104. package/src/contracts/haneulns/admin.ts +114 -0
  105. package/src/contracts/haneulns/auction.ts +341 -0
  106. package/src/contracts/haneulns/config.ts +225 -0
  107. package/src/contracts/haneulns/constants.ts +167 -0
  108. package/src/contracts/haneulns/controller.ts +269 -0
  109. package/src/contracts/haneulns/core_config.ts +208 -0
  110. package/src/contracts/haneulns/deps/haneul/balance.ts +19 -0
  111. package/src/contracts/haneulns/deps/haneul/coin.ts +20 -0
  112. package/src/contracts/haneulns/deps/haneul/linked_table.ts +27 -0
  113. package/src/contracts/haneulns/deps/haneul/table.ts +36 -0
  114. package/src/contracts/haneulns/deps/haneul/vec_map.ts +33 -0
  115. package/src/contracts/haneulns/deps/haneul/vec_set.ts +22 -0
  116. package/src/contracts/haneulns/deps/std/type_name.ts +24 -0
  117. package/src/contracts/haneulns/domain.ts +230 -0
  118. package/src/contracts/haneulns/haneulns.ts +456 -0
  119. package/src/contracts/haneulns/haneulns_registration.ts +200 -0
  120. package/src/contracts/haneulns/name_record.ts +315 -0
  121. package/src/contracts/haneulns/payment.ts +444 -0
  122. package/src/contracts/haneulns/pricing_config.ts +190 -0
  123. package/src/contracts/haneulns/registry.ts +514 -0
  124. package/src/contracts/haneulns/subdomain_registration.ts +63 -0
  125. package/src/contracts/haneulns/update_image.ts +15 -0
  126. package/src/contracts/haneulns_coupons/constants.ts +45 -0
  127. package/src/contracts/haneulns_coupons/coupon.ts +15 -0
  128. package/src/contracts/haneulns_coupons/coupon_house.ts +412 -0
  129. package/src/contracts/haneulns_coupons/data.ts +12 -0
  130. package/src/contracts/haneulns_coupons/deps/haneul/bag.ts +41 -0
  131. package/src/contracts/haneulns_coupons/range.ts +101 -0
  132. package/src/contracts/haneulns_coupons/rules.ts +342 -0
  133. package/src/contracts/haneulns_discounts/deps/haneul/linked_table.ts +27 -0
  134. package/src/contracts/haneulns_discounts/deps/haneulns/pricing_config.ts +10 -0
  135. package/src/contracts/haneulns_discounts/discounts.ts +156 -0
  136. package/src/contracts/haneulns_discounts/free_claims.ts +161 -0
  137. package/src/contracts/haneulns_discounts/house.ts +47 -0
  138. package/src/contracts/haneulns_payments/deps/haneul/vec_map.ts +33 -0
  139. package/src/contracts/haneulns_payments/deps/std/type_name.ts +24 -0
  140. package/src/contracts/haneulns_payments/payments.ts +257 -0
  141. package/src/contracts/haneulns_temp_subdomain_proxy/subdomain_proxy.ts +343 -0
  142. package/src/contracts/pyth/data_source.ts +15 -0
  143. package/src/contracts/pyth/deps/0x0000000000000000000000000000000000000000000000000000000000000002/package.ts +15 -0
  144. package/src/contracts/pyth/deps/0x0000000000000000000000000000000000000000000000000000000000000002/table.ts +13 -0
  145. package/src/contracts/pyth/deps/0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94/bytes32.ts +12 -0
  146. package/src/contracts/pyth/deps/0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94/consumed_vaas.ts +13 -0
  147. package/src/contracts/pyth/deps/0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94/external_address.ts +13 -0
  148. package/src/contracts/pyth/deps/0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94/set.ts +12 -0
  149. package/src/contracts/pyth/state.ts +22 -0
  150. package/src/contracts/utils/index.ts +234 -0
  151. package/src/contracts/wormhole/bytes32.ts +12 -0
  152. package/src/contracts/wormhole/consumed_vaas.ts +13 -0
  153. package/src/contracts/wormhole/deps/0x0000000000000000000000000000000000000000000000000000000000000002/balance.ts +12 -0
  154. package/src/contracts/wormhole/deps/0x0000000000000000000000000000000000000000000000000000000000000002/package.ts +15 -0
  155. package/src/contracts/wormhole/deps/0x0000000000000000000000000000000000000000000000000000000000000002/table.ts +13 -0
  156. package/src/contracts/wormhole/external_address.ts +13 -0
  157. package/src/contracts/wormhole/fee_collector.ts +15 -0
  158. package/src/contracts/wormhole/set.ts +12 -0
  159. package/src/contracts/wormhole/state.ts +25 -0
  160. package/src/haneulns-client.ts +120 -165
  161. package/src/haneulns-transaction.ts +137 -111
  162. package/src/index.ts +2 -2
  163. package/src/pyth/pyth.ts +55 -71
  164. package/src/types.ts +5 -7
  165. package/dist/cjs/constants.d.ts +0 -11
  166. package/dist/cjs/constants.js +0 -120
  167. package/dist/cjs/constants.js.map +0 -7
  168. package/dist/cjs/haneulns-client.d.ts +0 -40
  169. package/dist/cjs/haneulns-client.js +0 -261
  170. package/dist/cjs/haneulns-client.js.map +0 -7
  171. package/dist/cjs/haneulns-transaction.d.ts +0 -105
  172. package/dist/cjs/haneulns-transaction.js +0 -465
  173. package/dist/cjs/haneulns-transaction.js.map +0 -7
  174. package/dist/cjs/helpers.d.ts +0 -18
  175. package/dist/cjs/helpers.js +0 -63
  176. package/dist/cjs/helpers.js.map +0 -7
  177. package/dist/cjs/index.d.ts +0 -5
  178. package/dist/cjs/index.js +0 -39
  179. package/dist/cjs/index.js.map +0 -7
  180. package/dist/cjs/package.json +0 -5
  181. package/dist/cjs/pyth/PriceServiceConnection.d.ts +0 -26
  182. package/dist/cjs/pyth/PriceServiceConnection.js +0 -68
  183. package/dist/cjs/pyth/PriceServiceConnection.js.map +0 -7
  184. package/dist/cjs/pyth/pyth-helpers.d.ts +0 -7
  185. package/dist/cjs/pyth/pyth-helpers.js +0 -36
  186. package/dist/cjs/pyth/pyth-helpers.js.map +0 -7
  187. package/dist/cjs/pyth/pyth.d.ts +0 -66
  188. package/dist/cjs/pyth/pyth.js +0 -270
  189. package/dist/cjs/pyth/pyth.js.map +0 -7
  190. package/dist/cjs/types.d.ts +0 -89
  191. package/dist/cjs/types.js +0 -17
  192. package/dist/cjs/types.js.map +0 -7
  193. package/dist/esm/constants.d.ts +0 -11
  194. package/dist/esm/constants.js +0 -100
  195. package/dist/esm/constants.js.map +0 -7
  196. package/dist/esm/haneulns-client.d.ts +0 -40
  197. package/dist/esm/haneulns-client.js +0 -249
  198. package/dist/esm/haneulns-client.js.map +0 -7
  199. package/dist/esm/haneulns-transaction.d.ts +0 -105
  200. package/dist/esm/haneulns-transaction.js +0 -445
  201. package/dist/esm/haneulns-transaction.js.map +0 -7
  202. package/dist/esm/helpers.d.ts +0 -18
  203. package/dist/esm/helpers.js +0 -43
  204. package/dist/esm/helpers.js.map +0 -7
  205. package/dist/esm/index.d.ts +0 -5
  206. package/dist/esm/index.js +0 -28
  207. package/dist/esm/index.js.map +0 -7
  208. package/dist/esm/package.json +0 -5
  209. package/dist/esm/pyth/PriceServiceConnection.d.ts +0 -26
  210. package/dist/esm/pyth/PriceServiceConnection.js +0 -38
  211. package/dist/esm/pyth/PriceServiceConnection.js.map +0 -7
  212. package/dist/esm/pyth/pyth-helpers.d.ts +0 -7
  213. package/dist/esm/pyth/pyth-helpers.js +0 -16
  214. package/dist/esm/pyth/pyth-helpers.js.map +0 -7
  215. package/dist/esm/pyth/pyth.d.ts +0 -66
  216. package/dist/esm/pyth/pyth.js +0 -250
  217. package/dist/esm/pyth/pyth.js.map +0 -7
  218. package/dist/esm/types.d.ts +0 -89
  219. package/dist/esm/types.js +0 -1
  220. package/dist/esm/types.js.map +0 -7
  221. package/dist/tsconfig.esm.tsbuildinfo +0 -1
  222. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -14,6 +14,13 @@ import { isNestedSubName, isSubName, zeroCoin } from './helpers.js';
14
14
  import type { HaneulnsClient } from './haneulns-client.js';
15
15
  import type { DiscountInfo, ReceiptParams, RegistrationParams, RenewalParams } from './types.js';
16
16
 
17
+ import * as payment from './contracts/haneulns/payment.js';
18
+ import * as controller from './contracts/haneulns/controller.js';
19
+ import * as paymentsModule from './contracts/haneulns_payments/payments.js';
20
+ import * as couponHouse from './contracts/haneulns_coupons/coupon_house.js';
21
+ import * as discounts from './contracts/haneulns_discounts/discounts.js';
22
+ import * as freeClaims from './contracts/haneulns_discounts/free_claims.js';
23
+
17
24
  export class HaneulnsTransaction {
18
25
  haneulnsClient: HaneulnsClient;
19
26
  transaction: Transaction;
@@ -100,22 +107,22 @@ export class HaneulnsTransaction {
100
107
 
101
108
  initRegistration(domain: string): TransactionObjectArgument {
102
109
  const config = this.haneulnsClient.config;
103
- return this.transaction.moveCall({
104
- target: `${config.packageId}::payment::init_registration`,
105
- arguments: [this.transaction.object(config.haneulns), this.transaction.pure.string(domain)],
106
- });
110
+ return this.transaction.add(
111
+ payment.initRegistration({
112
+ package: config.packageId,
113
+ arguments: { haneulns: config.haneulns, domain },
114
+ }),
115
+ );
107
116
  }
108
117
 
109
118
  initRenewal(nft: TransactionObjectInput, years: number): TransactionObjectArgument {
110
119
  const config = this.haneulnsClient.config;
111
- return this.transaction.moveCall({
112
- target: `${config.packageId}::payment::init_renewal`,
113
- arguments: [
114
- this.transaction.object(config.haneulns),
115
- this.transaction.object(nft),
116
- this.transaction.pure.u8(years),
117
- ],
118
- });
120
+ return this.transaction.add(
121
+ payment.initRenewal({
122
+ package: config.packageId,
123
+ arguments: { haneulns: config.haneulns, nft: this.transaction.object(nft), years },
124
+ }),
125
+ );
119
126
  }
120
127
 
121
128
  calculatePrice(
@@ -124,65 +131,71 @@ export class HaneulnsTransaction {
124
131
  priceInfoObjectId: string,
125
132
  ): TransactionObjectArgument {
126
133
  const config = this.haneulnsClient.config;
127
- return this.transaction.moveCall({
128
- target: `${config.payments.packageId}::payments::calculate_price`,
129
- arguments: [
130
- this.transaction.object(config.haneulns),
131
- baseAmount,
132
- this.transaction.object.clock(),
133
- this.transaction.object(priceInfoObjectId),
134
- ],
135
- typeArguments: [paymentType],
136
- });
134
+ return this.transaction.add(
135
+ paymentsModule.calculatePrice({
136
+ package: config.payments.packageId,
137
+ arguments: {
138
+ haneulns: config.haneulns,
139
+ baseAmount,
140
+ priceInfoObject: priceInfoObjectId,
141
+ },
142
+ typeArguments: [paymentType],
143
+ }),
144
+ );
137
145
  }
138
146
 
139
147
  handleBasePayment(
140
148
  paymentIntent: TransactionObjectArgument,
141
- payment: TransactionObjectArgument,
149
+ paymentArg: TransactionObjectArgument,
142
150
  paymentType: string,
143
151
  ): TransactionObjectArgument {
144
152
  const config = this.haneulnsClient.config;
145
- return this.transaction.moveCall({
146
- target: `${config.payments.packageId}::payments::handle_base_payment`,
147
- arguments: [
148
- this.transaction.object(config.haneulns),
149
- this.transaction.object(config.bbb.vault),
150
- paymentIntent,
151
- payment,
152
- ],
153
- typeArguments: [paymentType],
154
- });
153
+ return this.transaction.add(
154
+ paymentsModule.handleBasePayment({
155
+ package: config.payments.packageId,
156
+ arguments: {
157
+ haneulns: config.haneulns,
158
+ bbbVault: config.bbb.vault,
159
+ intent: paymentIntent,
160
+ payment: paymentArg,
161
+ },
162
+ typeArguments: [paymentType],
163
+ }),
164
+ );
155
165
  }
156
166
 
157
167
  handlePayment(
158
168
  paymentIntent: TransactionObjectArgument,
159
- payment: TransactionObjectArgument,
169
+ paymentArg: TransactionObjectArgument,
160
170
  paymentType: string,
161
171
  priceInfoObjectId: string,
162
172
  maxAmount: bigint = MAX_U64,
163
173
  ): TransactionObjectArgument {
164
174
  const config = this.haneulnsClient.config;
165
- return this.transaction.moveCall({
166
- target: `${config.payments.packageId}::payments::handle_payment`,
167
- arguments: [
168
- this.transaction.object(config.haneulns),
169
- this.transaction.object(config.bbb.vault),
170
- paymentIntent,
171
- payment,
172
- this.transaction.object.clock(),
173
- this.transaction.object(priceInfoObjectId),
174
- this.transaction.pure.u64(maxAmount),
175
- ],
176
- typeArguments: [paymentType],
177
- });
175
+ return this.transaction.add(
176
+ paymentsModule.handlePayment({
177
+ package: config.payments.packageId,
178
+ arguments: {
179
+ haneulns: config.haneulns,
180
+ bbbVault: config.bbb.vault,
181
+ intent: paymentIntent,
182
+ payment: paymentArg,
183
+ priceInfoObject: priceInfoObjectId,
184
+ userPriceGuard: maxAmount,
185
+ },
186
+ typeArguments: [paymentType],
187
+ }),
188
+ );
178
189
  }
179
190
 
180
191
  finalizeRegister(receipt: TransactionObjectArgument): TransactionObjectArgument {
181
192
  const config = this.haneulnsClient.config;
182
- return this.transaction.moveCall({
183
- target: `${config.packageId}::payment::register`,
184
- arguments: [receipt, this.transaction.object(config.haneulns), this.transaction.object.clock()],
185
- });
193
+ return this.transaction.add(
194
+ payment.register({
195
+ package: config.packageId,
196
+ arguments: { receipt, haneulns: config.haneulns },
197
+ }),
198
+ );
186
199
  }
187
200
 
188
201
  finalizeRenew(
@@ -190,15 +203,12 @@ export class HaneulnsTransaction {
190
203
  nft: TransactionObjectInput,
191
204
  ): TransactionObjectArgument {
192
205
  const config = this.haneulnsClient.config;
193
- return this.transaction.moveCall({
194
- target: `${config.packageId}::payment::renew`,
195
- arguments: [
196
- receipt,
197
- this.transaction.object(config.haneulns),
198
- this.transaction.object(nft),
199
- this.transaction.object.clock(),
200
- ],
201
- });
206
+ return this.transaction.add(
207
+ payment.renew({
208
+ package: config.packageId,
209
+ arguments: { receipt, haneulns: config.haneulns, nft: this.transaction.object(nft) },
210
+ }),
211
+ );
202
212
  }
203
213
 
204
214
  calculatePriceAfterDiscount(
@@ -206,11 +216,13 @@ export class HaneulnsTransaction {
206
216
  paymentType: string,
207
217
  ): TransactionObjectArgument {
208
218
  const config = this.haneulnsClient.config;
209
- return this.transaction.moveCall({
210
- target: `${config.payments.packageId}::payments::calculate_price_after_discount`,
211
- arguments: [this.transaction.object(config.haneulns), paymentIntent],
212
- typeArguments: [paymentType],
213
- });
219
+ return this.transaction.add(
220
+ paymentsModule.calculatePriceAfterDiscount({
221
+ package: config.payments.packageId,
222
+ arguments: { haneulns: config.haneulns, intent: paymentIntent },
223
+ typeArguments: [paymentType],
224
+ }),
225
+ );
214
226
  }
215
227
 
216
228
  generateReceipt(params: ReceiptParams): TransactionObjectArgument {
@@ -250,15 +262,12 @@ export class HaneulnsTransaction {
250
262
  */
251
263
  applyCoupon(intent: TransactionObjectArgument, couponCode: string): TransactionObjectArgument {
252
264
  const config = this.haneulnsClient.config;
253
- return this.transaction.moveCall({
254
- target: `${config.coupons.packageId}::coupon_house::apply_coupon`,
255
- arguments: [
256
- this.transaction.object(config.haneulns),
257
- intent,
258
- this.transaction.pure.string(couponCode),
259
- this.transaction.object.clock(),
260
- ],
261
- });
265
+ return this.transaction.add(
266
+ couponHouse.applyCoupon({
267
+ package: config.coupons.packageId,
268
+ arguments: { haneulns: config.haneulns, intent, couponCode },
269
+ }),
270
+ );
262
271
  }
263
272
 
264
273
  /**
@@ -268,27 +277,31 @@ export class HaneulnsTransaction {
268
277
  const config = this.haneulnsClient.config;
269
278
 
270
279
  if (discountInfo.isFreeClaim) {
271
- this.transaction.moveCall({
272
- target: `${config.discountsPackage.packageId}::free_claims::free_claim`,
273
- arguments: [
274
- this.transaction.object(config.discountsPackage.discountHouseId),
275
- this.transaction.object(config.haneulns),
276
- intent,
277
- this.transaction.object(discountInfo.discountNft),
278
- ],
279
- typeArguments: [discountInfo.type],
280
- });
280
+ this.transaction.add(
281
+ freeClaims.freeClaim({
282
+ package: config.discountsPackage.packageId,
283
+ arguments: {
284
+ self: config.discountsPackage.discountHouseId,
285
+ haneulns: config.haneulns,
286
+ intent,
287
+ object: this.transaction.object(discountInfo.discountNft),
288
+ },
289
+ typeArguments: [discountInfo.type],
290
+ }),
291
+ );
281
292
  } else {
282
- this.transaction.moveCall({
283
- target: `${config.discountsPackage.packageId}::discounts::apply_percentage_discount`,
284
- arguments: [
285
- this.transaction.object(config.discountsPackage.discountHouseId),
286
- intent,
287
- this.transaction.object(config.haneulns),
288
- this.transaction.object(discountInfo.discountNft),
289
- ],
290
- typeArguments: [discountInfo.type],
291
- });
293
+ this.transaction.add(
294
+ discounts.applyPercentageDiscount({
295
+ package: config.discountsPackage.packageId,
296
+ arguments: {
297
+ self: config.discountsPackage.discountHouseId,
298
+ intent,
299
+ haneulns: config.haneulns,
300
+ _: this.transaction.object(discountInfo.discountNft),
301
+ },
302
+ typeArguments: [discountInfo.type],
303
+ }),
304
+ );
292
305
  }
293
306
  }
294
307
 
@@ -431,13 +444,15 @@ export class HaneulnsTransaction {
431
444
  if (!isValidHaneulNSName(name)) throw new Error('Invalid HaneulNS name');
432
445
  if (!this.haneulnsClient.config.haneulns) throw new Error('HaneulNS Object ID not found');
433
446
 
434
- this.transaction.moveCall({
435
- target: `${this.haneulnsClient.config.packageId}::controller::set_reverse_lookup`,
436
- arguments: [
437
- this.transaction.object(this.haneulnsClient.config.haneulns),
438
- this.transaction.pure.string(normalizeHaneulNSName(name, 'dot')),
439
- ],
440
- });
447
+ this.transaction.add(
448
+ controller.setReverseLookup({
449
+ package: this.haneulnsClient.config.packageId,
450
+ arguments: {
451
+ haneulns: this.haneulnsClient.config.haneulns,
452
+ domainName: normalizeHaneulNSName(name, 'dot'),
453
+ },
454
+ }),
455
+ );
441
456
  }
442
457
 
443
458
  /**
@@ -541,15 +556,26 @@ export class HaneulnsTransaction {
541
556
  burnExpired({ nft, isSubname }: { nft: TransactionObjectInput; isSubname?: boolean }) {
542
557
  if (!this.haneulnsClient.config.haneulns) throw new Error('HaneulNS Object ID not found');
543
558
 
544
- this.transaction.moveCall({
545
- target: `${this.haneulnsClient.config.packageId}::controller::${
546
- isSubname ? 'burn_expired_subname' : 'burn_expired'
547
- }`, // Update this
548
- arguments: [
549
- this.transaction.object(this.haneulnsClient.config.haneulns),
550
- this.transaction.object(nft),
551
- this.transaction.object(HANEUL_CLOCK_OBJECT_ID),
552
- ],
553
- });
559
+ if (isSubname) {
560
+ this.transaction.add(
561
+ controller.burnExpiredSubname({
562
+ package: this.haneulnsClient.config.packageId,
563
+ arguments: {
564
+ haneulns: this.haneulnsClient.config.haneulns,
565
+ nft: this.transaction.object(nft),
566
+ },
567
+ }),
568
+ );
569
+ } else {
570
+ this.transaction.add(
571
+ controller.burnExpired({
572
+ package: this.haneulnsClient.config.packageId,
573
+ arguments: {
574
+ haneulns: this.haneulnsClient.config.haneulns,
575
+ nft: this.transaction.object(nft),
576
+ },
577
+ }),
578
+ );
579
+ }
554
580
  }
555
581
  }
package/src/index.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  // Copyright (c) Mysten Labs, Inc.
2
2
  // SPDX-License-Identifier: Apache-2.0
3
- export { HaneulnsClient } from './haneulns-client.js';
3
+ export { haneulns, HaneulnsClient, type HaneulnsExtensionOptions } from './haneulns-client.js';
4
4
  export { HaneulnsTransaction } from './haneulns-transaction.js';
5
- export type { Network, HaneulnsClientConfig, Config } from './types.js';
5
+ export type { HaneulnsClientConfig, PackageInfo } from './types.js';
6
6
  export { ALLOWED_METADATA, mainPackage } from './constants.js';
7
7
  export {
8
8
  isSubName,
package/src/pyth/pyth.ts CHANGED
@@ -2,7 +2,7 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  import { bcs } from '@haneullabs/haneul/bcs';
5
- import type { HaneulClient } from '@haneullabs/haneul/client';
5
+ import type { ClientWithCoreApi } from '@haneullabs/haneul/client';
6
6
  import type { Transaction, TransactionObjectArgument } from '@haneullabs/haneul/transactions';
7
7
  import { coinWithBalance } from '@haneullabs/haneul/transactions';
8
8
  import { fromBase64, fromHex, parseStructTag } from '@haneullabs/haneul/utils';
@@ -10,6 +10,8 @@ import { fromBase64, fromHex, parseStructTag } from '@haneullabs/haneul/utils';
10
10
  import type { HexString } from './PriceServiceConnection.js';
11
11
  import { PriceServiceConnection } from './PriceServiceConnection.js';
12
12
  import { extractVaaBytesFromAccumulatorMessage } from './pyth-helpers.js';
13
+ import { State as PythState } from '../contracts/pyth/state.js';
14
+ import { State as WormholeState } from '../contracts/wormhole/state.js';
13
15
 
14
16
  const MAX_ARGUMENT_SIZE = 16 * 1024;
15
17
  export type ObjectId = string;
@@ -25,17 +27,19 @@ export class HaneulPriceServiceConnection extends PriceServiceConnection {
25
27
  return latestVaas.map((vaa) => fromBase64(vaa));
26
28
  }
27
29
  }
30
+
31
+ type ParsedPythState = ReturnType<typeof PythState.parse>;
32
+
28
33
  export class HaneulPythClient {
29
- #pythPackageId?: Promise<ObjectId>;
34
+ #pythState?: Promise<ParsedPythState>;
30
35
  #wormholePackageId?: Promise<ObjectId>;
31
36
  #priceFeedObjectIdCache: Map<HexString, Promise<ObjectId>> = new Map();
32
37
  #priceTableInfo?: Promise<{ id: ObjectId; fieldType: ObjectId }>;
33
- #baseUpdateFee?: Promise<number>;
34
- provider: HaneulClient;
38
+ provider: ClientWithCoreApi;
35
39
  pythStateId: ObjectId;
36
40
  wormholeStateId: ObjectId;
37
41
 
38
- constructor(provider: HaneulClient, pythStateId: ObjectId, wormholeStateId: ObjectId) {
42
+ constructor(provider: ClientWithCoreApi, pythStateId: ObjectId, wormholeStateId: ObjectId) {
39
43
  this.provider = provider;
40
44
  this.pythStateId = pythStateId;
41
45
  this.wormholeStateId = wormholeStateId;
@@ -65,7 +69,7 @@ export class HaneulPythClient {
65
69
  * @param tx Transaction block to add commands to.
66
70
  * @param updates Array of price feed updates received from the price service.
67
71
  * @param feedIds Array of feed IDs to update (in hex format).
68
- * @param feeCoin Optional custom SUI coin to use for Pyth oracle fees. If not provided, uses gas coin.
72
+ * @param feeCoin Optional custom HANEUL coin to use for Pyth oracle fees. If not provided, uses gas coin.
69
73
  */
70
74
  async updatePriceFeeds(
71
75
  tx: Transaction,
@@ -154,25 +158,20 @@ export class HaneulPythClient {
154
158
  */
155
159
  async #fetchPriceFeedObjectId(feedId: HexString): Promise<ObjectId> {
156
160
  const { id: tableId, fieldType } = await this.getPriceTableInfo();
157
- const result = await this.provider.getDynamicFieldObject({
161
+
162
+ const result = await this.provider.core.getDynamicField({
158
163
  parentId: tableId,
159
164
  name: {
160
165
  type: `${fieldType}::price_identifier::PriceIdentifier`,
161
- value: {
162
- bytes: Array.from(fromHex(feedId)),
163
- },
166
+ bcs: bcs.byteVector().serialize(fromHex(feedId)).toBytes(),
164
167
  },
165
168
  });
166
169
 
167
- if (!result.data || !result.data.content) {
170
+ if (!result.dynamicField) {
168
171
  throw new Error(`Price feed object ID for feed ID ${feedId} not found.`);
169
172
  }
170
- if (result.data.content.dataType !== 'moveObject') {
171
- throw new Error('Price feed type mismatch');
172
- }
173
173
 
174
- // @ts-ignore
175
- return result.data.content.fields.value;
174
+ return bcs.Address.parse(result.dynamicField.value.bcs);
176
175
  }
177
176
 
178
177
  /**
@@ -198,26 +197,27 @@ export class HaneulPythClient {
198
197
  * @returns Price table object ID and field type
199
198
  */
200
199
  async #fetchPriceTableInfo(): Promise<{ id: ObjectId; fieldType: ObjectId }> {
201
- const result = await this.provider.getDynamicFieldObject({
200
+ const result = await this.provider.core.getDynamicObjectField({
202
201
  parentId: this.pythStateId,
203
202
  name: {
204
203
  type: 'vector<u8>',
205
- value: 'price_info',
204
+ bcs: bcs.string().serialize('price_info').toBytes(),
206
205
  },
207
206
  });
208
207
 
209
- if (!result.data || !result.data.type) {
208
+ if (!result.object) {
210
209
  throw new Error('Price Table not found, contract may not be initialized');
211
210
  }
212
211
 
213
- const priceIdentifier = parseStructTag(result.data.type).typeParams[0];
212
+ const tableType = parseStructTag(result.object.type);
213
+ const priceIdentifier = tableType.typeParams[0];
214
214
  if (
215
215
  typeof priceIdentifier === 'object' &&
216
216
  priceIdentifier !== null &&
217
217
  priceIdentifier.name === 'PriceIdentifier' &&
218
218
  'address' in priceIdentifier
219
219
  ) {
220
- return { id: result.data.objectId, fieldType: priceIdentifier.address };
220
+ return { id: result.object.objectId, fieldType: priceIdentifier.address };
221
221
  } else {
222
222
  throw new Error('fieldType not found');
223
223
  }
@@ -236,77 +236,61 @@ export class HaneulPythClient {
236
236
  * Fetches the package ID for the Wormhole contract (no caching).
237
237
  */
238
238
  async #fetchWormholePackageId(): Promise<ObjectId> {
239
- return await this.#getPackageId(this.wormholeStateId);
240
- }
239
+ const result = await this.provider.core.getObject({
240
+ objectId: this.wormholeStateId,
241
+ include: { content: true },
242
+ });
241
243
 
242
- /**
243
- * Fetches the package ID for the Pyth contract, with caching.
244
- */
245
- getPythPackageId(): Promise<ObjectId> {
246
- if (!this.#pythPackageId) {
247
- this.#pythPackageId = this.#fetchPythPackageId();
244
+ if (!result.object?.content) {
245
+ throw new Error('Unable to fetch Wormhole state object');
248
246
  }
249
- return this.#pythPackageId;
247
+
248
+ const state = WormholeState.parse(result.object.content);
249
+ return state.upgrade_cap.package;
250
250
  }
251
251
 
252
252
  /**
253
- * Fetches the package ID for the Pyth contract (no caching).
253
+ * Fetches and caches the parsed Pyth state object.
254
+ * This is shared between getPythPackageId and getBaseUpdateFee to avoid redundant fetches.
254
255
  */
255
- async #fetchPythPackageId(): Promise<ObjectId> {
256
- return await this.#getPackageId(this.pythStateId);
256
+ #getPythState(): Promise<ParsedPythState> {
257
+ if (!this.#pythState) {
258
+ this.#pythState = this.#fetchPythState();
259
+ }
260
+ return this.#pythState;
257
261
  }
258
262
 
259
263
  /**
260
- * Fetches the package ID for a given object.
261
- *
262
- * @param objectId Object ID to fetch the package ID for.
264
+ * Fetches the Pyth state object (no caching).
263
265
  */
264
- async #getPackageId(objectId: ObjectId): Promise<ObjectId> {
265
- const result = await this.provider.getObject({
266
- id: objectId,
267
- options: { showContent: true },
266
+ async #fetchPythState(): Promise<ParsedPythState> {
267
+ const result = await this.provider.core.getObject({
268
+ objectId: this.pythStateId,
269
+ include: { content: true },
268
270
  });
269
271
 
270
- if (
271
- result.data?.content?.dataType === 'moveObject' &&
272
- 'upgrade_cap' in result.data.content.fields
273
- ) {
274
- const fields = result.data.content.fields as {
275
- upgrade_cap: {
276
- fields: {
277
- package: ObjectId;
278
- };
279
- };
280
- };
281
- return fields.upgrade_cap.fields.package;
272
+ if (!result.object?.content) {
273
+ throw new Error('Unable to fetch Pyth state object');
282
274
  }
283
275
 
284
- throw new Error(`Cannot fetch package ID for object ${objectId}`);
276
+ return PythState.parse(result.object.content);
285
277
  }
278
+
286
279
  /**
287
- * Gets the base update fee from the Pyth state object.
280
+ * Fetches the package ID for the Pyth contract, with caching.
281
+ * Uses the shared Pyth state cache.
288
282
  */
289
- async #fetchBaseUpdateFee(): Promise<number> {
290
- const result = await this.provider.getObject({
291
- id: this.pythStateId,
292
- options: { showContent: true },
293
- });
294
-
295
- if (!result.data || result.data.content?.dataType !== 'moveObject') {
296
- throw new Error('Unable to fetch Pyth state object');
297
- }
298
-
299
- const fields = result.data.content.fields as { base_update_fee: number };
300
- return fields.base_update_fee;
283
+ async getPythPackageId(): Promise<ObjectId> {
284
+ const state = await this.#getPythState();
285
+ return state.upgrade_cap.package;
301
286
  }
302
287
 
303
288
  /**
304
289
  * Returns the cached base update fee, fetching it if necessary.
290
+ * Uses the shared Pyth state cache.
305
291
  */
306
- getBaseUpdateFee(): Promise<number> {
307
- if (!this.#baseUpdateFee) {
308
- this.#baseUpdateFee = this.#fetchBaseUpdateFee();
309
- }
310
- return this.#baseUpdateFee;
292
+ async getBaseUpdateFee(): Promise<number> {
293
+ const state = await this.#getPythState();
294
+ return Number(state.base_update_fee);
311
295
  }
312
296
  }
package/src/types.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  // Copyright (c) Mysten Labs, Inc.
2
2
  // SPDX-License-Identifier: Apache-2.0
3
- import type { HaneulClient } from '@haneullabs/haneul/client';
3
+ import type { ClientWithCoreApi, HaneulClientTypes } from '@haneullabs/haneul/client';
4
4
  import type { TransactionObjectArgument, TransactionObjectInput } from '@haneullabs/haneul/transactions';
5
5
 
6
6
  // Interfaces
@@ -63,8 +63,6 @@ export interface NameRecord {
63
63
  // Types
64
64
  // -----------------
65
65
 
66
- export type Network = 'mainnet' | 'testnet' | 'custom';
67
-
68
66
  export type VersionedPackageId = {
69
67
  latest: string;
70
68
  v1: string;
@@ -101,11 +99,11 @@ export type ReceiptParams = {
101
99
  };
102
100
 
103
101
  export type HaneulnsClientConfig = {
104
- client: HaneulClient;
105
- network?: Network;
106
- config?: Config;
102
+ client: ClientWithCoreApi;
103
+ network?: HaneulClientTypes.Network;
104
+ packageInfo?: PackageInfo;
107
105
  };
108
106
 
109
- export type SuinsPriceList = Map<[number, number], number>;
107
+ export type HaneulnsPriceList = Map<[number, number], number>;
110
108
 
111
109
  export type CoinTypeDiscount = Map<string, number>;
@@ -1,11 +0,0 @@
1
- import type { Config } from './types.js';
2
- export declare const MAX_U64: bigint;
3
- /**
4
- * Allowed keys for metadata.
5
- */
6
- export declare const ALLOWED_METADATA: {
7
- contentHash: string;
8
- avatar: string;
9
- walrusSiteId: string;
10
- };
11
- export declare const mainPackage: Config;