Phoenix Chain SDK Doc
  • Introduction
  • Client
    • Initializing a Client
  • Accounts
    • Querying Balances
  • Blocks and Transactions
    • Querying Blocks
    • Querying Transactions
  • Smart Contracts
    • Installing Dev Tools
    • Generating Go Contracts File
    • Deploying Contracts
    • Querying Contracts
    • Writing to Contracts
  • Event logs
    • Filtering Event logs
    • Subscribing to Event Logs
Powered by GitBook
On this page
  1. Event logs

Subscribing to Event Logs

We can call the SubscribeFilterLogs method to listen contract event logs in real time. To subscribe to event logs, we need to use the websocket URL.

package main
import (
	store "...The path of the store.go file..."
	"context"
	"fmt"
	"log"
	"strings"
	phoenixchain "github.com/PhoenixGlobal/Phoenix-Chain-SDK"
	"github.com/PhoenixGlobal/Phoenix-Chain-SDK/ethereum/accounts/abi"
	"github.com/PhoenixGlobal/Phoenix-Chain-SDK/ethereum/core/types"
	"github.com/PhoenixGlobal/Phoenix-Chain-SDK/ethereum/ethclient"
	"github.com/PhoenixGlobal/Phoenix-Chain-SDK/libs/common"
	"github.com/PhoenixGlobal/Phoenix-Chain-SDK/libs/crypto"
)
func main() {
	client, err := ethclient.Dial("ws://dataseed1.phoenix.global/wss")
	if err != nil {
		log.Fatal(err)
	}
	contractAddress := common.HexToAddress("0x9aC8B849A8b6Fc14F8dEcfa6A22dB41671B38eFB")
	itemSetTopic := crypto.Keccak256Hash([]byte("ItemSet(bytes32,bytes32)"))
	query := phoenixchain.FilterQuery{
		Addresses: []common.Address{
			contractAddress,
		},
		Topics: [][]common.Hash{{itemSetTopic}},
	}
	logs := make(chan types.Log)
	sub, err := client.SubscribeFilterLogs(context.Background(), query, logs)
	if err != nil {
		log.Fatal(err)
	}
	for {
		select {
		case err := <-sub.Err():
			log.Fatal(err)
		case vLog := <-logs:
			contractAbi, err := abi.JSON(strings.NewReader(string(store.StoreABI)))
			if err != nil {
				log.Fatal(err)
			}
			event := struct {
				Key   [32]byte
				Value [32]byte
			}{}
			err = contractAbi.Unpack(&event, "ItemSet", vLog.Data)
			if err != nil {
				log.Fatal(err)
			}
			fmt.Println(string(event.Key[:]))  
			fmt.Println(string(event.Value[:])) 
		}
	}
}
PreviousFiltering Event logs

Last updated 2 years ago