Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. import {toUtf8String,parseUnits,ContractFactory, parseEther,JsonRpcProvider, ethers ,Contract, JsonRpcSigner, Wallet,ContractTransactionResponse, MaxInt256
  2. ,Transaction,formatEther,
  3. decodeBase64
  4. } from 'ethers'
  5. import { connect } from 'http2';
  6. const MMF_ABI = [
  7. // ========== ERC20 기본 함수 ==========
  8. "function name() view returns (string)",
  9. "function symbol() view returns (string)",
  10. "function decimals() view returns (uint8)",
  11. "function totalSupply() view returns (uint256)",
  12. "function balanceOf(address account) view returns (uint256)",
  13. "function transfer(address to, uint256 amount) returns (bool)",
  14. "function allowance(address owner, address spender) view returns (uint256)",
  15. "function approve(address spender, uint256 amount) returns (bool)",
  16. "function transferFrom(address from, address to, uint256 amount) returns (bool)",
  17. // ========== Share-Based 함수 ==========
  18. "function sharesOf(address account) view returns (uint256)",
  19. "function getSharesByTokenAmount(uint256 tokenAmount) view returns (uint256)",
  20. "function getTokenAmountByShares(uint256 shareAmount) view returns (uint256)",
  21. // ========== Purchase 함수 ==========
  22. "function purchaseWithDT(address buyer, uint256 dtAmount) returns (uint256)",
  23. "function processPendingPurchase(address buyer, uint256 index) returns (bool)",
  24. // ========== Redemption 함수 ==========
  25. "function redeemToDT(uint256 tokenAmount) returns (uint256)",
  26. "function redeemAll() returns (uint256)",
  27. // ========== NAV & Rebase 함수 ==========
  28. "function currentNAV() view returns (uint256)",
  29. "function updateNAVAndRebase(uint256 newNAV) returns (bool)",
  30. "function lastNAVUpdateTime() view returns (uint256)",
  31. "function lastRebaseTime() view returns (uint256)",
  32. "function totalRebaseAmount() view returns (uint256)",
  33. "function getNAVDecimal() view returns (uint256, uint256)",
  34. // ========== Lockup 함수 ==========
  35. "function lockupUntil(address) view returns (uint256)",
  36. "function defaultLockupPeriod() view returns (uint256)",
  37. "function getLockupTimeRemaining(address user) view returns (uint256)",
  38. // ========== Pending Purchase 함수 ==========
  39. "function getPendingPurchaseCount(address user) view returns (uint256)",
  40. "function getPendingPurchase(address user, uint256 index) view returns (uint256 dtAmount, uint256 timestamp, uint256 navAtPurchase, bool processed)",
  41. // ========== Access Control 함수 ==========
  42. "function hasRole(bytes32 role, address account) view returns (bool)",
  43. "function paused() view returns (bool)",
  44. // ========== Admin 함수 ==========
  45. "function setDTTokenAddress(address _dtTokenAddress)",
  46. "function setDefaultLockupPeriod(uint256 period)",
  47. "function setUserLockup(address user, uint256 until)",
  48. "function pause()",
  49. "function unpause()",
  50. "function updateNAVWithDecimals(uint256 value, uint256 decimalPlaces) external returns (bool)",
  51. "function getNAVPrecision() external pure returns (uint256)",
  52. // ========== Events ==========
  53. "event Transfer(address indexed from, address indexed to, uint256 value)",
  54. "event Approval(address indexed owner, address indexed spender, uint256 value)",
  55. "event TokensPurchased(address indexed buyer, uint256 dtAmount, uint256 tokenAmount, uint256 nav, uint256 timestamp)",
  56. "event TokensRedeemed(address indexed redeemer, uint256 tokenAmount, uint256 dtAmount, uint256 nav, uint256 timestamp)",
  57. "event NAVUpdated(uint256 oldNAV, uint256 newNAV, uint256 timestamp, address updater)",
  58. "event Rebased(uint256 oldTotalSupply, uint256 newTotalSupply, int256 rebaseAmount, uint256 nav, uint256 timestamp)",
  59. "event LockupUpdated(address indexed user, uint256 lockupUntil)",
  60. "event PurchasePending(address indexed buyer, uint256 dtAmount, uint256 nav, uint256 timestamp)",
  61. "event PurchaseProcessed(address indexed buyer, uint256 index, uint256 timestamp)",
  62. ];
  63. export const SMMF_CONTRACT_ADDRESS =
  64. "0xC290e84BE1886a08760b3468D4C3083A36C17a21"; // sMMF 주소
  65. const PULSE_RPC_URL = "https://secuchain.testnet.stopulse.co.kr/";
  66. export const SOL_ADDRESS = "0x8DFeB78ecEe391149b1c2739cEd0f6992D0a5663";
  67. const PRIVATE_KEY =
  68. "0x47c496fe62e38aebcf4c5298cdae6889efed27b308fb473311d4a209e512f20e";
  69. const PULSE_PRIVATE_KEY =
  70. "0xcd2336d7c471a0f2f1da77e91bcaf71e96e40481415bdb062152b4d045e1702c";
  71. const provider = new ethers.JsonRpcProvider(PULSE_RPC_URL);
  72. const wallet = new ethers.Wallet(PRIVATE_KEY, provider);
  73. const walletAdmin = new ethers.Wallet(PULSE_PRIVATE_KEY, provider);
  74. const contractAdmin = new ethers.Contract(
  75. SMMF_CONTRACT_ADDRESS,
  76. MMF_ABI,
  77. walletAdmin
  78. );
  79. const contract = new ethers.Contract(
  80. SMMF_CONTRACT_ADDRESS,
  81. MMF_ABI,
  82. wallet
  83. );
  84. async function setup() {
  85. const amount = "1000000000";
  86. let tx = await contractAdmin.purchaseWithDT(
  87. SOL_ADDRESS,
  88. ethers.parseEther(amount),
  89. {
  90. gasLimit: 500000, // 가스 한도 증가
  91. gasPrice: 0,
  92. }
  93. );
  94. await tx.wait(1);
  95. const currentNAV = await contractAdmin.currentNAV();
  96. console.log(currentNAV.toString());
  97. // const balance = await mmfToken.balanceOf(userA.address);
  98. const balance = await contractAdmin.balanceOf(SOL_ADDRESS);
  99. console.log(`balance = ${balance.toString()}}`);
  100. }
  101. async function setNav() {
  102. await contractAdmin.updateNAVWithDecimals(10002365, 7);
  103. }
  104. async function view() {
  105. // const precision = await mmfToken.getNAVPrecision();
  106. const precision = await contract.getNAVPrecision();
  107. console.log(`precision = : ${precision.toString()}`);
  108. const currentNAV = await contract.currentNAV();
  109. console.log(`currentNAV = : ${ currentNAV.toString()}`);
  110. const balance = await contract.balanceOf(SOL_ADDRESS);
  111. console.log(`balance = ${balance.toString()}}`);
  112. }
  113. async function main() {
  114. //await setup();
  115. //await setNav();
  116. await view();
  117. }
  118. main();