@typus/typus-sdk 1.0.4 → 1.0.6

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 (74) hide show
  1. package/lib/config.json +16 -16
  2. package/lib/constants.d.ts +4 -2
  3. package/lib/constants.js +13 -7
  4. package/lib/mnemonic.json +3 -0
  5. package/lib/scripts/sui.js +4 -4
  6. package/lib/test/authorized/testAuthorizedNewPortfolioVault.js +8 -2
  7. package/lib/test/authorized/testAuthorizedUpdateUpcomingVaultConfig.js +8 -2
  8. package/lib/test/authorized/testAuthorizedUpdateWarmupVaultConfig.js +8 -2
  9. package/lib/test/getVaultData.js +2 -1
  10. package/lib/test/helper/getAuctionMaxSize.js +14 -18
  11. package/lib/test/helper/getUserStatus.js +58 -39
  12. package/lib/test/testMint.js +22 -12
  13. package/lib/test/testSubscribeEvent.js +6 -21
  14. package/lib/test/user/testClaim.js +4 -4
  15. package/lib/test/user/testCompound.js +4 -4
  16. package/lib/test/user/testDeposit.js +19 -17
  17. package/lib/test/user/testHarvest.js +4 -4
  18. package/lib/test/user/testNewBid.js +14 -12
  19. package/lib/test/user/testUnsubscribe.js +4 -4
  20. package/lib/test/user/testWithdraw.js +8 -7
  21. package/lib/utils/auction/getBid.d.ts +1 -1
  22. package/lib/utils/auction/getBid.js +14 -9
  23. package/lib/utils/fetchData.js +2 -6
  24. package/lib/utils/getTypeArgumentFromToken.d.ts +1 -1
  25. package/lib/utils/getTypeArgumentFromToken.js +1 -1
  26. package/lib/utils/getVaultData.d.ts +1 -1
  27. package/lib/utils/getVaultData.js +8 -7
  28. package/lib/utils/getWhiteListFromRegistry.d.ts +1 -1
  29. package/lib/utils/getWhiteListFromRegistry.js +5 -7
  30. package/lib/utils/portfolio/authorized/getAuthorizedAddPortfolioVaultAuthorizedUserTx.d.ts +3 -2
  31. package/lib/utils/portfolio/authorized/getAuthorizedAddPortfolioVaultAuthorizedUserTx.js +12 -14
  32. package/lib/utils/portfolio/authorized/getAuthorizedDeliveryTx.d.ts +2 -1
  33. package/lib/utils/portfolio/authorized/getAuthorizedDeliveryTx.js +15 -13
  34. package/lib/utils/portfolio/authorized/getAuthorizedNewPortfolioVaultTx.d.ts +2 -1
  35. package/lib/utils/portfolio/authorized/getAuthorizedNewPortfolioVaultTx.js +34 -32
  36. package/lib/utils/portfolio/authorized/getAuthorizedRemovePortfolioVaultAuthorizedUserTx.d.ts +3 -2
  37. package/lib/utils/portfolio/authorized/getAuthorizedRemovePortfolioVaultAuthorizedUserTx.js +12 -14
  38. package/lib/utils/portfolio/authorized/getAuthorizedUpdateCapacityTx.d.ts +2 -1
  39. package/lib/utils/portfolio/authorized/getAuthorizedUpdateCapacityTx.js +11 -13
  40. package/lib/utils/portfolio/authorized/getAuthorizedUpdateUpcomingVaultConfigTx.d.ts +2 -1
  41. package/lib/utils/portfolio/authorized/getAuthorizedUpdateUpcomingVaultConfigTx.js +21 -19
  42. package/lib/utils/portfolio/authorized/getAuthorizedUpdateWarmupVaultConfigTx.d.ts +2 -1
  43. package/lib/utils/portfolio/authorized/getAuthorizedUpdateWarmupVaultConfigTx.js +18 -16
  44. package/lib/utils/portfolio/helper/getAuctionMaxSize.d.ts +2 -1
  45. package/lib/utils/portfolio/manager/getAddAuthorizedUserTx.d.ts +2 -1
  46. package/lib/utils/portfolio/manager/getAddAuthorizedUserTx.js +11 -13
  47. package/lib/utils/portfolio/manager/getAddPortfolioVaultAuthorizedUserTx.d.ts +3 -2
  48. package/lib/utils/portfolio/manager/getAddPortfolioVaultAuthorizedUserTx.js +12 -15
  49. package/lib/utils/portfolio/manager/getCloseAuctionTx.d.ts +2 -1
  50. package/lib/utils/portfolio/manager/getCloseAuctionTx.js +16 -14
  51. package/lib/utils/portfolio/manager/getCloseVaultTx.d.ts +2 -1
  52. package/lib/utils/portfolio/manager/getCloseVaultTx.js +10 -12
  53. package/lib/utils/portfolio/manager/getDeliveryTx.d.ts +2 -1
  54. package/lib/utils/portfolio/manager/getDeliveryTx.js +16 -14
  55. package/lib/utils/portfolio/manager/getEvolutionTx.d.ts +2 -1
  56. package/lib/utils/portfolio/manager/getEvolutionTx.js +18 -16
  57. package/lib/utils/portfolio/manager/getNewManagerTx.d.ts +2 -1
  58. package/lib/utils/portfolio/manager/getNewManagerTx.js +10 -11
  59. package/lib/utils/portfolio/manager/getNewPortfolioVaultTx.d.ts +2 -1
  60. package/lib/utils/portfolio/manager/getNewPortfolioVaultTx.js +33 -31
  61. package/lib/utils/portfolio/manager/getRemoveAuthorizedUserTx.d.ts +2 -1
  62. package/lib/utils/portfolio/manager/getRemoveAuthorizedUserTx.js +10 -12
  63. package/lib/utils/portfolio/manager/getRemoveManagerTx.d.ts +2 -1
  64. package/lib/utils/portfolio/manager/getRemoveManagerTx.js +10 -10
  65. package/lib/utils/portfolio/manager/getRemovePortfolioVaultAuthorizedUserTx.d.ts +3 -2
  66. package/lib/utils/portfolio/manager/getRemovePortfolioVaultAuthorizedUserTx.js +12 -15
  67. package/lib/utils/portfolio/manager/getUpdateCapacityTx.d.ts +2 -1
  68. package/lib/utils/portfolio/manager/getUpdateCapacityTx.js +11 -14
  69. package/lib/utils/portfolio/user/getCompoundTx.d.ts +2 -1
  70. package/lib/utils/portfolio/user/getDepositTx.js +3 -7
  71. package/lib/utils/portfolio/user/getNewBidTx.js +3 -2
  72. package/lib/utils/portfolio/user/getUnsubscribeTx.js +3 -2
  73. package/lib/utils/portfolio/user/getWithdrawTx.d.ts +2 -1
  74. package/package.json +2 -2
package/lib/config.json CHANGED
@@ -1,18 +1,18 @@
1
1
  {
2
- "RPC_ENDPOINT": "https://fullnode.devnet.sui.io:443",
3
- "PORTFOLIO_PACKAGE": "0xca767e24d77798642a1a5985824247282b1b11532cd3e77c9d54a394568301d0",
4
- "REGISTRY": "0xcfeb92f91aabe41c760b408018beaa315cf1bd91a5b22e1182742161fd468548",
5
- "MANAGER_CAP": "0x433f41a88e79aa53d9401205ed176b78fd0da2b7d5e7d3da7368162c363e3b47",
6
- "TOKEN_PACKAGE": "0x29fc31d3927124688cc9abee4431b6dec9611beb4677b4e55cebca58641854b6",
7
- "ORACLE_PACKAGE": "0xca767e24d77798642a1a5985824247282b1b11532cd3e77c9d54a394568301d0",
8
- "BTC_ORACLE": "0x88eb5fa06f6d6c3f92d9bce7d6bef8120402c86217d92fad16f0d76a0651a7cf",
9
- "BTC_ORACLE_KEY": "0x4576ce52df78971f2663c36ec5bf13414a4a1914679498cb37d2d5b4c390bc02",
10
- "ETH_ORACLE": "0x8ac6fc5dc66502f4ab5b699c1a96d75e97092c4a9c8d17f8146542cc07bddd13",
11
- "ETH_ORACLE_KEY": "0x5e5887ecfe6503d35d9be2f91f7a17bf182d608a1cbf2639a344b0f571ed0785",
12
- "SUI_ORACLE": "0x3d9230144ea3784fff955d6903702034d01aa41b23e86cf0f1a9871a2a6edadc",
13
- "SUI_ORACLE_KEY": "0xaf2ee26f199b090dbf635899d108b0439f1aa4871c87b3359754638135e6af9c",
14
- "APT_ORACLE": "0xb03f175c578f238a9bd601e8d5814f4fe10670d3b1d910952c1fde430a04c108",
15
- "APT_ORACLE_KEY": "0xd8d1caa7e8b9204fd1d5f25126914f12795e0249db51ba4e5c8f75b4351b0559",
16
- "DOGE_ORACLE": "0xd0329d3af90d21544cae0b040b23fd32609d834279e88a2ca4e9f8f238383bcb",
17
- "DOGE_ORACLE_KEY": "0xc1dfb8734e952be2e573f7b5d61ae6fd41c2a8d917411da48731dde322e52ebf"
2
+ "RPC_ENDPOINT": "https://rpc-testnet.suiscan.xyz:443",
3
+ "PORTFOLIO_PACKAGE": "0xebaa2ad3eacc230f309cd933958cc52684df0a41ae7ac214d186b80f830867d2",
4
+ "REGISTRY": "0xdcb1f0c4d31528a67f89303e3a99e15b9e21c7e22b4123a0e43e90b3fae5ea1e",
5
+ "MANAGER_CAP": "0x2792322e5d741565edf556c7fc5ae9b1329dfe4b81ae7773cb3ff59a4f2eb9dc",
6
+ "TOKEN_PACKAGE": "0xd175cff04f1d49574efb6f138bc3b9b7313915a57b5ca04141fb1cb4f66984b2",
7
+ "ORACLE_PACKAGE": "0x1e2b124f746a339b3cf99b9f969393a96594519aafb1d06517aacfeeae20e7a5",
8
+ "BTC_ORACLE": "0xa38d8946a4c90bb53dc93e69477e52c299ee7df71aa4078a593fc4c443775192",
9
+ "BTC_ORACLE_KEY": "0xf6161e5498c9208a8df465a51257ac2d2cd921a7f6e09a0772657516edea3efc",
10
+ "ETH_ORACLE": "0xf6bddfc88d95dcf6e4f532076b31f21c04a46f82f9b0ec0b2690aa1b23705539",
11
+ "ETH_ORACLE_KEY": "0xb497292fe08d30dd00d76412ec862e53ab9fbf49782ec076e74fff6307959664",
12
+ "SUI_ORACLE": "0x1c1dac30e739be85de84a77b2e29666d3375bbcb34db7229744fe9b8ee50747b",
13
+ "SUI_ORACLE_KEY": "0x96f22c93fd60f7f6b131884c44c36dbb978bf658aaa5cf4b562579cbf928c28a",
14
+ "APT_ORACLE": "0xb52a01cf03c1c7c5cdaee1f043c54f247105cbcc1dd7ccefaafe50f08db78ea6",
15
+ "APT_ORACLE_KEY": "0x7732db6ec77ee39abaa25f7c9dfbbc249a52f1c5bdc224f4534adae2aa9b1622",
16
+ "DOGE_ORACLE": "0x2a38938561d2fae8103fa2db9b415b4437eb4f1afdffaea29389c60abe538c80",
17
+ "DOGE_ORACLE_KEY": "0x560be8aa98b22b353729fe74446eb2da923ca8f27fc4a8c38a3a5b261a9ca562"
18
18
  }
@@ -1,3 +1,4 @@
1
+ import { Connection } from "@mysten/sui.js";
1
2
  export declare const TOKEN_PACKAGE: string;
2
3
  export declare const TOKEN_REGISTRY_SUI = "0x3b87b3f0403f527d28fd1301074a12446f43817a";
3
4
  export declare const ORACLE_PACKAGE: string;
@@ -10,12 +11,13 @@ export declare const DOGE_ORACLE: string;
10
11
  export declare const PORTFOLIO_PACKAGE: string;
11
12
  export declare const REGISTRY: string;
12
13
  export declare const MANAGER_CAP: string;
14
+ export declare const MODULE = "single_collateral";
13
15
  export declare const TEST_MINT_TOKEN = "0x672612858fcb5c6abf944638253142820c251753";
14
16
  export declare const PRICE_DECIMAL = 8;
15
17
  export declare const TOKEN_DECIMAL = 9;
16
18
  export declare const DEFAULT_TYPE_ARGUMENT = "0x2::sui::SUI";
17
19
  export declare const FAKE_TOKEN_TYPE_ARGUMENT = "0x27b3674c685046f66cad1d5496d2967894fa5329::token::USDC";
18
- export declare const TEST_MNEMONIC = "plug grain matter asthma aware critic can lottery blouse uncover sauce speak";
20
+ export declare const TEST_MNEMONIC: string;
19
21
  export declare const TOKEN_NAME: string[];
20
22
  export declare const TOKEN_NAME_TO_MODULE: {
21
23
  BTC: string;
@@ -23,4 +25,4 @@ export declare const TOKEN_NAME_TO_MODULE: {
23
25
  SUI: string;
24
26
  USDC: string;
25
27
  };
26
- export declare const TESTNET_RPC_ENDPOINT = "https://fullnode.testnet.sui.io:443";
28
+ export declare const testnetConnection: Connection;
package/lib/constants.js CHANGED
@@ -3,8 +3,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.TESTNET_RPC_ENDPOINT = exports.TOKEN_NAME_TO_MODULE = exports.TOKEN_NAME = exports.TEST_MNEMONIC = exports.FAKE_TOKEN_TYPE_ARGUMENT = exports.DEFAULT_TYPE_ARGUMENT = exports.TOKEN_DECIMAL = exports.PRICE_DECIMAL = exports.TEST_MINT_TOKEN = exports.MANAGER_CAP = exports.REGISTRY = exports.PORTFOLIO_PACKAGE = exports.DOGE_ORACLE = exports.APT_ORACLE = exports.SUI_ORACLE = exports.ETH_ORACLE = exports.BTC_ORACLE = exports.TIME_ORACLE = exports.ORACLE_PACKAGE = exports.TOKEN_REGISTRY_SUI = exports.TOKEN_PACKAGE = void 0;
6
+ exports.testnetConnection = exports.TOKEN_NAME_TO_MODULE = exports.TOKEN_NAME = exports.TEST_MNEMONIC = exports.FAKE_TOKEN_TYPE_ARGUMENT = exports.DEFAULT_TYPE_ARGUMENT = exports.TOKEN_DECIMAL = exports.PRICE_DECIMAL = exports.TEST_MINT_TOKEN = exports.MODULE = exports.MANAGER_CAP = exports.REGISTRY = exports.PORTFOLIO_PACKAGE = exports.DOGE_ORACLE = exports.APT_ORACLE = exports.SUI_ORACLE = exports.ETH_ORACLE = exports.BTC_ORACLE = exports.TIME_ORACLE = exports.ORACLE_PACKAGE = exports.TOKEN_REGISTRY_SUI = exports.TOKEN_PACKAGE = void 0;
7
+ var sui_js_1 = require("@mysten/sui.js");
7
8
  var config_json_1 = __importDefault(require("./config.json"));
9
+ var mnemonic_json_1 = __importDefault(require("./mnemonic.json"));
8
10
  //publish from sui-dev-token
9
11
  exports.TOKEN_PACKAGE = config_json_1.default.TOKEN_PACKAGE;
10
12
  exports.TOKEN_REGISTRY_SUI = "0x3b87b3f0403f527d28fd1301074a12446f43817a";
@@ -20,18 +22,22 @@ exports.DOGE_ORACLE = config_json_1.default.DOGE_ORACLE;
20
22
  exports.PORTFOLIO_PACKAGE = config_json_1.default.PORTFOLIO_PACKAGE;
21
23
  exports.REGISTRY = config_json_1.default.REGISTRY;
22
24
  exports.MANAGER_CAP = config_json_1.default.MANAGER_CAP;
25
+ exports.MODULE = "single_collateral";
23
26
  //publish from typus-dov/typus-dov
24
27
  exports.TEST_MINT_TOKEN = "0x672612858fcb5c6abf944638253142820c251753";
25
28
  exports.PRICE_DECIMAL = 8;
26
29
  exports.TOKEN_DECIMAL = 9;
27
30
  exports.DEFAULT_TYPE_ARGUMENT = "0x2::sui::SUI";
28
31
  exports.FAKE_TOKEN_TYPE_ARGUMENT = "0x27b3674c685046f66cad1d5496d2967894fa5329::token::USDC";
29
- exports.TEST_MNEMONIC = "plug grain matter asthma aware critic can lottery blouse uncover sauce speak";
32
+ exports.TEST_MNEMONIC = mnemonic_json_1.default.MNEMONIC;
30
33
  exports.TOKEN_NAME = ["BTC", "ETH", "SUI", "USDC", "USDT", "APT", "DOGE"];
31
34
  exports.TOKEN_NAME_TO_MODULE = {
32
- "BTC": "btc",
33
- "ETH": "eth",
34
- "SUI": "sui",
35
- "USDC": "usdc",
35
+ BTC: "btc",
36
+ ETH: "eth",
37
+ SUI: "sui",
38
+ USDC: "usdc",
36
39
  };
37
- exports.TESTNET_RPC_ENDPOINT = "https://fullnode.testnet.sui.io:443";
40
+ exports.testnetConnection = new sui_js_1.Connection({
41
+ fullnode: "https://fullnode.testnet.sui.io:443/",
42
+ faucet: "https://faucet.testnet.sui.io/gas",
43
+ });
@@ -0,0 +1,3 @@
1
+ {
2
+ "MNEMONIC": "plug grain matter asthma aware critic can lottery blouse uncover sauce speak"
3
+ }
@@ -5,7 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  var sui_js_1 = require("@mysten/sui.js");
7
7
  var fs_1 = __importDefault(require("fs"));
8
- var execSync = require('child_process').execSync;
8
+ var execSync = require("child_process").execSync;
9
9
  var provider = new sui_js_1.JsonRpcProvider(sui_js_1.devnetConnection); //for read only operations
10
10
  var owner = "0xd28103a499003bed0b1b9ee52988ecdd2db82224";
11
11
  var obj1 = "0x7e9e58daeb94bbd0450bb9ee9f00e219a1f2b734"; //obj owned by owner
@@ -76,8 +76,8 @@ function readJsonFile(filePath) {
76
76
  // })();
77
77
  // //Fail (without correct signer)
78
78
  // (async () => {
79
- // console.log("test for executeMoveCall()")
80
- // const moveCallTxn = await signer.executeMoveCall({
79
+ // console.log("test for signAndExecuteTransactionBlock()")
80
+ // const moveCallTxn = await signer.signAndExecuteTransactionBlock({
81
81
  // packageObjectId: '0x2',
82
82
  // module: 'devnet_nft',
83
83
  // function: 'mint',
@@ -169,6 +169,6 @@ function readJsonFile(filePath) {
169
169
  // ],
170
170
  // gasBudget: gasBudget,
171
171
  // }
172
- // const moveCallTxn = await signer.executeMoveCall(txn);
172
+ // const moveCallTxn = await signer.signAndExecuteTransactionBlock(txn);
173
173
  // console.log('moveCallTxn', moveCallTxn);
174
174
  // }
@@ -47,7 +47,11 @@ var signer = new sui_js_1.RawSigner(keypair, provider);
47
47
  return __generator(this, function (_a) {
48
48
  switch (_a.label) {
49
49
  case 0:
50
- typeArguments = ["0x8ccdddc0e8d9287953375ae83cda731d7c75e0ec::btc::BTC", "0x8ccdddc0e8d9287953375ae83cda731d7c75e0ec::btc::BTC", "0x8ccdddc0e8d9287953375ae83cda731d7c75e0ec::btc::BTC"];
50
+ typeArguments = [
51
+ "0x8ccdddc0e8d9287953375ae83cda731d7c75e0ec::btc::BTC",
52
+ "0x8ccdddc0e8d9287953375ae83cda731d7c75e0ec::btc::BTC",
53
+ "0x8ccdddc0e8d9287953375ae83cda731d7c75e0ec::btc::BTC",
54
+ ];
51
55
  optionType = "0";
52
56
  period = "0";
53
57
  activationTsMs = "1678694400000";
@@ -72,7 +76,9 @@ var signer = new sui_js_1.RawSigner(keypair, provider);
72
76
  return [4 /*yield*/, (0, getAuthorizedNewPortfolioVaultTx_1.getAuthorizedNewPortfolioVaultTx)(gasBudget, constants_1.PORTFOLIO_PACKAGE, constants_1.REGISTRY, typeArguments, constants_1.TIME_ORACLE, optionType, period, activationTsMs, expirationTsMs, dTokenDecimal, bTokenDecimal, oTokenDecimal, capacity, strikePct, weight, isBuyer, strikeIncrement, lotSize, decaySpeed, initialPrice, finalPrice, auctionDurationInMs, whitelist, leverage, hasNext)];
73
77
  case 1:
74
78
  claimTx = _a.sent();
75
- return [4 /*yield*/, signer.executeMoveCall(claimTx)];
79
+ return [4 /*yield*/, signer.signAndExecuteTransactionBlock({
80
+ transactionBlock: claimTx,
81
+ })];
76
82
  case 2:
77
83
  res = _a.sent();
78
84
  console.log(res);
@@ -47,7 +47,11 @@ var signer = new sui_js_1.RawSigner(keypair, provider);
47
47
  return __generator(this, function (_a) {
48
48
  switch (_a.label) {
49
49
  case 0:
50
- typeArguments = ["0x8ccdddc0e8d9287953375ae83cda731d7c75e0ec::btc::BTC", "0x8ccdddc0e8d9287953375ae83cda731d7c75e0ec::btc::BTC", "0x8ccdddc0e8d9287953375ae83cda731d7c75e0ec::btc::BTC"];
50
+ typeArguments = [
51
+ "0x8ccdddc0e8d9287953375ae83cda731d7c75e0ec::btc::BTC",
52
+ "0x8ccdddc0e8d9287953375ae83cda731d7c75e0ec::btc::BTC",
53
+ "0x8ccdddc0e8d9287953375ae83cda731d7c75e0ec::btc::BTC",
54
+ ];
51
55
  index = "0";
52
56
  strikeIncrement = "20000000000";
53
57
  decaySpeed = "1";
@@ -61,7 +65,9 @@ var signer = new sui_js_1.RawSigner(keypair, provider);
61
65
  return [4 /*yield*/, (0, getAuthorizedUpdateUpcomingVaultConfigTx_1.getAuthorizedUpdateUpcomingVaultConfigTx)(gasBudget, constants_1.PORTFOLIO_PACKAGE, constants_1.REGISTRY, typeArguments, index, strikePct, weight, isBuyer, strikeIncrement, decaySpeed, initialPrice, finalPrice, auctionDurationInMs)];
62
66
  case 1:
63
67
  claimTx = _a.sent();
64
- return [4 /*yield*/, signer.executeMoveCall(claimTx)];
68
+ return [4 /*yield*/, signer.signAndExecuteTransactionBlock({
69
+ transactionBlock: claimTx,
70
+ })];
65
71
  case 2:
66
72
  res = _a.sent();
67
73
  console.log(res);
@@ -47,7 +47,11 @@ var signer = new sui_js_1.RawSigner(keypair, provider);
47
47
  return __generator(this, function (_a) {
48
48
  switch (_a.label) {
49
49
  case 0:
50
- typeArguments = ["0x8ccdddc0e8d9287953375ae83cda731d7c75e0ec::btc::BTC", "0x8ccdddc0e8d9287953375ae83cda731d7c75e0ec::btc::BTC", "0x8ccdddc0e8d9287953375ae83cda731d7c75e0ec::btc::BTC"];
50
+ typeArguments = [
51
+ "0x8ccdddc0e8d9287953375ae83cda731d7c75e0ec::btc::BTC",
52
+ "0x8ccdddc0e8d9287953375ae83cda731d7c75e0ec::btc::BTC",
53
+ "0x8ccdddc0e8d9287953375ae83cda731d7c75e0ec::btc::BTC",
54
+ ];
51
55
  index = "0";
52
56
  strikeIncrement = "20000000000";
53
57
  decaySpeed = "1";
@@ -58,7 +62,9 @@ var signer = new sui_js_1.RawSigner(keypair, provider);
58
62
  return [4 /*yield*/, (0, getAuthorizedUpdateWarmupVaultConfigTx_1.getAuthorizedUpdateWarmupVaultConfigTx)(gasBudget, constants_1.PORTFOLIO_PACKAGE, typeArguments, constants_1.REGISTRY, index, strikeIncrement, decaySpeed, initialPrice, finalPrice, auctionDurationInMs)];
59
63
  case 1:
60
64
  claimTx = _a.sent();
61
- return [4 /*yield*/, signer.executeMoveCall(claimTx)];
65
+ return [4 /*yield*/, signer.signAndExecuteTransactionBlock({
66
+ transactionBlock: claimTx,
67
+ })];
62
68
  case 2:
63
69
  res = _a.sent();
64
70
  console.log(res);
@@ -39,7 +39,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
39
39
  var constants_1 = require("../constants");
40
40
  var getVaultData_1 = require("../utils/getVaultData");
41
41
  var sui_js_1 = require("@mysten/sui.js");
42
- var provider = new sui_js_1.JsonRpcProvider(sui_js_1.devnetConnection); //for read only operations
42
+ var connection = new sui_js_1.Connection({ fullnode: "https://sui-testnet-rpc.allthatnode.com:443" });
43
+ var provider = new sui_js_1.JsonRpcProvider(connection); //for read only operations
43
44
  (function () { return __awaiter(void 0, void 0, void 0, function () {
44
45
  var res;
45
46
  return __generator(this, function (_a) {
@@ -41,33 +41,29 @@ var getVaultData_1 = require("../../utils/getVaultData");
41
41
  var sui_js_1 = require("@mysten/sui.js");
42
42
  var getAuctionMaxSize_1 = require("../../utils/portfolio/helper/getAuctionMaxSize");
43
43
  var getUserStatus_1 = require("../../utils/portfolio/helper/getUserStatus");
44
- var provider = new sui_js_1.JsonRpcProvider(sui_js_1.devnetConnection); //for read only operations
44
+ var provider = new sui_js_1.JsonRpcProvider(constants_1.testnetConnection); //for read only operations
45
45
  (function () { return __awaiter(void 0, void 0, void 0, function () {
46
- var user, dogeOracle, index, portfolioVaults, portfolioVault, tx, res, rawData;
47
- var _a;
48
- return __generator(this, function (_b) {
49
- switch (_b.label) {
46
+ var sender, oracle, index, portfolioVaults, portfolioVault, transactionBlock, res, rawData;
47
+ return __generator(this, function (_a) {
48
+ switch (_a.label) {
50
49
  case 0:
51
- user = "0x4a3b00eac21bfbe062932a5c2b9710245edb2cc2";
52
- dogeOracle = "0x48ab076f16e2bc3fdfb9be44990976dadcc30128";
53
- index = "0";
50
+ sender = "0xb6c7e3b1c61ee81516a8317f221daa035f1503e0ac3ae7a50b61834bc7a3ead9";
51
+ oracle = constants_1.ETH_ORACLE;
52
+ index = "1";
54
53
  return [4 /*yield*/, (0, getVaultData_1.getVaultDataFromRegistry)(constants_1.REGISTRY, provider)];
55
54
  case 1:
56
- portfolioVaults = _b.sent();
55
+ portfolioVaults = _a.sent();
57
56
  portfolioVault = portfolioVaults.find(function (portfolioVault) { return portfolioVault.info.index == index; });
58
57
  console.log(portfolioVault);
59
- _a = {
60
- kind: 'moveCall'
61
- };
62
- return [4 /*yield*/, (0, getAuctionMaxSize_1.getAuctionMaxSize)(constants_1.PORTFOLIO_PACKAGE, portfolioVault.typeArgs, constants_1.REGISTRY, portfolioVault.info.index, dogeOracle)];
58
+ console.log(portfolioVault.config.activeVaultConfig.payoffConfigs);
59
+ return [4 /*yield*/, (0, getAuctionMaxSize_1.getAuctionMaxSize)(constants_1.PORTFOLIO_PACKAGE, constants_1.MODULE, portfolioVault.typeArgs, constants_1.REGISTRY, portfolioVault.info.index, oracle)];
63
60
  case 2:
64
- tx = (_a.data = _b.sent(),
65
- _a);
66
- return [4 /*yield*/, provider.devInspectTransaction(user, tx)];
61
+ transactionBlock = _a.sent();
62
+ return [4 /*yield*/, provider.devInspectTransactionBlock({ transactionBlock: transactionBlock, sender: sender })];
67
63
  case 3:
68
- res = _b.sent();
64
+ res = _a.sent();
69
65
  console.log(res);
70
- rawData = res.results.Ok[0][1].returnValues[0][0];
66
+ rawData = res.results[0].returnValues[0][0];
71
67
  console.log(rawData);
72
68
  console.log((0, getUserStatus_1.U64FromBytes)(rawData.reverse()));
73
69
  return [2 /*return*/];
@@ -36,48 +36,67 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
36
36
  }
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
+ var constants_1 = require("../../constants");
40
+ var getVaultData_1 = require("../../utils/getVaultData");
39
41
  var sui_js_1 = require("@mysten/sui.js");
40
42
  var getUserStatus_1 = require("../../utils/portfolio/helper/getUserStatus");
41
- var provider = new sui_js_1.JsonRpcProvider(sui_js_1.devnetConnection); //for read only operations
43
+ var provider = new sui_js_1.JsonRpcProvider(constants_1.testnetConnection); //for read only operations
42
44
  (function () { return __awaiter(void 0, void 0, void 0, function () {
43
- var rawData, userStatusResult;
45
+ var sender, index, portfolioVaults, portfolioVault, transactionBlock, res, rawData, userStatusResult;
44
46
  return __generator(this, function (_a) {
45
- rawData = res.results.Ok[0][1].returnValues[0][0];
46
- // let rawData: Uint8Array = [
47
- // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
48
- // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
49
- // 0, 228, 11, 84, 2, 0, 0, 0, 0, 0, 0, 0,
50
- // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
51
- // 0, 0, 0, 0, 0, 0, 0, 0
52
- // ];
53
- // {
54
- // active: 0n,
55
- // deactivating: 0n,
56
- // inactive: 0n,
57
- // warmup: 10000000000n,
58
- // bidder: 0n,
59
- // premium: 0n,
60
- // performance_fee: 0n
61
- // }
62
- // let rawData: Uint8Array = [
63
- // 191, 19, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0,
64
- // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
65
- // 65, 205, 94, 5, 0, 0, 0, 0, 128, 150, 152, 0,
66
- // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
67
- // 5, 23, 0, 0, 0, 0, 0, 0
68
- // ];
69
- // {
70
- // active: 9900991n,
71
- // deactivating: 0n,
72
- // inactive: 0n,
73
- // warmup: 90099009n,
74
- // bidder: 10000000n,
75
- // premium: 0n,
76
- // performance_fee: 5893n
77
- // }
78
- console.log(rawData);
79
- userStatusResult = (0, getUserStatus_1.parseUserStatusResult)(rawData);
80
- console.log(userStatusResult);
81
- return [2 /*return*/];
47
+ switch (_a.label) {
48
+ case 0:
49
+ sender = "0xb6c7e3b1c61ee81516a8317f221daa035f1503e0ac3ae7a50b61834bc7a3ead9";
50
+ index = "1";
51
+ return [4 /*yield*/, (0, getVaultData_1.getVaultDataFromRegistry)(constants_1.REGISTRY, provider)];
52
+ case 1:
53
+ portfolioVaults = _a.sent();
54
+ portfolioVault = portfolioVaults.find(function (portfolioVault) { return portfolioVault.info.index == index; });
55
+ console.log(portfolioVault);
56
+ return [4 /*yield*/, (0, getUserStatus_1.getUserStatus)(constants_1.PORTFOLIO_PACKAGE, constants_1.MODULE, portfolioVault.typeArgs, constants_1.REGISTRY, portfolioVault.info.index, sender)];
57
+ case 2:
58
+ transactionBlock = _a.sent();
59
+ return [4 /*yield*/, provider.devInspectTransactionBlock({ transactionBlock: transactionBlock, sender: sender })];
60
+ case 3:
61
+ res = _a.sent();
62
+ console.log(res);
63
+ rawData = res.results[0].returnValues[0][0];
64
+ // let rawData: Uint8Array = [
65
+ // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
66
+ // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
67
+ // 0, 228, 11, 84, 2, 0, 0, 0, 0, 0, 0, 0,
68
+ // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
69
+ // 0, 0, 0, 0, 0, 0, 0, 0
70
+ // ];
71
+ // {
72
+ // active: 0n,
73
+ // deactivating: 0n,
74
+ // inactive: 0n,
75
+ // warmup: 10000000000n,
76
+ // bidder: 0n,
77
+ // premium: 0n,
78
+ // performance_fee: 0n
79
+ // }
80
+ // let rawData: Uint8Array = [
81
+ // 191, 19, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0,
82
+ // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
83
+ // 65, 205, 94, 5, 0, 0, 0, 0, 128, 150, 152, 0,
84
+ // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
85
+ // 5, 23, 0, 0, 0, 0, 0, 0
86
+ // ];
87
+ // {
88
+ // active: 9900991n,
89
+ // deactivating: 0n,
90
+ // inactive: 0n,
91
+ // warmup: 90099009n,
92
+ // bidder: 10000000n,
93
+ // premium: 0n,
94
+ // performance_fee: 5893n
95
+ // }
96
+ console.log(rawData);
97
+ userStatusResult = (0, getUserStatus_1.parseUserStatusResult)(rawData);
98
+ console.log(userStatusResult);
99
+ return [2 /*return*/];
100
+ }
82
101
  });
83
102
  }); })();
@@ -56,7 +56,9 @@ var mintAmount = 1000500000;
56
56
  return [4 /*yield*/, (0, getMintTx_1.getMintTx)(gasBudget, constants_1.TOKEN_PACKAGE, tokenRegistry, moduleName, mintAmount)];
57
57
  case 2:
58
58
  mintTx = _a.sent();
59
- return [4 /*yield*/, signer.executeMoveCall(mintTx)];
59
+ return [4 /*yield*/, signer.signAndExecuteTransactionBlock({
60
+ transactionBlock: mintTx,
61
+ })];
60
62
  case 3:
61
63
  moveCallTxn = _a.sent();
62
64
  return [4 /*yield*/, checkData(moveCallTxn, tokenRegistry)];
@@ -74,23 +76,31 @@ function prepareData(tokenRegistry) {
74
76
  case 0:
75
77
  _a.trys.push([0, 2, , 3]);
76
78
  console.log("test for mint, try to mint " + mintAmount + " ...");
77
- return [4 /*yield*/, provider.getObject(tokenRegistry)];
79
+ return [4 /*yield*/, provider.getObject({ id: tokenRegistry })];
78
80
  case 1:
79
81
  obj = _a.sent();
80
- if (obj.status != "Exists") {
82
+ if (obj.error != undefined) {
81
83
  console.log("obj not exists");
82
84
  return [2 /*return*/];
83
85
  }
84
- type_1 = obj.details.data.fields.treasury_cap.fields.total_supply.type;
86
+ type_1 =
87
+ //@ts-ignore
88
+ obj.details.data.fields.treasury_cap.fields.total_supply.type;
85
89
  console.log("type arugment : " + type_1);
86
- tokenName = constants_1.TOKEN_NAME.find(function (e) { return type_1.includes(e); });
90
+ tokenName = constants_1.TOKEN_NAME.find(function (e) {
91
+ return type_1.includes(e);
92
+ });
87
93
  if (!tokenName) {
88
94
  console.log("can't find token in type: " + type_1);
89
95
  return [2 /*return*/];
90
96
  }
91
97
  moudleName = constants_1.TOKEN_NAME_TO_MODULE[tokenName];
92
98
  //@ts-ignore
93
- console.log("Before: total mint fake " + tokenName + " token in the registry: " + obj.details.data.fields.treasury_cap.fields.total_supply.fields.value);
99
+ console.log("Before: total mint fake " +
100
+ tokenName +
101
+ " token in the registry: " +
102
+ //@ts-ignore
103
+ obj.details.data.fields.treasury_cap.fields.total_supply.fields.value);
94
104
  return [2 /*return*/, moudleName];
95
105
  case 2:
96
106
  e_1 = _a.sent();
@@ -109,22 +119,22 @@ function checkData(moveCallTxn, tokenRegistry) {
109
119
  case 0:
110
120
  _a.trys.push([0, 4, , 5]);
111
121
  digest = moveCallTxn.EffectsCert.certificate.transactionDigest;
112
- return [4 /*yield*/, provider.getTransactionWithEffects(digest)];
122
+ return [4 /*yield*/, provider.getTransactionBlock({ digest: digest })];
113
123
  case 1:
114
124
  txn = _a.sent();
115
125
  tokenObjectId = txn.effects.created[0].reference.objectId;
116
- return [4 /*yield*/, provider.getObject(tokenObjectId)
117
- //@ts-ignore
118
- ];
126
+ return [4 /*yield*/, provider.getObject({ id: tokenObjectId })];
119
127
  case 2:
120
128
  tokenObj = _a.sent();
121
129
  newTokenId = tokenObj.details.data.fields.id.id;
122
130
  console.log("newTokenId: " + newTokenId);
123
- return [4 /*yield*/, provider.getObject(tokenRegistry)];
131
+ return [4 /*yield*/, provider.getObject({ id: tokenRegistry })];
124
132
  case 3:
125
133
  obj = _a.sent();
126
134
  //@ts-ignore
127
- console.log("After: total mint in the registry: " + obj.details.data.fields.treasury_cap.fields.total_supply.fields.value);
135
+ console.log("After: total mint in the registry: " +
136
+ //@ts-ignore
137
+ obj.details.data.fields.treasury_cap.fields.total_supply.fields.value);
128
138
  return [3 /*break*/, 5];
129
139
  case 4:
130
140
  e_2 = _a.sent();
@@ -40,30 +40,15 @@ var sui_js_1 = require("@mysten/sui.js");
40
40
  var provider = new sui_js_1.JsonRpcProvider(sui_js_1.devnetConnection); //for read only operations
41
41
  var devnetNftFilter = {
42
42
  All: [
43
- { EventType: 'MoveEvent' },
44
- { Package: '0x2' },
45
- { Module: 'devnet_nft' },
43
+ { EventType: "MoveEvent" },
44
+ { Package: "0x2" },
45
+ { Module: "devnet_nft" },
46
46
  ],
47
47
  };
48
48
  (function () { return __awaiter(void 0, void 0, void 0, function () {
49
- var subscriptionId, subFoundAndRemoved;
50
49
  return __generator(this, function (_a) {
51
- switch (_a.label) {
52
- case 0:
53
- console.log("test for subscribeEvent()");
54
- return [4 /*yield*/, provider.subscribeEvent(
55
- // { "SenderAddress": "0x82a2d7e3875b49217702d61b7411576af12ecab3" },
56
- { "All": [] }, function (event) {
57
- console.log(event);
58
- // handle subscription notification message here. This function is called once per subscription message.
59
- })];
60
- case 1:
61
- subscriptionId = _a.sent();
62
- return [4 /*yield*/, provider.unsubscribeEvent(subscriptionId)];
63
- case 2:
64
- subFoundAndRemoved = _a.sent();
65
- return [2 /*return*/];
66
- }
50
+ console.log("test for subscribeEvent()");
51
+ return [2 /*return*/];
67
52
  });
68
53
  }); })();
69
54
  // (async () => {
@@ -71,7 +56,7 @@ var devnetNftFilter = {
71
56
  // console.log(await subscribeEvent())
72
57
  // })()
73
58
  // async function subscribeEvent(): Promise<any[]> {
74
- // let results: any[] = [];
59
+ // let results[] = [];
75
60
  // let msg = {
76
61
  // jsonrpc: "2.0",
77
62
  // id: 1,
@@ -44,7 +44,7 @@ var provider = new sui_js_1.JsonRpcProvider(sui_js_1.devnetConnection); //for re
44
44
  var keypair = sui_js_1.Ed25519Keypair.deriveKeypair(constants_1.TEST_MNEMONIC);
45
45
  var signer = new sui_js_1.RawSigner(keypair, provider);
46
46
  (function () { return __awaiter(void 0, void 0, void 0, function () {
47
- var index, portfolioVaults, portfolioVault, typeArguments, gasBudget, claimTx;
47
+ var index, portfolioVaults, portfolioVault, typeArguments, gasBudget, transactionBlock;
48
48
  return __generator(this, function (_a) {
49
49
  switch (_a.label) {
50
50
  case 0:
@@ -56,10 +56,10 @@ var signer = new sui_js_1.RawSigner(keypair, provider);
56
56
  typeArguments = portfolioVault.typeArgs;
57
57
  console.log(portfolioVault);
58
58
  gasBudget = 100000;
59
- return [4 /*yield*/, (0, getClaimTx_1.getClaimTx)(gasBudget, constants_1.PORTFOLIO_PACKAGE, constants_1.REGISTRY, typeArguments, index)];
59
+ return [4 /*yield*/, (0, getClaimTx_1.getClaimTx)(gasBudget, constants_1.PORTFOLIO_PACKAGE, constants_1.MODULE, constants_1.REGISTRY, typeArguments, index)];
60
60
  case 2:
61
- claimTx = _a.sent();
62
- return [4 /*yield*/, signer.executeMoveCall(claimTx)];
61
+ transactionBlock = _a.sent();
62
+ return [4 /*yield*/, signer.signAndExecuteTransactionBlock({ transactionBlock: transactionBlock })];
63
63
  case 3:
64
64
  _a.sent();
65
65
  return [2 /*return*/];
@@ -44,7 +44,7 @@ var provider = new sui_js_1.JsonRpcProvider(sui_js_1.devnetConnection); //for re
44
44
  var keypair = sui_js_1.Ed25519Keypair.deriveKeypair(constants_1.TEST_MNEMONIC);
45
45
  var signer = new sui_js_1.RawSigner(keypair, provider);
46
46
  (function () { return __awaiter(void 0, void 0, void 0, function () {
47
- var index, portfolioVaults, portfolioVault, typeArguments, gasBudget, claimTx;
47
+ var index, portfolioVaults, portfolioVault, typeArguments, gasBudget, transactionBlock;
48
48
  return __generator(this, function (_a) {
49
49
  switch (_a.label) {
50
50
  case 0:
@@ -56,10 +56,10 @@ var signer = new sui_js_1.RawSigner(keypair, provider);
56
56
  typeArguments = portfolioVault.typeArgs;
57
57
  console.log(portfolioVault);
58
58
  gasBudget = 100000;
59
- return [4 /*yield*/, (0, getCompoundTx_1.getCompoundTx)(gasBudget, constants_1.PORTFOLIO_PACKAGE, constants_1.REGISTRY, typeArguments, index)];
59
+ return [4 /*yield*/, (0, getCompoundTx_1.getCompoundTx)(gasBudget, constants_1.PORTFOLIO_PACKAGE, constants_1.MODULE, constants_1.REGISTRY, typeArguments, index)];
60
60
  case 2:
61
- claimTx = _a.sent();
62
- return [4 /*yield*/, signer.executeMoveCall(claimTx)];
61
+ transactionBlock = _a.sent();
62
+ return [4 /*yield*/, signer.signAndExecuteTransactionBlock({ transactionBlock: transactionBlock })];
63
63
  case 3:
64
64
  _a.sent();
65
65
  return [2 /*return*/];
@@ -40,38 +40,40 @@ var constants_1 = require("../../constants");
40
40
  var sui_js_1 = require("@mysten/sui.js");
41
41
  var getDepositTx_1 = require("../../utils/portfolio/user/getDepositTx");
42
42
  var getVaultData_1 = require("../../utils/getVaultData");
43
- var provider = new sui_js_1.JsonRpcProvider(sui_js_1.devnetConnection); //for read only operations
43
+ var connection = new sui_js_1.Connection({ fullnode: "https://rpc-testnet.suiscan.xyz:443" });
44
+ var provider = new sui_js_1.JsonRpcProvider(connection); //for read only operations
44
45
  var keypair = sui_js_1.Ed25519Keypair.deriveKeypair(constants_1.TEST_MNEMONIC);
45
46
  var signer = new sui_js_1.RawSigner(keypair, provider);
46
47
  (function () { return __awaiter(void 0, void 0, void 0, function () {
47
- var depositAmount, index, portfolioVaults, portfolioVault, dToken, typeArguments, vaultIndex, coinObjs, _a, _b, coins, gasBudget, depositTx, res;
48
- return __generator(this, function (_c) {
49
- switch (_c.label) {
48
+ var depositAmount, index, portfolioVaults, portfolioVault, dToken, typeArguments, vaultIndex, coinObjs, _a, _b, coins, gasBudget, transactionBlock, res;
49
+ var _c;
50
+ return __generator(this, function (_d) {
51
+ switch (_d.label) {
50
52
  case 0:
51
53
  depositAmount = "100000000";
52
- index = "0";
53
- return [4 /*yield*/, (0, getVaultData_1.getVaultDataFromRegistry)(constants_1.REGISTRY, provider)];
54
+ index = "1";
55
+ return [4 /*yield*/, (0, getVaultData_1.getVaultDataFromRegistry)(constants_1.REGISTRY, provider, index)];
54
56
  case 1:
55
- portfolioVaults = _c.sent();
57
+ portfolioVaults = _d.sent();
56
58
  portfolioVault = portfolioVaults.find(function (portfolioVault) { return portfolioVault.info.index == index; });
57
- console.log(portfolioVault);
58
59
  dToken = portfolioVault.typeArgs[0];
59
60
  typeArguments = portfolioVault.typeArgs;
60
61
  vaultIndex = portfolioVault.info.index;
61
- _b = (_a = provider).selectCoinSetWithCombinedBalanceGreaterThanOrEqual;
62
+ _b = (_a = provider).getCoins;
63
+ _c = {};
62
64
  return [4 /*yield*/, signer.getAddress()];
63
- case 2: return [4 /*yield*/, _b.apply(_a, [_c.sent(), BigInt(depositAmount), dToken])];
65
+ case 2: return [4 /*yield*/, _b.apply(_a, [(_c.owner = _d.sent(), _c.coinType = dToken, _c)])];
64
66
  case 3:
65
- coinObjs = _c.sent();
66
- coins = coinObjs.map(function (coin) { return coin.details.reference.objectId.toString(); });
67
+ coinObjs = _d.sent();
68
+ coins = coinObjs.data.map(function (coin) { return coin.coinObjectId; });
67
69
  console.log("test for deposit, try to deposit " + coins + " for " + depositAmount + " ...");
68
- gasBudget = 100000;
69
- return [4 /*yield*/, (0, getDepositTx_1.getDepositTx)(gasBudget, constants_1.PORTFOLIO_PACKAGE, constants_1.REGISTRY, typeArguments, vaultIndex, coins, depositAmount)];
70
+ gasBudget = 100000000;
71
+ return [4 /*yield*/, (0, getDepositTx_1.getDepositTx)(gasBudget, constants_1.PORTFOLIO_PACKAGE, constants_1.MODULE, constants_1.REGISTRY, typeArguments, vaultIndex, coins, depositAmount)];
70
72
  case 4:
71
- depositTx = _c.sent();
72
- return [4 /*yield*/, signer.executeMoveCall(depositTx)];
73
+ transactionBlock = _d.sent();
74
+ return [4 /*yield*/, signer.signAndExecuteTransactionBlock({ transactionBlock: transactionBlock })];
73
75
  case 5:
74
- res = _c.sent();
76
+ res = _d.sent();
75
77
  console.log(res);
76
78
  return [2 /*return*/];
77
79
  }