币安链监控合约交易

币安链监控合约交易

对于合约上的发币,在币安出品bsc链后,大大简化了发币的过程,但是我们如何新上的币都有哪些呢,以及如何进行监控及筛选好的币种,我们今天来讲下:

主要思路是按照以太坊的合约事件监控,通过这个方式我们可以启动一个监控js来实现时间代币上新事件,对于合约时间监控web3js的官方文档是这么说的:

调用:

myContract.events.MyEvent([options][, callback])

参数:

options - Object: 可选,用于部署的选项,包含以下字段:

filter - Object : 可选,按索引参数过滤事件。例如 {filter: {myNumber: [12,13]}} 表示 “myNumber” 为12或13的所有事件

fromBlock - Number: 可选,仅监听该选项指定编号的块中发生的事件

topics - Array : 可选,用来手动为事件过滤器设定主题。如果设置过filter属性和事件签名,那么(topic[0])将不会自动设置

callback - Function: 可选,该回调函数触发时,其第二给参数为事件对象,第一个参数为错误对象

监控区块链的方式

链接监控的几种方式:

  1. 使用websocket ws方式链接节点,进行订阅
  2. 使用etherscan-apis ,进行api请求
  3. rpc调用方式订阅

本文今天讲的是rpc调用方式订阅

rpc 获取为:

const provider = new ethers.providers.JsonRpcProvider('')

要创建对应的filter事件:

const filter = {
address: contractAddress,//替换成实际的合约地址
topics: [
  ethers.utils.id('Transfer(address,address,uint256)')
]

}

然后要通过provider.on方法进行持续的监听,当有事件发生就会自动调用该方法;

provider.on(filter, async event => {
    jy = await analyseTransferEvent(event)
}

所有的代码为:

//监控交易的合约

const { ethers }  = require('ethers')

const moment = require('moment');

const Web3 = require('web3');

const pancakeAddress = "0x10ED43C718714eb63d5aA57B78B54704E256024E" //pancakeswap

let pancakeSwapAbi =  [{abi数据要通过https://bscscan.com/address/0x947950bcc74888a40ffa2593c5798f11fc9124c4#contracts合约地址来查看对应的abi}];

const provider = new ethers.providers.JsonRpcProvider('https://bsc-dataseed1.binance.org')

//订阅了最新区块的Transfer事件,及交易对信息

const filter = {

address: contractAddress,

topics: [

  ethers.utils.id('Transfer(address,address,uint256)')

]

}

provider.on(filter, async event => {

jy = await analyseTransferEvent(event)

})

async function analyseTransferEvent(event) {

// 获取 transaction 详情

const res = await provider.getTransaction(event.transactionHash);

if (res.to.toString() !== pancakeAddress) {
    return;
}

// 解析 input 数据

pancakeInterface = new ethers.utils.Interface(pancakeSwapAbi);

const input = pancakeInterface.parseTransaction({ data: res.data, value: res.value });

contractAbi = [{要监控的合约abi,获取方式上面有说吗}]

contractInterface = new ethers.utils.Interface(contractAbi);

const parsedEvent = contractInterface.parseLog(event);

const address = res.from;

// 买 /卖

const action = address === parsedEvent.args.from ? 'SELL' : 'BUY';

// 将数据存到数据库

}

如需帮助请联系:15646596395

本文参与2022世界杯预选赛赛程直播社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

  • 发表于 5天前
  • 阅读 ( 232 )
  • 学分 ( 27 )
  • 分类:智能合约

0 条评论

请先 登录 后评论
yohansun
yohansun

1 篇文章, 27 学分