No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

start.ts 5.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  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
  5. } from 'ethers'
  6. import {Calulator} from "../inc/calc";
  7. import axios from "axios";
  8. import {
  9. SecurityToken,
  10. SecurityToken__factory,
  11. } from '../typechain'
  12. // import { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers";
  13. import {checkReceipt,checkReceipt2, setProvider,getDeploymentAddresses,
  14. getElapsed, sleep,getBlockInfo} from '../inc/util'
  15. dotevnv.config();
  16. if (!process.env.RPCURL) {
  17. console.log(`No rpcur value specified...`)
  18. }
  19. console.log(`목적 서버 : ${process.env.RPCURL}`);
  20. async function getNonce(addr: string): Promise<number> {
  21. const nonce = await provider.getTransactionCount(addr);
  22. return nonce;
  23. }
  24. async function info(symbol: string) {
  25. const proxy = getDeploymentAddresses(symbol).address;
  26. console.log(`토큰 주소 : ${proxy}`);
  27. const token = new SecurityToken__factory(issuer).attach(proxy) as SecurityToken;
  28. await token.connect(admin);
  29. const ops = await token.operators();
  30. console.log(ops);
  31. const balance = await token.balanceOf(firstHolder);
  32. console.log(`initial balance = ${balance}`);
  33. let b = await token.isTokenHolderKYC('0x2071ec931b2567a1418e9bc34b786d654a079b43');
  34. if(!b) {
  35. console.log('kyc check first!');
  36. return;
  37. }
  38. await token.KYCtokenHolders([holder1.address,holder2.address]);
  39. b = await token.isTokenHolderKYC(holder1.address);
  40. if(!b) {
  41. console.log('kyc check first!');
  42. return;
  43. }
  44. // token.grantRole(keccak256('OPERATOR_ROLE'),'0xaaa')
  45. }
  46. function getAuthHeader(token: string) : any{
  47. return {
  48. headers: {
  49. 'Content-Type': 'application/json;charset=UTF-8',
  50. 'Access-Control-Allow-Origin': '*',
  51. 'Authorization': `Bearer ${token}`
  52. }
  53. };
  54. }
  55. async function getBalance(symbol: string, address: string ): Promise<number> {
  56. const path = `holders/${address}/tokens/${symbol}/balance`;
  57. const ret = await axios.get(gateWay + path, getAuthHeader(authToken));
  58. return ret.data;
  59. }
  60. async function getTx(signerAddress:string, tokenSymbol: string, from: string, to: string, value: number) : Promise<any> {
  61. const path = 'transfer/tx/data';
  62. const ret = await axios.post(gateWay + path, {
  63. signerAddress,
  64. tokenSymbol,
  65. transfers : [{
  66. partitionName:'초기',
  67. from,
  68. to,
  69. value,
  70. data:'0x0000000000000000000000000000000000000000000000000000000000000000',
  71. operatorData:'0x0000000000000000000000000000000000000000000000000000000000000000'
  72. }]
  73. },getAuthHeader(authToken));
  74. return ret;
  75. }
  76. async function send(signedTransaction: string) {
  77. const path = 'transaction/send';
  78. const ret = await axios.post(gateWay + path, {
  79. signedTransaction
  80. },getAuthHeader(authToken));
  81. return ret;
  82. }
  83. async function transfer(signer: Wallet,symbol:string,from: Wallet, to: Wallet, amount: number = 1, count: number = 10) {
  84. const proxy = getDeploymentAddresses(symbol).address;
  85. console.log(`토큰 주소 : ${proxy}`);
  86. let fb = await getBalance(symbol,from.address);
  87. let tb = await getBalance(symbol,to.address);
  88. console.log(`from balance before : ${fb}, to balance before : ${tb}`);
  89. const token = new SecurityToken__factory(issuer).attach(proxy) as SecurityToken;
  90. await token.connect(admin);
  91. const ops = await token.operators();
  92. console.log(ops);
  93. // const balance = await token.balanceOf(firstHolder);
  94. // console.log(balance);
  95. const decimals = await token.decimals();
  96. const digit = 10 ** Number(decimals);
  97. const rawTx = await getTx(signer.address,symbol,firstHolder,to.address, amount * digit);
  98. const tx = Transaction.from(rawTx.data);
  99. console.log(tx.nonce);
  100. const signed = await signer.signTransaction(tx);
  101. const txid = await send(signed);
  102. console.log(txid);
  103. fb = await getBalance(symbol,from.address);
  104. tb = await getBalance(symbol,to.address);
  105. console.log(`from balance before : ${fb}, to balance before : ${tb}`);
  106. }
  107. const firstHolder = '0x2071ec931b2567a1418e9bc34b786d654a079b43';
  108. const calc = new Calulator();
  109. const rpcUrl = process.env.RPCURL;
  110. const gateWay = process.env.GATE_WAY;
  111. const authToken=process.env.AUTHTOKEN;
  112. const provider = new JsonRpcProvider(rpcUrl);
  113. setProvider(provider);
  114. const admin = new Wallet('0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3',provider);
  115. const issuer = new Wallet('0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63',provider);
  116. const holder1 = new Wallet('0xae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f',provider);
  117. const holder2 = new Wallet('0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80',provider);
  118. // const signer = holder1;
  119. async function main() {
  120. // console.log(admin);
  121. // console.log(issuer);
  122. // console.log(holder1);
  123. // console.log(holder2);
  124. transfer(holder1,'BCG_TEST',holder1, holder2,1, 10);
  125. // info('BCG_TEST');
  126. // getTx('0xf17f52151EbEF6C7334FAD080c5704D77216b732','BCG_TEST','0x2071ec931b2567a1418e9bc34b786d654a079b43',holder1.address,1);
  127. // getTx2('BCG_TEST');
  128. }
  129. main();