Cosmos Raw Transactions

A general Cosmos transaction can be used for any transaction on any of the supported Cosmos chains

Cosmos supports two types of encoding for transactions:

  • Amino: An older format, where transactions are specified as textual JSON object.
  • Direct: A binary encoding of transactions released in the Cosmos SDK v0.46.

Amino

The following example shows how to create the body of a create transaction request using Amino encoding. The full request should include additional headers, including an authentication signature, as described here.

Take special care of properly escaping any quotes and other special character in the message. (When using python, you can do this using json.dumps.)

{
   "vault_id":"676aa7db-ac39-4c25-923c-bf28e5f8be29",
   "signer_type":"api_signer",
   "type":"cosmos_transaction",
   "details":{
      "type":"cosmos_raw_transaction",
      "chain":"cosmos_osmosis-1",
      "request_data":{
         "format":"amino",
         "messages":[
            {
               "type":"cosmos-sdk/MsgVote",
               "value":"{\"option\":1,\"proposal_id\":\"720\",\"voter\":\"osmo1p4x4jp9524vgtkmkes25ug96t3t0k3ca6qnk9e\"}"
            }
         ]
      }
   }
}

Additional fields

If needed, you can pass the following optional fields in your request:

  • Fee: by default, the Fordefi server will automatically estimate the amount of gas transaction requires and the up-to-date gas price. Hence, as shown in the above example, you don't need to specify any fee-related fields in your request. However, if you want to set specific gas value, you can do that by passing a request_data->std_fee object in your request.
  • Memo: you can specify a transaction memo (this is a Cosmos-specific memo, separate from a Fordefi-internal transaction note).
Example request thats specifies a fee and a memo
{
    "vault_id": vault_id,
    "signer_type": "api_signer",
    "type": "cosmos_transaction",
    "details": {
        "type": "cosmos_raw_transaction",
        "chain": "cosmos_osmosis-1",
        "request_data": {
            "format": "amino",
            "messages": [
                {
                    "type": "cosmos-sdk/MsgVote",
                    "value": "{\"option\":1,\"proposal_id\":\"720\",\"voter\":\"osmo1p4x4jp9524vgtkmkes25ug96t3t0k3ca6qnk9e\"}"
                }
            ], 
            "memo": "FE",
            "std_fee": {
                "amount": [
                    {
                        "denom": "uosmo",
                        "amount": "22846"
                    }
                ],
                "gas": "913812"
            }
        }
    }
}

Direct

This mode expects to receive both body and auth_info encoded in base64. The next example shows how to create a transaction using direct encoding. Both body and auth_info use the base64 format of the protobuf serialization of those fields:

{
    "vault_id": "676aa7db-ac39-4c25-923c-bf28e5f8be29",
    "signer_type": "api_signer",
    "type": "cosmos_transaction",
    "details": {
        "type": "cosmos_raw_transaction",
        "chain": "cosmos_pacific-1",
        "request_data": {
            "format": "direct",
            "body": "Cs4ICiQvY29zbXdhc20ud2FzbS52MS5Nc2dFeGVjdXRlQ29udHJhY3QSpQgKKnNlaTFwNHg0anA5NTI0dmd0a21rZXMyNXVnOTZ0M3QwazNjYWxoM3M0MhI+c2VpMTZhd3JkZWh2bGE2a3FxMmRrNXY0bTZ6ZTgzcWZnOHRycHc1NXFjOHJ2ZnJnOXFkbWZ2aHE3aGo2eDkaqgd7ImV4ZWN1dGVfc3dhcF9vcGVyYXRpb25zIjp7Im9wZXJhdGlvbnMiOlt7ImFzdHJvX3N3YXAiOnsib2ZmZXJfYXNzZXRfaW5mbyI6eyJuYXRpdmVfdG9rZW4iOnsiZGVub20iOiJ1c2VpIn19LCJhc2tfYXNzZXRfaW5mbyI6eyJuYXRpdmVfdG9rZW4iOnsiZGVub20iOiJmYWN0b3J5L3NlaTE4OWFkZ3Vhd3VnazNlNTV6bjYzejhyOWxsMjl4cmp3Y2E2MzZyYTd2N2d4dXpuOThzeHlxd3p0NDdsLzNWS0tZdGJROWlxOGY5Q2FaZmdSNkNyM1RVajZ5cFhQQW42a2NvNndqY0F1In19fX0seyJhc3Ryb19zd2FwIjp7Im9mZmVyX2Fzc2V0X2luZm8iOnsibmF0aXZlX3Rva2VuIjp7ImRlbm9tIjoiZmFjdG9yeS9zZWkxODlhZGd1YXd1Z2szZTU1em42M3o4cjlsbDI5eHJqd2NhNjM2cmE3djdneHV6bjk4c3h5cXd6dDQ3bC8zVktLWXRiUTlpcThmOUNhWmZnUjZDcjNUVWo2eXBYUEFuNmtjbzZ3amNBdSJ9fSwiYXNrX2Fzc2V0X2luZm8iOnsibmF0aXZlX3Rva2VuIjp7ImRlbm9tIjoiZmFjdG9yeS9zZWkxODlhZGd1YXd1Z2szZTU1em42M3o4cjlsbDI5eHJqd2NhNjM2cmE3djdneHV6bjk4c3h5cXd6dDQ3bC9IcTR0dUR6aFJCbnh3M3RGQTVuNk01Mk5WTVZjQzE5WGdnYnlEaUpLQ0Q2SCJ9fX19LHsiYXN0cm9fc3dhcCI6eyJvZmZlcl9hc3NldF9pbmZvIjp7Im5hdGl2ZV90b2tlbiI6eyJkZW5vbSI6ImZhY3Rvcnkvc2VpMTg5YWRndWF3dWdrM2U1NXpuNjN6OHI5bGwyOXhyandjYTYzNnJhN3Y3Z3h1em45OHN4eXF3enQ0N2wvSHE0dHVEemhSQm54dzN0RkE1bjZNNTJOVk1WY0MxOVhnZ2J5RGlKS0NENkgifX0sImFza19hc3NldF9pbmZvIjp7Im5hdGl2ZV90b2tlbiI6eyJkZW5vbSI6ImliYy8wRUM3OEI3NUQzMThFQTBBQUI2MTYwQTEyQUVFOEYzQzdGRUEzQ0ZFQUQwMDFBM0IxMDNFMTE5MTQ3MDlGNENFIn19fX1dLCJtaW5pbXVtX3JlY2VpdmUiOiIyOCJ9fSoKCgR1c2VpEgIxMA==",
            "auth_info": "Ck4KRgofL2Nvc21vcy5jcnlwdG8uc2VjcDI1NmsxLlB1YktleRIjCiEDtzqO1aWLtwIF4nBrPikqG6uKPJ5fS6t+U/wYWHsB264SBAoCCAESFQoOCgR1c2VpEgYyNTA5ODMQhpiZAQ=="
        }
    }
}