| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- import * as dotevnv from "dotenv"
- import {toUtf8String,parseUnits,ContractFactory, parseEther,JsonRpcProvider, Contract, JsonRpcSigner, Wallet,ContractTransactionResponse, MaxInt256
- ,Transaction,formatEther,
- ZeroHash,ethers,keccak256,id
- } from 'ethers'
- import chalk from "chalk";
- import {Calulator} from "../inc/calc";
- import { TokenIssuer } from "../inc/TokenIssuer";
- import {
- SecurityToken,
- SecurityToken__factory,
- } from '../typechain'
- // import { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers";
- import { Partition } from '../inc/tokenData';
- 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}`);
-
- async function getNonce(addr: string): Promise<number> {
- const nonce = await provider.getTransactionCount(addr);
- return nonce;
- }
-
- async function info(symbol: string) {
- const proxy = getDeploymentAddresses(symbol).address;
- console.log(`토큰 주소 : ${proxy}`);
-
- const token = new SecurityToken__factory(issuer).attach(proxy) as SecurityToken;
- await token.connect(admin);
- const ops = await token.operators();
- console.log(ops);
- // token.grantRole(keccak256('OPERATOR_ROLE'),'0xaaa')
- }
-
-
-
-
- async function testSecurity(symbol: string, operator: Wallet, tobeOperator: Wallet,holder: Wallet, user1: Wallet, user2: Wallet) {
-
- const proxy = getDeploymentAddresses(symbol).address;
- console.log(`토큰 주소 : ${proxy}`);
- const token = new SecurityToken__factory(operator).attach(proxy) as SecurityToken;
- await token.connect(operator);
- const decimals = await token.decimals();
- const digit = 10 ** Number(decimals);
- console.log(`토큰 자릿수 : ${decimals}`);
-
- const partitions = await token.getDefaultPartitions();
- //console.log(partitions);
-
- console.log(chalk.yellow('###################### 변경전 오퍼레이터 ###################################'))
- const ops = await token.operators();
- console.log(ops);
- console.log(chalk.yellow(`provided operator = ${operator.address}`));
-
- console.log(chalk.yellow('###################### KYC 전 사용자 잔고 ###################################'))
-
- let b = await token.balanceOf(holder);
- let holderBalance = (1/digit) * Number(b);
- console.log(`토큰보유자 잔고 = ${Number(holderBalance).toFixed(Number(decimals))}`);
-
- b = await token.balanceOf(user1);
- let bUser1 = Number((1/digit) * Number(b));
- b = await token.balanceOf(user2);
- let bUser2 = Number((1/digit) * Number(b));
-
- console.log(chalk.blue(
- `사용자1 잔고 : ${Number(bUser1).toFixed(Number(decimals))}\r\n사용자2 잔고 : ${Number(bUser2).toFixed(Number(decimals))}`
- ))
-
-
- console.log(chalk.bgCyan('###################### 사용자 권한테스트 시작 ###################################'))
- console.log(chalk.yellow('###################### 사용자 등록전 전송시도###################################'))
-
- if(await token.isTokenHolderKYC(user1)) {
- console.log(`user1 already kyced .. unKYC user1`);
- const r = await token.unKYCtokenHolders([user1]);
- await r.wait();
- }
- if(await token.isTokenHolderKYC(user2)) {
- console.log(`user2 already kyced .. .. unKYC user2`);
- const r = await token.unKYCtokenHolders([user2]);
- await r.wait();
- }
- try {
- let r = await token.operatorTransferByPartition(partitions[0],holder,user1,1 * digit,ZeroHash,ZeroHash,{gasLimit: 20000000});
- console.log(`txhash1 : ${r.hash}`)
- const receipt1 = await r.wait();
- console.log(receipt1.hash);
-
- r = await token.operatorTransferByPartition(partitions[0],holder,user2,1 * digit,ZeroHash,ZeroHash,{gasLimit: 20000000});
- const receipt2 = await r.wait();
- console.log(`txhash2 : ${r.hash}`)
- console.log('KYC전 토큰전송완료....');
-
-
- } catch(ex) {
- console.log(chalk.red('예정된 KYC전 토큰전송에러'));
- //console.log(ex);
- }
-
- console.log(chalk.yellow('###################### 사용자 등록(KYC) ###################################'))
- let ret = await token.KYCtokenHolders([user1,user2],{gasLimit: 20000000});
- console.log('wait for user KYCed...');
- await ret.wait();
-
- console.log(chalk.yellow('###################### 사용자 등록후 전송시도 ###################################'))
- ret = await token.operatorTransferByPartition(partitions[0],holder,user1,1 * digit ,ZeroHash,ZeroHash,{gasLimit: 20000000});
- console.log(`txhash1 : ${ret.hash}`)
- let receipt = await ret.wait();
- console.log(receipt.hash);
-
- ret = await token.operatorTransferByPartition(partitions[0],holder,user2,1 * digit ,ZeroHash,ZeroHash,{gasLimit: 20000000});
- console.log(`txhash2 : ${ret.hash}`)
- receipt = await ret.wait();
- console.log(receipt.hash);
-
- console.log(chalk.yellow('###################### 등록 후 사용자 잔고 ###################################'))
- b = await token.balanceOf(user1);
- bUser1 = Number((1/digit) * Number(b));
- b = await token.balanceOf(user2);
- bUser2 = Number((1/digit) * Number(b));
- console.log(chalk.blue(
- `사용자1 잔고 : ${Number(bUser1).toFixed(Number(decimals))}\r\n사용자2 잔고 : ${Number(bUser2).toFixed(Number(decimals))}`
- ))
- console.log(chalk.bgCyan('###################### 사용자 권한테스트 종료 ###################################'))
-
- console.log(chalk.bgGreenBright('###################### 오퍼레이터 권한테스트 시작 ###################################'))
-
- const newOperatorToken = await token.connect(tobeOperator);
- const adminToken = await token.connect(admin);
-
- console.log(chalk.green('###################### 변경전 오퍼레이터 전송시도###################################'))
-
- try {
- let r = await newOperatorToken.operatorTransferByPartition(partitions[0],holder,user1,1 * digit,ZeroHash,ZeroHash,{gasLimit: 20000000});
- console.log(`txhash1 : ${r.hash}`)
- const receipt1 = await r.wait();
- console.log(receipt1.hash);
-
- r = await newOperatorToken.operatorTransferByPartition(partitions[0],holder,user2,1 * digit,ZeroHash,ZeroHash,{gasLimit: 20000000});
- const receipt2 = await r.wait();
- console.log(`txhash2 : ${r.hash}`)
- console.log('오퍼레이터 등록 전 토큰전송완료....');
-
- } catch(ex) {
- console.log(chalk.red('예정된 오퍼레이터 등록전 전송 에러'));
- }
-
- console.log(chalk.yellow('###################### 오퍼레이터 권한 등록 ###################################'))
- ret = await adminToken.grantRole( id('OPERATOR_ROLE'),tobeOperator,{ gasLimit: 20000000});
- receipt = await ret.wait();
- console.log(receipt.status)
-
- console.log(chalk.green('###################### 오퍼레이터 권한등록 후 전송시도###################################'))
- try {
- let r = await newOperatorToken.operatorTransferByPartition(partitions[0],holder,user1,1 * digit,ZeroHash,ZeroHash,{gasLimit: 20000000});
- console.log(`txhash1 : ${r.hash}`)
- const receipt1 = await r.wait();
- console.log(receipt1.hash);
-
- r = await newOperatorToken.operatorTransferByPartition(partitions[0],holder,user2,1 * digit,ZeroHash,ZeroHash,{gasLimit: 20000000});
- const receipt2 = await r.wait();
- console.log(`txhash2 : ${r.hash}`)
- console.log('오퍼레이터 등록 후 토큰전송완료....');
-
- } catch(ex) {
- console.log(chalk.red('권한등록후 에러??????????????'));
- }
-
- b = await token.balanceOf(user1);
- bUser1 = Number((1/digit) * Number(b));
- b = await token.balanceOf(user2);
- bUser2 = Number((1/digit) * Number(b));
- console.log(chalk.blue(
- `사용자1 잔고 : ${Number(bUser1).toFixed(Number(decimals))}\r\n사용자2 잔고 : ${Number(bUser2).toFixed(Number(decimals))}`
- ))
-
-
- console.log(chalk.bgGreenBright('###################### 오퍼레이터 권한테스트 종료 ###################################'))
-
-
- console.log(chalk.yellow('###################### 테스트권한 클리어 ###################################'));
- await token.unKYCtokenHolders([user1, user2]);
- ret = await adminToken.revokeRole( id('OPERATOR_ROLE'),tobeOperator,{ gasLimit: 20000000});
- await ret.wait();
- }
-
-
-
- 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 signer = issuer;
- const holder1 = new Wallet('0xae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f',provider);
- const holder2 = new Wallet('0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80',provider);
-
- const user1 = new Wallet('5c7ff82446654833ed4cbd3dc7cca94b114b556def572a5f2f7f29224c757adb',provider);
- //0xB22f4c5fA701837dcBd037D60F5d2606050fBbd9
- const user2 = new Wallet('509157aeb1308d8ff8db8a3059d4392d92fb66960ef5083eda5a8dcc9118be31',provider);
- //0xA59D39340AEF8681248aaB3F71D104897FdF7c84
-
- const newOperator = new Wallet('a0e4679c61e04969499af0c4cdcdc66e9a9f2e3f6cbc17ede9e2137518f8e75d',provider);
- //0x1e5Ed00f65556374d7fb2039e2a11aDc64021762
-
-
- async function main() {
- await testSecurity('test003',issuer,newOperator,holder1, user1,user2);
- }
-
- main();
-
|