Magician-Scanning 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
Magician-Scanning 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
Magician-Scanning 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 MIT
开发语言 Java
操作系统 跨平台
软件类型 开源软件
所属分类 Web3区块链
开源组织
地区 国产
投 递 者 Magician开源
适用人群 未知
收录时间 2022-11-06

软件简介

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>

<!-- This is the logging package, you must have it or the console will not see anything, any logging package that can bridge with slf4j is supported -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-jdk14</artifactId>
    <version>1.7.12</version>
</dependency>

扫块,监听交易事件

创建一个监听器

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

ETH(BSC, POYGAN 等)监听器

/**
 * 创建一个类,实现 EthMonitorEvent接口 即可
 */
public class EventDemo implements EthMonitorEvent {

    /**
     * 筛选条件,如果遇到了符合条件的交易,会自动触发 call方法
     * 这些条件都是 并且的关系,必须要同时满足才行
     * 如果不想根据某个条件筛选,直接不给那个条件设置值就好了
     * 这个方法如果不实现,或者返回null, 那么就代表监听任意交易
     */
    @Override
    public EthMonitorFilter ethMonitorFilter() {
        return EthMonitorFilter.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( // 此方法的参数列表(仅类型)
                                        new TypeReference<Address>(){},
                                        new TypeReference<Uint256>(){}
                                )
                                .setValue("0x552115849813d334C58f2757037F68E2963C4c5e", null)// 筛选第几个参数 = 什么值
                );
    }

    /**
     * 如果遇到了符合上面条件的交易,就会触发这个方法
     * transactionModel.getEthTransactionModel() 是一个交易对象,内部包含hash,value,from,to 等 所有的数据
     */
    @Override
    public void call(TransactionModel transactionModel) {
        String template = "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 详解

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

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

如果 有一个合约[0x552115849813d334C58f2757037F68E2963C4c5e], 里面有一个函数是 transferFrom(address from, address to, uint256 amount)

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

public EthMonitorFilter ethMonitorFilter() {
        return EthMonitorFilter.builder()
                .setToAddress("0x552115849813d334C58f2757037F68E2963C4c5e") // 合约地址
                .setInputDataFilter( // 根据inputData筛选
                        InputDataFilter.builder()
                                .setFunctionCode(ERC20.TRANSFER_FROM.getFunctionCode()) // 被调用的函数编码(inputData前十位)
                                .setTypeReferences( // 此方法的参数列表(仅类型)
                                        new TypeReference<Address>(){}, // 第一个参数的类型
                                        new TypeReference<Address>(){}, // 第二个参数的类型
                                        new TypeReference<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(new EventOne()) // 添加 监听事件
        .addEthMonitorEvent(new EventTwo()) // 添加 监听事件
        .addEthMonitorEvent(new EventThree()) // 添加 监听事件
        .start();

// TODO 暂时不支持SOL和TRON, 正在开发中......

文档地址

https://magician-io.com/chain

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论

点击引领话题📣
发表了资讯
02/05 17:57

Magician-Scanning 支持 Tron 链了

本次更新主要是增加了对Tron的支持,但是由于本人近期非常忙,所以只开发了基础功能,对Tron的扫描暂时不支持过滤器,监听器里面会收到所有扫描到的交易记录,需要由开发者自己去判断筛选交易记录。 创建一个Tron监听器 条件过滤器还在开发中,可以关注后续更新,call方法会接收到所有扫描到的交易信息,需要您自己判断筛 /** * 创建一个类,实现TronMonitorEvent接口即可 */ public class TronEventOne implements Tro...

2
2
发表了资讯
2022/11/25 19:10

Magician-Web3 1.0.5发布啦,加入了负载均衡和重试策略

Magician-Web3 是一个区块链开发工具包。它由两个功能组成。一个是扫描区块链,根据开发者的需要监控交易。另一个是对 web3j 的一些二次打包,可以减少开发者在一些常见场景下的工作量。它计划支持三种链,ETH(BSC、POLYGAN 等)、SOL 和 TRON 本次更新的点 1. 加入了负载均衡,只要配置多个RPC URL 即可自动轮询,可以将流量分散给多个节点,不用一直盯着一个节点“祸害了” 2. 加入了重试策略,当出现了某些意外的原因 导致区...

0
2
发表了资讯
2022/11/23 16:53

Magician-Web3 1.0.3 发布,支持根据 inputData 里的数据进行监控

Magician-Web3 是一个区块链开发工具包。它由两个功能组成。一个是扫描区块链,根据开发者的需要监控交易。另一个是对 web3j 的一些二次打包,可以减少开发者在一些常见场景下的工作量。它计划支持三种链,ETH(BSC、POLYGAN 等)、SOL 和 TRON 本次更新的点 1. 新增InputDataFilter,可以更加精准的根据inputData进行监控了 2. 改变扫描模式,现在只需要设定一个起始块就好了,程序会按照一定的频率从起始块往后扫描,不再需要...

0
2
发表了资讯
2022/11/18 13:08

Magician-Web3 1.0.2 发布,支持配置代理

Magician-web3是一个区块链开发工具包。它由两个功能组成。一个是扫描区块链,根据开发者的需要监控交易。另一个是对web3j的一些二次封装,可以减少开发者在一些常见场景下的工作量。它计划支持三种链,ETH(BSC、POLYGAN等)、SOL和TRON 他不需要依赖Magician,可以完全的独立使用:https://magician-io.com ------------------------------------------------------------------------------------ 本次更新主要是添加了一个代...

0
1
发表了资讯
2022/11/06 14:31

Magician-Web3 上线了

Magician-Web3是一个区块链开发工具包。它由两个功能组成。一个是扫描区块链,根据开发者的需要监控交易。另一个是对web3j的一些二次封装,可以减少开发者在一些常见场景下的工作量。它计划支持三种链,ETH(BSC、POLYGAN等)、SOL和TRON,目前已经完成了对ETH的支持。 自此以后,Magician的定位发生了改变,他不再是一个web领域的框架了,而是一套Java开发的工具包,涵盖区块链,web开发两个领域,我们可以回顾一下现有的所有组...

0
11
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了博客
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
发表了问答
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
暂无内容
0 评论
9 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部