Skip to main content

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 oracle script details of the given ID.

Parameter

  • id <int>: Oracle 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

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

TypeDescription
NotFoundErrorRequest 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

Exception

TypeDescription
EmptyMsgErrorPairs 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"
}