You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. import * as dotevnv from "dotenv"
  2. import {toUtf8String,parseUnits,ContractFactory, parseEther,JsonRpcProvider, Contract, JsonRpcSigner, Wallet,ContractTransactionResponse, MaxInt256
  3. ,Transaction,formatEther,
  4. ZeroHash,ethers,keccak256,id,
  5. hexlify,
  6. BytesLike,
  7. toUtf8Bytes,
  8. zeroPadValue,
  9. stripZerosLeft
  10. } from 'ethers'
  11. import chalk from "chalk";
  12. import {Calulator} from "../inc/calc";
  13. import { TokenIssuer } from "../inc/TokenIssuer";
  14. import {
  15. SecurityToken,
  16. SecurityToken__factory,
  17. } from '../typechain2'
  18. // import { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers";
  19. import { Partition } from '../inc/tokenData';
  20. import { Operator } from '../typechain/contracts/access/Operator';
  21. import { stringify } from 'querystring';
  22. import {checkReceipt,checkReceipt2, setProvider,getDeploymentAddresses,
  23. getElapsed, sleep,getBlockInfo} from '../inc/util'
  24. dotevnv.config();
  25. if (!process.env.RPCURL) {
  26. console.log(`No rpcur value specified...`)
  27. }
  28. console.log(`목적 서버 : ${process.env.RPCURL}`);
  29. import Web3 from 'web3';
  30. const web3 = new Web3();
  31. // 문자열을 bytes32로 변환하는 함수
  32. const toBytes32 = (inputString: string): string => {
  33. return web3.utils.asciiToHex(inputString).padEnd(66, '0'); // 32 bytes로 패딩 추가
  34. };
  35. // bytes32를 문자열로 변환하는 함수
  36. const bytes32ToString = (bytes32: string): string => {
  37. return web3.utils.hexToAscii(bytes32).replace(/\0/g, ''); // null 문자 제거
  38. };
  39. async function balanceOf(tokenAddress: string, operator: Wallet,
  40. isin: string, account: string)
  41. {
  42. const token = new SecurityToken__factory(operator).attach(tokenAddress) as SecurityToken;
  43. await token.connect(operator);
  44. const balance = await token.balanceOfKSD(toBytes32(isin),account);
  45. console.log(balance);
  46. }
  47. async function erasureKSD(address: string, operator: Wallet
  48. ,isin: string, account: string, KSDAccount: string, qty: number, rsnCode: string, slipSeqKSD: string
  49. ) {
  50. const token = new SecurityToken__factory(operator).attach(address) as SecurityToken;
  51. await token.connect(operator);
  52. let r = await token.erasureKSD(toBytes32(isin),account,toBytes32(KSDAccount),qty,toBytes32(rsnCode),toBytes32(slipSeqKSD),{gasLimit: 2100000});
  53. const receipt1 = await r.wait();
  54. console.log(receipt1.hash);
  55. }
  56. const rpcUrl = process.env.RPCURL;
  57. const provider = new JsonRpcProvider(rpcUrl);
  58. setProvider(provider);
  59. const admin = new Wallet('0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3',provider);
  60. // KR5STO000166 (토큰증권 테스트 종목16) -> 0x920c017843904A735458AA9d30779bE5FCfcF411
  61. // KR5STO000177 (토큰증권 테스트 종목17) -> 0x3e7757d67F2DBc9C2D9d69d74eCF0E498988da4F
  62. // KR5STO000188 (토큰증권 테스트 종목18) -> 0x984f4DbAD8fC003138312293Fd431E5D8bAC1daf
  63. // KR5STO000199 (토큰증권 테스트 종목19) -> 0xa36116158Cdfbcc57c3FEB9cc2A1cdfF8Cf5e247
  64. // KR5STO000202 (토큰증권 테스트 종목20) -> 0x93302A7eeD96b27D47Ec692c6560cA5Fd5E9e7ED
  65. // 신한 자기분계좌
  66. const accountShinhanSelf = '0x8909ba8b4dd517de907ab83dc5226352a151f74f';
  67. const ksdAccountShinhanSelf = '000002000001';
  68. // 신한 고객분계좌
  69. const accountShinhan = '0x1C69DB7373505C1b69c9A2Dce0Be88EeE3c5f5e5';
  70. const ksdAccountShinhan = '000002000002';
  71. // 한화 자기분
  72. const accountHanwhaSelf = '0xc575ebd70f293a2d1a74c3cb4058e439f1996922';
  73. const ksdAccountHanwhaSelf = '000021000001';
  74. // 한화 고객분계좌
  75. const accountHanwha = '0xf48de4a0c2939e62891f3c6aca68982975477e45';
  76. const ksdAccountHanwha = '000021000002';
  77. // 메리츠 고객분계좌
  78. const accountMeritz = '0x0886328869e4e1f401e1052a5f4aae8b45f42610';
  79. const ksdAccountMeritz = '000010000002';
  80. async function main() {
  81. const slipSeqKSD = '003202503120000000006';
  82. const rsnCode = '316';
  83. // 종목17
  84. let tokenAddress = '0x3e7757d67F2DBc9C2D9d69d74eCF0E498988da4F';
  85. let symbol = 'KR5STO000177';
  86. let qty = 500000;
  87. let account = accountShinhan;
  88. let ksdAccount = ksdAccountShinhan;
  89. //await erasureKSD(tokenAddress,admin,symbol,account,ksdAccount,qty,rsnCode,slipSeqKSD);
  90. // 종목19
  91. tokenAddress = '0xa36116158Cdfbcc57c3FEB9cc2A1cdfF8Cf5e247';
  92. symbol = 'KR5STO000199';
  93. qty = 150000;
  94. account = accountShinhan;
  95. ksdAccount = ksdAccountShinhan;
  96. //await erasureKSD(tokenAddress,admin,symbol,account,ksdAccount,qty,rsnCode,slipSeqKSD);
  97. qty = 150000;
  98. account = accountHanwha;
  99. ksdAccount = ksdAccountHanwha;
  100. //await erasureKSD(tokenAddress,admin,symbol,account,ksdAccount,qty,rsnCode,slipSeqKSD);
  101. // 종목20
  102. tokenAddress = '0x93302A7eeD96b27D47Ec692c6560cA5Fd5E9e7ED';
  103. symbol = 'KR5STO000202';
  104. qty = 400000;
  105. account = accountShinhan;
  106. ksdAccount = ksdAccountShinhan;
  107. //await erasureKSD(tokenAddress,admin,symbol,account,ksdAccount,qty,rsnCode,slipSeqKSD);
  108. qty = 300000;
  109. account = accountMeritz;
  110. ksdAccount = ksdAccountMeritz;
  111. //await erasureKSD(tokenAddress,admin,symbol,account,ksdAccount,qty,rsnCode,slipSeqKSD);
  112. qty = 300000;
  113. account = accountHanwha;
  114. ksdAccount = ksdAccountHanwha;
  115. //await erasureKSD(tokenAddress,admin,symbol,account,ksdAccount,qty,rsnCode,slipSeqKSD);
  116. await balanceOf(tokenAddress,admin,symbol,accountShinhan);
  117. }
  118. function printParam() {
  119. console.log('##################################################################################');
  120. console.log('disposalLimitSetupKSD');
  121. console.log('isin');
  122. console.log(bytes32ToString('0x4b523553544f3030303138380000000000000000000000000000000000000000'));
  123. console.log('account');
  124. console.log('0x8909ba8b4dd517de907ab83dc5226352a151f74f');
  125. console.log('KSDAccount');
  126. console.log(bytes32ToString('0x3030303030323030303030310000000000000000000000000000000000000000'));
  127. console.log('rsnCode');
  128. console.log(bytes32ToString('0x3331360000000000000000000000000000000000000000000000000000000000'));
  129. console.log('qty');
  130. console.log('250000');
  131. console.log('##################################################################################');
  132. console.log('tokenErasableKSD');
  133. console.log('isin');
  134. console.log(bytes32ToString('0x4b523553544f3030303138380000000000000000000000000000000000000000'));
  135. console.log('todalErasureQty');
  136. console.log('250000');
  137. console.log('KSDAccounts');
  138. console.log(`[${bytes32ToString('0x3030303030323030303030310000000000000000000000000000000000000000')}]`);
  139. console.log('slipSeqKSD');
  140. console.log(bytes32ToString('0x3030333230323530333131303030303030303030360000000000000000000000'));
  141. console.log('amounts');
  142. console.log(`[${250000}]`);
  143. console.log('##################################################################################');
  144. console.log('disposalLimitErasureKSD');
  145. console.log('isin');
  146. console.log(bytes32ToString('0x4b523553544f3030303138380000000000000000000000000000000000000000'));
  147. console.log('account');
  148. console.log('0x8909ba8b4dd517de907ab83dc5226352a151f74f');
  149. console.log('KSDAccount');
  150. console.log(bytes32ToString('0x3030303030323030303030310000000000000000000000000000000000000000'));
  151. console.log('rsnCode');
  152. console.log(bytes32ToString('0x3331360000000000000000000000000000000000000000000000000000000000'));
  153. console.log('qty');
  154. console.log('250000');
  155. console.log('slipSeqKSD');
  156. console.log(bytes32ToString('0x303033323032353033313130303030303030303036'));
  157. }
  158. //printParam();
  159. main();