有时候我们需要知道某个contract的池子地址,我们可以去链上浏览器查看,也可以通过web3查看,以下我bsc的contract举例,以json-rpc和web3.js两种形式来获取。
实现思路是通过abi定义,指向一个绝大多数bsc的contract都存在的函数名,来获取池子地址。
web3.js实现 纯js代码
下面是web3.js中,纯.js脚本实现的代码:
const routeraddress = '0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73' // PANCAKESWAP ROUTER 固定值。
const Web3 = require('web3');//当在纯.js文件脚本中应用时,该行不可省略。
const web3 = new Web3("https://bsc-dataseed1.binance.org:443");
const bnbAddress = '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c' // contract for WBNB地址,固定值。
const buyAddress = '0x041640ea980e3fe61e9c4ca26d9007bc70094c15'; // 某个bsc的contract地址
// 定义abi
const liqABI = [{
"inputs":[{
"internalType":"address","name":"_feeToSetter","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{
"anonymous":false,"inputs":[{
"indexed":true,"internalType":"address","name":"token0","type":"address"},{
"indexed":true,"internalType":"address","name":"token1","type":"address"},{
"indexed":false,"internalType":"address","name":"pair","type":"address"},{
"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"PairCreated","type":"event"},{
"constant":true,"inputs":[],"name":"INIT_CODE_PAIR_HASH","outputs":[{
"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{
"constant":true,"inputs":[{
"internalType":"uint256","name":"","type":"uint256"}],"name":"allPairs","outputs":[{
"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{
"constant":true,"inputs":[],"name":"allPairsLength","outputs":[{
"internalType":"uint256","name":"","type":"uint256"}],"payable":false