V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Joker123456789
V2EX  ›  以太坊

Magician-Web3 1.0.3 发布啦,可以根据 inputData 里的数据 进行监控了

  •  
  •   Joker123456789 · 2022-11-23 16:56:34 +08:00 · 906 次点击
    这是一个创建于 491 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Magician-Web3 是一个区块链开发工具包。它由两个功能组成。一个是扫描区块链,根据开发者的需要监控交易。另一个是对 web3j 的一些二次打包,可以减少开发者在一些常见场景下的工作量。它计划支持三种链,ETH ( BSC 、POLYGAN 等)、SOL 和 TRON

    本次更新的点

    1. 新增 InputDataFilter ,可以更加精准的根据 inputData 进行监控了

    2. 改变扫描模式,现在只需要设定一个起始块就好了,程序会按照一定的频率从起始块往后扫描,不再需要设置每轮扫描块数

    3. Web3j 的扩展部分,修改了私钥的传入方式

    InputDataFilter

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

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

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

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

    public EthMonitorFilter ethMonitorFilter() {
            return EthMonitorFilter.builder()
                    .setToAddress("0x552115849813d334C58f2757037F68E2963C4c5e") // 合约地址
                    .setInputDataFilter( // 根据 inputData 筛选
                            InputDataFilter.create()
                                    .setFunctionCode(ERC20.TRANSFER_FROM.getFunctionCode()) // 被调用的函数编码( inputData 前十位)
                                    .setTypeReferences( // 此方法的参数列表(仅类型)
                                            new TypeReference<Address>(){}, // 第一个参数的类型
                                            new TypeReference<Address>(){}, // 第二个参数的类型
                                            new TypeReference<Uint256>(){} // 第三个参数的类型
                                    )
                                    .setValue(null, "0x552115849813d334C58f2757037F68E2963C4c5e", null)// 筛选第二个参数( to ) = 0x552115849813d334C58f2757037F68E2963C4c5e
                    );
    }
    

    只需要设置起始块

    MagicianBlockchainScan.create()
            .setRpcUrl("https://data-seed-prebsc-1-s1.binance.org:8545/")
            .setChainType(ChainType.ETH)
            .setScanPeriod(5000) 
            .setScanSize(1000) // 这个配置项已经被彻底移除了,不再需要配置了
            .setBeginBlockNumber(BigInteger.valueOf(24318610))
            .addEthMonitorEvent(new EventOne())
            .addEthMonitorEvent(new EventTwo())
            .addEthMonitorEvent(new EventThree())
            .start();
    

    扫描的逻辑换成了从起始块 按照一定的频率 一块一块的往后扫,不再是以前的 每轮扫描多少块了

    Web3j 的扩展部分,修改了私钥的传入方式

    这种方式已经淘汰了

    EthHelper ethHelper = MagicianWeb3.getEthBuilder().getEth(web3j, privateKey);
    
    EthContract ethContract = MagicianWeb3.getEthBuilder().getEthContract(web3j, privateKey);
    

    现在换成了,在调用方法时 才传入,目的是为了解决:如果有多个地址 需要发起交易,可以只用一个对象解决

    // 转账
    TransactionReceipt transactionReceipt = ethHelper.transfer(
                toAddress,
                privateKey, // 调用方法时传入私钥
                BigDecimal.valueOf(1),
                Convert.Unit.ETHER
    );
    
    
    // 往合约里写入数据
    SendResultModel sendResultModel = ethContract.sendRawTransaction(
                        fromAddress, 
                        contractAddress, 
                        privateKey, // 调用方法时传入私钥
                        new BigInteger("1200000"),
                        new BigInteger("800000"),
                        ethAbiCodec.getInputData(
                                "transfer",
                                new Address(toAddress),
                                new Uint256(new BigInteger("1000000000000000000"))
                        )
                );
    

    可以访问官网了解更多:https://magician-io.com

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1101 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 22:48 · PVG 06:48 · LAX 15:48 · JFK 18:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.