BSC Broadcast Tx
介紹BlockRazor BSC Transaction Sending 模式的 Broadcast Tx 接口以及集成方法
端點
地區
Relay地址
法蘭克福
64.130.47.75:50051
東京
63.254.162.18:50051
都柏林
141.98.217.82:50051
弗吉尼亞
208.91.105.204:50051
價格
SendTx
請求參數
參數
必選
格式
示例
描述
Transaction
是
String
"0xf8……8219"
經過簽名的rawtx
請求示例
package main
import (
"context"
"encoding/hex"
"fmt"
"math/big"
// directory of the generated code using the provided relay.proto file
pb "github.com/BlockRazorinc/relay_example/protobuf"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/crypto"
"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
ctx := context.Background()
// replace with your address
from_private_address := "42b565……44d05c"
to_public_address := "0x4321……3f1c66"
// replace with your transaction data
nonce := uint64(1)
toAddress := common.HexToAddress(to_public_address)
var data []byte
gasPrice := big.NewInt(1e9)
gasLimit := uint64(22000)
value := big.NewInt(0)
chainid := types.NewEIP155Signer(big.NewInt(56))
// create new transaction
tx := types.NewTransaction(nonce, toAddress, value, gasLimit, gasPrice, data)
privateKey, err := crypto.HexToECDSA(from_private_address)
if err != nil {
fmt.Println("fail to casting private key to ECDSA")
return
}
// sign transaction by private key
signedTx, err := types.SignTx(tx, chainid, privateKey)
if err != nil {
fmt.Println("fail to sign transaction")
return
}
// use rlp to encode your transaction
body, _ := rlp.EncodeToBytes([]types.Transaction{*signedTx})
// encode []byte to string
encode_tx := hex.EncodeToString(body)
// send raw tx by BlockRazor
res, err := client.SendTx(ctx, &pb.SendTxRequest{Transaction: encode_tx})
if err != nil {
fmt.Println("failed to send raw tx: ", err)
return
} else {
fmt.Println("raw tx sent by BlockRazor, tx hash is ", res.TxHash)
}
}返回示例
正常
异常
SendTxs
請求參數
參數
必選
格式
示例
描述
Transactions
是
Array[String]
["0xf8……8219", "0xcb……2ac0"]
經過簽名的raw tx列表
請求示例
返回示例
正常
异常
Proto
relay.proto文件代碼如下:
代码示例
最後更新於
這有幫助嗎?