Ethereum でブロックをスキャンする方法、Magician-Web3 1.0.5 がリリースされ、負荷分散と再試行戦略が追加されました

Magician-Web3 はブロックチェーン開発キットです。2 つの機能から構成されます。1 つは、開発者のニーズに応じてブロックチェーンをスキャンしてトランザクションを監視することです。もう 1 つは、web3j の二次的なパッケージ化であり、いくつかの一般的なシナリオで開発者の作業負荷を軽減できます。ETH(BSC、POLYGANなど)、SOL、TRONの3つのチェーンをサポートする予定です

今回のアップデートのポイント

  1. ロード バランシングが追加されました。複数の RPC URL が設定されている限り、自動ポーリングを実行でき、トラフィックを複数のノードに分散できるため、1 つのノードを「惨劇」のために監視し続ける必要はありません。

  2. 再試行戦略が追加されました。予期せぬ理由でブロックがスキャンのためにスキップされた場合、スキップされたブロックの高さが再試行戦略に入力され、自分で処理できます。

  3. 細かい部分を修正しました

負荷分散

複数の RPC アドレスを直接設定するだけです

MagicianBlockchainScan.create()
                    .setRpcUrl(
                            // 可以设置1到n个 rpc地址了,超过一个将自动轮询使用
                            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")
                    )
                    .setScanPeriod(1000)
                    .setBeginBlockNumber(BlockEnums.LAST_BLOCK_NUMBER.getValue())
                    .addEthMonitorEvent(new EventOne())
                    .addEthMonitorEvent(new EventThree())
                    .setRetryStrategy(new EthRetry())
                    .start();

再試行ポリシー

次の 2 つの条件が満たされると、再試行戦略がトリガーされます。再試行をトリガーするには、両方の条件が満たされる必要があります。

  1. 現在スキャンされているブロックの高さは空です (ブロックが存在しないか、ブロック内にトランザクションがありません)

  2. 現在スキャンされているブロックの高さ < チェーン上の最新のブロックの高さ

上記 2 つの条件が同時に満たされた場合、スキャン タスクはこのブロックをスキップし、次のブロックのスキャンを続行します。同時に、再試行戦略はスキップされたブロックの高さを受け取ります。これは自分で処理できます。再試行戦略

再試行ポリシーを作成する

public class EthRetry implements RetryStrategy {

    @Override
    public void retry(BigInteger blockNumber) {
        
    }
}
スキャンタスクに再試行ポリシーを追加する
MagicianBlockchainScan.create()
        .setRetryStrategy(new EthRetry())// 调用这个方法添加
        .start();
スレッド数の構成に注意が必要

この時点でブロック スキャン タスク + 再試行戦略を開くと、2 つのスレッドが使用されるため、パラメーターに 2 を渡す必要があります。

// 初始化线程池,核心线程数必须 >= 扫块的任务数量 + 重试策略的数量
EventThreadPool.init(2);

ディテール調整

  1. スキャン頻度は 500 ミリ秒まで設定可能

  2. RPCアドレスを設定するためのパラメータの受け渡しタイプが変更されました

  3. 2点目の最適化により、RPCアドレスの種類に応じてどのチェーンをスキャンするかを判断できるようになったため、ChainTypeの設定が削除されました。

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")
                    )
                    .setScanPeriod(1000)// 这个参数最低可以设置为500了
                    .setBeginBlockNumber(BlockEnums.LAST_BLOCK_NUMBER.getValue())
                    .addEthMonitorEvent(new EventOne())
                    .addEthMonitorEvent(new EventThree())
                    .setRetryStrategy(new EthRetry())
                    .start();

詳細については、公式 Web サイトにアクセスしてください: https://magician-io.co

おすすめ

転載: blog.csdn.net/sherlockholmes11/article/details/128043873