カスタムイベントの購読

SubscribeEvents を使うことで、任意のコントラクトからカスタムまたは既存のイベントを監視できます。event 文字列がSolidityのイベントシグネチャと一致していること、また監視したいコントラクトアドレスを指定してください。追加のフィルターを設定することで、特定のウォレットやトークンIDからのイベントのみを受信することも可能です。

OnEventReceived 関数は SubscribeEventsReturn オブジェクトを提供し、コントラクトタイプやトランザクションハッシュなどの情報が含まれます。発行されたイベント値を取得したい場合は、SubscribeEventsReturn > EventLog > EventDecodedEventDecoded オブジェクトを利用してください。

var indexer = new ChainIndexer(Chain.TestnetArbitrumSepolia);
var streamOptions = new WebRPCStreamOptions<SubscribeEventsReturn>(
    OnEventReceived,
    OnWebRPCErrorReceived);

var eventFilter = new EventFilter
{
    accounts = Array.Empty<string>(),
    contractAddresses = new[] {"0x4ab3b16e9d3328f6d8025e71cefc64305ae4fe9c"},
    tokenIDs = new[] {"0"},
    events = new[] {"Transfer(address indexed from, address indexed to, uint256 value)"}
};

indexer.SubscribeEvents(new SubscribeEventsArgs(eventFilter), streamOptions);

残高更新の購読

指定したコントラクト上のウォレットの残高更新を監視します。OnBalanceUpdateReceived 関数は、指定したウォレットアドレスの現在の残高を含む SubscribeBalanceUpdatesReturn オブジェクトを提供します。

var indexer = new ChainIndexer(Chain.TestnetArbitrumSepolia);
var streamOptions = new WebRPCStreamOptions<SubscribeBalanceUpdatesReturn>(
    OnBalanceUpdateReceived,
    OnWebRPCErrorReceived);

var contractAddress = "0x4ab3b16e9d3328f6d8025e71cefc64305ae4fe9c";
indexer.SubscribeBalanceUpdates(new SubscribeBalanceUpdatesArgs(contractAddress), streamOptions);

レシートの購読

指定したコントラクト上のレシート更新を監視します。OnSubscribeReceiptsMessageReceived 関数は、現在のレシート情報を含む SubscribeReceiptsReturn オブジェクトを提供します。

var indexer = new ChainIndexer(Chain.TestnetArbitrumSepolia);
var streamOptions = new WebRPCStreamOptions<SubscribeReceiptsReturn>(
    OnSubscribeReceiptsMessageReceived,
    OnWebRPCErrorReceived);

var filter = new TransactionFilter
{
    contractAddress = "0x4ab3b16e9d3328f6d8025e71cefc64305ae4fe9c"
};

indexer.SubscribeReceipts(new SubscribeReceiptsArgs(filter), streamOptions);

ストリームの中断

イベントの受信が不要になった場合は、必ずストリームをキャンセルしてください。これにより、ゲーム内で稼働中のすべてのリスナーが中断されます。

new ChainIndexer(Chain.TestnetArbitrumSepolia).AbortStreams();