当前位置:   article > 正文

web3.js简介与入门

web3.js

区块链,当前无论是在国内还是国外都是一个比较时髦的概念,在国内由于政策及市场成熟度的原因,技术氛围还没有那么浓厚。可是在国外,区块链的学习及使用正在如火如荼进行着。

想让自己与国际接轨,或者想了解一下区块链吗,如果你是前端开发人员或者熟悉Javascript,来这里看一下web3的系列文章吧,你可以通过本文的一系列教程快速掌握相应的技术与概念。

Web3.js是ETH提供给开发人员将其APP运行在ETH上的javascript类库。在底层上,它通过RPC地用与本地节点进行通信。当然,web3.js可以与任意暴露了RPC接口的ETH节点进行连接,实现二次开发。

本系列文章默认读者熟悉javascript语言,了解NODEJS。对对象及后端服务有一定认识。

废话到这,现在开始。

首先我们需要将web3.js引入到我们的项目中

首先安装必要的组件:

  1. npm install -save web3@4.0.3
  2. npm install -save @ethereumjs/common@3.2.0
  3. npm install -save eth-web3-tx

下面是一些常用的方法调用 包括对eth 代币 以及交易的相关操作:

  1. const {Web3} = require('web3')
  2. const {Common, Chain, Hardfork} = require("@ethereumjs/common");
  3. const LegacyTransaction = require('eth-web3-tx').LegacyTransaction;
  4. const rpcURL = 'https://eth-mainnet.public.blastapi.io' // RPC URL 如果地址不能使用了 请去 https://infura.io 注册账号获取免费的
  5. const your_private_key = Buffer.from('bef5467f1ee820f0d879c191aeb0df1cf41c1fb05565ea0143de274ee94a5aa3', 'hex');
  6. const your_wallet_address = '0x3444e807aB03C9D27c23E7E8f147a9878272490B'
  7. const usdt_address = "0xdAC17F958D2ee523a2206206994597C13D831ec7"
  8. const wbtc_address = "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599"
  9. const web3 = new Web3(rpcURL);
  10. const uniswap_router3_address = '0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45'
  11. const erc20_abi = [{"constant":false,"inputs":[{"name":"_evilUser","type":"address"}],"name":"addBlackList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_upgradedAddress","type":"address"}],"name":"deprecate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_blackListedUser","type":"address"}],"name":"destroyBlackFunds","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"issue","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"redeem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_clearedUser","type":"address"}],"name":"removeBlackList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newBasisPoints","type":"uint256"},{"name":"newMaxFee","type":"uint256"}],"name":"setParams","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_initialSupply","type":"uint256"},{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"_decimals","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amount","type":"uint256"}],"name":"Issue","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amount","type":"uint256"}],"name":"Redeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newAddress","type":"address"}],"name":"Deprecate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"feeBasisPoints","type":"uint256"},{"indexed":false,"name":"maxFee","type":"uint256"}],"name":"Params","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_blackListedUser","type":"address"},{"indexed":false,"name":"_balance","type":"uint256"}],"name":"DestroyedBlackFunds","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_user","type":"address"}],"name":"AddedBlackList","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_user","type":"address"}],"name":"RemovedBlackList","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"constant":true,"inputs":[],"name":"_totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"allowed","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"who","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balances","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"basisPointsRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"deprecated","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_maker","type":"address"}],"name":"getBlackListStatus","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"isBlackListed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MAX_UINT","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maximumFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"upgradedAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]
  12. const uniswap_router3_abi = [{"inputs":[{"internalType":"address","name":"_factoryV2","type":"address"},{"internalType":"address","name":"factoryV3","type":"address"},{"internalType":"address","name":"_positionManager","type":"address"},{"internalType":"address","name":"_WETH9","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH9","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"approveMax","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"approveMaxMinusOne","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"approveZeroThenMax","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"approveZeroThenMaxMinusOne","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"callPositionManager","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"paths","type":"bytes[]"},{"internalType":"uint128[]","name":"amounts","type":"uint128[]"},{"internalType":"uint24","name":"maximumTickDivergence","type":"uint24"},{"internalType":"uint32","name":"secondsAgo","type":"uint32"}],"name":"checkOracleSlippage","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"path","type":"bytes"},{"internalType":"uint24","name":"maximumTickDivergence","type":"uint24"},{"internalType":"uint32","name":"secondsAgo","type":"uint32"}],"name":"checkOracleSlippage","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"path","type":"bytes"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMinimum","type":"uint256"}],"internalType":"struct IV3SwapRouter.ExactInputParams","name":"params","type":"tuple"}],"name":"exactInput","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMinimum","type":"uint256"},{"internalType":"uint160","name":"sqrtPriceLimitX96","type":"uint160"}],"internalType":"struct IV3SwapRouter.ExactInputSingleParams","name":"params","type":"tuple"}],"name":"exactInputSingle","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"path","type":"bytes"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMaximum","type":"uint256"}],"internalType":"struct IV3SwapRouter.ExactOutputParams","name":"params","type":"tuple"}],"name":"exactOutput","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMaximum","type":"uint256"},{"internalType":"uint160","name":"sqrtPriceLimitX96","type":"uint160"}],"internalType":"struct IV3SwapRouter.ExactOutputSingleParams","name":"params","type":"tuple"}],"name":"exactOutputSingle","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factoryV2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getApprovalType","outputs":[{"internalType":"enum IApproveAndCall.ApprovalType","name":"","type":"uint8"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount0Min","type":"uint256"},{"internalType":"uint256","name":"amount1Min","type":"uint256"}],"internalType":"struct IApproveAndCall.IncreaseLiquidityParams","name":"params","type":"tuple"}],"name":"increaseLiquidity","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickLower","type":"int24"},{"internalType":"int24","name":"tickUpper","type":"int24"},{"internalType":"uint256","name":"amount0Min","type":"uint256"},{"internalType":"uint256","name":"amount1Min","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"internalType":"struct IApproveAndCall.MintParams","name":"params","type":"tuple"}],"name":"mint","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"previousBlockhash","type":"bytes32"},{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"","type":"bytes[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"","type":"bytes[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"positionManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"pull","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"refundETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"selfPermit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"selfPermitAllowed","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"selfPermitAllowedIfNecessary","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"selfPermitIfNecessary","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountMinimum","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"sweepToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountMinimum","type":"uint256"}],"name":"sweepToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountMinimum","type":"uint256"},{"internalType":"uint256","name":"feeBips","type":"uint256"},{"internalType":"address","name":"feeRecipient","type":"address"}],"name":"sweepTokenWithFee","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountMinimum","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"feeBips","type":"uint256"},{"internalType":"address","name":"feeRecipient","type":"address"}],"name":"sweepTokenWithFee","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"int256","name":"amount0Delta","type":"int256"},{"internalType":"int256","name":"amount1Delta","type":"int256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"uniswapV3SwapCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountMinimum","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"unwrapWETH9","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountMinimum","type":"uint256"}],"name":"unwrapWETH9","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountMinimum","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"feeBips","type":"uint256"},{"internalType":"address","name":"feeRecipient","type":"address"}],"name":"unwrapWETH9WithFee","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountMinimum","type":"uint256"},{"internalType":"uint256","name":"feeBips","type":"uint256"},{"internalType":"address","name":"feeRecipient","type":"address"}],"name":"unwrapWETH9WithFee","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"wrapETH","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]
  13. function uint8ToHex(uint8arr) {
  14. let hexStr = "";
  15. for (let i = 0; i < uint8arr.length; i++) {
  16. let hex = uint8arr[i].toString(16);
  17. hex = hex.length === 1 ? "0" + hex : hex; // 需要补0
  18. hexStr += hex;
  19. }
  20. return hexStr;
  21. }
  22. function contract_call(txObject,call_back=null){
  23. if (call_back == null){
  24. call_back = function (txHash){
  25. console.log('txHash:', txHash)
  26. }
  27. }
  28. web3.eth.getTransactionCount(your_wallet_address).then((txCount) => {
  29. web3.eth.estimateGas(txObject).then((gaslimit)=>{
  30. txObject['nonce'] = web3.utils.toHex(txCount)
  31. txObject['gasLimit'] = web3.utils.toHex(gaslimit)
  32. txObject['gasPrice'] = web3.utils.toHex(web3.utils.toNumber(web3.utils.toWei('10', 'gwei')))
  33. const common = new Common({ chain: Chain.Mainnet, hardfork: Hardfork.Istanbul })
  34. const tx = LegacyTransaction.fromTxData(txObject, { common })
  35. signedTx = tx.sign(your_private_key)
  36. const serializedTx = signedTx.serialize()
  37. const tes = serializedTx.valueOf()
  38. const raw = '0x' + uint8ToHex(tes)
  39. web3.eth.sendSignedTransaction(raw).then(call_back)
  40. });
  41. })
  42. }
  43. /*
  44. 获取指定账户的eth余额
  45. your_wallet_address: 指定账户地址
  46. :return:账户余额
  47. */
  48. function getEthBalance(your_wallet_address){
  49. web3.eth.getBalance(your_wallet_address).then(( wei) => {
  50. // 余额单位从wei转换为ether
  51. balance = web3.utils.fromWei(wei, 'ether')
  52. console.log("balance: " + balance)
  53. }
  54. )
  55. }
  56. /*
  57. 获取指定账户的erc20代币余额
  58. erc20_address:erc20合约地址
  59. owner_address: 指定账户地址
  60. :return:账户erc20代币余额
  61. */
  62. function getErc20Balance(erc20_address, owner_address){
  63. var MyContract = new web3.eth.Contract(erc20_abi, erc20_address);
  64. MyContract.methods.balanceOf(owner_address).call()
  65. .then((erc20_qty)=>{
  66. console.log(erc20_address + " balance: " + erc20_qty)
  67. });
  68. }
  69. /*
  70. 获取ERC20代币的授权量
  71. erc20_address:代币合约地址
  72. owner_address:授权主体
  73. contract_address: 被授权方地址
  74. */
  75. function getErc20Allowance(erc20_address, owner_address,contract_address){
  76. var MyContract = new web3.eth.Contract(erc20_abi, erc20_address);
  77. MyContract.methods.allowance(owner_address,contract_address).call()
  78. .then((allowance)=>{
  79. console.log(erc20_address + "\n"+owner_address+"\n"+contract_address+"\n allowance: " + allowance)
  80. });
  81. }
  82. /*
  83. """
  84. 发送指定数量的eth给指定地址
  85. to_address:接收方地址
  86. amount:发送eth数量
  87. """
  88. */
  89. function transferEth(toAddress,amount){
  90. const txObject = {
  91. to: toAddress,
  92. value: web3.utils.toHex(web3.utils.toNumber(web3.utils.toWei(amount, 'ether'))),
  93. }
  94. contract_call(txObject)
  95. }
  96. /*
  97. 发送erc20代币给指定地址指定数量
  98. erc20_address:erc20代币合约地址
  99. to_address:接收方地址
  100. amount:发送erc20代币数量
  101. */
  102. function transferErc20(erc20Address,toAddress,amount){
  103. const contract = new web3.eth.Contract(erc20_abi, erc20Address)
  104. const txObject = {
  105. to: erc20Address,
  106. data: contract.methods.transfer(toAddress,amount).encodeABI()
  107. }
  108. contract_call(txObject)
  109. }
  110. /*
  111. 授权给指定地址指定数量的消费额度
  112. erc20_address: erc20代币地址
  113. approve_contract_address:指定的其他消费代币的合约地址
  114. approve_amount:授权数量
  115. */
  116. function approve(erc20Address, approveContractAddress, approveAmount,call_back=null){
  117. const contract = new web3.eth.Contract(erc20_abi, erc20Address)
  118. const txObject = {
  119. to: erc20Address,
  120. data: contract.methods.approve(approveContractAddress,approveAmount).encodeABI()
  121. }
  122. contract_call(txObject,call_back)
  123. }
  124. /*
  125. 发起dex交易,通过uniswapV3 dex进行交易
  126. :param input_address: 输入的erc20 代币地址
  127. :param out_address: 输出的erc20 代币地址
  128. :param input_amount: 输入数量
  129. */
  130. function UniswapV3Swap(input_address, out_address, input_amount){
  131. var fee = 3000 // uniswap 池子手续费一般三个等级 分别为 500,3000,10000
  132. var input_contract = new web3.eth.Contract(erc20_abi, input_address)
  133. var uniswap_router3_contract = new web3.eth.Contract(uniswap_router3_abi, uniswap_router3_address)
  134. input_contract.methods.allowance(your_wallet_address,uniswap_router3_address).call()
  135. .then((allowance)=>{
  136. const swap_function =function (){
  137. parms = {
  138. 'tokenIn': input_address,
  139. 'tokenOut': out_address,
  140. 'fee': fee,
  141. 'recipient': your_wallet_address,
  142. 'amountIn': input_amount,
  143. 'amountOutMinimum': 0,
  144. 'sqrtPriceLimitX96': 0,
  145. }
  146. const txObject = {
  147. to: uniswap_router3_address,
  148. data: uniswap_router3_contract.methods.exactInputSingle(parms).encodeABI(),
  149. from:your_wallet_address
  150. }
  151. contract_call(txObject)
  152. }
  153. if(allowance == 0) {
  154. approve(input_address,uniswap_router3_address,input_amount,swap_function)
  155. }else if (allowance < input_amount){
  156. approve(input_address,uniswap_router3_address,0,function (txHash){
  157. approve(input_address,uniswap_router3_address,input_amount,swap_function)
  158. })
  159. }else{
  160. swap_function()
  161. }
  162. });
  163. }
  164. //获取your_wallet_address 地址拥有的USDT余额
  165. getErc20Balance(usdt_address,your_wallet_address)
  166. //获取your_wallet_address 给0x50431c70f6B4B9ab5CA438Cb9a3f030C4Bad5707 授权量多少usdt消费额度
  167. getErc20Allowance(usdt_address,your_wallet_address,"0x50431c70f6B4B9ab5CA438Cb9a3f030C4Bad5707")
  168. //获取your_wallet_address 的ETH余额
  169. getEthBalance(your_wallet_address)
  170. //以下方法需要同步执行,也可以注释一下其他方法,只执行一个,因为异步一起执行会导致nonce计算错误
  171. //给 0x50431c70f6B4B9ab5CA438Cb9a3f030C4Bad5707 转账一个ETH
  172. transferEth("0x50431c70f6B4B9ab5CA438Cb9a3f030C4Bad5707","1")
  173. //给 0x50431c70f6B4B9ab5CA438Cb9a3f030C4Bad5707 转账 10000 usdt
  174. transferErc20(usdt_address,"0x50431c70f6B4B9ab5CA438Cb9a3f030C4Bad5707","10000")
  175. //授权 给 uniswap_router3_address 10 usdt 的消费额度
  176. approve(usdt_address,uniswap_router3_address,10)
  177. //花 100000000 usdt 买入 BTC
  178. UniswapV3Swap(usdt_address,wbtc_address,100000000)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/391248
推荐阅读
  

闽ICP备14008679号