Subscribe NewTxs
接口說明
用於訂閱高性能網絡中的交易數據流,方法名NewTxs
。
流控說明
Tier 3
Tier 2
Tier 1
並行數據流
-
5
10
請求參數
參數
必選
格式
示例
備注
NodeValidation
是
boolean
false
該字段目前僅支持設置為false,relay會以更低延遲推送全部新交易(未經校驗)
請求示例
package main
import (
"context"
"fmt"
// directory of the generated code using the provided relay.proto file
pb "github.com/BlockRazorinc/relay_example/protobuf"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/rlp"
"google.golang.org/grpc"
)
// auth will be used to verify the credential
type Authentication struct {
apiKey string
}
func (a *Authentication) GetRequestMetadata(context.Context, ...string) (map[string]string, error) {
return map[string]string{"apiKey": a.apiKey}, nil
}
func (a *Authentication) RequireTransportSecurity() bool {
return false
}
func main() {
// BlockRazor relay endpoint address
blzrelayEndPoint := "ip:port"
// auth will be used to verify the credential
auth := Authentication{
"your auth token",
}
// open gRPC connection to BlockRazor relay
var err error
conn, err := grpc.Dial(blzrelayEndPoint, grpc.WithInsecure(), grpc.WithPerRPCCredentials(&auth), grpc.WithWriteBufferSize(0), grpc.WithInitialConnWindowSize(128*1024))
if err != nil {
fmt.Println("error: ", err)
return
}
// use the Gateway client connection interface
client := pb.NewGatewayClient(conn)
// create context and defer cancel of context
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
// create a subscription using the stream-specific method and request
stream, err := client.NewTxs(ctx, &pb.TxsRequest{NodeValidation: false})
if err != nil {
fmt.Println("failed to subscribe new tx: ", err)
return
}
for {
reply, err := stream.Recv()
if err != nil {
fmt.Println("stream recieve error: ", err)
}
tx := &types.Transaction{}
err = rlp.DecodeBytes(reply.Tx.RawTx, tx)
if err != nil {
continue
}
fmt.Println("recieve new tx, tx hash is ", tx.Hash().String())
}
}
返回示例
正常
{
"tx":[
{
"raw_tx":"+QH0gjOthDuaygCDBrbAlKoP7P6dEOH8IzwtDAw9whDVeHKRhwFrzEHpAAC5AYTVQ9H9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmsrt4HBPm7jWohanh7XmbX9S/gRLrth87fXF3H2gC0FAAAAAAAAAAAAAAAAbsa1rd5IJ6lr43ixr1+LWmT/OhgAAAAAAAAAAAAAAABV05gyb5kFn/d1SFJGmZAnsxl5VQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVkLNFR0SQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGZ7qkBM09jlPtkQprbOV2bITVAfdbvzTltwBYjUJu6OIzF3aAAAAAAAAAAAAAAAAHqXLqcmW4qO1ZEAZXn2nYI/dKV1AAAAAAAAAAAAAAAAVdOYMm+ZBZ/3dUhSRpmQJ7MZeVUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASvCnY7scAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABme6pAgZOgy2LsKlIqPeeM7d520T3eAwIVk9O+vY4wT+zifYp0GGOgTY7Z5J3zs/YCj1HvVXOZF9Q2rj5x421GBG9CrKmxVGo="
}
]
}
异常
rpc error: code = Unknown desc = data streams have exceeded its max limit [5]
Last updated