Client Module
This module provides a function to get the data from Bandchain gRPC and send the data to Bandchain gRPC.
Note: Get the <GRPC> here
get_data_source(id)
This function returns data source details of the given ID.
Parameter
- id <int>: Data source ID
Return
Example
from pyband import Client
from google.protobuf.json_format import MessageToJson
grpc_url = "<GRPC>" # without https://
id = 1
c = Client(grpc_url)
data_source = c.get_data_source(id)
print(MessageToJson(data_source))
Result
{
  "owner": "band1jfdmjkxs3hvddsf4ef2wmsmte3s5llqhxqgcfe",
  "name": "DS1",
  "description": "TBD",
  "filename": "32ee6262d4a615f2c3ca0589c1c1af79212f24823453cb3f4cfff85b8d338045",
  "treasury": "band1jfdmjkxs3hvddsf4ef2wmsmte3s5llqhxqgcfe"
}
get_oracle_script(id)
This function returns data script details of the given ID.
Parameter
- id <int>: Data Script ID
Return
Example
from pyband import Client
from google.protobuf.json_format import MessageToJson
grpc_url = "<GRPC>" # without https://
id = 1
c = Client(grpc_url)
oracle_script = c.get_oracle_script(id)
print(MessageToJson(oracle_script))
Result
{
  "owner": "band1jfdmjkxs3hvddsf4ef2wmsmte3s5llqhxqgcfe",
  "name": "OS1",
  "description": "TBD",
  "filename": "f86b37dbe62c3b8c86ae28523bf09e9963a6b2951dd1a5be79f29f66d8236abf",
  "schema": "{gas_option:string}/{gweix10:u64}"
}
get_request_by_id(id)
This function returns request details of the given ID.
Parameter
- id <int>: Request ID
Return
Example
from pyband import Client
from google.protobuf.json_format import MessageToJson
grpc_url = "<GRPC>" # without https://
id = 1
c = Client(grpc_url)
request = c.get_request_by_id(id)
print(MessageToJson(request))
Result
{
  "result": {
    "clientId": "from_bandd",
    "oracleScriptId": "37",
    "calldata": "AAAABgAAAANCVEMAAAADRVRIAAAAA01JUgAAAANBTkMAAAAERE9HRQAAAARMVU5BAAAAADuaygA=",
    "askCount": "1",
    "minCount": "1",
    "requestId": "1",
    "ansCount": "1",
    "requestTime": "1624374833",
    "resolveTime": "1624374844",
    "resolveStatus": "RESOLVE_STATUS_SUCCESS",
    "result": "AAAABgAAHBpu4YHAAAABqf4l8EAAAAABFPDhkAAAAACK0bhAAAAAAAsYHsgAAAABLZl5AA=="
  }
}
get_reporters(validator)
This function returns a list of reporters associated with the given validator.
Parameter
- validator <str>: Validator address
Return
- List<str>
Example
from pyband import Client
grpc_url = "<GRPC>" # without https://
validator = "bandvaloper1p46uhvdk8vr829v747v85hst3mur2dzlhfemmz"
c = Client(grpc_url)
print(c.get_reporters(validator))
Result
[
  "band1p46uhvdk8vr829v747v85hst3mur2dzlmlac7f",
  "band1zgly2mgx7ykckfgm4dqgc58vrntdlgcemy62eq",
  "band1sfmc6995mk0d55zy2vy8dxu8s54y5e7yqquxkr",
  "band1jtjuucr5wea43up4d3d98e3xn737lry800j6tf",
  "band1jd95fjm3j43pqurc2k4suzmznhux85hsjrx0a8",
  "band1l5kxfkd7gvvtpd37gmjnpvd0suzwypgz5u9ysc"
]
get_latest_block
This function returns the latest block in the chain.
Return
Example
from pyband import Client
from google.protobuf.json_format import MessageToJson
grpc_url = "<GRPC>" # without https://
c = Client(grpc_url)
latest_block = c.get_latest_block()
print(MessageToJson(latest_block))
Result
{
  "blockId": {
    "hash": "FHpPvUlEF2WxXGGkrN9Lc4pI5oj/3Z5/U1UvLXsX/z0=",
    "partSetHeader": {
      "total": 1,
      "hash": "wgzw1SgKKd+uZwKSHWONJ6qNigdwOPhqW2nTq3AYKv0="
    }
  },
  "block": {
    "header": {
      "version": { "block": "11" },
      "chainId": "band-laozi-testnet2",
      "height": "603404",
      "time": "2021-07-12T08:05:22.386235207Z",
      "lastBlockId": {
        "hash": "XMfyuM/nZZcoWVCQG+SQ93zaYuVt47i/ISlgi3KJqJw=",
        "partSetHeader": {
          "total": 1,
          "hash": "u4XfI/858RuZExpK0D1mtQzC90R7fbhBAyIboqRQcoI="
        }
      },
      "lastCommitHash": "caU5MlsAHEpy29PzMDQJ0OdIGkCfIyttQLQoTrVNpfA=",
      "dataHash": "TyORhRUl3QS/stvNbHsld2uU47aOMhbHfbWbmzCgt9s=",
      "validatorsHash": "e0hw8Ieib1SLF87P75KUsV/Zh4UZDZocxtN13v+temM=",
      "nextValidatorsHash": "e0hw8Ieib1SLF87P75KUsV/Zh4UZDZocxtN13v+temM=",
      "consensusHash": "ek5k0qm1ziK3XpVuICUnTcA7aEbM13JRUqa8DQcn4z4=",
      "appHash": "VPpwYxRcdOtU5OclkZ+W1zuVCgo+P5TOkqwWXYY/Stw=",
      "lastResultsHash": "RTYNyG6gfZr3/J5OPnmv49+qR5wQmUUFypdaoZDT188=",
      "evidenceHash": "47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=",
      "proposerAddress": "Mi9CIpvJaLKLAUv/2dg6nGeAZGw="
    },
    "data": {
      "txs": [
        "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"
      ]
    },
    "evidence": {},
    "lastCommit": {
      "height": "603403",
      "blockId": {
        "hash": "XMfyuM/nZZcoWVCQG+SQ93zaYuVt47i/ISlgi3KJqJw=",
        "partSetHeader": {
          "total": 1,
          "hash": "u4XfI/858RuZExpK0D1mtQzC90R7fbhBAyIboqRQcoI="
        }
      },
      "signatures": [
        {
          "blockIdFlag": "BLOCK_ID_FLAG_COMMIT",
          "validatorAddress": "Zdyy3QL8E8XZYhDrA8fAUD4m2Jc=",
          "timestamp": "2021-07-12T08:05:22.304030411Z",
          "signature": "ISRrl36Kv2m6vOv7d2OpoOQtR6fmeodsg/rxGKXfch5IutvFw4/p8/LMDg3zUT64raHz8YW2aXid88BdZNUp6g=="
        },
        {
          "blockIdFlag": "BLOCK_ID_FLAG_COMMIT",
          "validatorAddress": "xLnySmLJL6Qq4ebq+oPMs+KEerU=",
          "timestamp": "2021-07-12T08:05:22.435650954Z",
          "signature": "fxFAi9FQEe98Dm7cv8psNwWdQg1B/h6RaEIrfKuPwBhfiN80WE36+ioNKK7BIvfOx8QuBBuNQ+ic6mMF+AcUZA=="
        },
        {
          "blockIdFlag": "BLOCK_ID_FLAG_COMMIT",
          "validatorAddress": "D3OpjoewGqrIf2g+qADd6sKpM24=",
          "timestamp": "2021-07-12T08:05:22.395247997Z",
          "signature": "Ulku3yfZDtUxXdidUwlClrKAgns002z4suYZSef+rdkPxVxmCZayA4wwMUWVNnTfEdkLzsSkl6TVBSfKkfc5/g=="
        },
        {
          "blockIdFlag": "BLOCK_ID_FLAG_COMMIT",
          "validatorAddress": "KLbUBDhTpSjBO2cco4cmyhJiR7w=",
          "timestamp": "2021-07-12T08:05:22.454990956Z",
          "signature": "pf/usYgYQrfmcIqul9YxUbu8Ruajit0L2HXU0xz8ayg1SBZqfJcu3I7tO77iAw76S5PMZHBvFO+cig3YC3nXSA=="
        },
        {
          "blockIdFlag": "BLOCK_ID_FLAG_COMMIT",
          "validatorAddress": "biAZveTotPyzzCPfYXiWCcKDKr8=",
          "timestamp": "2021-07-12T08:05:22.302760757Z",
          "signature": "dSf7bobDcdvvJdKKIK9CbIGGiASyBDhis1fMEivpXmozjvAAMRcBtxoekLMzNfbu7ZhXZklFH7DzoVsjSdWubw=="
        },
        {
          "blockIdFlag": "BLOCK_ID_FLAG_COMMIT",
          "validatorAddress": "AFmBCh4x3+WV/oQfZTcQ4a97ms0=",
          "timestamp": "2021-07-12T08:05:22.303799803Z",
          "signature": "Nrwb1ztSW27fEqzfgJ6G4lUqecILKRGowezklOmX4l4OZNpJfihHuh7AHoPhj4SLkeNBud1vlW96zmruqbNqFQ=="
        },
        {
          "blockIdFlag": "BLOCK_ID_FLAG_COMMIT",
          "validatorAddress": "GXmy0WdxkkwltyFvLJbIa9v5Kt8=",
          "timestamp": "2021-07-12T08:05:22.409681572Z",
          "signature": "HF5CZDNMKih/fe35Cwpqa5EIw2s1oTT87iVMRL5Fo51keUOB+Ly21SguFb6SeXusJ3W6KF+4YjtMM7OWabz5sA=="
        },
        {
          "blockIdFlag": "BLOCK_ID_FLAG_COMMIT",
          "validatorAddress": "HW6680aDSSb7WNZU6GKkL1PYgiA=",
          "timestamp": "2021-07-12T08:05:22.394570566Z",
          "signature": "t1brNDe7aCu3Q13ePI8Lsp6JwI8nTjKBvnRBOtdvbcUcSIy4WbadIbnXou8bXdoKnXeEZCqf7zsULZtKz8QcEg=="
        },
        {
          "blockIdFlag": "BLOCK_ID_FLAG_COMMIT",
          "validatorAddress": "Mi9CIpvJaLKLAUv/2dg6nGeAZGw=",
          "timestamp": "2021-07-12T08:05:22.304367649Z",
          "signature": "w9nyw1GsE4EVViKnLuTHGHdcCUBA7EoetN6ztVHdqs4moh82yrhLxtJjoRgQy54G8S8Qzg7BS8dJuwpPkuO/1A=="
        },
        {
          "blockIdFlag": "BLOCK_ID_FLAG_COMMIT",
          "validatorAddress": "TO8fbCX9iAPgPb7NP60N5c+1XCw=",
          "timestamp": "2021-07-12T08:05:22.478276190Z",
          "signature": "UJ5YrJDIR55lEm9iwTtaodaKz38aTJC9ba4NoULsh0cZKWRMdXSsEo62gQd4XWZesRU9VbpwET0kr7aUnOTY1Q=="
        },
        {
          "blockIdFlag": "BLOCK_ID_FLAG_COMMIT",
          "validatorAddress": "UX8oPBDTFGmRZsWIhGKc2EUE86Q=",
          "timestamp": "2021-07-12T08:05:22.412614197Z",
          "signature": "KfxPKErTsEtpAKtSRE9XlfekK0XSUEdka5B+/i7OXGt0P2d7T7rztBKqYSASuPaAvCicTgEvWIhyNaC2DzzmjA=="
        },
        {
          "blockIdFlag": "BLOCK_ID_FLAG_COMMIT",
          "validatorAddress": "aAyok6Qr/EGfdJr8DiG9Yycw4VA=",
          "timestamp": "2021-07-12T08:05:22.502941178Z",
          "signature": "Z9S74/SM6J5Hvqce4i7KlrXZwh6kG39pU5jUs8NVlFZvye+s4lnqR0vxQafLi8apyk2UdNW4KWLDUXA8KjZqAA=="
        },
        {
          "blockIdFlag": "BLOCK_ID_FLAG_COMMIT",
          "validatorAddress": "adhSwssyskWcBBWKzyItym8rK8U=",
          "timestamp": "2021-07-12T08:05:22.330196188Z",
          "signature": "qah8/op1dvTB8CaPW/TPy89nJkUw7NEn7ZkgkQ/r6eA8bwT/+QJz2qHlUNxIZ/7KE6LsqDiy+Ss4xsZPkbpH2A=="
        },
        {
          "blockIdFlag": "BLOCK_ID_FLAG_COMMIT",
          "validatorAddress": "tWg//Wbq1Rj5b0nPLi1yZE794FI=",
          "timestamp": "2021-07-12T08:05:22.386235207Z",
          "signature": "SrQW8WDsO0USkDZmRYNDzCXLj/y4AEWCLJ3JzU12LOIFBs+uIRZ5dHDx2jsBytYOmDdXsh1udKiRrkBqa4jXuw=="
        },
        {
          "blockIdFlag": "BLOCK_ID_FLAG_COMMIT",
          "validatorAddress": "056lMQcoc6aX+fZODSBBYOPz5DY=",
          "timestamp": "2021-07-12T08:05:22.402139725Z",
          "signature": "RF65UL0Hyd/0Z7aAPXqpOhcc0TaqZ6l4BN7IXOMNjfANXycZYgiNZvbppumWwsgI9AeAv/+6xPKXAG/ghytl0w=="
        },
        {
          "blockIdFlag": "BLOCK_ID_FLAG_COMMIT",
          "validatorAddress": "2MqI5T0aGLK0h3fNWAcQEKLplio=",
          "timestamp": "2021-07-12T08:05:22.416599751Z",
          "signature": "stsHa0JHU1ipj8ahGdNNxm/FrYGyAGYh16ry8tsC0kx7ymBhj3uvmu9CQpBMdb7bTQNOuOTLRKLaln+8waUumw=="
        },
        {
          "blockIdFlag": "BLOCK_ID_FLAG_COMMIT",
          "validatorAddress": "299xvCm2ZUwTV/Tcty4zcOBT1AU=",
          "timestamp": "2021-07-12T08:05:22.356259712Z",
          "signature": "VX+TAitw0TeG25vdAyRTTqFD92QCMLyCFDfhzA8MmNQDAXLDF79I4sQGkQFnuAOYvAANKZtGdXdx+1nYX/AR0A=="
        },
        {
          "blockIdFlag": "BLOCK_ID_FLAG_COMMIT",
          "validatorAddress": "+nva6pxhpfHNdpnVtUg9kpTft8s=",
          "timestamp": "2021-07-12T08:05:22.400389951Z",
          "signature": "haUPT+DIwnXFU+zxwZukakxLU/Vzz3tpwel1MA9tgN4YNLsK1DOKJjjs4U5Zj4qvYXLH5tvGUXz2XhNPb/7sJA=="
        },
        {
          "blockIdFlag": "BLOCK_ID_FLAG_COMMIT",
          "validatorAddress": "lZEVu5kiC4YXL2FxwaAMRv282MQ=",
          "timestamp": "2021-07-12T08:05:22.393823192Z",
          "signature": "QuhuFlfGNzHzoAijw/PrFRUR7TmaaphyI/ybpFTpG8JxNGcmUZ+YtNJtzJwRhUqkhV/i5Ngv3Xx/uQX0Z0RaCg=="
        },
        {
          "blockIdFlag": "BLOCK_ID_FLAG_COMMIT",
          "validatorAddress": "a0hzz+h4moaQrE64yXSjzRWM+p4=",
          "timestamp": "2021-07-12T08:05:22.389074186Z",
          "signature": "8XggPj2IR9uWseeZKtejNwrkBUWcQDdThz4CcGH+X1l2RuFlZq/xIP2v0j2tw0Et3aFzOyMdMHl9N1/KUCXWBQ=="
        }
      ]
    }
  }
}
get_account(address)
This function returns the account details of the specified address.
Parameter
- address <str>
Return
- Optional[auth_type.BaseAccount]
Example
from pyband import Client
from google.protobuf.json_format import MessageToJson
grpc_url = "<GRPC>" # without https://
address = "band1ee656yzw6y9swqayu9v0kgu5pua2kgjq3hd6g3"
c = Client(grpc_url)
addr = c.get_account(address)
print(MessageToJson(addr))
Result
{
  "address": "band1ee656yzw6y9swqayu9v0kgu5pua2kgjq3hd6g3",
  "pubKey": {
    "@type": "/cosmos.crypto.secp256k1.PubKey",
    "key": "AsBzzfeupPh2IM9xJ7SnhtIl7kVGX2QoY3Ro2DRKsmIF"
  },
  "accountNumber": "171",
  "sequence": "10"
}
get_request_id_by_tx_hash(tx_hash)
This function returns request ID of the given transaction hash.
Parameter
- tx_hash <bytes>: Transaction hash
Return
- List[int]
Exception
| Type | Description | 
|---|---|
| NotFoundError | Request Id is not found | 
Example
from pyband import Client
from google.protobuf.json_format import MessageToJson
grpc_url = "<GRPC>" # without https://
tx_hash = "DCC09AD0087DFB30AD552DAFA6C52FE9676F157B24812FF4B9994B97CAC914AC"
c = Client(grpc_url)
print(c.get_request_id_by_tx_hash(tx_hash))
Result
[37625, 37626, 37627, 37628, 37629]
get_chain_id
This function returns a chain ID.
Return
- <str>
Example
from pyband import Client
grpc_url = "<GRPC>" # without https://
c = Client(grpc_url)
print(c.get_chain_id())
Result
band-laozi-testnet2
get_reference_data(pairs, min_count, ask_count)
This function returns the rates of the given cryptocurrency pairs.
Parameter
- pairs List<str>List of cryptocurrency pairs.
- min_count <int>Minimum number of validators necessary for the request to proceed to the execution phase.
- ask_count <int>: Number of validators that are requested to response to the corresponding request.
Return
- List[ReferencePrice]
Exception
| Type | Description | 
|---|---|
| EmptyMsgError | Pairs are required | 
Example
from pyband import Client
grpc_url = "<GRPC>" # without https://
client = Client(grpc_url)
min_count = 3
ask_count = 4
pairs = ["BTC/USD", "ETH/USD"]
print(client.get_reference_data(pairs, min_count, ask_count))
Result
[
  ReferencePrice(
    (pair = "BTC/USD"),
    (rate = 33373.93),
    (updated_at = ReferencePriceUpdated(
      (base = 1625715297),
      (quote = 1625715749)
    ))
  ),
  ReferencePrice(
    (pair = "ETH/USD"),
    (rate = 2261.97),
    (updated_at = ReferencePriceUpdated(
      (base = 1625715297),
      (quote = 1625715749)
    ))
  )
]
get_latest_request(oid, calldata, min_count, ask_count)
This function returns the latest request.
Parameter
- oid <int>: Oracle script ID
- calldata <bytes>: Calldata of a request.
- min_count <int>: Minimum number of validators necessary for the request to proceed to the execution phase.
- ask_count <int>: Number of validators that are requested to response to the corresponding request.
Return
Example
from pyband import Client
from google.protobuf.json_format import MessageToJson
grpc_url = "<GRPC>" # without https://
c = Client(grpc_url)
oid = 43
calldata = "0000000200000004425443420000000442455448000000003b9aca00"
min_count = 3
ask_count = 4
latest_req = c.get_latest_request(oid, calldata, min_count, ask_count)
print(MessageToJson(latest_req))
Result
{
  "request": {
    "request": {
      "oracleScriptId": "43",
      "calldata": "AAAAAgAAAARCVENCAAAABEJFVEgAAAAAO5rKAA==",
      "requestedValidators": [
        "bandvaloper1p46uhvdk8vr829v747v85hst3mur2dzlhfemmz",
        "bandvaloper17n5rmujk78nkgss7tjecg4nfzn6geg4cqtyg3u",
        "bandvaloper1e9sa38742tzhmandc4gkqve9zy8zc0yremaa3j",
        "bandvaloper1zl5925n5u24njn9axpygz8lhjl5a8v4cpkzx5g",
        "bandvaloper1ldtwjzsplhxzhrg3k5hhr8v0qterv05vpdxp9f",
        "bandvaloper19eu9g3gka6rxlevkjlvjq7s6c498tejnwxjwxx"
      ],
      "minCount": "3",
      "requestHeight": "603449",
      "requestTime": "1626077260",
      "clientId": "linear",
      "rawRequests": [
        {
          "dataSourceId": "74",
          "calldata": "aHR0cHM6Ly91cy1ycGMuYmFuZGNoYWluLm9yZy9vcmFjbGUvcmVxdWVzdF9wcmljZXMgQlRDIEVUSA=="
        },
        {
          "externalId": "1",
          "dataSourceId": "74",
          "calldata": "aHR0cHM6Ly9ldS1ycGMuYmFuZGNoYWluLm9yZy9vcmFjbGUvcmVxdWVzdF9wcmljZXMgQlRDIEVUSA=="
        },
        {
          "externalId": "2",
          "dataSourceId": "74",
          "calldata": "aHR0cHM6Ly9hc2lhLXJwYy5iYW5kY2hhaW4ub3JnL29yYWNsZS9yZXF1ZXN0X3ByaWNlcyBCVEMgRVRI"
        },
        {
          "externalId": "3",
          "dataSourceId": "74",
          "calldata": "aHR0cHM6Ly9hdXMtcnBjLmJhbmRjaGFpbi5vcmcvb3JhY2xlL3JlcXVlc3RfcHJpY2VzIEJUQyBFVEg="
        }
      ],
      "executeGas": "1000000"
    },
    "reports": [
      {
        "validator": "bandvaloper1p46uhvdk8vr829v747v85hst3mur2dzlhfemmz",
        "inBeforeResolve": true,
        "rawReports": [
          { "externalId": "1", "data": "MzQyNzkuOTYgMjE0NC43MTk5OTk5OTkK" },
          { "data": "MzQyNzkuOTYgMjE0NC43MTk5OTk5OTkK" },
          { "externalId": "2", "data": "MzQyNzkuOTYgMjE0NC43MTk5OTk5OTkK" },
          { "externalId": "3", "data": "MzQyNzkuOTYgMjE0NC43MTk5OTk5OTkK" }
        ]
      },
      {
        "validator": "bandvaloper1zl5925n5u24njn9axpygz8lhjl5a8v4cpkzx5g",
        "inBeforeResolve": true,
        "rawReports": [
          { "externalId": "2", "data": "MzQyNzkuOTYgMjE0NC43MTk5OTk5OTkK" },
          { "externalId": "3", "data": "MzQyNzkuOTYgMjE0NC43MTk5OTk5OTkK" },
          { "externalId": "1", "data": "MzQyNzkuOTYgMjE0NC43MTk5OTk5OTkK" },
          { "data": "MzQyNzkuOTYgMjE0NC43MTk5OTk5OTkK" }
        ]
      },
      {
        "validator": "bandvaloper19eu9g3gka6rxlevkjlvjq7s6c498tejnwxjwxx",
        "inBeforeResolve": true,
        "rawReports": [
          { "externalId": "3", "data": "MzQyNzkuOTYgMjE0NC43MTk5OTk5OTkK" },
          { "data": "MzQyNzkuOTYgMjE0NC43MTk5OTk5OTkK" },
          { "externalId": "2", "data": "MzQyNzkuOTYgMjE0NC43MTk5OTk5OTkK" },
          { "externalId": "1", "data": "MzQyNzkuOTYgMjE0NC43MTk5OTk5OTkK" }
        ]
      },
      {
        "validator": "bandvaloper1e9sa38742tzhmandc4gkqve9zy8zc0yremaa3j",
        "inBeforeResolve": true,
        "rawReports": [
          { "externalId": "3", "data": "MzQyNzkuOTYgMjE0NC43MTk5OTk5OTkK" },
          { "data": "MzQyNzkuOTYgMjE0NC43MTk5OTk5OTkK" },
          { "externalId": "2", "data": "MzQyNzkuOTYgMjE0NC43MTk5OTk5OTkK" },
          { "externalId": "1", "data": "MzQyNzkuOTYgMjE0NC43MTk5OTk5OTkK" }
        ]
      },
      {
        "validator": "bandvaloper17n5rmujk78nkgss7tjecg4nfzn6geg4cqtyg3u",
        "inBeforeResolve": true,
        "rawReports": [
          { "externalId": "2", "data": "MzQyNzkuOTYgMjE0NC43MTk5OTk5OTkK" },
          { "externalId": "3", "data": "MzQyNzkuOTYgMjE0NC43MTk5OTk5OTkK" },
          { "externalId": "1", "data": "MzQyNzkuOTYgMjE0NC43MTk5OTk5OTkK" },
          { "data": "MzQyNzkuOTYgMjE0NC43MTk5OTk5OTkK" }
        ]
      },
      {
        "validator": "bandvaloper1ldtwjzsplhxzhrg3k5hhr8v0qterv05vpdxp9f",
        "inBeforeResolve": true,
        "rawReports": [
          { "externalId": "3", "data": "MzQyNzkuOTYgMjE0NC43MTk5OTk5OTkK" },
          { "externalId": "1", "data": "MzQyNzkuOTYgMjE0NC43MTk5OTk5OTkK" },
          { "externalId": "2", "data": "MzQyNzkuOTYgMjE0NC43MTk5OTk5OTkK" },
          { "data": "MzQyNzkuOTYgMjE0NC43MTk5OTk5OTkK" }
        ]
      }
    ],
    "result": {
      "clientId": "linear",
      "oracleScriptId": "43",
      "calldata": "AAAAAgAAAARCVENCAAAABEJFVEgAAAAAO5rKAA==",
      "askCount": "6",
      "minCount": "3",
      "requestId": "306920",
      "ansCount": "6",
      "requestTime": "1626077260",
      "resolveTime": "1626077266",
      "resolveStatus": "RESOLVE_STATUS_SUCCESS",
      "result": "AAAAAgAAHy1s1rYAAAAB81tGE/4="
    }
  }
}
send_tx_sync_mode(tx_bytes)
This function sends a transaction in sync mode, that is, send and wait until a transaction has passed CheckTx phase.
Parameter
- tx_bytes <bytes>: Transaction raw bytes that is already signed.
Return
- abci_type.TxResponse
Example
import os
from pyband.client import Client
from pyband.transaction import Transaction
from pyband.wallet import PrivateKey
from pyband.proto.cosmos.base.v1beta1.coin_pb2 import Coin
from pyband.proto.oracle.v1.tx_pb2 import MsgRequestData
from google.protobuf.json_format import MessageToJson
grpc_url = "<GRPC>" # without https://
c = Client(grpc_url)
MNEMONIC = os.getenv("MNEMONIC")
private_key = PrivateKey.from_mnemonic(MNEMONIC)
public_key = private_key.to_public_key()
sender_addr = public_key.to_address()
sender = sender_addr.to_acc_bech32()
request_msg = MsgRequestData(
    oracle_script_id=37,
    calldata=bytes.fromhex("0000000200000003425443000000034554480000000000000064"),
    ask_count=4,
    min_count=3,
    client_id="BandProtocol",
    fee_limit=[Coin(amount="100", denom="uband")],
    prepare_gas=50000,
    execute_gas=200000,
    sender=sender,
)
account = c.get_account(sender)
account_num = account.account_number
sequence = account.sequence
fee = [Coin(amount="0", denom="uband")]
chain_id = c.get_chain_id()
txn = (
    Transaction()
    .with_messages(request_msg)
    .with_sequence(sequence)
    .with_account_num(account_num)
    .with_chain_id(chain_id)
    .with_gas(2000000)
    .with_fee(fee)
    .with_memo("")
)
sign_doc = txn.get_sign_doc(public_key)
signature = private_key.sign(sign_doc.SerializeToString())
tx_raw_bytes = txn.get_tx_data(signature, public_key)
tx_sync = c.send_tx_sync_mode(tx_raw_bytes)
print(MessageToJson(tx_sync))
Result
{
  "txhash": "FEE8A58F7A68326A50B974C13721B55A6ABA6A1761A2D466A9940FF393F02C9E",
  "rawLog": "[]"
}
send_tx_async_mode(tx_bytes)
This function sends a transaction in async mode, that is, send and return immediately without waiting for the transaction process.
Parameter
- tx_bytes <bytes>: Transaction raw bytes that is already signed.
Return
- abci_type.TxResponse
Example
import os
from pyband.client import Client
from pyband.transaction import Transaction
from pyband.wallet import PrivateKey
from pyband.proto.cosmos.base.v1beta1.coin_pb2 import Coin
from pyband.proto.oracle.v1.tx_pb2 import MsgRequestData
from google.protobuf.json_format import MessageToJson
grpc_url = "<GRPC>" # without https://
c = Client(grpc_url)
MNEMONIC = os.getenv("MNEMONIC")
private_key = PrivateKey.from_mnemonic(MNEMONIC)
public_key = private_key.to_public_key()
sender_addr = public_key.to_address()
sender = sender_addr.to_acc_bech32()
request_msg = MsgRequestData(
    oracle_script_id=37,
    calldata=bytes.fromhex("0000000200000003425443000000034554480000000000000064"),
    ask_count=4,
    min_count=3,
    client_id="BandProtocol",
    fee_limit=[Coin(amount="100", denom="uband")],
    prepare_gas=50000,
    execute_gas=200000,
    sender=sender,
)
account = c.get_account(sender)
account_num = account.account_number
sequence = account.sequence
fee = [Coin(amount="0", denom="uband")]
chain_id = c.get_chain_id()
txn = (
    Transaction()
    .with_messages(request_msg)
    .with_sequence(sequence)
    .with_account_num(account_num)
    .with_chain_id(chain_id)
    .with_gas(2000000)
    .with_fee(fee)
    .with_memo("")
)
sign_doc = txn.get_sign_doc(public_key)
signature = private_key.sign(sign_doc.SerializeToString())
tx_raw_bytes = txn.get_tx_data(signature, public_key)
tx_async = c.send_tx_async_mode(tx_raw_bytes)
print(MessageToJson(tx_async))
Result
{ "txhash": "C685F799E4D870353364155602C14520416FC274293DFC9EFC3575357F9A8893" }
send_tx_block_mode(tx_bytes)
This function sends a transaction in block mode, that is, send and wait until the transaction has been committed to a block.
Parameter
- tx_bytes <bytes>: Transaction raw bytes that is already signed.
Return
- abci_type.TxResponse
Example
import os
from pyband.client import Client
from pyband.transaction import Transaction
from pyband.wallet import PrivateKey
from pyband.proto.cosmos.base.v1beta1.coin_pb2 import Coin
from pyband.proto.oracle.v1.tx_pb2 import MsgRequestData
from google.protobuf.json_format import MessageToJson
grpc_url = "<GRPC>" # without https://
c = Client(grpc_url)
MNEMONIC = os.getenv("MNEMONIC")
private_key = PrivateKey.from_mnemonic(MNEMONIC)
public_key = private_key.to_public_key()
sender_addr = public_key.to_address()
sender = sender_addr.to_acc_bech32()
request_msg = MsgRequestData(
    oracle_script_id=37,
    calldata=bytes.fromhex("0000000200000003425443000000034554480000000000000064"),
    ask_count=4,
    min_count=3,
    client_id="BandProtocol",
    fee_limit=[Coin(amount="100", denom="uband")],
    prepare_gas=50000,
    execute_gas=200000,
    sender=sender,
)
account = c.get_account(sender)
account_num = account.account_number
sequence = account.sequence
fee = [Coin(amount="0", denom="uband")]
chain_id = c.get_chain_id()
txn = (
    Transaction()
    .with_messages(request_msg)
    .with_sequence(sequence)
    .with_account_num(account_num)
    .with_chain_id(chain_id)
    .with_gas(2000000)
    .with_fee(fee)
    .with_memo("")
)
sign_doc = txn.get_sign_doc(public_key)
signature = private_key.sign(sign_doc.SerializeToString())
tx_raw_bytes = txn.get_tx_data(signature, public_key)
tx_block = c.send_tx_block_mode(tx_raw_bytes)
print(MessageToJson(tx_block))
Result
{
  "height": "603561",
  "txhash": "A50970334A74461CF045D962EEA1230B18AAAC2CEE2E96C3C348672100D46A93",
  "data": "0A090A0772657175657374",
  "rawLog": "[{\"events\":[{\"type\":\"message\",\"attributes\":[{\"key\":\"action\",\"value\":\"request\"}]},{\"type\":\"raw_request\",\"attributes\":[{\"key\":\"data_source_id\",\"value\":\"61\"},{\"key\":\"data_source_hash\",\"value\":\"07be7bd61667327aae10b7a13a542c7dfba31b8f4c52b0b60bf9c7b11b1a72ef\"},{\"key\":\"external_id\",\"value\":\"6\"},{\"key\":\"calldata\",\"value\":\"BTC ETH\"},{\"key\":\"fee\"},{\"key\":\"data_source_id\",\"value\":\"57\"},{\"key\":\"data_source_hash\",\"value\":\"61b369daa5c0918020a52165f6c7662d5b9c1eee915025cb3d2b9947a26e48c7\"},{\"key\":\"external_id\",\"value\":\"0\"},{\"key\":\"calldata\",\"value\":\"BTC ETH\"},{\"key\":\"fee\"},{\"key\":\"data_source_id\",\"value\":\"62\"},{\"key\":\"data_source_hash\",\"value\":\"107048da9dbf7960c79fb20e0585e080bb9be07d42a1ce09c5479bbada8d0289\"},{\"key\":\"external_id\",\"value\":\"3\"},{\"key\":\"calldata\",\"value\":\"BTC ETH\"},{\"key\":\"fee\"},{\"key\":\"data_source_id\",\"value\":\"60\"},{\"key\":\"data_source_hash\",\"value\":\"2e588de76a58338125022bc42b460072300aebbcc4acaf55f91755c1c1799bac\"},{\"key\":\"external_id\",\"value\":\"5\"},{\"key\":\"calldata\",\"value\":\"huobipro BTC ETH\"},{\"key\":\"fee\"},{\"key\":\"data_source_id\",\"value\":\"59\"},{\"key\":\"data_source_hash\",\"value\":\"5c011454981c473af3bf6ef93c76b36bfb6cc0ce5310a70a1ba569de3fc0c15d\"},{\"key\":\"external_id\",\"value\":\"2\"},{\"key\":\"calldata\",\"value\":\"BTC ETH\"},{\"key\":\"fee\"},{\"key\":\"data_source_id\",\"value\":\"60\"},{\"key\":\"data_source_hash\",\"value\":\"2e588de76a58338125022bc42b460072300aebbcc4acaf55f91755c1c1799bac\"},{\"key\":\"external_id\",\"value\":\"4\"},{\"key\":\"calldata\",\"value\":\"binance BTC ETH\"},{\"key\":\"fee\"},{\"key\":\"data_source_id\",\"value\":\"60\"},{\"key\":\"data_source_hash\",\"value\":\"2e588de76a58338125022bc42b460072300aebbcc4acaf55f91755c1c1799bac\"},{\"key\":\"external_id\",\"value\":\"9\"},{\"key\":\"calldata\",\"value\":\"bittrex BTC ETH\"},{\"key\":\"fee\"},{\"key\":\"data_source_id\",\"value\":\"60\"},{\"key\":\"data_source_hash\",\"value\":\"2e588de76a58338125022bc42b460072300aebbcc4acaf55f91755c1c1799bac\"},{\"key\":\"external_id\",\"value\":\"7\"},{\"key\":\"calldata\",\"value\":\"kraken BTC ETH\"},{\"key\":\"fee\"},{\"key\":\"data_source_id\",\"value\":\"60\"},{\"key\":\"data_source_hash\",\"value\":\"2e588de76a58338125022bc42b460072300aebbcc4acaf55f91755c1c1799bac\"},{\"key\":\"external_id\",\"value\":\"8\"},{\"key\":\"calldata\",\"value\":\"bitfinex BTC ETH\"},{\"key\":\"fee\"},{\"key\":\"data_source_id\",\"value\":\"58\"},{\"key\":\"data_source_hash\",\"value\":\"7e6759fade717a06fb643392bfde837bfc3437da2ded54feed706e6cd35de461\"},{\"key\":\"external_id\",\"value\":\"1\"},{\"key\":\"calldata\",\"value\":\"BTC ETH\"},{\"key\":\"fee\"}]},{\"type\":\"request\",\"attributes\":[{\"key\":\"id\",\"value\":\"307081\"},{\"key\":\"client_id\",\"value\":\"BandProtocol\"},{\"key\":\"oracle_script_id\",\"value\":\"37\"},{\"key\":\"calldata\",\"value\":\"0000000200000003425443000000034554480000000000000064\"},{\"key\":\"ask_count\",\"value\":\"4\"},{\"key\":\"min_count\",\"value\":\"3\"},{\"key\":\"gas_used\",\"value\":\"111048\"},{\"key\":\"total_fees\"},{\"key\":\"validator\",\"value\":\"bandvaloper1l2hchtyawk9tk43zzjrzr2lcd0zyxngcjdsshe\"},{\"key\":\"validator\",\"value\":\"bandvaloper17n5rmujk78nkgss7tjecg4nfzn6geg4cqtyg3u\"},{\"key\":\"validator\",\"value\":\"bandvaloper1e9sa38742tzhmandc4gkqve9zy8zc0yremaa3j\"},{\"key\":\"validator\",\"value\":\"bandvaloper1lm2puy995yt8dh53cnazk3ge3m27t7cay4ndaq\"}]}]}]",
  "logs": [
    {
      "events": [
        {
          "type": "message",
          "attributes": [{ "key": "action", "value": "request" }]
        },
        {
          "type": "raw_request",
          "attributes": [
            { "key": "data_source_id", "value": "61" },
            {
              "key": "data_source_hash",
              "value": "07be7bd61667327aae10b7a13a542c7dfba31b8f4c52b0b60bf9c7b11b1a72ef"
            },
            { "key": "external_id", "value": "6" },
            { "key": "calldata", "value": "BTC ETH" },
            { "key": "fee" },
            { "key": "data_source_id", "value": "57" },
            {
              "key": "data_source_hash",
              "value": "61b369daa5c0918020a52165f6c7662d5b9c1eee915025cb3d2b9947a26e48c7"
            },
            { "key": "external_id", "value": "0" },
            { "key": "calldata", "value": "BTC ETH" },
            { "key": "fee" },
            { "key": "data_source_id", "value": "62" },
            {
              "key": "data_source_hash",
              "value": "107048da9dbf7960c79fb20e0585e080bb9be07d42a1ce09c5479bbada8d0289"
            },
            { "key": "external_id", "value": "3" },
            { "key": "calldata", "value": "BTC ETH" },
            { "key": "fee" },
            { "key": "data_source_id", "value": "60" },
            {
              "key": "data_source_hash",
              "value": "2e588de76a58338125022bc42b460072300aebbcc4acaf55f91755c1c1799bac"
            },
            { "key": "external_id", "value": "5" },
            { "key": "calldata", "value": "huobipro BTC ETH" },
            { "key": "fee" },
            { "key": "data_source_id", "value": "59" },
            {
              "key": "data_source_hash",
              "value": "5c011454981c473af3bf6ef93c76b36bfb6cc0ce5310a70a1ba569de3fc0c15d"
            },
            { "key": "external_id", "value": "2" },
            { "key": "calldata", "value": "BTC ETH" },
            { "key": "fee" },
            { "key": "data_source_id", "value": "60" },
            {
              "key": "data_source_hash",
              "value": "2e588de76a58338125022bc42b460072300aebbcc4acaf55f91755c1c1799bac"
            },
            { "key": "external_id", "value": "4" },
            { "key": "calldata", "value": "binance BTC ETH" },
            { "key": "fee" },
            { "key": "data_source_id", "value": "60" },
            {
              "key": "data_source_hash",
              "value": "2e588de76a58338125022bc42b460072300aebbcc4acaf55f91755c1c1799bac"
            },
            { "key": "external_id", "value": "9" },
            { "key": "calldata", "value": "bittrex BTC ETH" },
            { "key": "fee" },
            { "key": "data_source_id", "value": "60" },
            {
              "key": "data_source_hash",
              "value": "2e588de76a58338125022bc42b460072300aebbcc4acaf55f91755c1c1799bac"
            },
            { "key": "external_id", "value": "7" },
            { "key": "calldata", "value": "kraken BTC ETH" },
            { "key": "fee" },
            { "key": "data_source_id", "value": "60" },
            {
              "key": "data_source_hash",
              "value": "2e588de76a58338125022bc42b460072300aebbcc4acaf55f91755c1c1799bac"
            },
            { "key": "external_id", "value": "8" },
            { "key": "calldata", "value": "bitfinex BTC ETH" },
            { "key": "fee" },
            { "key": "data_source_id", "value": "58" },
            {
              "key": "data_source_hash",
              "value": "7e6759fade717a06fb643392bfde837bfc3437da2ded54feed706e6cd35de461"
            },
            { "key": "external_id", "value": "1" },
            { "key": "calldata", "value": "BTC ETH" },
            { "key": "fee" }
          ]
        },
        {
          "type": "request",
          "attributes": [
            { "key": "id", "value": "307081" },
            { "key": "client_id", "value": "BandProtocol" },
            { "key": "oracle_script_id", "value": "37" },
            {
              "key": "calldata",
              "value": "0000000200000003425443000000034554480000000000000064"
            },
            { "key": "ask_count", "value": "4" },
            { "key": "min_count", "value": "3" },
            { "key": "gas_used", "value": "111048" },
            { "key": "total_fees" },
            {
              "key": "validator",
              "value": "bandvaloper1l2hchtyawk9tk43zzjrzr2lcd0zyxngcjdsshe"
            },
            {
              "key": "validator",
              "value": "bandvaloper17n5rmujk78nkgss7tjecg4nfzn6geg4cqtyg3u"
            },
            {
              "key": "validator",
              "value": "bandvaloper1e9sa38742tzhmandc4gkqve9zy8zc0yremaa3j"
            },
            {
              "key": "validator",
              "value": "bandvaloper1lm2puy995yt8dh53cnazk3ge3m27t7cay4ndaq"
            }
          ]
        }
      ]
    }
  ],
  "gasWanted": "2000000",
  "gasUsed": "566496"
}