import * as dotevnv from "dotenv" import {toUtf8String,parseUnits,ContractFactory, parseEther,JsonRpcProvider, Contract, JsonRpcSigner, Wallet,ContractTransactionResponse, MaxInt256 ,Transaction,formatEther, ZeroHash,ethers,keccak256,id, hexlify, BytesLike, toUtf8Bytes, zeroPadValue, stripZerosLeft } from 'ethers' import chalk from "chalk"; import {Calulator} from "../inc/calc"; import { TokenIssuer } from "../inc/TokenIssuer"; import { SecurityToken, SecurityToken__factory, } from '../typechain2' // import { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers"; import { Partition } from '../inc/tokenData'; import { Operator } from '../typechain/contracts/access/Operator'; import { stringify } from 'querystring'; import {checkReceipt,checkReceipt2, setProvider,getDeploymentAddresses, getElapsed, sleep,getBlockInfo} from '../inc/util' dotevnv.config(); if (!process.env.RPCURL) { console.log(`No rpcur value specified...`) } console.log(`목적 서버 : ${process.env.RPCURL}`); import Web3 from 'web3'; const web3 = new Web3(); // 문자열을 bytes32로 변환하는 함수 const toBytes32 = (inputString: string): string => { return web3.utils.asciiToHex(inputString).padEnd(66, '0'); // 32 bytes로 패딩 추가 }; // bytes32를 문자열로 변환하는 함수 const bytes32ToString = (bytes32: string): string => { return web3.utils.hexToAscii(bytes32).replace(/\0/g, ''); // null 문자 제거 }; async function balanceOf(tokenAddress: string, operator: Wallet, isin: string, account: string) { const token = new SecurityToken__factory(operator).attach(tokenAddress) as SecurityToken; await token.connect(operator); const balance = await token.balanceOfKSD(toBytes32(isin),account); console.log(balance); } async function erasureKSD(address: string, operator: Wallet ,isin: string, account: string, KSDAccount: string, qty: number, rsnCode: string, slipSeqKSD: string ) { const token = new SecurityToken__factory(operator).attach(address) as SecurityToken; await token.connect(operator); let r = await token.erasureKSD(toBytes32(isin),account,toBytes32(KSDAccount),qty,toBytes32(rsnCode),toBytes32(slipSeqKSD),{gasLimit: 2100000}); const receipt1 = await r.wait(); console.log(receipt1.hash); } const rpcUrl = process.env.RPCURL; const provider = new JsonRpcProvider(rpcUrl); setProvider(provider); const admin = new Wallet('0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3',provider); // KR5STO000166 (토큰증권 테스트 종목16) -> 0x920c017843904A735458AA9d30779bE5FCfcF411 // KR5STO000177 (토큰증권 테스트 종목17) -> 0x3e7757d67F2DBc9C2D9d69d74eCF0E498988da4F // KR5STO000188 (토큰증권 테스트 종목18) -> 0x984f4DbAD8fC003138312293Fd431E5D8bAC1daf // KR5STO000199 (토큰증권 테스트 종목19) -> 0xa36116158Cdfbcc57c3FEB9cc2A1cdfF8Cf5e247 // KR5STO000202 (토큰증권 테스트 종목20) -> 0x93302A7eeD96b27D47Ec692c6560cA5Fd5E9e7ED // 신한 자기분계좌 const accountShinhanSelf = '0x8909ba8b4dd517de907ab83dc5226352a151f74f'; const ksdAccountShinhanSelf = '000002000001'; // 신한 고객분계좌 const accountShinhan = '0x1C69DB7373505C1b69c9A2Dce0Be88EeE3c5f5e5'; const ksdAccountShinhan = '000002000002'; // 한화 자기분 const accountHanwhaSelf = '0xc575ebd70f293a2d1a74c3cb4058e439f1996922'; const ksdAccountHanwhaSelf = '000021000001'; // 한화 고객분계좌 const accountHanwha = '0xf48de4a0c2939e62891f3c6aca68982975477e45'; const ksdAccountHanwha = '000021000002'; // 메리츠 고객분계좌 const accountMeritz = '0x0886328869e4e1f401e1052a5f4aae8b45f42610'; const ksdAccountMeritz = '000010000002'; async function main() { const slipSeqKSD = '003202503120000000006'; const rsnCode = '316'; // 종목17 let tokenAddress = '0x3e7757d67F2DBc9C2D9d69d74eCF0E498988da4F'; let symbol = 'KR5STO000177'; let qty = 500000; let account = accountShinhan; let ksdAccount = ksdAccountShinhan; //await erasureKSD(tokenAddress,admin,symbol,account,ksdAccount,qty,rsnCode,slipSeqKSD); // 종목19 tokenAddress = '0xa36116158Cdfbcc57c3FEB9cc2A1cdfF8Cf5e247'; symbol = 'KR5STO000199'; qty = 150000; account = accountShinhan; ksdAccount = ksdAccountShinhan; //await erasureKSD(tokenAddress,admin,symbol,account,ksdAccount,qty,rsnCode,slipSeqKSD); qty = 150000; account = accountHanwha; ksdAccount = ksdAccountHanwha; //await erasureKSD(tokenAddress,admin,symbol,account,ksdAccount,qty,rsnCode,slipSeqKSD); // 종목20 tokenAddress = '0x93302A7eeD96b27D47Ec692c6560cA5Fd5E9e7ED'; symbol = 'KR5STO000202'; qty = 400000; account = accountShinhan; ksdAccount = ksdAccountShinhan; //await erasureKSD(tokenAddress,admin,symbol,account,ksdAccount,qty,rsnCode,slipSeqKSD); qty = 300000; account = accountMeritz; ksdAccount = ksdAccountMeritz; //await erasureKSD(tokenAddress,admin,symbol,account,ksdAccount,qty,rsnCode,slipSeqKSD); qty = 300000; account = accountHanwha; ksdAccount = ksdAccountHanwha; //await erasureKSD(tokenAddress,admin,symbol,account,ksdAccount,qty,rsnCode,slipSeqKSD); await balanceOf(tokenAddress,admin,symbol,accountShinhan); } function printParam() { console.log('##################################################################################'); console.log('disposalLimitSetupKSD'); console.log('isin'); console.log(bytes32ToString('0x4b523553544f3030303138380000000000000000000000000000000000000000')); console.log('account'); console.log('0x8909ba8b4dd517de907ab83dc5226352a151f74f'); console.log('KSDAccount'); console.log(bytes32ToString('0x3030303030323030303030310000000000000000000000000000000000000000')); console.log('rsnCode'); console.log(bytes32ToString('0x3331360000000000000000000000000000000000000000000000000000000000')); console.log('qty'); console.log('250000'); console.log('##################################################################################'); console.log('tokenErasableKSD'); console.log('isin'); console.log(bytes32ToString('0x4b523553544f3030303138380000000000000000000000000000000000000000')); console.log('todalErasureQty'); console.log('250000'); console.log('KSDAccounts'); console.log(`[${bytes32ToString('0x3030303030323030303030310000000000000000000000000000000000000000')}]`); console.log('slipSeqKSD'); console.log(bytes32ToString('0x3030333230323530333131303030303030303030360000000000000000000000')); console.log('amounts'); console.log(`[${250000}]`); console.log('##################################################################################'); console.log('disposalLimitErasureKSD'); console.log('isin'); console.log(bytes32ToString('0x4b523553544f3030303138380000000000000000000000000000000000000000')); console.log('account'); console.log('0x8909ba8b4dd517de907ab83dc5226352a151f74f'); console.log('KSDAccount'); console.log(bytes32ToString('0x3030303030323030303030310000000000000000000000000000000000000000')); console.log('rsnCode'); console.log(bytes32ToString('0x3331360000000000000000000000000000000000000000000000000000000000')); console.log('qty'); console.log('250000'); console.log('slipSeqKSD'); console.log(bytes32ToString('0x303033323032353033313130303030303030303036')); } //printParam(); main();