Simon Lee 9 months ago
parent
commit
07617b8d97
8 changed files with 695 additions and 86 deletions
  1. 4
    1
      .env
  2. 24
    19
      KSD01/listen.ts
  3. 21
    10
      KSD01/start.ts
  4. 10
    37
      KSD01/start2.ts
  5. 163
    0
      KSD02/listen.ts
  6. 217
    0
      KSD02/start.ts
  7. 207
    0
      KSD03/start.ts
  8. 49
    19
      test.json

+ 4
- 1
.env View File

@@ -5,7 +5,10 @@
# CHAINID=1337

#OCI
RPCURL=http://193.123.252.127:80
#RPCURL=http://193.123.252.127:80
#WSURL=ws://193.123.252.127/ws

RPCURL=http://132.145.89.161:8545
CHAINID=1337
GATE_WAY=http://api.stopulse.co.kr/main/v1/
GATE_WAY_RAW=http://api.stopulse.co.kr/

+ 24
- 19
KSD01/listen.ts View File

@@ -40,18 +40,6 @@ const bytes32ToString = (bytes32: string): string => {
return web3.utils.hexToAscii(bytes32).replace(/\0/g, ''); // null 문자 제거
};


// function toBytes32(data: string): BytesLike {
// return hexlify(zeroPadValue(toUtf8Bytes(data), 32));
// }
// /**
// * Converts solidity byte32 to utf8 string
// */
// function bytes32ToString(data: BytesLike): string {
// return toUtf8String(stripZerosLeft(data));
// }

async function balanceOf(tokenAddress: string, operator: Wallet,
isin: string, account: string)
{
@@ -65,13 +53,23 @@ async function balanceOf(tokenAddress: string, operator: Wallet,

}

// event TokenIssuableKSD2(
// bytes32 isin,
// uint256 totalIssueQty,
// bytes32[] KSDAccounts,
// uint256[] amounts,
// bytes32 slipSeqKSD
// );
async function issueKSD(address: string, operator: Wallet
,isin: string, account: string, KSDAccount: string, qty: number, slipSeqKSD: string
) {
const token = new SecurityToken__factory(operator).attach(address) as SecurityToken;
await token.connect(operator);

// const decimals = await token.decimals();
// console.log(decimals);
// const symbol = await token.symbol();
// console.log(symbol);
// const is = await token.retrieveIsinKSD(toBytes32(isin));
// console.log( bytes32ToString(is));

let r = await token.issueKSD(toBytes32(isin),account,toBytes32(KSDAccount),qty,toBytes32(slipSeqKSD),{gasLimit: 2100000});
const receipt1 = await r.wait();
console.log(receipt1.hash);
}

async function listenIssuable(tokenAddress: string, operator: Wallet, isin: string) {

@@ -83,6 +81,13 @@ async function listenIssuable(tokenAddress: string, operator: Wallet, isin: stri
console.log(`TokenIssuableKSD2 event received at ${tokenAddress} , ${isin}`);
console.log(`${isin} , ${totalIssueQty} , ${KSDAccounts} , ${amounts} , ${slipSeqKSD}`);
console.log(event);
// const accountCustomer = '0x1C69DB7373505C1b69c9A2Dce0Be88EeE3c5f5e5';
// const ksdAccountCustomer = '000002000002';
// issueKSD(tokenAddress,operator,isin,accountCustomer,ksdAccountCustomer,Number(amounts),toBytes32(slipSeqKSD)).catch((error) => {
// console.log(error);
// });

});

token.on(token.filters.TokenIssuableKSD,(isin,slipSeqKSD, event) => {

+ 21
- 10
KSD01/start.ts View File

@@ -128,35 +128,46 @@ const newOperator = new Wallet('a0e4679c61e04969499af0c4cdcdc66e9a9f2e3f6cbc17ed
// KR5STO000188 (토큰증권 테스트 종목18) -> 0x984f4DbAD8fC003138312293Fd431E5D8bAC1daf
// KR5STO000199 (토큰증권 테스트 종목19) -> 0xa36116158Cdfbcc57c3FEB9cc2A1cdfF8Cf5e247
// KR5STO000202 (토큰증권 테스트 종목20) -> 0x93302A7eeD96b27D47Ec692c6560cA5Fd5E9e7ED
// KR5STO000202 (토큰증권 테스트 종목20) -> 0x9D084404B8558604a1e69B9782A6f421870bd907 - 폐기된 종목

// KR5STO000202 (토큰증권 테스트 종목20) -> 0x9D084404B8558604a1e69B9782A6f421870bd907 - 폐기된 종목


const accountSelf = '0x8909ba8b4dd517de907ab83dc5226352a151f74f';
const ksdAccountSelf = '000002000001';

const accountCustomer = '0x1C69DB7373505C1b69c9A2Dce0Be88EeE3c5f5e5';
const ksdAccountCustomer = '000002000002';

const accountHanwha = '0xf48de4a0c2939e62891f3c6aca68982975477e45';
const ksdAccountHanwha = '000021000002';

const accountMeritz = '0x0886328869e4e1f401e1052a5f4aae8b45f42610';
const ksdAccountMeritz = '000010000002';



async function main() {

//,isin: string, account: string, KSDAccount: string, qty: number, slipSeqKSD: string
// 종목20
let tokenAddress = '0x920c017843904A735458AA9d30779bE5FCfcF411';
let slipSeqKSD = '0000000001';
const Symbol1 = 'KR5STO000166';
let qty = 100000;
let tokenAddress = '0x93302A7eeD96b27D47Ec692c6560cA5Fd5E9e7ED';
let slipSeqKSD = '001202503100000000008';
const Symbol1 = 'KR5STO000202';
let qty = 300000;
// await issueKSD(tokenAddress,admin,
// Symbol1,
// accountCustomer,
// ksdAccountCustomer,
// accountMeritz,
// ksdAccountMeritz,
// qty,
// slipSeqKSD
// );

await balanceOf(tokenAddress,admin,Symbol1,accountCustomer);

qty = 100000;
let rsnCode = '203';


// qty = 100000;
// let rsnCode = '203';
// ,isin: string, account: string, KSDAccount: string, rsnCode: string, qty: number
// await disposalLimitSetupKSD(tokenAddress,admin,
// Symbol1,
@@ -166,7 +177,7 @@ async function main() {
// qty
// );

rsnCode = '203';
// rsnCode = '203';
// ,isin: string, account: string, KSDAccount: string, qty: number, rsnCode: string, slipSeqKSD: string
// await erasureKSD(tokenAddress,admin,
// Symbol1,

+ 10
- 37
KSD01/start2.ts View File

@@ -154,43 +154,16 @@ const ksdAccountCustomer = '000002000002';

async function main() {

//,isin: string, account: string, KSDAccount: string, qty: number, slipSeqKSD: string
// 종목20
let tokenAddress = '0x3e7757d67F2DBc9C2D9d69d74eCF0E498988da4F';
let slipSeqKSD = '0000000001';
const Symbol1 = 'KR5STO000177';
let qty = 100000;
// await issueKSD(tokenAddress,admin,
// Symbol1,
// accountCustomer,
// ksdAccountCustomer,
// qty,
// slipSeqKSD
// );

await balanceOf(tokenAddress,admin,Symbol1,accountCustomer);

qty = 100000;
let rsnCode = '203';
// ,isin: string, account: string, KSDAccount: string, rsnCode: string, qty: number
// await disposalLimitSetupKSD(tokenAddress,admin,
// Symbol1,
// accountCustomer,
// ksdAccountCustomer,
// rsnCode,
// qty
// );

rsnCode = '203';
// ,isin: string, account: string, KSDAccount: string, qty: number, rsnCode: string, slipSeqKSD: string
// await erasureKSD(tokenAddress,admin,
// Symbol1,
// accountCustomer,
// ksdAccountCustomer,
// qty,
// rsnCode,
// slipSeqKSD
// );
console.log(bytes32ToString('0x4b523553544f3030303136360000000000000000000000000000000000000000'));

console.log(bytes32ToString('0x3030303030323030303030320000000000000000000000000000000000000000'));
console.log(bytes32ToString('0x3030303031303030303030320000000000000000000000000000000000000000'));
console.log(bytes32ToString('0x3030303032313030303030320000000000000000000000000000000000000000'));

console.log(bytes32ToString('0x3030313230323530333130303030303030303030380000000000000000000000'));



}

+ 163
- 0
KSD02/listen.ts View File

@@ -0,0 +1,163 @@
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 {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 listenIssuable(tokenAddress: string, operator: Wallet, isin: string) {

const token = new SecurityToken__factory(operator).attach(tokenAddress) as SecurityToken;
await token.connect(operator);

token.on(token.filters.TokenIssuableKSD2,(isin,totalIssueQty,KSDAccounts,amounts,slipSeqKSD, event) => {

console.log(`TokenIssuableKSD2 event received at ${tokenAddress} , ${isin}`);
console.log(`${isin} , ${totalIssueQty} , ${KSDAccounts} , ${amounts} , ${slipSeqKSD}`);
console.log(event);
});

token.on(token.filters.TokenIssuableKSD,(isin,slipSeqKSD, event) => {
console.log(`TokenIssuableKSD event received at ${tokenAddress} , ${isin}`);
console.log(`${isin} - ${slipSeqKSD}`);
console.log(event);
});

// const filter = token.filters.TokenIssuableKSD(null,null);
// token.on(filter,(isin,slipSeqKSD, event) => {
// console.log(event);
// });

// const abi = ['event TokenIssuableKSD(bytes32 isin, bytes32 slipSeqKSD)'];
// //const singer: JsonRpcSigner = await provider.getSigner();
// const contract = new Contract(
// tokenAddress,
// abi,
// operator
// );
// //contract.on('TokenIssuableKSD', (isin,slipSeqKSD, event) => {
// contract.on('TokenIssuableKSD', (data) => {
// console.log(data);
// // TokenIssuableKSD 에서 저장한 정보를 찾아서
// //issueKSD()
// });
console.log(`Listening for TokenIssuableKSD events... at ${tokenAddress} , ${isin}`);
setInterval(() => {}, 1000);
}



const calc = new Calulator();
const rpcUrl = process.env.RPCURL;
const provider = new JsonRpcProvider(rpcUrl);
setProvider(provider);
const admin = new Wallet('0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3',provider);
const issuer = new Wallet('0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63',provider);
const holder1 = new Wallet('0xae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f',provider);
const holder2 = new Wallet('0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80',provider);
const user1 = new Wallet('5c7ff82446654833ed4cbd3dc7cca94b114b556def572a5f2f7f29224c757adb',provider);
const user2 = new Wallet('509157aeb1308d8ff8db8a3059d4392d92fb66960ef5083eda5a8dcc9118be31',provider);
const newOperator = new Wallet('a0e4679c61e04969499af0c4cdcdc66e9a9f2e3f6cbc17ede9e2137518f8e75d',provider);
// KR5STO000166 (토큰증권 테스트 종목16) -> 0x920c017843904A735458AA9d30779bE5FCfcF411
// KR5STO000177 (토큰증권 테스트 종목17) -> 0x3e7757d67F2DBc9C2D9d69d74eCF0E498988da4F
// KR5STO000188 (토큰증권 테스트 종목18) -> 0x984f4DbAD8fC003138312293Fd431E5D8bAC1daf
// KR5STO000199 (토큰증권 테스트 종목19) -> 0xa36116158Cdfbcc57c3FEB9cc2A1cdfF8Cf5e247
// KR5STO000202 (토큰증권 테스트 종목20) -> 0x93302A7eeD96b27D47Ec692c6560cA5Fd5E9e7ED

const accountSelf = '0x8909ba8b4dd517de907ab83dc5226352a151f74f';
const ksdAccountSelf = '000002000001';
const accountCustomer = '0x1C69DB7373505C1b69c9A2Dce0Be88EeE3c5f5e5';
const ksdAccountCustomer = '000002000002';

async function main() {

//,isin: string, account: string, KSDAccount: string, qty: number, slipSeqKSD: string

// KR5STO000202
let symbol = 'KR5STO000166';
let qty = 1000000000;
let rsnCode = '203';
let tokenAddress = '0x920c017843904A735458AA9d30779bE5FCfcF411';
listenIssuable(tokenAddress,admin, symbol).catch((error) => {
console.log(error);
});

symbol = 'KR5STO000177'
tokenAddress = '0x3e7757d67F2DBc9C2D9d69d74eCF0E498988da4F';
listenIssuable(tokenAddress,admin, symbol).catch((error) => {
console.log(error);
});

symbol = 'KR5STO000188'
tokenAddress = '0x984f4DbAD8fC003138312293Fd431E5D8bAC1daf';
listenIssuable(tokenAddress,admin, symbol).catch((error) => {
console.log(error);
});

symbol = 'KR5STO000199'
tokenAddress = '0xa36116158Cdfbcc57c3FEB9cc2A1cdfF8Cf5e247';
listenIssuable(tokenAddress,admin, symbol).catch((error) => {
console.log(error);
});

symbol = 'KR5STO000202'
tokenAddress = '0x93302A7eeD96b27D47Ec692c6560cA5Fd5E9e7ED';
listenIssuable(tokenAddress,admin, symbol).catch((error) => {
console.log(error);
});


}

main();



+ 217
- 0
KSD02/start.ts View File

@@ -0,0 +1,217 @@
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);

}

/// @notice 계좌대체 표준 함수
/// @param isin 종목 isin 코드
/// @param accountFrom 송신 지갑주소
/// @param KSDAccountFrom 송신 642계좌
/// @param accountTo 수신 지갑주소
/// @param KSDAccountTo 수신 642계좌
/// @param qty 전송 수량
/// @param rsnCode 사유코드
//function transferKSD(bytes32 isin, address accountFrom, bytes32 KSDAccountFrom, address accountTo, bytes32 KSDAccountTo, uint256 qty, bytes32 rsnCode) external;

async function transferKSD(address: string, operator: Wallet
,isin: string, accountFrom: string, KSDAccountFrom: string, accountTo: string, KSDAccountTo: string, qty: number, rsnCode: string
) {
console.log(`transferKSD(${isin},${accountFrom},${KSDAccountFrom},${accountTo},${KSDAccountTo},${qty},${rsnCode})`);

const token = new SecurityToken__factory(operator).attach(address) as SecurityToken;
await token.connect(operator);

let r = await token.transferKSD(
toBytes32(isin),
accountFrom,toBytes32(KSDAccountFrom),
accountTo,toBytes32(KSDAccountTo),
qty,
toBytes32(rsnCode),
{gasLimit: 2100000});

const receipt1 = await r.wait();
console.log(receipt1.hash);

}

async function issueKSD(address: string, operator: Wallet
,isin: string, account: string, KSDAccount: string, qty: number, slipSeqKSD: string
) {
const token = new SecurityToken__factory(operator).attach(address) as SecurityToken;
await token.connect(operator);

const decimals = await token.decimals();
console.log(decimals);
const symbol = await token.symbol();
console.log(symbol);

const is = await token.retrieveIsinKSD(toBytes32(isin));
console.log( bytes32ToString(is));

let r = await token.issueKSD(toBytes32(isin),account,toBytes32(KSDAccount),qty,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() {

// 종목17
let tokenAddress = '0x3e7757d67F2DBc9C2D9d69d74eCF0E498988da4F';
let symbol = 'KR5STO000177';
let qty = 500000;
// 신한(고객) -> 한화(자기)
// await transferKSD(tokenAddress,admin,
// symbol,
// accountShinhan,
// ksdAccountShinhan,
// accountHanwhaSelf,
// ksdAccountHanwhaSelf,
// qty,
// '000'
// );
// 종목18
tokenAddress = '0x984f4DbAD8fC003138312293Fd431E5D8bAC1daf';
symbol = 'KR5STO000188';
qty = 250000;
// 신한(고객) -> 신한(자기)
// await transferKSD(tokenAddress,admin,
// symbol,
// accountShinhan,
// ksdAccountShinhan,
// accountShinhanSelf,
// ksdAccountShinhanSelf,
// qty,
// '000'
// );


// 종목20
tokenAddress = '0x93302A7eeD96b27D47Ec692c6560cA5Fd5E9e7ED';
symbol = 'KR5STO000202';

qty = 200000;
// 신한(고객) -> 메리츠(고객)
// await transferKSD(tokenAddress,admin,
// symbol,
// accountShinhan,
// ksdAccountShinhan,
// accountMeritz,
// ksdAccountMeritz,
// qty,
// '000'
// );
qty = 200000;
// 메리츠(고객) -> 한화(고객)
// await transferKSD(tokenAddress,admin,
// symbol,
// accountMeritz,
// ksdAccountMeritz,
// accountHanwha,
// ksdAccountHanwha,
// qty,
// '000'
// );

qty = 200000;
// 한화(고객) -> 신한(고객)
// await transferKSD(tokenAddress,admin,
// symbol,
// accountHanwha,
// ksdAccountHanwha,
// accountShinhan,
// ksdAccountShinhan,
// qty,
// '000'
// );

await balanceOf(tokenAddress,admin,symbol,accountShinhan);
}

main();



+ 207
- 0
KSD03/start.ts View File

@@ -0,0 +1,207 @@
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();



+ 49
- 19
test.json View File

@@ -14,20 +14,20 @@
"snap/1"
],
"network": {
"localAddress": "172.21.0.2:34974",
"remoteAddress": "10.19.13.85:30303",
"localAddress": "172.25.0.2:48498",
"remoteAddress": "10.19.13.66:30303",
"inbound": false
},
"port": "0x7662",
"id": "0x7731be78572000f1bd2f0746f5db82d1e5c3b104d7e2e7355fe95bb909ba6ce97f54ae9f6e5a9d2cbdd42e129d2761d12b796623516fa049f9a292b12a61367e",
"port": "0x765f",
"id": "0x8f0a13b7f83e3f98df9aee2c41889b793480340a63694a2e0e55c0b1a11f983b4e189c4886a77b2426d13ab67ebb99c01b10bace5a98dfcea58875ee01a58b02",
"protocols": {
"eth": {
"difficulty": "0x114f64",
"head": "0x179799015009e868c8f9072b4c8a146dddc049539becef95b37fda17ebc091a8",
"difficulty": "0x11727e",
"head": "0xb163a41b01b62a68b6a85647a99f387aa5f9a40f97cca4f38868dfd61924f85c",
"version": 68
}
},
"enode": "enode://7731be78572000f1bd2f0746f5db82d1e5c3b104d7e2e7355fe95bb909ba6ce97f54ae9f6e5a9d2cbdd42e129d2761d12b796623516fa049f9a292b12a61367e@10.19.13.85:30303"
"enode": "enode://8f0a13b7f83e3f98df9aee2c41889b793480340a63694a2e0e55c0b1a11f983b4e189c4886a77b2426d13ab67ebb99c01b10bace5a98dfcea58875ee01a58b02@10.19.13.66:30303"
},
{
"version": "0x5",
@@ -44,20 +44,20 @@
"snap/1"
],
"network": {
"localAddress": "172.21.0.2:30303",
"remoteAddress": "10.21.20.78:54372",
"localAddress": "172.25.0.2:30306",
"remoteAddress": "10.19.0.33:31984",
"inbound": true
},
"port": "0x765f",
"id": "0x8f0a13b7f83e3f98df9aee2c41889b793480340a63694a2e0e55c0b1a11f983b4e189c4886a77b2426d13ab67ebb99c01b10bace5a98dfcea58875ee01a58b02",
"port": "0x778b",
"id": "0x4a94d2e59ae5dcbe008762d259bf210c7aa82ec6bc8b5284e1787c0ba1d58f175e58bc171cc1475a152b39185e64ddd77e44521b0235f09b477cc129b88188a8",
"protocols": {
"eth": {
"difficulty": "0x114f64",
"head": "0x179799015009e868c8f9072b4c8a146dddc049539becef95b37fda17ebc091a8",
"difficulty": "0x11727e",
"head": "0xb163a41b01b62a68b6a85647a99f387aa5f9a40f97cca4f38868dfd61924f85c",
"version": 68
}
},
"enode": "enode://8f0a13b7f83e3f98df9aee2c41889b793480340a63694a2e0e55c0b1a11f983b4e189c4886a77b2426d13ab67ebb99c01b10bace5a98dfcea58875ee01a58b02@10.21.20.78:30303?discport=0"
"enode": "enode://4a94d2e59ae5dcbe008762d259bf210c7aa82ec6bc8b5284e1787c0ba1d58f175e58bc171cc1475a152b39185e64ddd77e44521b0235f09b477cc129b88188a8@10.19.0.33:30603?discport=0"
},
{
"version": "0x5",
@@ -74,19 +74,49 @@
"snap/1"
],
"network": {
"localAddress": "172.21.0.2:30303",
"remoteAddress": "10.21.20.126:45800",
"localAddress": "172.25.0.2:30306",
"remoteAddress": "10.19.13.117:34974",
"inbound": true
},
"port": "0x765f",
"id": "0x463d1f64c9484e70b6be3c6cbc91c4c526e8c2035a4e191d5c56f4dd43a1ed91ba0c60be2fcec7e733c6ac77ff2981c936107068560a10e0bfe38fb17469347f",
"protocols": {
"eth": {
"difficulty": "0x11727e",
"head": "0xb163a41b01b62a68b6a85647a99f387aa5f9a40f97cca4f38868dfd61924f85c",
"version": 68
}
},
"enode": "enode://463d1f64c9484e70b6be3c6cbc91c4c526e8c2035a4e191d5c56f4dd43a1ed91ba0c60be2fcec7e733c6ac77ff2981c936107068560a10e0bfe38fb17469347f@10.19.13.117:30303"
},
{
"version": "0x5",
"name": "besu/v24.10.0/linux-x86_64/openjdk-java-21",
"caps": [
"eth/62",
"eth/63",
"eth/64",
"eth/65",
"eth/66",
"eth/67",
"eth/68",
"istanbul/100",
"snap/1"
],
"network": {
"localAddress": "172.25.0.2:54844",
"remoteAddress": "10.19.13.67:30303",
"inbound": false
},
"port": "0x765f",
"id": "0xda226ac863c382c92e23c13424ec175691df4fa7660796c2d4126876cae855ea84c6fd11c8396b2605b71ee9c00601b7344d7048e0f90664f0cfe32b0282d00e",
"protocols": {
"eth": {
"difficulty": "0x114f64",
"head": "0x179799015009e868c8f9072b4c8a146dddc049539becef95b37fda17ebc091a8",
"difficulty": "0x11727e",
"head": "0xb163a41b01b62a68b6a85647a99f387aa5f9a40f97cca4f38868dfd61924f85c",
"version": 68
}
},
"enode": "enode://da226ac863c382c92e23c13424ec175691df4fa7660796c2d4126876cae855ea84c6fd11c8396b2605b71ee9c00601b7344d7048e0f90664f0cfe32b0282d00e@10.21.20.126:30303?discport=0"
"enode": "enode://da226ac863c382c92e23c13424ec175691df4fa7660796c2d4126876cae855ea84c6fd11c8396b2605b71ee9c00601b7344d7048e0f90664f0cfe32b0282d00e@10.19.13.67:30303"
}
]

Loading…
Cancel
Save