github.com/adoriasoft/tendermint@v0.34.0-dev1.0.20200722151356-96d84601a75a/rpc/client/examples_test.go (about) 1 package client_test 2 3 import ( 4 "bytes" 5 "fmt" 6 "log" 7 8 "github.com/tendermint/tendermint/abci/example/kvstore" 9 rpchttp "github.com/tendermint/tendermint/rpc/client/http" 10 ctypes "github.com/tendermint/tendermint/rpc/core/types" 11 rpctest "github.com/tendermint/tendermint/rpc/test" 12 ) 13 14 func ExampleHTTP_simple() { 15 // Start a tendermint node (and kvstore) in the background to test against 16 app := kvstore.NewApplication() 17 node := rpctest.StartTendermint(app, rpctest.SuppressStdout, rpctest.RecreateConfig) 18 defer rpctest.StopTendermint(node) 19 20 // Create our RPC client 21 rpcAddr := rpctest.GetConfig().RPC.ListenAddress 22 c, err := rpchttp.New(rpcAddr, "/websocket") 23 if err != nil { 24 log.Fatal(err) 25 } 26 27 // Create a transaction 28 k := []byte("name") 29 v := []byte("satoshi") 30 tx := append(k, append([]byte("="), v...)...) 31 32 // Broadcast the transaction and wait for it to commit (rather use 33 // c.BroadcastTxSync though in production). 34 bres, err := c.BroadcastTxCommit(tx) 35 if err != nil { 36 log.Fatal(err) 37 } 38 if bres.CheckTx.IsErr() || bres.DeliverTx.IsErr() { 39 log.Fatal("BroadcastTxCommit transaction failed") 40 } 41 42 // Now try to fetch the value for the key 43 qres, err := c.ABCIQuery("/key", k) 44 if err != nil { 45 log.Fatal(err) 46 } 47 if qres.Response.IsErr() { 48 log.Fatal("ABCIQuery failed") 49 } 50 if !bytes.Equal(qres.Response.Key, k) { 51 log.Fatal("returned key does not match queried key") 52 } 53 if !bytes.Equal(qres.Response.Value, v) { 54 log.Fatal("returned value does not match sent value") 55 } 56 57 fmt.Println("Sent tx :", string(tx)) 58 fmt.Println("Queried for :", string(qres.Response.Key)) 59 fmt.Println("Got value :", string(qres.Response.Value)) 60 61 // Output: 62 // Sent tx : name=satoshi 63 // Queried for : name 64 // Got value : satoshi 65 } 66 67 func ExampleHTTP_batching() { 68 // Start a tendermint node (and kvstore) in the background to test against 69 app := kvstore.NewApplication() 70 node := rpctest.StartTendermint(app, rpctest.SuppressStdout, rpctest.RecreateConfig) 71 defer rpctest.StopTendermint(node) 72 73 // Create our RPC client 74 rpcAddr := rpctest.GetConfig().RPC.ListenAddress 75 c, err := rpchttp.New(rpcAddr, "/websocket") 76 if err != nil { 77 log.Fatal(err) 78 } 79 80 // Create our two transactions 81 k1 := []byte("firstName") 82 v1 := []byte("satoshi") 83 tx1 := append(k1, append([]byte("="), v1...)...) 84 85 k2 := []byte("lastName") 86 v2 := []byte("nakamoto") 87 tx2 := append(k2, append([]byte("="), v2...)...) 88 89 txs := [][]byte{tx1, tx2} 90 91 // Create a new batch 92 batch := c.NewBatch() 93 94 // Queue up our transactions 95 for _, tx := range txs { 96 // Broadcast the transaction and wait for it to commit (rather use 97 // c.BroadcastTxSync though in production). 98 if _, err := batch.BroadcastTxCommit(tx); err != nil { 99 log.Fatal(err) 100 } 101 } 102 103 // Send the batch of 2 transactions 104 if _, err := batch.Send(); err != nil { 105 log.Fatal(err) 106 } 107 108 // Now let's query for the original results as a batch 109 keys := [][]byte{k1, k2} 110 for _, key := range keys { 111 if _, err := batch.ABCIQuery("/key", key); err != nil { 112 log.Fatal(err) 113 } 114 } 115 116 // Send the 2 queries and keep the results 117 results, err := batch.Send() 118 if err != nil { 119 log.Fatal(err) 120 } 121 122 // Each result in the returned list is the deserialized result of each 123 // respective ABCIQuery response 124 for _, result := range results { 125 qr, ok := result.(*ctypes.ResultABCIQuery) 126 if !ok { 127 log.Fatal("invalid result type from ABCIQuery request") 128 } 129 fmt.Println(string(qr.Response.Key), "=", string(qr.Response.Value)) 130 } 131 132 // Output: 133 // firstName = satoshi 134 // lastName = nakamoto 135 }