Use this endpoint to send a single transaction faster than the p2p network using the BDN.
REQUEST
Method: blxr_tx
Parameters
Parameter
Description
Instructions & Notes
transaction
Raw transactions bytes without 0x prefix.
blockchain_network
Blockchain network name.
Optional. Default: Mainnet
Available options are: Mainnet for ETH Mainnet, BSC-Mainnet for BSC Mainnet
*Use with Cloud-API when working with BSC.
fall_back
The duration of time (in ms) that your transaction will be delayed before propagation by the BDN as a normal transaction
Available only when using next_validator
Default: 0
If the value is 0, the transaction will never be propagated by the BDN as a normal transaction.
node_validation
Transaction is sent to the blockchain node for validation, and the Gateway returns any error message received in response.
Available only with Gateway API
Optional
Default: False
Cloud-API
The WebSocket endpoint for sending transactions is wss://api.blxrbdn.com/ws . All users sending transactions via a WebSocket connection should use this endpoint.
See Cloud-API IPs to work directly with IP ( wss://<IP>/ws)
The HTTPS POST endpoint is https://api.blxrbdn.com .
Sending transactions via WebSocket instead of HTTPS can lead to a latency improvement of up to 10ms.
constWebSocket=require('ws');constws=newWebSocket("wss://api.blxrbdn.com/ws", { headers: { "Authorization": <YOUR-AUTHORIZATION-HEADER> }, rejectUnauthorized: false, });function proceed() {// ETH Examplews.send(`{"jsonrpc": "2.0", "id": 1, "method": "blxr_tx", "params": {"transaction": "f86b0184...e0b58219"}}`);// BSC Example// ws.send(`{"jsonrpc": "2.0", "id": 1, "method": "blxr_tx", "params": {"transaction": "f86b0184...e0b58219", "blockchain_network": "BSC-Mainnet"}}`);//// or use a variable for the transaction string:// rawTx = "f86b0184...e0b58219";// ws.send(`{"jsonrpc": "2.0", "id": 1, "method": "blxr_tx", "params": {"transaction": "${rawTx}"}}`);}function handle(response) {console.log(response.toString()); // or process it generally}ws.on('open', proceed);ws.on('message', handle);
# Python 3.7 or higher required due to the use of asyncio.run()import asyncio, json, sslfrom websocket import create_connectionasyncdefmain():try: ws =create_connection('wss://api.blxrbdn.com/ws', header=["Authorization:{}".format("YOUR_AUTHORIZATION_HEADER")], sslopt={"cert_reqs": ssl.CERT_NONE})# ETH Example request = json.dumps({"id": 1, "method": "blxr_tx", "params": {"transaction": "f86b0184...e0b58219"}})# BSC Example request = json.dumps({"id": 1, "method": "blxr_tx", "params": {"transaction": "f86b0184...e0b58219", "blockchain_network": "BSC-Mainnet"}}) ws.send(str(request))whileTrue: response = json.loads(ws.recv())print(response)# or process it generallyexceptExceptionas e:print(f'Connection failed, Reason: {e}')if__name__=='__main__': asyncio.run(main()
constWebSocket=require('ws');constws=newWebSocket("ws://127.0.0.1:28333/ws", { headers: { "Authorization": <YOUR-AUTHORIZATION-HEADER> }, rejectUnauthorized: false, });function proceed() {// ETH Examplews.send(`{"jsonrpc": "2.0", "id": 1, "method": "blxr_tx", "params": {"transaction": "f86b0184...e0b58219"}}`);// BSC Example// ws.send(`{"jsonrpc": "2.0", "id": 1, "method": "blxr_tx", "params": {"transaction": "f86b0184...e0b58219", "blockchain_network": "BSC-Mainnet"}}`);//// or use a variable for the transaction string:// rawTx = "f86b0184...e0b58219";// ws.send(`{"jsonrpc": "2.0", "id": 1, "method": "blxr_tx", "params": {"transaction": "${rawTx}"}}`);}function handle(response) {console.log(response.toString()); // or process it generally}ws.on('open', proceed);ws.on('message', handle);
# Python 3.7 or higher required due to the use of asyncio.run()import asyncio, json, sslfrom websocket import create_connectionasyncdefmain():try: ws =create_connection('ws://127.0.0.1:28333/ws', header=["Authorization:{}".format("YOUR_AUTHORIZATION_HEADER")], sslopt={"cert_reqs": ssl.CERT_NONE})# ETH Example request = json.dumps({"id": 1, "method": "blxr_tx", "params": {"transaction": "f86b0184...e0b58219"}})# BSC Example request = json.dumps({"id": 1, "method": "blxr_tx", "params": {"transaction": "f86b0184...e0b58219", "blockchain_network": "BSC-Mainnet"}}) ws.send(str(request))whileTrue: response = json.loads(ws.recv())print(response)# or process it generallyexceptExceptionas e:print(f'Connection failed, Reason: {e}')
packagemainimport ("context""fmt""time" pb "github.com/bloXroute-Labs/bxgateway-private-go/bxgateway/v2/protobuf""google.golang.org/grpc""google.golang.org/grpc/credentials")funcmain() {// gRPC server default values gatewayHostIP :="127.0.0.1" gatewayGRPCPort :=5001// this will use localhost CA to verify the certificate creds := credentials.NewClientTLSFromCert(nil, "")// Open gRPC connection to Gateway. conn, _ := grpc.Dial( fmt.Sprintf("%v:%v", gatewayHostIP, gatewayGRPCPort), grpc.WithTransportCredentials(creds), )// Use the Gateway client connection interface. client := pb.NewGatewayClient(conn)// create context and defer cancel of context callContext, cancel := context.WithTimeout(context.Background(), 24*time.Hour)defercancel()// send tx reply, err := client.BlxrTx(callContext, &pb.BlxrTxRequest{AuthHeader: "<YOUR-AUTHORIZATION-HEADER>", Transaction: "f86b0184...e0b58219"})if err !=nil {print(err)return } txHash := reply.TxHashprint(txHash) // or process it generally}
NOTES
All Users
Sending Transactions to the Cloud-API or Gateway-API requires you to register an account on the bloXroute portal. During the registration process, a certificate, private key, and secret hash will be generated for your account. The certificate and key will be used to authenticate your account.
The bloXroute best practice is for users to send transactions to both the Gateway-API and to their blockchain node. You should send transactions in parallel to the Gateway and to your blockchain node as a backup.
Users should not send transactions to the transactions streams WebSocket endpoint
wss://<REGION>.<NETWORK>.blxrbdn.com/ws(e.g.wss://virginia.eth.blxrbdn.com/ws) which is for streaming only and doesn't support sending transactions.