Magician-Web3 はブロックチェーン開発キットです。2 つの機能から構成されます。1 つは、開発者のニーズに応じてブロックチェーンをスキャンしてトランザクションを監視することです。もう 1 つは、web3j の二次的なパッケージ化であり、いくつかの一般的なシナリオで開発者の作業負荷を軽減できます。ETH(BSC、POLYGANなど)、SOL、TRONの3つのチェーンをサポートする予定です
今回のアップデートのポイント
-
ロード バランシングが追加されました。複数の RPC URL が設定されている限り、自動ポーリングを実行でき、トラフィックを複数のノードに分散できるため、1 つのノードを「惨劇」のために監視し続ける必要はありません。
-
再試行戦略が追加されました。予期せぬ理由でブロックがスキャンのためにスキップされた場合、スキップされたブロックの高さが再試行戦略に入力され、自分で処理できます。
-
細かい部分を修正しました
負荷分散
複数の 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 つの条件が満たされると、再試行戦略がトリガーされます。再試行をトリガーするには、両方の条件が満たされる必要があります。
-
現在スキャンされているブロックの高さは空です (ブロックが存在しないか、ブロック内にトランザクションがありません)
-
現在スキャンされているブロックの高さ < チェーン上の最新のブロックの高さ
上記 2 つの条件が同時に満たされた場合、スキャン タスクはこのブロックをスキップし、次のブロックのスキャンを続行します。同時に、再試行戦略はスキップされたブロックの高さを受け取ります。これは自分で処理できます。再試行戦略
再試行ポリシーを作成する
public class EthRetry implements RetryStrategy {
@Override
public void retry(BigInteger blockNumber) {
}
}
スキャンタスクに再試行ポリシーを追加する
MagicianBlockchainScan.create()
.setRetryStrategy(new EthRetry())// 调用这个方法添加
.start();
スレッド数の構成に注意が必要
この時点でブロック スキャン タスク + 再試行戦略を開くと、2 つのスレッドが使用されるため、パラメーターに 2 を渡す必要があります。
// 初始化线程池,核心线程数必须 >= 扫块的任务数量 + 重试策略的数量
EventThreadPool.init(2);
ディテール調整
-
スキャン頻度は 500 ミリ秒まで設定可能
-
RPCアドレスを設定するためのパラメータの受け渡しタイプが変更されました
-
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