Magician-Scanning 区块链开发工具包开源项目

我要开发同款
匿名用户2022年11月06日
128阅读
开发技术Java
所属分类Web3、区块链
授权协议MIT

作品详情

Magician-Scanning是一个用Java开发的扫描区块链的工具包,当我们在程序中需要一些功能时,它可以派上用场,比如说。

当一个地址收到ETH时,程序中的一个方法会被自动触发,这个交易会被传入该方法。

当一个合约的某个功能被调用时(比如ERC20转账),它会自动触发程序中的一个方法,并将这个交易传递给这个方法。它甚至可以只在代币被转移到指定地址时被触发。

当程序需要保留一个区块高度开始以来的所有交易记录时,也可以使用这个工具包。

它计划支持三种链,ETH(BSC,POLYGON等),SOL和TRON

初始化配置导入依赖<dependency><groupId>com.github.yuyenews</groupId><artifactId>Magician-Scanning</artifactId><version>1.0.6</version></dependency><!--Thisistheloggingpackage,youmusthaveitortheconsolewillnotseeanything,anyloggingpackagethatcanbridgewithslf4jissupported--><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-jdk14</artifactId><version>1.7.12</version></dependency>扫块,监听交易事件创建一个监听器

监听器可以创建多个,根据你的需求分别设置监听条件

ETH(BSC,POYGAN等)监听器/***创建一个类,实现EthMonitorEvent接口即可*/publicclassEventDemoimplementsEthMonitorEvent{/***筛选条件,如果遇到了符合条件的交易,会自动触发call方法*这些条件都是并且的关系,必须要同时满足才行*如果不想根据某个条件筛选,直接不给那个条件设置值就好了*这个方法如果不实现,或者返回null,那么就代表监听任意交易*/@OverridepublicEthMonitorFilterethMonitorFilter(){returnEthMonitorFilter.builder().setFromAddress("0x131231249813d334C58f2757037F68E2963C4crc")//筛选fromAddress发送的交易.setToAddress("0x552115849813d334C58f2757037F68E2963C4c5e")//筛选toAddress或合约地址收到的交易.setMinValue(BigInteger.valueOf(1))//筛选发送的主链币数量>=minValue的交易.setMaxValue(BigInteger.valueOf(10))//筛选发送的主链币数量<=maxValue的交易.setInputDataFilter(//根据inputData筛选InputDataFilter.builder().setFunctionCode(ERC20.TRANSFER.getFunctionCode())//函数签名(被调用的合约内的某方法),支持任意函数,这里的枚举只是一部分标准的合约函数.setTypeReferences(//此方法的参数列表(仅类型)newTypeReference<Address>(){},newTypeReference<Uint256>(){}).setValue("0x552115849813d334C58f2757037F68E2963C4c5e",null)//筛选第几个参数=什么值);}/***如果遇到了符合上面条件的交易,就会触发这个方法*transactionModel.getEthTransactionModel()是一个交易对象,内部包含hash,value,from,to等所有的数据*/@Overridepublicvoidcall(TransactionModeltransactionModel){Stringtemplate="EventOne扫描到了,hash:{0},from:{1},to:{2},input:{3}";template=template.replace("{0}",transactionModel.getEthTransactionModel().getBlockHash());template=template.replace("{1}",transactionModel.getEthTransactionModel().getFrom());template=template.replace("{2}",transactionModel.getEthTransactionModel().getTo());template=template.replace("{3}",transactionModel.getEthTransactionModel().getInput());System.out.println(template);}}InputDataFilter详解

如果你想监控,某合约内的某函数被调用的交易

publicEthMonitorFilterethMonitorFilter(){returnEthMonitorFilter.builder().setToAddress("0x552115849813d334C58f2757037F68E2963C4c5e")//合约地址.setInputDataFilter(//根据inputData筛选InputDataFilter.builder().setFunctionCode("0xadasasdf")//被调用的函数编码(inputData前十位));}

如果有一个合约[0x552115849813d334C58f2757037F68E2963C4c5e],里面有一个函数是transferFrom(addressfrom,addressto,uint256amount)

你想实现一个监控:如果有人用这个合约里的这个函数,将代币转给[0x552115849813d334C58f2757037F68E2963C4c5e]时,就触发Monitor事件,那么你可以这样写

publicEthMonitorFilterethMonitorFilter(){returnEthMonitorFilter.builder().setToAddress("0x552115849813d334C58f2757037F68E2963C4c5e")//合约地址.setInputDataFilter(//根据inputData筛选InputDataFilter.builder().setFunctionCode(ERC20.TRANSFER_FROM.getFunctionCode())//被调用的函数编码(inputData前十位).setTypeReferences(//此方法的参数列表(仅类型)newTypeReference<Address>(){},//第一个参数的类型newTypeReference<Address>(){},//第二个参数的类型newTypeReference<Uint256>(){}//第三个参数的类型).setValue(null,"0x552115849813d334C58f2757037F68E2963C4c5e",null)//筛选第二个参数(to)=0x552115849813d334C58f2757037F68E2963C4c5e);}SOL,TRON链的扫块正在开发中......开发中......开启一个扫块任务//初始化线程池,核心线程数必须>=扫块的任务数量+重试策略的数量EventThreadPool.init(1);//开启一个扫块任务,如果你想扫描多个链,那么直接拷贝这段代码,并修改配置即可MagicianBlockchainScan.create().setRpcUrl(EthRpcInit.create().addRpcUrl("https://data-seed-prebsc-1-s1.binance.org:8545").addRpcUrl("https://data-seed-prebsc-2-s1.binance.org:8545").addRpcUrl("https://data-seed-prebsc-1-s2.binance.org:8545"))//节点的RPC地址.setScanPeriod(5000)//每轮扫描的间隔.setBeginBlockNumber(BigInteger.valueOf(24318610))//从哪个块高开始扫描.addEthMonitorEvent(newEventOne())//添加监听事件.addEthMonitorEvent(newEventTwo())//添加监听事件.addEthMonitorEvent(newEventThree())//添加监听事件.start();//TODO暂时不支持SOL和TRON,正在开发中......文档地址

https://magician-io.com/chain

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论