• 注册
  • WordPress后台-外观-小工具 进行配置小工具

    币安 币安 关注:0 内容:221

    若何发现币安BSC的盛行项目「含源码」

  • 查看作者
  • 打赏作者
  • 拉黑名单
    • 币安
    • 币安智能链逐渐成为DeFi的一片热土,越来越多的项目从以太坊移植到币安BSC平台。 在这个教程中,我们将学习若何开发一个应用Bsc Spider来实验发现币安BSC上买卖活跃的BEP20代币, 从而辅助我们更好地洞察币安BSC上的DeFi流动。

      若何发现币安BSC的盛行项目「含源码」

      用自己熟悉的语言学习 以太坊开发 : Java | Php | Python | .Net / C# | Golang | Node.JS | Flutter / Dart

      1、Bsc Spider原理概述

      如你所知,DeFi运动的基础是代币,无论是以太坊DeFi中的ERC20代币,照样BSC Defi 中的BEP20代币,都是承载种种DeFi协议的基础前言。因此,通过考察BSC上的BEP20的 买卖,我们就可以直观地领会哪些DeFi项目是真正受迎接的。

      BEP20和ERC20一样,在转账时都市触发一个事宜,其原型界说如下:

      1
      Transfer(address from, address to, uint value);

      因此,我们只要从BSC链上提取一定周期发生内的BEP20代币的Transfer事宜并根据代币 合约地址举行分类统计,就可以知道在这个周期中的种种DeFi项目的真实活跃情形了。

      在进入现实代码之前,让我们先看一下要使用的开发工具:

      • Node.js:基础运行环境,提供js运行时,在这个教程中,我们使用 Node 12 LTS版本
      • ethers.js:轻量的js版本的web3接见库,在这个教程中,我们使用 Ethers.js 5.0 版本

      BEP20一键发币工具:BSC TokenDIY

      2、建立Bsc Spider项目

      首先建立一个新的目录 bscspider,然后进入该目录执行如下下令初始化:

      ~$ mkdir bscspider && cd bscspider~/bscspider$ npm init -y

      输出效果类似下面这样:

      若何发现币安BSC的盛行项目「含源码」

      接下来安装我们要用到的主要工具ethers.js:

      npm install --save ethers

      输出效果如下:

      若何发现币安BSC的盛行项目「含源码」

      接下来我们就可以着手代码的编写了。

      3、编写Bsc Spider代码框架

      用你喜欢的编辑器打开index.js文件,复制如下代码:

      const { ethers }  = require('ethers')async function main(){}  // todomain().then(() => console.log('done')).catch(e => console.error(e))

      在上面的代码中,我们首先引入ethers库,然后声明一个异步函数main, 注重这里我们还没有实现main()函数,只是占位,在代码的最后,我们 挪用main()函数并恰当地捕捉异常。

      4、Bsc Spider:抓取最新区块的Transfer事宜

      要抓取最新区块的Transfer事宜,首先需要建立一个Ethers的Provider工具:

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

      固然若是你有自己的BSC节点,也可以把你的URL传入JsonRpcProvider组织函数,我们这里 简朴地使用币安官方提供的节点URL。

      在Ethers中,Provider工具是一个EventEmitter,当发现新的合约事宜时,就会 触发我们提供的监听函数。不外我们首先需要界说一个filter工具来声明感兴趣的事宜:

      const filter = {  topics: [    ethers.utils.id('Transfer(address,address,uint256)')  ]}

      接下来就可以监听了。我们只对合约地址感兴趣,因此每当看到一个合约地址, 就意味着这个合约发生了一次转账买卖,简朴地累加买卖并纪录在哈希表counter中 就可以了:

      const counter = {}provider.on(filter, async log => {  if(!counter[log.address]) counter[log.address] = 1  else counter[log.address] += 1}

      下面就是抓取并处置最新区块的Transfer事宜的代码完成后main()函数的代码:

      async function main(){  const provider = new ethers.providers.JsonRpcProvider('https://bsc-dataseed1.binance.org')  const filter = {    topics: [      ethers.utils.id('Transfer(address,address,uint256)')    ]  }  const counter = {}  provider.on(filter, async log => {    if(!counter[log.address]) counter[log.address] = 1    else counter[log.address] += 1  }    }

      5、Bsc Spider:准时转储BEP20买卖统计数据

      为了便于后续剖析,我们需要将counter纪录的数据准时转储到磁盘文件,因此用 一个1分钟的准时器来完成这一操作:

      const fs = require('fs')const t1 = Date.now()setInterval(async () => {  const lines = []  for(let addr in counter){    const name = await getTokenName(addr)    lines.push([addr, name, counter[addr]])  }  lines.sort((a, b) => b[1] - a[1] )  fs.writeFile('./counter.csv', lines.join('\n'))  const elapsed = (Date.now() - t1 ) / (60*1000)  console.log(`saved after ${elapsed} minutes, tokens: ${lines.length}`)}, 60000)

      在上面的代码中,我们使用getTokenName()函数来获取代币名称,以便纪录到转出 的CSV文件中,其代码如下:

      async function getTokenName(address){  const abi = [{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"}]  const token = new ethers.Contract(address, abi, provider)  return await token.name()}

      6、完整的Bsc Spider代码

      const { ethers }  = require('ethers')const fs = require('fs')async function main(){  const provider = new ethers.providers.JsonRpcProvider('https://bsc-dataseed1.binance.org')  const filter = {    topics: [      ethers.utils.id('Transfer(address,address,uint256)')    ]  }  const counter = {}  provider.on(filter, async log => {    if(!counter[log.address]) counter[log.address] = 1    else counter[log.address] += 1  }      async function getTokenName(address){    const abi = [{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"}]    const token = new ethers.Contract(address, abi, provider)    return await token.name()  }      const t1 = Date.now()  setInterval(async () => {    const lines = []    for(let addr in counter){      const name = await getTokenName(addr)      lines.push([addr, name, counter[addr]])    }    lines.sort((a, b) => b[1] - a[1] )    fs.writeFile('./counter.csv', lines.join('\n'))    const elapsed = (Date.now() - t1 ) / (60*1000)    console.log(`saved after ${elapsed} minutes, tokens: ${lines.length}`)  }, 60000)  }main().then(() => console.log('done')).catch(e => console.error(e))

      7、剖析Bsc Spider的转储数据

      最简朴的方式是用Excel来打开转储的CSV文件,看起来是这样:

      若何发现币安BSC的盛行项目「含源码」

      然后行使excel的数据剖析功效。例如绘制最活跃的50种代币:

      若何发现币安BSC的盛行项目「含源码」

      是不是和你想的一样?

      8、Bsc Spider开发教程结束语

      在这个教程中,我们学习了若何使用ethers.js来跟踪BSC上最受迎接的BEP20代币。这 只是一个教学代码,其中另有许多可以改善的环节,迎接你继续深入思索改善或者留言。


      原文链接:http://blog.hubwiz.com/2021/03/01/bsc-spider/

      暴涨回调都不主要,币安教会你若何选择焦点资产

      前言: 2020年以来全球流动性超宽松,资产配置中对冲货币贬值的需求增大,比特币的供给稀缺和去中心化特征,以及作为交换媒介与支付等方面的认可程度提升,使其在货币超发环境下,投资价值凸显。比特币代表着加密数字资产市场,正一路狂飙突进。据统计,美国

      请登录之后再进行评论

      登录
    • 做任务
    • 实时动态
    • 偏好设置
    • 返回顶部
    • 帖子间隔 侧栏位置: