| console.log(chalk.yellow('###################### KYC 전 사용자 잔고 ###################################')) | console.log(chalk.yellow('###################### KYC 전 사용자 잔고 ###################################')) | ||||
| let holderBalance = await token.balanceOf(holder); | |||||
| let b = await token.balanceOf(holder); | |||||
| let holderBalance = (1/digit) * Number(b); | |||||
| console.log(`토큰보유자 잔고 = ${Number(holderBalance).toFixed(Number(decimals))}`); | console.log(`토큰보유자 잔고 = ${Number(holderBalance).toFixed(Number(decimals))}`); | ||||
| let bUser1 = await token.balanceOf(user1); | |||||
| let bUser2 = await token.balanceOf(user2); | |||||
| 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( | console.log(chalk.blue( | ||||
| `사용자1 잔고 : ${Number(bUser1).toFixed(Number(decimals))}\r\n사용자2 잔고 : ${Number(bUser2).toFixed(Number(decimals))}` | `사용자1 잔고 : ${Number(bUser1).toFixed(Number(decimals))}\r\n사용자2 잔고 : ${Number(bUser2).toFixed(Number(decimals))}` | ||||
| )) | )) | ||||
| console.log(chalk.bgCyan('###################### 사용자 권한테스트 시작 ###################################')) | |||||
| console.log(chalk.yellow('###################### 사용자 등록전 전송시도###################################')) | console.log(chalk.yellow('###################### 사용자 등록전 전송시도###################################')) | ||||
| if(await token.isTokenHolderKYC(user1)) { | if(await token.isTokenHolderKYC(user1)) { | ||||
| console.log(chalk.yellow('###################### 사용자 등록후 전송시도 ###################################')) | console.log(chalk.yellow('###################### 사용자 등록후 전송시도 ###################################')) | ||||
| ret = await token.operatorTransferByPartition(partitions[0],holder,user1,1 * digit ,ZeroHash,ZeroHash,{gasLimit: 20000000}); | 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}); | ret = await token.operatorTransferByPartition(partitions[0],holder,user2,1 * digit ,ZeroHash,ZeroHash,{gasLimit: 20000000}); | ||||
| await ret.wait(); | |||||
| console.log(`txhash2 : ${ret.hash}`) | |||||
| receipt = await ret.wait(); | |||||
| console.log(receipt.hash); | |||||
| console.log(chalk.yellow('###################### 등록 후 사용자 잔고 ###################################')) | console.log(chalk.yellow('###################### 등록 후 사용자 잔고 ###################################')) | ||||
| bUser1 = await token.balanceOf(user1); | |||||
| bUser2 = await token.balanceOf(user2); | |||||
| 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( | console.log(chalk.blue( | ||||
| `balance of user1 : ${Number(bUser1).toFixed(Number(decimals))}\r\nbalance of user2 : ${Number(bUser2).toFixed(Number(decimals))}` | |||||
| `사용자1 잔고 : ${Number(bUser1).toFixed(Number(decimals))}\r\n사용자2 잔고 : ${Number(bUser2).toFixed(Number(decimals))}` | |||||
| )) | )) | ||||
| console.log(chalk.bgCyan('###################### 사용자 권한테스트 종료 ###################################')) | console.log(chalk.bgCyan('###################### 사용자 권한테스트 종료 ###################################')) | ||||
| console.log(chalk.bgGreenBright('###################### 오퍼레이터 권한테스트 시작 ###################################')) | |||||
| return; | |||||
| await sleep(5000,'wait for tx'); | |||||
| await token.KYCtokenHolders([user1,user2],{gasLimit: 20000000}); | |||||
| await sleep(5000,'wait for tx.....'); | |||||
| const newOperatorToken = await token.connect(tobeOperator); | |||||
| const adminToken = await token.connect(admin); | |||||
| await token.operatorTransferByPartition(partitions[0],operator,user1,100,ZeroHash,ZeroHash); | |||||
| await token.operatorTransferByPartition(partitions[0],operator,user2,100,ZeroHash,ZeroHash); | |||||
| await sleep(5000,'wait for tx... 정상전송됨'); | |||||
| console.log(chalk.green('###################### 변경전 오퍼레이터 전송시도###################################')) | |||||
| //console.log() | |||||
| await token.unKYCtokenHolders([user1,user2],{gasLimit: 200000000}) | |||||
| return; | |||||
| 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); | |||||
| console.log(chalk.yellow('###################### 변경전 오퍼레이터 전송시도###################################')) | |||||
| await transfer(tobeOperator,symbol,holder1,holder2); | |||||
| 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('오퍼레이터 등록 전 토큰전송완료....'); | |||||
| console.log(chalk.yellow('###################### 변경후 오퍼레이터 전송시도###################################')) | |||||
| //await token.grantRole( [keccak256('OPERATOR_ROLE'),tobeOperator.address]); | |||||
| // const t = id('OPERATOR_ROLE'); | |||||
| // console.log(t); | |||||
| // return; | |||||
| await token.grantRole( id('OPERATOR_ROLE'),tobeOperator.address,{ gasLimit: 20000000}); | |||||
| sleep(5000,'wait...'); | |||||
| } 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) | |||||
| await transfer(tobeOperator,symbol,holder1,user1); | |||||
| await transfer(tobeOperator,symbol,holder1,user2); | |||||
| 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('오퍼레이터 등록 후 토큰전송완료....'); | |||||
| console.log(chalk.yellow('###################### 변경후 오퍼레이터 전송시도###################################')) | |||||
| //await transfer(tobeOperator,symbol,holder1,holder2); | |||||
| //token.isu | |||||
| // token.grantRole(keccak256('OPERATOR_ROLE'),'0xaaa') | |||||
| //token.revokeRole(keccak256('OPERATOR_ROLE')) | |||||
| } 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.yellow('###################### 변경전 오퍼레이터 전송시도###################################')) | |||||
| //await transfer(tobeOperator,symbol,user1,user2); | |||||
| console.log(chalk.bgGreenBright('###################### 오퍼레이터 권한테스트 종료 ###################################')) | |||||
| console.log(chalk.yellow('###################### 테스트권한 클리어 ###################################')); | console.log(chalk.yellow('###################### 테스트권한 클리어 ###################################')); | ||||
| await token.revokeRole(id('OPERATOR_ROLE'),tobeOperator,{ gasLimit: 20000000}); | |||||
| await token.unKYCtokenHolders([user1, user2]); | await token.unKYCtokenHolders([user1, user2]); | ||||
| ret = await adminToken.revokeRole( id('OPERATOR_ROLE'),tobeOperator,{ gasLimit: 20000000}); | |||||
| await ret.wait(); | |||||
| } | } | ||||
| const holder1 = new Wallet('0xae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f',provider); | const holder1 = new Wallet('0xae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f',provider); | ||||
| const holder2 = new Wallet('0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80',provider); | const holder2 = new Wallet('0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80',provider); | ||||
| const user1 = new Wallet('5c7ff82446654833ed4cbd3dc7cca94b114b556def572a5f2f7f29224c757adb'); | |||||
| const user1 = new Wallet('5c7ff82446654833ed4cbd3dc7cca94b114b556def572a5f2f7f29224c757adb',provider); | |||||
| //0xB22f4c5fA701837dcBd037D60F5d2606050fBbd9 | //0xB22f4c5fA701837dcBd037D60F5d2606050fBbd9 | ||||
| const user2 = new Wallet('509157aeb1308d8ff8db8a3059d4392d92fb66960ef5083eda5a8dcc9118be31'); | |||||
| const user2 = new Wallet('509157aeb1308d8ff8db8a3059d4392d92fb66960ef5083eda5a8dcc9118be31',provider); | |||||
| //0xA59D39340AEF8681248aaB3F71D104897FdF7c84 | //0xA59D39340AEF8681248aaB3F71D104897FdF7c84 | ||||
| const newOperator = new Wallet('a0e4679c61e04969499af0c4cdcdc66e9a9f2e3f6cbc17ede9e2137518f8e75d'); | |||||
| const newOperator = new Wallet('a0e4679c61e04969499af0c4cdcdc66e9a9f2e3f6cbc17ede9e2137518f8e75d',provider); | |||||
| //0x1e5Ed00f65556374d7fb2039e2a11aDc64021762 | //0x1e5Ed00f65556374d7fb2039e2a11aDc64021762 | ||||
| async function main() { | async function main() { | ||||
| await testSecurity('test001',issuer,newOperator,holder1, user1,user2); | |||||
| await testSecurity('test003',issuer,newOperator,holder1, user1,user2); | |||||
| } | } | ||||
| main(); | main(); |