#ethereum #smartcontracts #go-ethereum #ganache
#ethereum #смарт-контракты #перейти-ethereum #ганаш
Вопрос:
Я использую golang для прослушивания событий смарт-контракта. Я развернул свои контракты на порты ganache ui и ganache-cli. Но я получаю следующую ошибку:
➜ sc_events go run main.go
2019/04/17 14:25:04 write tcp 127.0.0.1:54917->127.0.0.1:8545: i/o timeout
exit status 1
Я пытался использовать как пользовательский интерфейс ganache (прослушивает порт 7545), так и интерфейс ganache-cli (8545). Похоже, что оба они выдают одну и ту же ошибку. Но если я прослушиваю URL-адрес infura, я не думаю, что получаю эту ошибку,
package main
import (
"context"
"fmt"
"log"
"github.com/ethereum/go-ethereum"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/ethclient"
)
func main() {
client, err := ethclient.Dial("ws://127.0.0.1:8545")
// client, err := ethclient.Dial("wss://rinkeby.infura.io/ws/v3/010590bb415e4664835a05a53b18a293")
if err != nil {
log.Fatal(err)
}
contractAddress := common.HexToAddress("0x82726c7c1202565f1fef63fa8d4caca6366d4749")
query := ethereum.FilterQuery{
Addresses: []common.Address{contractAddress},
}
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:
fmt.Println(vLog) // pointer to event log
}
}
}
Я ожидаю, что код будет продолжать прослушивать события смарт-контракта.
Кроме того, было бы полезно, если бы кто-нибудь также мог опубликовать код для декодирования объекта события в структуру данных карты, чтобы прочитать его.