Jürgen Eckel 6ad235e847 Improve RPC command issuance (#206)
* removed error handling from util/issue_command.go methods
* integrated the complete error handling with context into util/issue_command.go: buildSignBroadcastTx
* setting the chainID of lib/tx dynamically
* removed obsolete timeout
* removed obsolete TODO message
* improved logging information and clarity of information
* improved readability and debugability of BroadcastTxWithFileLock
* fixed getClientContext bug for chains different from the testnet by removing a hard-coded value
* renamed setConfig to setRPCConfig

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>
2023-11-29 08:11:49 +01:00
..
2023-11-29 08:11:49 +01:00

Library for RPC requests to Planetmint

How to use it

In the example below we use the account addr0 for which we have the private key in our keyring. We configure the address prefix andd change the default RPC endpoint to a remote one. The only keyring backend currently supported is the test backend under keyring-test. After that we construct three messages to send 10plmnt each to three addresses addr1, addr2 and addr3. We then build and sign the transaction and eventually send this transaction via RPC. For debugging purposes we print the transaction that we send as JSON.

package main

import (
        "fmt"
        "log"

        sdk "github.com/cosmos/cosmos-sdk/types"
        banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
        "github.com/planetmint/planetmint-go/app"
        "github.com/planetmint/planetmint-go/lib"
)

func main() {
        encodingConfig := app.MakeEncodingConfig()

        libConfig := lib.GetConfig()
        libConfig.SetEncodingConfig(encodingConfig)
        libConfig.SetRPCEndpoint("https://testnet-rpc.rddl.io:443")

        addr0 := sdk.MustAccAddressFromBech32("plmnt168z8fyyzap0nw75d4atv9ucr2ye60d57dzlzaf")
        addr1 := sdk.MustAccAddressFromBech32("plmnt1vklujvmr9hsk9zwpquk4waecr2u5vcyjd8vgm8")
        addr2 := sdk.MustAccAddressFromBech32("plmnt1pwquxvqmmdry4gdel4g4rz0js7jy65453h92g7")
        addr3 := sdk.MustAccAddressFromBech32("plmnt1dyuhg8ldu3d6nvhrvzzemtc3893dys9v9lvdty")

        coin := sdk.NewCoins(sdk.NewInt64Coin("plmnt", 10))
        msg1 := banktypes.NewMsgSend(addr0, addr1, coin)
        msg2 := banktypes.NewMsgSend(addr0, addr2, coin)
        msg3 := banktypes.NewMsgSend(addr0, addr3, coin)

        txJSON, err := lib.BuildUnsignedTx(addr0, msg1, msg2, msg3)
        if err != nil {
                log.Fatal(err)
        }
        fmt.Println(txJSON)

        _, err = lib.BroadcastTx(addr0, msg1, msg2, msg3)
        if err != nil {
                log.Fatal(err)
        }
}

Sample output:

$ go run main.go|jq
{
  "body": {
    "messages": [
      {
        "@type": "/cosmos.bank.v1beta1.MsgSend",
        "from_address": "plmnt168z8fyyzap0nw75d4atv9ucr2ye60d57dzlzaf",
        "to_address": "plmnt1vklujvmr9hsk9zwpquk4waecr2u5vcyjd8vgm8",
        "amount": [
          {
            "denom": "plmnt",
            "amount": "10"
          }
        ]
      },
      {
        "@type": "/cosmos.bank.v1beta1.MsgSend",
        "from_address": "plmnt168z8fyyzap0nw75d4atv9ucr2ye60d57dzlzaf",
        "to_address": "plmnt1pwquxvqmmdry4gdel4g4rz0js7jy65453h92g7",
        "amount": [
          {
            "denom": "plmnt",
            "amount": "10"
          }
        ]
      },
      {
        "@type": "/cosmos.bank.v1beta1.MsgSend",
        "from_address": "plmnt168z8fyyzap0nw75d4atv9ucr2ye60d57dzlzaf",
        "to_address": "plmnt1dyuhg8ldu3d6nvhrvzzemtc3893dys9v9lvdty",
        "amount": [
          {
            "denom": "plmnt",
            "amount": "10"
          }
        ]
      }
    ],
    "memo": "",
    "timeout_height": "0",
    "extension_options": [],
    "non_critical_extension_options": []
  },
  "auth_info": {
    "signer_infos": [],
    "fee": {
      "amount": [
        {
          "denom": "plmnt",
          "amount": "1"
        }
      ],
      "gas_limit": "200000",
      "payer": "",
      "granter": ""
    },
    "tip": null
  },
  "signatures": []
}