From b77f1fdfecb811e7302e9de388e32041c93f5601 Mon Sep 17 00:00:00 2001 From: abel Date: Fri, 15 Mar 2024 09:49:02 -0300 Subject: [PATCH 1/4] (Feat) Added documentation for tendermint module queries --- source/includes/_account.md | 28 + source/includes/_binaryoptions.md | 53 + source/includes/_chainexchange.md | 40 + source/includes/_changelog.md | 5 + source/includes/_derivatives.md | 97 + source/includes/_spot.md | 60 + source/includes/_staking.md | 44 + source/includes/_tendermint.md | 1637 +++++++++++++++++ source/index.html.md | 1 + .../chain/tendermint/abciQueryRequest.json | 6 + .../chain/tendermint/abciQueryResponse.json | 11 + .../json_tables/chain/tendermint/block.json | 6 + .../json_tables/chain/tendermint/blockID.json | 4 + .../chain/tendermint/blockIDFlag.json | 6 + .../json_tables/chain/tendermint/commit.json | 6 + .../chain/tendermint/commitSig.json | 6 + .../chain/tendermint/consensus.json | 4 + source/json_tables/chain/tendermint/data.json | 3 + .../chain/tendermint/defaultNodeInfo.json | 10 + .../tendermint/defaultNodeInfoOther.json | 4 + .../chain/tendermint/evidence.json | 3 + .../chain/tendermint/evidenceList.json | 3 + .../tendermint/getBlockByHeightRequest.json | 3 + .../tendermint/getBlockByHeightResponse.json | 4 + .../tendermint/getLatestBlockResponse.json | 4 + .../getLatestValidatorSetResponse.json | 5 + .../chain/tendermint/getNodeInfoResponse.json | 4 + .../chain/tendermint/getSyncingResponse.json | 3 + .../getValidatorSetByHeightRequest.json | 4 + .../getValidatorSetByHeightResponse.json | 5 + .../json_tables/chain/tendermint/header.json | 16 + .../json_tables/chain/tendermint/module.json | 5 + .../chain/tendermint/partSetHeader.json | 4 + .../json_tables/chain/tendermint/proofOp.json | 5 + .../chain/tendermint/proofOps.json | 3 + .../chain/tendermint/protocolVersion.json | 5 + .../chain/tendermint/validator.json | 6 + .../chain/tendermint/versionInfo.json | 10 + 38 files changed, 2123 insertions(+) create mode 100644 source/includes/_tendermint.md create mode 100644 source/json_tables/chain/tendermint/abciQueryRequest.json create mode 100644 source/json_tables/chain/tendermint/abciQueryResponse.json create mode 100644 source/json_tables/chain/tendermint/block.json create mode 100644 source/json_tables/chain/tendermint/blockID.json create mode 100644 source/json_tables/chain/tendermint/blockIDFlag.json create mode 100644 source/json_tables/chain/tendermint/commit.json create mode 100644 source/json_tables/chain/tendermint/commitSig.json create mode 100644 source/json_tables/chain/tendermint/consensus.json create mode 100644 source/json_tables/chain/tendermint/data.json create mode 100644 source/json_tables/chain/tendermint/defaultNodeInfo.json create mode 100644 source/json_tables/chain/tendermint/defaultNodeInfoOther.json create mode 100644 source/json_tables/chain/tendermint/evidence.json create mode 100644 source/json_tables/chain/tendermint/evidenceList.json create mode 100644 source/json_tables/chain/tendermint/getBlockByHeightRequest.json create mode 100644 source/json_tables/chain/tendermint/getBlockByHeightResponse.json create mode 100644 source/json_tables/chain/tendermint/getLatestBlockResponse.json create mode 100644 source/json_tables/chain/tendermint/getLatestValidatorSetResponse.json create mode 100644 source/json_tables/chain/tendermint/getNodeInfoResponse.json create mode 100644 source/json_tables/chain/tendermint/getSyncingResponse.json create mode 100644 source/json_tables/chain/tendermint/getValidatorSetByHeightRequest.json create mode 100644 source/json_tables/chain/tendermint/getValidatorSetByHeightResponse.json create mode 100644 source/json_tables/chain/tendermint/header.json create mode 100644 source/json_tables/chain/tendermint/module.json create mode 100644 source/json_tables/chain/tendermint/partSetHeader.json create mode 100644 source/json_tables/chain/tendermint/proofOp.json create mode 100644 source/json_tables/chain/tendermint/proofOps.json create mode 100644 source/json_tables/chain/tendermint/protocolVersion.json create mode 100644 source/json_tables/chain/tendermint/validator.json create mode 100644 source/json_tables/chain/tendermint/versionInfo.json diff --git a/source/includes/_account.md b/source/includes/_account.md index e0fa3117..30d4afac 100644 --- a/source/includes/_account.md +++ b/source/includes/_account.md @@ -194,6 +194,7 @@ func main() {
+ **Coin** @@ -225,6 +226,7 @@ gas fee: 0.0000660495 INJ
+ **TxResponse** @@ -244,6 +246,7 @@ gas fee: 0.0000660495 INJ
+ **ABCIMessageLog** @@ -253,6 +256,7 @@ gas fee: 0.0000660495 INJ
+ **Event** @@ -261,6 +265,7 @@ gas fee: 0.0000660495 INJ
+ **StringEvent** @@ -269,6 +274,7 @@ gas fee: 0.0000660495 INJ
+ **EventAttribute** @@ -278,6 +284,7 @@ gas fee: 0.0000660495 INJ
+ **Attribute** @@ -475,6 +482,7 @@ func main() {
+ **Coin** @@ -506,6 +514,7 @@ gas fee: 0.000064803 INJ
+ **TxResponse** @@ -525,6 +534,7 @@ gas fee: 0.000064803 INJ
+ **ABCIMessageLog** @@ -534,6 +544,7 @@ gas fee: 0.000064803 INJ
+ **Event** @@ -542,6 +553,7 @@ gas fee: 0.000064803 INJ
+ **StringEvent** @@ -550,6 +562,7 @@ gas fee: 0.000064803 INJ
+ **EventAttribute** @@ -559,6 +572,7 @@ gas fee: 0.000064803 INJ
+ **Attribute** @@ -766,6 +780,7 @@ func main() {
+ **Coin** @@ -797,6 +812,7 @@ gas fee: 0.0000610515 INJ
+ **TxResponse** @@ -816,6 +832,7 @@ gas fee: 0.0000610515 INJ
+ **ABCIMessageLog** @@ -825,6 +842,7 @@ gas fee: 0.0000610515 INJ
+ **Event** @@ -833,6 +851,7 @@ gas fee: 0.0000610515 INJ
+ **StringEvent** @@ -841,6 +860,7 @@ gas fee: 0.0000610515 INJ
+ **EventAttribute** @@ -850,6 +870,7 @@ gas fee: 0.0000610515 INJ
+ **Attribute** @@ -1057,6 +1078,7 @@ func main() {
+ **Coin** @@ -1088,6 +1110,7 @@ gas fee: 0.0000611985 INJ
+ **TxResponse** @@ -1107,6 +1130,7 @@ gas fee: 0.0000611985 INJ
+ **ABCIMessageLog** @@ -1116,6 +1140,7 @@ gas fee: 0.0000611985 INJ
+ **Event** @@ -1124,6 +1149,7 @@ gas fee: 0.0000611985 INJ
+ **StringEvent** @@ -1132,6 +1158,7 @@ gas fee: 0.0000611985 INJ
+ **EventAttribute** @@ -1141,6 +1168,7 @@ gas fee: 0.0000611985 INJ
+ **Attribute** diff --git a/source/includes/_binaryoptions.md b/source/includes/_binaryoptions.md index 09a50208..fdf8a92a 100644 --- a/source/includes/_binaryoptions.md +++ b/source/includes/_binaryoptions.md @@ -133,6 +133,7 @@ func main() {
+ **BinaryOptionsMarket** @@ -156,6 +157,7 @@ func main() {
+ **OracleType** @@ -378,6 +380,7 @@ func main() {
+ **OracleType** @@ -407,6 +410,7 @@ func main() {
+ **TxResponse** @@ -426,6 +430,7 @@ func main() {
+ **ABCIMessageLog** @@ -435,6 +440,7 @@ func main() {
+ **Event** @@ -443,6 +449,7 @@ func main() {
+ **StringEvent** @@ -451,6 +458,7 @@ func main() {
+ **EventAttribute** @@ -460,6 +468,7 @@ func main() {
+ **Attribute** @@ -591,6 +600,7 @@ if __name__ == "__main__":
+ **DerivativeOrder** @@ -602,6 +612,7 @@ if __name__ == "__main__":
+ **OrderInfo** @@ -613,6 +624,7 @@ if __name__ == "__main__":
+ **OrderType** @@ -653,6 +665,7 @@ gas fee: 0.0000606245 INJ
+ **TxResponse** @@ -672,6 +685,7 @@ gas fee: 0.0000606245 INJ
+ **ABCIMessageLog** @@ -681,6 +695,7 @@ gas fee: 0.0000606245 INJ
+ **Event** @@ -689,6 +704,7 @@ gas fee: 0.0000606245 INJ
+ **StringEvent** @@ -697,6 +713,7 @@ gas fee: 0.0000606245 INJ
+ **EventAttribute** @@ -706,6 +723,7 @@ gas fee: 0.0000606245 INJ
+ **Attribute** @@ -832,6 +850,7 @@ if __name__ == "__main__":
+ **DerivativeOrder** @@ -843,6 +862,7 @@ if __name__ == "__main__":
+ **OrderInfo** @@ -854,6 +874,7 @@ if __name__ == "__main__":
+ **OrderType** @@ -894,6 +915,7 @@ gas fee: 0.0000539515 INJ
+ **TxResponse** @@ -913,6 +935,7 @@ gas fee: 0.0000539515 INJ
+ **ABCIMessageLog** @@ -922,6 +945,7 @@ gas fee: 0.0000539515 INJ
+ **Event** @@ -930,6 +954,7 @@ gas fee: 0.0000539515 INJ
+ **StringEvent** @@ -938,6 +963,7 @@ gas fee: 0.0000539515 INJ
+ **EventAttribute** @@ -947,6 +973,7 @@ gas fee: 0.0000539515 INJ
+ **Attribute** @@ -1066,6 +1093,7 @@ if __name__ == "__main__":
+ **OrderMask** @@ -1100,6 +1128,7 @@ gas fee: 0.0000556515 INJ
+ **TxResponse** @@ -1119,6 +1148,7 @@ gas fee: 0.0000556515 INJ
+ **ABCIMessageLog** @@ -1128,6 +1158,7 @@ gas fee: 0.0000556515 INJ
+ **Event** @@ -1136,6 +1167,7 @@ gas fee: 0.0000556515 INJ
+ **StringEvent** @@ -1144,6 +1176,7 @@ gas fee: 0.0000556515 INJ
+ **EventAttribute** @@ -1153,6 +1186,7 @@ gas fee: 0.0000556515 INJ
+ **Attribute** @@ -1281,6 +1315,7 @@ if __name__ == "__main__":
+ **MarketStatus** @@ -1312,6 +1347,7 @@ gas fee: 0.0000556515 INJ
+ **TxResponse** @@ -1331,6 +1367,7 @@ gas fee: 0.0000556515 INJ
+ **ABCIMessageLog** @@ -1340,6 +1377,7 @@ gas fee: 0.0000556515 INJ
+ **Event** @@ -1348,6 +1386,7 @@ gas fee: 0.0000556515 INJ
+ **StringEvent** @@ -1356,6 +1395,7 @@ gas fee: 0.0000556515 INJ
+ **EventAttribute** @@ -1365,6 +1405,7 @@ gas fee: 0.0000556515 INJ
+ **Attribute** @@ -1748,6 +1789,7 @@ func main() {
+ **OrderData** @@ -1759,6 +1801,7 @@ func main() {
+ **SpotOrder** @@ -1769,6 +1812,7 @@ func main() {
+ **DerivativeOrder** @@ -1780,6 +1824,7 @@ func main() {
+ **OrderMask** @@ -1794,6 +1839,7 @@ func main() {
+ **OrderInfo** @@ -1805,6 +1851,7 @@ func main() {
+ **OrderType** @@ -1858,6 +1905,7 @@ gas fee: 0.000329546 INJ
+ **TxResponse** @@ -1877,6 +1925,7 @@ gas fee: 0.000329546 INJ
+ **ABCIMessageLog** @@ -1886,6 +1935,7 @@ gas fee: 0.000329546 INJ
+ **Event** @@ -1894,6 +1944,7 @@ gas fee: 0.000329546 INJ
+ **StringEvent** @@ -1902,6 +1953,7 @@ gas fee: 0.000329546 INJ
+ **EventAttribute** @@ -1911,6 +1963,7 @@ gas fee: 0.000329546 INJ
+ **Attribute** diff --git a/source/includes/_chainexchange.md b/source/includes/_chainexchange.md index 02a2c26f..0dd1d07f 100644 --- a/source/includes/_chainexchange.md +++ b/source/includes/_chainexchange.md @@ -133,6 +133,7 @@ func main() {
+ **Subaccount** @@ -183,6 +184,7 @@ func main() {
+ **Deposit** @@ -339,6 +341,7 @@ func main() {
+ **Deposit** @@ -478,6 +481,7 @@ No parameters
+ **Balance** @@ -487,6 +491,7 @@ No parameters
+ **Deposit** @@ -671,6 +676,7 @@ func main() {
+ **MarketVolume** @@ -679,6 +685,7 @@ func main() {
+ **VolumeRecord** @@ -856,6 +863,7 @@ func main() {
+ **AggregateAccountVolumeRecord** @@ -864,6 +872,7 @@ func main() {
+ **MarketVolume** @@ -872,6 +881,7 @@ func main() {
+ **VolumeRecord** @@ -1014,6 +1024,7 @@ func main() {
+ **VolumeRecord** @@ -1161,6 +1172,7 @@ func main() {
+ **MarketVolume** @@ -1169,6 +1181,7 @@ func main() {
+ **VolumeRecord** @@ -1444,6 +1457,7 @@ func main() {
+ **DenomDecimals** @@ -1607,6 +1621,7 @@ func main() {
+ **SubaccountOrderData** @@ -1615,6 +1630,7 @@ func main() {
+ **SubaccountOrder** @@ -1940,6 +1956,7 @@ func main() {
+ **SubaccountOrderbookMetadataWithMarket** @@ -1949,6 +1966,7 @@ func main() {
+ **SubaccountOrderbookMetadata** @@ -2403,6 +2421,7 @@ No parameters
+ **TradingRewardCampaignInfo** @@ -2413,6 +2432,7 @@ No parameters
+ **CampaignRewardPool** @@ -2421,6 +2441,7 @@ No parameters
+ **TradingRewardCampaignBoostInfo** @@ -2431,6 +2452,7 @@ No parameters
+ **PointsMultiplier** @@ -2588,6 +2610,7 @@ func main() {
+ **FeeDiscountTierInfo** @@ -2598,6 +2621,7 @@ func main() {
+ **FeeDiscountTierTTL** @@ -2796,6 +2820,7 @@ No parameters
+ **FeeDiscountSchedule** @@ -2807,6 +2832,7 @@ No parameters
+ **FeeDiscountTierInfo** @@ -3061,6 +3087,7 @@ func main() {
+ **BalanceMismatch** @@ -3213,6 +3240,7 @@ No parameters
+ **BalanceWithMarginHold** @@ -3385,6 +3413,7 @@ No parameters
+ **TierStatistic** @@ -3804,6 +3833,7 @@ func main() {
+ **TradeRecords** @@ -3812,6 +3842,7 @@ func main() {
+ **TradeRecord** @@ -4232,6 +4263,7 @@ func main() {
+ **TradeHistoryOptions** @@ -4280,6 +4312,7 @@ func main() {
+ **MetadataStatistics** @@ -4295,6 +4328,7 @@ func main() {
+ **TradeRecord** @@ -4626,6 +4660,7 @@ func main() {
+ **TxResponse** @@ -4645,6 +4680,7 @@ func main() {
+ **ABCIMessageLog** @@ -4654,6 +4690,7 @@ func main() {
+ **Event** @@ -4662,6 +4699,7 @@ func main() {
+ **StringEvent** @@ -4670,6 +4708,7 @@ func main() {
+ **EventAttribute** @@ -4679,6 +4718,7 @@ func main() {
+ **Attribute** diff --git a/source/includes/_changelog.md b/source/includes/_changelog.md index 95b9934d..90ec61ff 100644 --- a/source/includes/_changelog.md +++ b/source/includes/_changelog.md @@ -1,5 +1,10 @@ # Change Log +## 9999-99-99 +- Updated the API documentation to include all queries and messages for the `tendermint` module +- Python SDK v1.5.0 + - Added support for all queries from the `tendermint` module + ## 2024-03-08 - Updated the API documentation to include all queries and messages for the `distribution` and `chain exchange` modules - Python SDK v1.4.0 diff --git a/source/includes/_derivatives.md b/source/includes/_derivatives.md index b84f22dd..e43203fe 100644 --- a/source/includes/_derivatives.md +++ b/source/includes/_derivatives.md @@ -297,6 +297,7 @@ func main() {
+ **Level** @@ -455,6 +456,7 @@ func main() {
+ **TrimmedDerivativeLimitOrder** @@ -614,6 +616,7 @@ func main() {
+ **TrimmedDerivativeLimitOrder** @@ -779,6 +782,7 @@ func main() {
+ **TrimmedDerivativeLimitOrder** @@ -941,6 +945,7 @@ func main() {
+ **TrimmedDerivativeLimitOrder** @@ -1125,6 +1130,7 @@ func main() {
+ **FullDerivativeMarket** @@ -1135,6 +1141,7 @@ func main() {
+ **DerivativeMarket** @@ -1157,6 +1164,7 @@ func main() {
+ **OracleType** @@ -1175,6 +1183,7 @@ func main() {
+ **MarketStatus** @@ -1186,6 +1195,7 @@ func main() {
+ **PerpetualMarketState** @@ -1194,6 +1204,7 @@ func main() {
+ **PerpetualMarketInfo** @@ -1205,6 +1216,7 @@ func main() {
+ **PerpetualMarketFunding** @@ -1214,6 +1226,7 @@ func main() {
+ **ExpiryFuturesMarketInfo** @@ -1390,6 +1403,7 @@ func main() {
+ **FullDerivativeMarket** @@ -1400,6 +1414,7 @@ func main() {
+ **DerivativeMarket** @@ -1422,6 +1437,7 @@ func main() {
+ **OracleType** @@ -1440,6 +1456,7 @@ func main() {
+ **MarketStatus** @@ -1451,6 +1468,7 @@ func main() {
+ **PerpetualMarketState** @@ -1459,6 +1477,7 @@ func main() {
+ **PerpetualMarketInfo** @@ -1470,6 +1489,7 @@ func main() {
+ **PerpetualMarketFunding** @@ -1479,6 +1499,7 @@ func main() {
+ **ExpiryFuturesMarketInfo** @@ -1771,6 +1792,7 @@ No parameters
+ **DerivativePosition** @@ -1780,6 +1802,7 @@ No parameters
+ **Position** @@ -1993,6 +2016,7 @@ func main() {
+ **DerivativePosition** @@ -2002,6 +2026,7 @@ func main() {
+ **Position** @@ -2168,6 +2193,7 @@ func main() {
+ **Position** @@ -2333,6 +2359,7 @@ func main() {
+ **EffectivePosition** @@ -2480,6 +2507,7 @@ func main() {
+ **PerpetualMarketInfo** @@ -2620,6 +2648,7 @@ func main() {
+ **ExpiryFuturesMarketInfo** @@ -2766,6 +2795,7 @@ func main() {
+ **PerpetualMarketFunding** @@ -2925,6 +2955,7 @@ func main() {
+ **TrimmedDerivativeConditionalOrder** @@ -3141,6 +3172,7 @@ func main() {
+ **OracleType** @@ -3170,6 +3202,7 @@ func main() {
+ **TxResponse** @@ -3189,6 +3222,7 @@ func main() {
+ **ABCIMessageLog** @@ -3198,6 +3232,7 @@ func main() {
+ **Event** @@ -3206,6 +3241,7 @@ func main() {
+ **StringEvent** @@ -3214,6 +3250,7 @@ func main() {
+ **EventAttribute** @@ -3223,6 +3260,7 @@ func main() {
+ **Attribute** @@ -3437,6 +3475,7 @@ func main() {
+ **OracleType** @@ -3466,6 +3505,7 @@ func main() {
+ **TxResponse** @@ -3485,6 +3525,7 @@ func main() {
+ **ABCIMessageLog** @@ -3494,6 +3535,7 @@ func main() {
+ **Event** @@ -3502,6 +3544,7 @@ func main() {
+ **StringEvent** @@ -3510,6 +3553,7 @@ func main() {
+ **EventAttribute** @@ -3519,6 +3563,7 @@ func main() {
+ **Attribute** @@ -3786,6 +3831,7 @@ func main() {
+ **DerivativeOrder** @@ -3797,6 +3843,7 @@ func main() {
+ **OrderInfo** @@ -3808,6 +3855,7 @@ func main() {
+ **OrderType** @@ -3853,6 +3901,7 @@ gas fee: 0.0000857195 INJ
+ **TxResponse** @@ -3872,6 +3921,7 @@ gas fee: 0.0000857195 INJ
+ **ABCIMessageLog** @@ -3881,6 +3931,7 @@ gas fee: 0.0000857195 INJ
+ **Event** @@ -3889,6 +3940,7 @@ gas fee: 0.0000857195 INJ
+ **StringEvent** @@ -3897,6 +3949,7 @@ gas fee: 0.0000857195 INJ
+ **EventAttribute** @@ -3906,6 +3959,7 @@ gas fee: 0.0000857195 INJ
+ **Attribute** @@ -4175,6 +4229,7 @@ func main() {
+ **DerivativeOrder** @@ -4186,6 +4241,7 @@ func main() {
+ **OrderInfo** @@ -4197,6 +4253,7 @@ func main() {
+ **OrderType** @@ -4242,6 +4299,7 @@ gas fee: 0.000069981 INJ
+ **TxResponse** @@ -4261,6 +4319,7 @@ gas fee: 0.000069981 INJ
+ **ABCIMessageLog** @@ -4270,6 +4329,7 @@ gas fee: 0.000069981 INJ
+ **Event** @@ -4278,6 +4338,7 @@ gas fee: 0.000069981 INJ
+ **StringEvent** @@ -4286,6 +4347,7 @@ gas fee: 0.000069981 INJ
+ **EventAttribute** @@ -4295,6 +4357,7 @@ gas fee: 0.000069981 INJ
+ **Attribute** @@ -4501,6 +4564,7 @@ func main() {
+ **OrderMask** @@ -4543,6 +4607,7 @@ gas fee: 0.0000706865 INJ
+ **TxResponse** @@ -4562,6 +4627,7 @@ gas fee: 0.0000706865 INJ
+ **ABCIMessageLog** @@ -4571,6 +4637,7 @@ gas fee: 0.0000706865 INJ
+ **Event** @@ -4579,6 +4646,7 @@ gas fee: 0.0000706865 INJ
+ **StringEvent** @@ -4587,6 +4655,7 @@ gas fee: 0.0000706865 INJ
+ **EventAttribute** @@ -4596,6 +4665,7 @@ gas fee: 0.0000706865 INJ
+ **Attribute** @@ -4979,6 +5049,7 @@ func main() {
+ **OrderData** @@ -4990,6 +5061,7 @@ func main() {
+ **SpotOrder** @@ -5000,6 +5072,7 @@ func main() {
+ **DerivativeOrder** @@ -5011,6 +5084,7 @@ func main() {
+ **OrderMask** @@ -5025,6 +5099,7 @@ func main() {
+ **OrderInfo** @@ -5036,6 +5111,7 @@ func main() {
+ **OrderType** @@ -5089,6 +5165,7 @@ gas fee: 0.000329546 INJ
+ **TxResponse** @@ -5108,6 +5185,7 @@ gas fee: 0.000329546 INJ
+ **ABCIMessageLog** @@ -5117,6 +5195,7 @@ gas fee: 0.000329546 INJ
+ **Event** @@ -5125,6 +5204,7 @@ gas fee: 0.000329546 INJ
+ **StringEvent** @@ -5133,6 +5213,7 @@ gas fee: 0.000329546 INJ
+ **EventAttribute** @@ -5142,6 +5223,7 @@ gas fee: 0.000329546 INJ
+ **Attribute** @@ -5403,6 +5485,7 @@ func main() {
+ **DerivativeOrder** @@ -5414,6 +5497,7 @@ func main() {
+ **OrderInfo** @@ -5425,6 +5509,7 @@ func main() {
+ **OrderType** @@ -5455,6 +5540,7 @@ func main() {
+ **TxResponse** @@ -5474,6 +5560,7 @@ func main() {
+ **ABCIMessageLog** @@ -5483,6 +5570,7 @@ func main() {
+ **Event** @@ -5491,6 +5579,7 @@ func main() {
+ **StringEvent** @@ -5499,6 +5588,7 @@ func main() {
+ **EventAttribute** @@ -5508,6 +5598,7 @@ func main() {
+ **Attribute** @@ -5743,6 +5834,7 @@ gas fee: 0.000066807 INJ
+ **TxResponse** @@ -5762,6 +5854,7 @@ gas fee: 0.000066807 INJ
+ **ABCIMessageLog** @@ -5771,6 +5864,7 @@ gas fee: 0.000066807 INJ
+ **Event** @@ -5779,6 +5873,7 @@ gas fee: 0.000066807 INJ
+ **StringEvent** @@ -5787,6 +5882,7 @@ gas fee: 0.000066807 INJ
+ **EventAttribute** @@ -5796,6 +5892,7 @@ gas fee: 0.000066807 INJ
+ **Attribute** diff --git a/source/includes/_spot.md b/source/includes/_spot.md index b29130b6..88a82640 100644 --- a/source/includes/_spot.md +++ b/source/includes/_spot.md @@ -149,6 +149,7 @@ func main() {
+ **SpotMarket** @@ -165,6 +166,7 @@ func main() {
+ **MarketStatus** @@ -318,6 +320,7 @@ func main() {
+ **SpotMarket** @@ -334,6 +337,7 @@ func main() {
+ **MarketStatus** @@ -502,6 +506,7 @@ func main() {
+ **FullSpotMarket** @@ -510,6 +515,7 @@ func main() {
+ **SpotMarket** @@ -526,6 +532,7 @@ func main() {
+ **MarketStatus** @@ -537,6 +544,7 @@ func main() {
+ **MidPriceAndTOB** @@ -698,6 +706,7 @@ func main() {
+ **FullSpotMarket** @@ -706,6 +715,7 @@ func main() {
+ **SpotMarket** @@ -722,6 +732,7 @@ func main() {
+ **MarketStatus** @@ -733,6 +744,7 @@ func main() {
+ **MidPriceAndTOB** @@ -876,6 +888,7 @@ func main() {
+ **OrderSide** @@ -911,6 +924,7 @@ func main() {
+ **Level** @@ -1096,6 +1110,7 @@ func main() {
+ **TrimmedSpotLimitOrder** @@ -1302,6 +1317,7 @@ func main() {
+ **TrimmedSpotLimitOrder** @@ -1472,6 +1488,7 @@ func main() {
+ **TrimmedSpotLimitOrder** @@ -1633,6 +1650,7 @@ func main() {
+ **TrimmedSpotLimitOrder** @@ -1973,6 +1991,7 @@ func main() {
+ **TxResponse** @@ -1992,6 +2011,7 @@ func main() {
+ **ABCIMessageLog** @@ -2001,6 +2021,7 @@ func main() {
+ **Event** @@ -2009,6 +2030,7 @@ func main() {
+ **StringEvent** @@ -2017,6 +2039,7 @@ func main() {
+ **EventAttribute** @@ -2026,6 +2049,7 @@ func main() {
+ **Attribute** @@ -2293,6 +2317,7 @@ func main() {
+ **SpotOrder** @@ -2303,6 +2328,7 @@ func main() {
+ **OrderInfo** @@ -2314,6 +2340,7 @@ func main() {
+ **OrderType** @@ -2359,6 +2386,7 @@ gas fee: 0.000064956 INJ
+ **TxResponse** @@ -2378,6 +2406,7 @@ gas fee: 0.000064956 INJ
+ **ABCIMessageLog** @@ -2387,6 +2416,7 @@ gas fee: 0.000064956 INJ
+ **Event** @@ -2395,6 +2425,7 @@ gas fee: 0.000064956 INJ
+ **StringEvent** @@ -2403,6 +2434,7 @@ gas fee: 0.000064956 INJ
+ **EventAttribute** @@ -2412,6 +2444,7 @@ gas fee: 0.000064956 INJ
+ **Attribute** @@ -2676,6 +2709,7 @@ func main() {
+ **SpotOrder** @@ -2686,6 +2720,7 @@ func main() {
+ **OrderInfo** @@ -2697,6 +2732,7 @@ func main() {
+ **OrderType** @@ -2742,6 +2778,7 @@ gas fee: 0.000065298 INJ
+ **TxResponse** @@ -2761,6 +2798,7 @@ gas fee: 0.000065298 INJ
+ **ABCIMessageLog** @@ -2770,6 +2808,7 @@ gas fee: 0.000065298 INJ
+ **Event** @@ -2778,6 +2817,7 @@ gas fee: 0.000065298 INJ
+ **StringEvent** @@ -2786,6 +2826,7 @@ gas fee: 0.000065298 INJ
+ **EventAttribute** @@ -2795,6 +2836,7 @@ gas fee: 0.000065298 INJ
+ **Attribute** @@ -3022,6 +3064,7 @@ gas fee: 0.0000636815 INJ
+ **TxResponse** @@ -3041,6 +3084,7 @@ gas fee: 0.0000636815 INJ
+ **ABCIMessageLog** @@ -3050,6 +3094,7 @@ gas fee: 0.0000636815 INJ
+ **Event** @@ -3058,6 +3103,7 @@ gas fee: 0.0000636815 INJ
+ **StringEvent** @@ -3066,6 +3112,7 @@ gas fee: 0.0000636815 INJ
+ **EventAttribute** @@ -3075,6 +3122,7 @@ gas fee: 0.0000636815 INJ
+ **Attribute** @@ -3458,6 +3506,7 @@ func main() {
+ **OrderData** @@ -3469,6 +3518,7 @@ func main() {
+ **SpotOrder** @@ -3479,6 +3529,7 @@ func main() {
+ **DerivativeOrder** @@ -3490,6 +3541,7 @@ func main() {
+ **OrderMask** @@ -3504,6 +3556,7 @@ func main() {
+ **OrderInfo** @@ -3515,6 +3568,7 @@ func main() {
+ **OrderType** @@ -3568,6 +3622,7 @@ gas fee: 0.000329546 INJ
+ **TxResponse** @@ -3587,6 +3642,7 @@ gas fee: 0.000329546 INJ
+ **ABCIMessageLog** @@ -3596,6 +3652,7 @@ gas fee: 0.000329546 INJ
+ **Event** @@ -3604,6 +3661,7 @@ gas fee: 0.000329546 INJ
+ **StringEvent** @@ -3612,6 +3670,7 @@ gas fee: 0.000329546 INJ
+ **EventAttribute** @@ -3621,6 +3680,7 @@ gas fee: 0.000329546 INJ
+ **Attribute** diff --git a/source/includes/_staking.md b/source/includes/_staking.md index 5190abc1..54a582da 100644 --- a/source/includes/_staking.md +++ b/source/includes/_staking.md @@ -140,6 +140,7 @@ func main() {
+ **DecCoin** @@ -280,6 +281,7 @@ func main() {
+ **ValidatorOutstandingRewards** @@ -287,6 +289,7 @@ func main() {
+ **DecCoin** @@ -427,6 +430,7 @@ func main() {
+ **ValidatorAccumulatedCommission** @@ -434,6 +438,7 @@ func main() {
+ **DecCoin** @@ -565,6 +570,7 @@ func main() {
+ **PageRequest** @@ -588,6 +594,7 @@ func main() {
+ **ValidatorSlashEvent** @@ -596,6 +603,7 @@ func main() {
+ **PageResponse** @@ -739,6 +747,7 @@ func main() {
+ **DecCoin** @@ -915,6 +924,7 @@ func main() {
+ **DelegationDelegatorReward** @@ -923,6 +933,7 @@ func main() {
+ **DecCoin** @@ -1317,6 +1328,7 @@ No parameters
+ **DecCoin** @@ -1484,6 +1496,7 @@ func main() {
+ **TxResponse** @@ -1503,6 +1516,7 @@ func main() {
+ **ABCIMessageLog** @@ -1512,6 +1526,7 @@ func main() {
+ **Event** @@ -1520,6 +1535,7 @@ func main() {
+ **StringEvent** @@ -1528,6 +1544,7 @@ func main() {
+ **EventAttribute** @@ -1537,6 +1554,7 @@ func main() {
+ **Attribute** @@ -1722,6 +1740,7 @@ gas fee: 0.000097523 INJ
+ **TxResponse** @@ -1741,6 +1760,7 @@ gas fee: 0.000097523 INJ
+ **ABCIMessageLog** @@ -1750,6 +1770,7 @@ gas fee: 0.000097523 INJ
+ **Event** @@ -1758,6 +1779,7 @@ gas fee: 0.000097523 INJ
+ **StringEvent** @@ -1766,6 +1788,7 @@ gas fee: 0.000097523 INJ
+ **EventAttribute** @@ -1775,6 +1798,7 @@ gas fee: 0.000097523 INJ
+ **Attribute** @@ -1939,6 +1963,7 @@ func main() {
+ **TxResponse** @@ -1958,6 +1983,7 @@ func main() {
+ **ABCIMessageLog** @@ -1967,6 +1993,7 @@ func main() {
+ **Event** @@ -1975,6 +2002,7 @@ func main() {
+ **StringEvent** @@ -1983,6 +2011,7 @@ func main() {
+ **EventAttribute** @@ -1992,6 +2021,7 @@ func main() {
+ **Attribute** @@ -2150,6 +2180,7 @@ func main() {
+ **Coin** @@ -2169,6 +2200,7 @@ func main() {
+ **TxResponse** @@ -2188,6 +2220,7 @@ func main() {
+ **ABCIMessageLog** @@ -2197,6 +2230,7 @@ func main() {
+ **Event** @@ -2205,6 +2239,7 @@ func main() {
+ **StringEvent** @@ -2213,6 +2248,7 @@ func main() {
+ **EventAttribute** @@ -2222,6 +2258,7 @@ func main() {
+ **Attribute** @@ -2424,6 +2461,7 @@ func main() {
+ **Coin** @@ -2455,6 +2493,7 @@ gas fee: 0.000103923 INJ
+ **TxResponse** @@ -2474,6 +2513,7 @@ gas fee: 0.000103923 INJ
+ **ABCIMessageLog** @@ -2483,6 +2523,7 @@ gas fee: 0.000103923 INJ
+ **Event** @@ -2491,6 +2532,7 @@ gas fee: 0.000103923 INJ
+ **StringEvent** @@ -2499,6 +2541,7 @@ gas fee: 0.000103923 INJ
+ **EventAttribute** @@ -2508,6 +2551,7 @@ gas fee: 0.000103923 INJ
+ **Attribute** diff --git a/source/includes/_tendermint.md b/source/includes/_tendermint.md new file mode 100644 index 00000000..c07697b7 --- /dev/null +++ b/source/includes/_tendermint.md @@ -0,0 +1,1637 @@ +# - Tendermint + +Cosmos Tendermint module + +## GetNodeInfo + +Gets the current node info + +**IP rate limit group:** `chain` + +### Request Parameters +> Request Example: + + + +```py +import asyncio + +from pyinjective.async_client import AsyncClient +from pyinjective.core.network import Network + + +async def main() -> None: + network = Network.testnet() + client = AsyncClient(network) + + node_info = await client.fetch_node_info() + print(node_info) + + +if __name__ == "__main__": + asyncio.get_event_loop().run_until_complete(main()) +``` + + + + +```go +package main + +import ( + "context" + "encoding/json" + "fmt" + + "os" + + "github.com/InjectiveLabs/sdk-go/client" + chainclient "github.com/InjectiveLabs/sdk-go/client/chain" + "github.com/InjectiveLabs/sdk-go/client/common" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" +) + +func main() { + network := common.LoadNetwork("testnet", "lb") + tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket") + if err != nil { + panic(err) + } + + senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring( + os.Getenv("HOME")+"/.injectived", + "injectived", + "file", + "inj-user", + "12345678", + "5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided + false, + ) + + if err != nil { + panic(err) + } + + clientCtx, err := chainclient.NewClientContext( + network.ChainId, + senderAddress.String(), + cosmosKeyring, + ) + + if err != nil { + panic(err) + } + + clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) + + chainClient, err := chainclient.NewChainClient( + clientCtx, + network, + common.OptionGasPrices(client.DefaultGasPriceWithDenom), + ) + + if err != nil { + panic(err) + } + + ctx := context.Background() + + res, err := chainClient.FetchNodeInfo(ctx) + if err != nil { + fmt.Println(err) + } + + str, _ := json.MarshalIndent(res, "", " ") + fmt.Print(string(str)) + +} +``` + + +No parameters + + +### Response Parameters +> Response Example: + +``` json +{ + "defaultNodeInfo":{ + "protocolVersion":{ + "p2p":"8", + "block":"11", + "app":"0" + }, + "defaultNodeId":"53c19e8ba2deb109ba8d09dd41ae82bbddd74467", + "listenAddr":"tcp://0.0.0.0:26656", + "network":"injective-888", + "version":"0.37.1", + "channels":"QCAhIiMwOGBhAA==", + "moniker":"injective", + "other":{ + "txIndex":"on", + "rpcAddress":"tcp://0.0.0.0:26657" + } + }, + "applicationVersion":{ + "name":"injective", + "appName":"injectived", + "gitCommit":"1f0a39381", + "goVersion":"go version go1.19.13 linux/amd64", + "buildDeps":[ + { + "path":"cloud.google.com/go", + "version":"v0.110.4", + "sum":"h1:1JYyxKMN9hd5dR2MYTPWkGUgcoxVVhg0LKNKEo0qvmk=" + }, + { + "path":"cloud.google.com/go/compute/metadata", + "version":"v0.2.3", + "sum":"h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY=" + } + ], + "cosmosSdkVersion":"v0.47.5", + "version":"", + "buildTags":"" + } +} +``` + + + +
ParameterTypeDescription
default_node_infoDefaultNodeInfoNode information
application_versionVersionInfoNode version information
+ + +
+ +**DefaultNodeInfo** + + + + + + + + + +
ParameterTypeDescription
protocol_versionProtocolVersionProtocol version information
default_nod_idStringNode identifier
listen_addrStringURI of the node's listening endpoint
networkStringThe chain network name
versionStringThe version number
channelsBytesChannels information
monikerString
otherDefaultNodeInfoOtherExtra node information
+ + +
+ +**ProtocolVersion** + + + + +
ParameterTypeDescription
p2pInteger
blockInteger
appInteger
+ + +
+ +**DefaultNodeInfoOther** + + + +
ParameterTypeDescription
tx_indexStringTX indexing status (on/off)
rpc_addressStringURI for RPC connections
+ + +
+ +**VersionInfo** + + + + + + + + + +
ParameterTypeDescription
nameStringThe chain name
app_nameStringApplication name
versionStringApplication version
git_commitStringGit commit hash
build_tagsStringApplication build tags
go_versionStringGoLang version used to compile the application
build_depsModule ArrayApplication dependencies
cosmos_sdk_versionStringCosmos SDK version used by the application
+ + +
+ +**Module** + + + + +
ParameterTypeDescription
pathStringModule path
versionStringModule version
sumStringChecksum
+ + + +## GetSyncing + +Returns the node's syncing status + +**IP rate limit group:** `chain` + +### Request Parameters +> Request Example: + + + +```py +import asyncio + +from pyinjective.async_client import AsyncClient +from pyinjective.core.network import Network + + +async def main() -> None: + network = Network.testnet() + client = AsyncClient(network) + + syncing = await client.fetch_syncing() + print(syncing) + + +if __name__ == "__main__": + asyncio.get_event_loop().run_until_complete(main()) +``` + + + + +```go +package main + +import ( + "context" + "encoding/json" + "fmt" + + "os" + + "github.com/InjectiveLabs/sdk-go/client" + chainclient "github.com/InjectiveLabs/sdk-go/client/chain" + "github.com/InjectiveLabs/sdk-go/client/common" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" +) + +func main() { + network := common.LoadNetwork("testnet", "lb") + tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket") + if err != nil { + panic(err) + } + + senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring( + os.Getenv("HOME")+"/.injectived", + "injectived", + "file", + "inj-user", + "12345678", + "5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided + false, + ) + + if err != nil { + panic(err) + } + + clientCtx, err := chainclient.NewClientContext( + network.ChainId, + senderAddress.String(), + cosmosKeyring, + ) + + if err != nil { + panic(err) + } + + clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) + + chainClient, err := chainclient.NewChainClient( + clientCtx, + network, + common.OptionGasPrices(client.DefaultGasPriceWithDenom), + ) + + if err != nil { + panic(err) + } + + ctx := context.Background() + + res, err := chainClient.FetchSyncing(ctx) + if err != nil { + fmt.Println(err) + } + + str, _ := json.MarshalIndent(res, "", " ") + fmt.Print(string(str)) + +} +``` + + +No parameters + + +### Response Parameters +> Response Example: + +``` json +{ + "syncing":false +} +``` + + +
ParameterTypeDescription
syncingBooleanSyncing status
+ + + +## GetLatestBlock + +Get the latest block + +**IP rate limit group:** `chain` + +### Request Parameters +> Request Example: + + + +```py +import asyncio + +from pyinjective.async_client import AsyncClient +from pyinjective.core.network import Network + + +async def main() -> None: + network = Network.testnet() + client = AsyncClient(network) + + latest_block = await client.fetch_latest_block() + print(latest_block) + + +if __name__ == "__main__": + asyncio.get_event_loop().run_until_complete(main()) +``` + + + + +```go +package main + +import ( + "context" + "encoding/json" + "fmt" + + "os" + + "github.com/InjectiveLabs/sdk-go/client" + chainclient "github.com/InjectiveLabs/sdk-go/client/chain" + "github.com/InjectiveLabs/sdk-go/client/common" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" +) + +func main() { + network := common.LoadNetwork("testnet", "lb") + tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket") + if err != nil { + panic(err) + } + + senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring( + os.Getenv("HOME")+"/.injectived", + "injectived", + "file", + "inj-user", + "12345678", + "5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided + false, + ) + + if err != nil { + panic(err) + } + + clientCtx, err := chainclient.NewClientContext( + network.ChainId, + senderAddress.String(), + cosmosKeyring, + ) + + if err != nil { + panic(err) + } + + clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) + + chainClient, err := chainclient.NewChainClient( + clientCtx, + network, + common.OptionGasPrices(client.DefaultGasPriceWithDenom), + ) + + if err != nil { + panic(err) + } + + ctx := context.Background() + + res, err := chainClient.FetchLatestBlock(ctx) + if err != nil { + fmt.Println(err) + } + + str, _ := json.MarshalIndent(res, "", " ") + fmt.Print(string(str)) + +} +``` + + +No parameters + + +### Response Parameters +> Response Example: + +``` json +{ + "blockId":{ + "hash":"bCxPpTR4INvkmf3kAVYi1KhwzX0ySxQuhc8xBBFNmAo=", + "partSetHeader":{ + "total":1, + "hash":"6zGn+fBW1y4cpyos4g/tVNQdqS03D/jr/B68SYVvcbQ=" + } + }, + "block":{ + "header":{ + "version":{ + "block":"11", + "app":"0" + }, + "chainId":"injective-888", + "height":"23197636", + "time":"2024-03-14T17:39:19.050602Z", + "lastBlockId":{ + "hash":"SglGvXqUCRelE9NtLBiJ0EIBBxTXmztat4fVrYagYlM=", + "partSetHeader":{ + "total":1, + "hash":"AsAE1Sdl69RqHqaseeRn3U6N43gG9T710HUjXJi6fyw=" + } + }, + "lastCommitHash":"EBSqUY4fpGLr2FmmcYsFa01H0PDWQLVuKslws5Un9zU=", + "dataHash":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=", + "validatorsHash":"G0AQ0vfNXTLF7UcNXSvk6ZJRWFo09hadwJSm7haFV6I=", + "nextValidatorsHash":"G0AQ0vfNXTLF7UcNXSvk6ZJRWFo09hadwJSm7haFV6I=", + "consensusHash":"5bupI5wNP5Z/jvh5UG/269+5QPiQTXKRNRpGHwCqrU0=", + "appHash":"UoJN/dwHiiDytgSt3xHcb9zkcP8eFZ+qFZWWclQ6SYg=", + "lastResultsHash":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=", + "evidenceHash":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=", + "proposerAddress":"M5HjW2EATgO+uI+h2rRES5E7174=" + }, + "data":{ + "txs":[ + + ] + }, + "evidence":{ + "evidence":[ + + ] + }, + "lastCommit":{ + "height":"23197635", + "blockId":{ + "hash":"SglGvXqUCRelE9NtLBiJ0EIBBxTXmztat4fVrYagYlM=", + "partSetHeader":{ + "total":1, + "hash":"AsAE1Sdl69RqHqaseeRn3U6N43gG9T710HUjXJi6fyw=" + } + }, + "signatures":[ + { + "blockIdFlag":"BLOCK_ID_FLAG_ABSENT", + "timestamp":"0001-01-01T00:00:00Z", + "validatorAddress":"", + "signature":"" + }, + { + "blockIdFlag":"BLOCK_ID_FLAG_COMMIT", + "validatorAddress":"ObUXYdS8jfTSNPonUBFPJkft7eA=", + "timestamp":"2024-03-14T17:39:19.050602Z", + "signature":"3ZdA7LqXq4Hj5olf1XKusJ6NHCBkqjpty9pgmsxKyzSG0VL8Uf+Ro0NDuZo8jK4qfLsuctCte3rdGV6lG/cKAA==" + }, + { + "blockIdFlag":"BLOCK_ID_FLAG_COMMIT", + "validatorAddress":"M5HjW2EATgO+uI+h2rRES5E7174=", + "timestamp":"2024-03-14T17:39:19.044716221Z", + "signature":"u8QVTQO/QZhNSzAwVCR3bGLUzryi9E+3jQ2COcHi46GfU0SpWOPNBvdbOHsEkRx6EKh0P0acB/hOnDE5JPp5AA==" + }, + { + "blockIdFlag":"BLOCK_ID_FLAG_COMMIT", + "validatorAddress":"y8ctJ4QpJ0S7ZTVY7RTE4z1hS2c=", + "timestamp":"2024-03-14T17:39:19.051153172Z", + "signature":"0R/H5GkdKJszELjxfwX9qQlr5nuANTQYN9aTTDvKkUqJDoXW3OwbQPHtegKJlVKU8BT80D2Glng+SnQMO3JSCA==" + } + ], + "round":0 + } + }, + "sdkBlock":{ + "header":{ + "version":{ + "block":"11", + "app":"0" + }, + "chainId":"injective-888", + "height":"23197636", + "time":"2024-03-14T17:39:19.050602Z", + "lastBlockId":{ + "hash":"SglGvXqUCRelE9NtLBiJ0EIBBxTXmztat4fVrYagYlM=", + "partSetHeader":{ + "total":1, + "hash":"AsAE1Sdl69RqHqaseeRn3U6N43gG9T710HUjXJi6fyw=" + } + }, + "lastCommitHash":"EBSqUY4fpGLr2FmmcYsFa01H0PDWQLVuKslws5Un9zU=", + "dataHash":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=", + "validatorsHash":"G0AQ0vfNXTLF7UcNXSvk6ZJRWFo09hadwJSm7haFV6I=", + "nextValidatorsHash":"G0AQ0vfNXTLF7UcNXSvk6ZJRWFo09hadwJSm7haFV6I=", + "consensusHash":"5bupI5wNP5Z/jvh5UG/269+5QPiQTXKRNRpGHwCqrU0=", + "appHash":"UoJN/dwHiiDytgSt3xHcb9zkcP8eFZ+qFZWWclQ6SYg=", + "lastResultsHash":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=", + "evidenceHash":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=", + "proposerAddress":"injvalcons1xwg7xkmpqp8q804c37sa4dzyfwgnh4a74ll9pz" + }, + "data":{ + "txs":[ + + ] + }, + "evidence":{ + "evidence":[ + + ] + }, + "lastCommit":{ + "height":"23197635", + "blockId":{ + "hash":"SglGvXqUCRelE9NtLBiJ0EIBBxTXmztat4fVrYagYlM=", + "partSetHeader":{ + "total":1, + "hash":"AsAE1Sdl69RqHqaseeRn3U6N43gG9T710HUjXJi6fyw=" + } + }, + "signatures":[ + { + "blockIdFlag":"BLOCK_ID_FLAG_ABSENT", + "timestamp":"0001-01-01T00:00:00Z", + "validatorAddress":"", + "signature":"" + }, + { + "blockIdFlag":"BLOCK_ID_FLAG_COMMIT", + "validatorAddress":"ObUXYdS8jfTSNPonUBFPJkft7eA=", + "timestamp":"2024-03-14T17:39:19.050602Z", + "signature":"3ZdA7LqXq4Hj5olf1XKusJ6NHCBkqjpty9pgmsxKyzSG0VL8Uf+Ro0NDuZo8jK4qfLsuctCte3rdGV6lG/cKAA==" + }, + { + "blockIdFlag":"BLOCK_ID_FLAG_COMMIT", + "validatorAddress":"M5HjW2EATgO+uI+h2rRES5E7174=", + "timestamp":"2024-03-14T17:39:19.044716221Z", + "signature":"u8QVTQO/QZhNSzAwVCR3bGLUzryi9E+3jQ2COcHi46GfU0SpWOPNBvdbOHsEkRx6EKh0P0acB/hOnDE5JPp5AA==" + }, + { + "blockIdFlag":"BLOCK_ID_FLAG_COMMIT", + "validatorAddress":"y8ctJ4QpJ0S7ZTVY7RTE4z1hS2c=", + "timestamp":"2024-03-14T17:39:19.051153172Z", + "signature":"0R/H5GkdKJszELjxfwX9qQlr5nuANTQYN9aTTDvKkUqJDoXW3OwbQPHtegKJlVKU8BT80D2Glng+SnQMO3JSCA==" + } + ], + "round":0 + } + } +} +``` + + + +
ParameterTypeDescription
block_idBlockIDBlock identifier
sdk_blockBlockBlock details
+ + +
+ +**BlockID** + + + +
ParameterTypeDescription
hashBytesBlock hash
part_set_headerPartSetHeader
+ + +
+ +**PartSetHeader** + + + +
ParameterTypeDescription
totalInteger
hashBytes
+ + +
+ +**Block** + + + + + +
ParameterTypeDescription
headerHeaderHeader information
dataDataBlock data
evidenceEvidenceList
last_commitCommit
+ + +
+ +**Header** + + + + + + + + + + + + + + + +
ParameterTypeDescription
versionConsensus
chain_idStringChain identifier
heightIntegerBlock height
timeTimeBlock time
last_block_idBlockIDPrevious block identifier
last_commit_hashBytesLast commit hash
data_hashBytesBlock data hash
validators_hashBytesValidators information hash
next_validators_hashBytesValidators information hash
consensus_hashBytesConsensus information hash
app_hashBytesApplication hash
last_result_hashBytesLast result hash
evidence_hashBytesEvidence data hash
proposer_addressStringBlock proposer's address
+ + +
+ +**Consensus** + + + + + + + + + + + + + + + +
ParameterTypeDescription
versionConsensus
chain_idStringChain identifier
heightIntegerBlock height
timeTimeBlock time
last_block_idBlockIDPrevious block identifier
last_commit_hashBytesLast commit hash
data_hashBytesBlock data hash
validators_hashBytesValidators information hash
next_validators_hashBytesValidators information hash
consensus_hashBytesConsensus information hash
app_hashBytesApplication hash
last_result_hashBytesLast result hash
evidence_hashBytesEvidence data hash
proposer_addressStringBlock proposer's address
+ + +
+ +**Data** + + +
ParameterTypeDescription
txsBytes ArrayTxs that will be applied by state @ block.Height+1. NOTE: not all txs here are valid. We're just agreeing on the order first. This means that block.AppHash does not include these txs.
+ + +
+ +**EvidenceList** + + +
ParameterTypeDescription
evidenceEvidence ArrayBlock evidence
+ + +
+ +**Evidence** + + +
ParameterTypeDescription
sumisEvidence_SumValid types for 'sum' are Evidence_DuplicateVoteEvidence and Evidence_LightClientAttackEvidence
+ + +
+ +**Commit** + + + + + +
ParameterTypeDescription
heightIntegerBlock height
roundIntegerConsensus round
block_idBlockIDBlock identifier
signaturesCommitSig ArraySigantures
+ + +
+ +**CommitSig** + + + + + +
ParameterTypeDescription
block_id_flagBlockIDFlagBlock height
validator_addressBytesValidator address
timestampTimeBlock time
signatureBytesBlock signature
+ + +
+ +**BlockIDFlag** + + + + + +
CodeName
0BLOCK_ID_FLAG_UNKNOWN
1BLOCK_ID_FLAG_ABSENT
2BLOCK_ID_FLAG_COMMIT
3BLOCK_ID_FLAG_NIL
+ + + +## GetBlockByHeight + +Get the block for a given height + +**IP rate limit group:** `chain` + +### Request Parameters +> Request Example: + + + +```py +import asyncio + +from pyinjective.async_client import AsyncClient +from pyinjective.core.network import Network + + +async def main() -> None: + network = Network.testnet() + client = AsyncClient(network) + + block = await client.fetch_block_by_height(height=15793860) + print(block) + + +if __name__ == "__main__": + asyncio.get_event_loop().run_until_complete(main()) +``` + + + + +```go +package main + +import ( + "context" + "encoding/json" + "fmt" + + "os" + + "github.com/InjectiveLabs/sdk-go/client" + chainclient "github.com/InjectiveLabs/sdk-go/client/chain" + "github.com/InjectiveLabs/sdk-go/client/common" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" +) + +func main() { + network := common.LoadNetwork("testnet", "lb") + tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket") + if err != nil { + panic(err) + } + + senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring( + os.Getenv("HOME")+"/.injectived", + "injectived", + "file", + "inj-user", + "12345678", + "5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided + false, + ) + + if err != nil { + panic(err) + } + + clientCtx, err := chainclient.NewClientContext( + network.ChainId, + senderAddress.String(), + cosmosKeyring, + ) + + if err != nil { + panic(err) + } + + clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) + + chainClient, err := chainclient.NewChainClient( + clientCtx, + network, + common.OptionGasPrices(client.DefaultGasPriceWithDenom), + ) + + if err != nil { + panic(err) + } + + ctx := context.Background() + + height := int64(23040174) + res, err := chainClient.FetchBlockByHeight(ctx, height) + if err != nil { + fmt.Println(err) + } + + str, _ := json.MarshalIndent(res, "", " ") + fmt.Print(string(str)) + +} +``` + + + + +
ParameterTypeDescription
block_idBlockIDBlock identifier
sdk_blockBlockBlock details
+ + + +### Response Parameters +> Response Example: + +``` json +{ + "blockId":{ + "hash":"MNF+X0DQFIsnEJAzyTxHMD8vZChOpW4rQeSnRKBiJ1Y=", + "partSetHeader":{ + "total":1, + "hash":"Fqg81sOmF9dqH8lORXGat/mOFyqh52/lSHvsehg9OWk=" + } + }, + "block":{ + "header":{ + "version":{ + "block":"11", + "app":"0" + }, + "chainId":"injective-888", + "height":"15793860", + "time":"2023-09-07T03:59:36.393462082Z", + "lastBlockId":{ + "hash":"RRhRSiIf1E08mJAtACM4J1RFSVJ96eR0PBVuoD7rb2c=", + "partSetHeader":{ + "total":1, + "hash":"SeO5JkVtLUrhegd0rwDatDbvS5PQf/0Yvn+BmL1MOko=" + } + }, + "lastCommitHash":"rNxjhSihfCPkPMak9qPlmUYeXRc0weFu1nmmKMUPLAQ=", + "dataHash":"1RjS2VAhrWt2lLnVLozfeI7oAi7PoDILROzeheXN5H0=", + "validatorsHash":"6lDaVNHY4DtceWtHsVS7SdR8XuPSATqQ7qNKWIxcnhg=", + "nextValidatorsHash":"6lDaVNHY4DtceWtHsVS7SdR8XuPSATqQ7qNKWIxcnhg=", + "consensusHash":"ItjUyLlUnqkCxmoaGPck+PeXC45MXx6zsLXxtOHeBTE=", + "appHash":"Sv2MdUKQxwE/glEI8c8RFQKmc4HSyKO7j3sAqySultQ=", + "lastResultsHash":"Le4RmI//Wh43Mq6ro+VMWn7ZbVZRw3HXUAQILODtag8=", + "evidenceHash":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=", + "proposerAddress":"ObUXYdS8jfTSNPonUBFPJkft7eA=" + }, + "data":{ + "txs":[ + "CvMLCpUBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEnUKKmluajF3bGY1NzdtbHd0eW01N3Njem1semtsN2tjdDAycXNsZHN4Z2p2NxIqaW5qMXIyNDh5c3IyeTQwcW0yazgzMHZhbnF4bm02dmNtbGhxcnVtczJlGhsKA2luahIUMTAwMDAwMDAwMDAwMDAwMDAwMDAKuQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSmAEKKmluajF3bGY1NzdtbHd0eW01N3Njem1semtsN2tjdDAycXNsZHN4Z2p2NxIqaW5qMXIyNDh5c3IyeTQwcW0yazgzMHZhbnF4bm02dmNtbGhxcnVtczJlGj4KL3BlZ2d5MHg4N2FCM0I0Qzg2NjFlMDdENjM3MjM2MTIxMUI5NmVkNERjMzZCMUI1EgsxMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMXdsZjU3N21sd3R5bTU3c2N6bWx6a2w3a2N0MDJxc2xkc3hnanY3EippbmoxcjI0OHlzcjJ5NDBxbTJrODMwdmFucXhubTZ2Y21saHFydW1zMmUaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvdXNkYxILMTAwMDAwMDAwMDAKxQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSpAEKKmluajF3bGY1NzdtbHd0eW01N3Njem1semtsN2tjdDAycXNsZHN4Z2p2NxIqaW5qMXIyNDh5c3IyeTQwcW0yazgzMHZhbnF4bm02dmNtbGhxcnVtczJlGkoKL3BlZ2d5MHg0NEMyMWFmQWFGMjBjMjcwRUJiRjU5MTRDZmMzYjUwMjIxNzNGRUI3EhcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMXdsZjU3N21sd3R5bTU3c2N6bWx6a2w3a2N0MDJxc2xkc3hnanY3EippbmoxcjI0OHlzcjJ5NDBxbTJrODMwdmFucXhubTZ2Y21saHFydW1zMmUaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvYWF2ZRILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajF3bGY1NzdtbHd0eW01N3Njem1semtsN2tjdDAycXNsZHN4Z2p2NxIqaW5qMXIyNDh5c3IyeTQwcW0yazgzMHZhbnF4bm02dmNtbGhxcnVtczJlGkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2NydhILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajF3bGY1NzdtbHd0eW01N3Njem1semtsN2tjdDAycXNsZHN4Z2p2NxIqaW5qMXIyNDh5c3IyeTQwcW0yazgzMHZhbnF4bm02dmNtbGhxcnVtczJlGkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2N2eBILMTAwMDAwMDAwMDAKwQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSoAEKKmluajF3bGY1NzdtbHd0eW01N3Njem1semtsN2tjdDAycXNsZHN4Z2p2NxIqaW5qMXIyNDh5c3IyeTQwcW0yazgzMHZhbnF4bm02dmNtbGhxcnVtczJlGkYKN2ZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL3NoaWISCzEwMDAwMDAwMDAwGJz+wwcSggEKYApUCi0vaW5qZWN0aXZlLmNyeXB0by52MWJldGExLmV0aHNlY3AyNTZrMS5QdWJLZXkSIwohAjr+rkaXrlMyQvUjnSB+viWNMY4CU7VHptUN/MxDVEOVEgQKAggBGLymARIeChcKA2luahIQMTYwMDAwMDAwMDAwMDAwMBCAqMMBGkCHh6hdDRsHw1dfkRZkwLOmP7uNT6RSwNJPIBf8dg1bsnLtzAhpBlAd1nF1V7oWvAvoZ/gVoiNVdzjCWYYcUB/s", + "CvMLCpUBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEnUKKmluajFwMmh2N2Z6NnY3ZTk5c3dramZhNjllcmhjaGNkeGgya3l4cWp6axIqaW5qMWN6dGw4aDU4bDh6Y3YyM2xtMHpyOGg4cnlzdTVoeGNmZ2Q1MHl1GhsKA2luahIUMTAwMDAwMDAwMDAwMDAwMDAwMDAKuQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSmAEKKmluajFwMmh2N2Z6NnY3ZTk5c3dramZhNjllcmhjaGNkeGgya3l4cWp6axIqaW5qMWN6dGw4aDU4bDh6Y3YyM2xtMHpyOGg4cnlzdTVoeGNmZ2Q1MHl1Gj4KL3BlZ2d5MHg4N2FCM0I0Qzg2NjFlMDdENjM3MjM2MTIxMUI5NmVkNERjMzZCMUI1EgsxMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMXAyaHY3Zno2djdlOTlzd2tqZmE2OWVyaGNoY2R4aDJreXhxanprEippbmoxY3p0bDhoNThsOHpjdjIzbG0wenI4aDhyeXN1NWh4Y2ZnZDUweXUaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvdXNkYxILMTAwMDAwMDAwMDAKxQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSpAEKKmluajFwMmh2N2Z6NnY3ZTk5c3dramZhNjllcmhjaGNkeGgya3l4cWp6axIqaW5qMWN6dGw4aDU4bDh6Y3YyM2xtMHpyOGg4cnlzdTVoeGNmZ2Q1MHl1GkoKL3BlZ2d5MHg0NEMyMWFmQWFGMjBjMjcwRUJiRjU5MTRDZmMzYjUwMjIxNzNGRUI3EhcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMXAyaHY3Zno2djdlOTlzd2tqZmE2OWVyaGNoY2R4aDJreXhxanprEippbmoxY3p0bDhoNThsOHpjdjIzbG0wenI4aDhyeXN1NWh4Y2ZnZDUweXUaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvYWF2ZRILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajFwMmh2N2Z6NnY3ZTk5c3dramZhNjllcmhjaGNkeGgya3l4cWp6axIqaW5qMWN6dGw4aDU4bDh6Y3YyM2xtMHpyOGg4cnlzdTVoeGNmZ2Q1MHl1GkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2NydhILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajFwMmh2N2Z6NnY3ZTk5c3dramZhNjllcmhjaGNkeGgya3l4cWp6axIqaW5qMWN6dGw4aDU4bDh6Y3YyM2xtMHpyOGg4cnlzdTVoeGNmZ2Q1MHl1GkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2N2eBILMTAwMDAwMDAwMDAKwQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSoAEKKmluajFwMmh2N2Z6NnY3ZTk5c3dramZhNjllcmhjaGNkeGgya3l4cWp6axIqaW5qMWN6dGw4aDU4bDh6Y3YyM2xtMHpyOGg4cnlzdTVoeGNmZ2Q1MHl1GkYKN2ZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL3NoaWISCzEwMDAwMDAwMDAwGJz+wwcSggEKYApUCi0vaW5qZWN0aXZlLmNyeXB0by52MWJldGExLmV0aHNlY3AyNTZrMS5QdWJLZXkSIwohA3SZsAXlR9pzcFHog/kjOFSR1EiYHVqNOnWpNWiq7NcuEgQKAggBGNmNARIeChcKA2luahIQMTYwMDAwMDAwMDAwMDAwMBCAqMMBGkA0yE1i3DE6GGITZpVWhESrrYNgKdPRPYKCAnz9QcAdEkwOLHJ9HgOz2Ok9NhjFN5akpyxZTKRGTFX11//hT3Wd", + "CugFCrgECjgvaW5qZWN0aXZlLmV4Y2hhbmdlLnYxYmV0YTEuTXNnUHJpdmlsZWdlZEV4ZWN1dGVDb250cmFjdBL7AwoqaW5qMWV6dGttMzZ5NmMzZTZ6bXI0aGc0Zzc3YTZ3eWoweGMwZDVneDV2EngxMDIwMDAwMDAwIGZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL3VzZGMsIDExMDAgcGVnZ3kweDg3YUIzQjRDODY2MWUwN0Q2MzcyMzYxMjExQjk2ZWQ0RGMzNkIxQjUaKmluajE3cTdkczB5aDdoaHR1c2ZmN2d6OGE1a3gydXd4cnV0dGx4dXI5NiKmAnsiYXJncyI6eyJtc2ciOnsic3Vic2NyaWJlIjp7fX0sInRyYWRlcl9zdWJhY2NvdW50X2lkIjoiMHhjODk3NmRjNzQ0ZDYyMzlkMGI2M2FkZDE1NDdiZGRkMzg5Mjc5YjBmMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwidmF1bHRfc3ViYWNjb3VudF9pZCI6IjB4ZjAzY2Q4M2M5N2Y1ZWViZTQxMjlmMjA0N2VkMmM2NTcxYzYxZjE2YjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMyJ9LCJuYW1lIjoiVmF1bHRTdWJzY3JpYmUiLCJvcmlnaW4iOiJpbmoxZXp0a20zNnk2YzNlNnptcjRoZzRnNzdhNnd5ajB4YzBkNWd4NXYifRjp/cMH+j+kAQovL2luamVjdGl2ZS50eXBlcy52MWJldGExLkV4dGVuc2lvbk9wdGlvbnNXZWIzVHgScQgFEippbmoxN2drdWV0OGY2cHNzeGQ4bnljbTNxcjlkOXk2OTlydXB2NjM5N3oaQS7bNDH7L/B112pVzWT5OTygLht+2aFCIbvRfdlbaJqFAEXaPzWWgHCwBc4C3bCN22c8OHvjiS4ExPfg9EKkTKgAEn4KXgpUCi0vaW5qZWN0aXZlLmNyeXB0by52MWJldGExLmV0aHNlY3AyNTZrMS5QdWJLZXkSIwohAp46ZxDpNDxsP5gvCZkCc84ZllP7P7q0tL57X7fN0WOcEgQKAgh/GGYSHAoWCgNpbmoSDzM2Mjg2MjUwMDAwMDAwMBDdpSwaQXHoIQ/X5yai6B0reASgAArSShjzpxprthDLEyr+zX7GR07Hr+r8UmZftLbafrcZfRX2UwFw8Q8pHaMINsSjckgb", + "CvMLCpUBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEnUKKmluajE5dXE4Z2Rta3hxZnJnaHRlazQ5d2E4azJmOGhobTN4ZTZ2OXZ4eBIqaW5qMXc5cnY1dTM1NWtlMDdjamY0d2cwd2EyY3ZhdG1keWNkaDZud2czGhsKA2luahIUMTAwMDAwMDAwMDAwMDAwMDAwMDAKuQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSmAEKKmluajE5dXE4Z2Rta3hxZnJnaHRlazQ5d2E4azJmOGhobTN4ZTZ2OXZ4eBIqaW5qMXc5cnY1dTM1NWtlMDdjamY0d2cwd2EyY3ZhdG1keWNkaDZud2czGj4KL3BlZ2d5MHg4N2FCM0I0Qzg2NjFlMDdENjM3MjM2MTIxMUI5NmVkNERjMzZCMUI1EgsxMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMTl1cThnZG1reHFmcmdodGVrNDl3YThrMmY4aGhtM3hlNnY5dnh4EippbmoxdzlydjV1MzU1a2UwN2NqZjR3ZzB3YTJjdmF0bWR5Y2RoNm53ZzMaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvdXNkYxILMTAwMDAwMDAwMDAKxQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSpAEKKmluajE5dXE4Z2Rta3hxZnJnaHRlazQ5d2E4azJmOGhobTN4ZTZ2OXZ4eBIqaW5qMXc5cnY1dTM1NWtlMDdjamY0d2cwd2EyY3ZhdG1keWNkaDZud2czGkoKL3BlZ2d5MHg0NEMyMWFmQWFGMjBjMjcwRUJiRjU5MTRDZmMzYjUwMjIxNzNGRUI3EhcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMTl1cThnZG1reHFmcmdodGVrNDl3YThrMmY4aGhtM3hlNnY5dnh4EippbmoxdzlydjV1MzU1a2UwN2NqZjR3ZzB3YTJjdmF0bWR5Y2RoNm53ZzMaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvYWF2ZRILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajE5dXE4Z2Rta3hxZnJnaHRlazQ5d2E4azJmOGhobTN4ZTZ2OXZ4eBIqaW5qMXc5cnY1dTM1NWtlMDdjamY0d2cwd2EyY3ZhdG1keWNkaDZud2czGkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2NydhILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajE5dXE4Z2Rta3hxZnJnaHRlazQ5d2E4azJmOGhobTN4ZTZ2OXZ4eBIqaW5qMXc5cnY1dTM1NWtlMDdjamY0d2cwd2EyY3ZhdG1keWNkaDZud2czGkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2N2eBILMTAwMDAwMDAwMDAKwQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSoAEKKmluajE5dXE4Z2Rta3hxZnJnaHRlazQ5d2E4azJmOGhobTN4ZTZ2OXZ4eBIqaW5qMXc5cnY1dTM1NWtlMDdjamY0d2cwd2EyY3ZhdG1keWNkaDZud2czGkYKN2ZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL3NoaWISCzEwMDAwMDAwMDAwGJ3+wwcSggEKYApUCi0vaW5qZWN0aXZlLmNyeXB0by52MWJldGExLmV0aHNlY3AyNTZrMS5QdWJLZXkSIwohA9YRhWDK9v8bR+HRAI7OzzTaeuCFfDffiIO9zTWhbk4cEgQKAggBGMmeARIeChcKA2luahIQMTYwMDAwMDAwMDAwMDAwMBCAqMMBGkBAcshkCtJATtQYYHVorDRUSOGQ7gR1bLp17ZXO5S5aTmB+pRc+/uz8cY3zfP28wpZE4BFa40sSn+vsN7YDc0Ne", + "CvMLCpUBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEnUKKmluajFocXJzbWZsdjc2dDB3MGZxcm16d3p4dHhxdWUzNG12MzRtc3h2bRIqaW5qMXVsMjM1c2ZwZm55bWNnOGdodXQ5OHV3c251NjlsbnpuYTN6ZGpkGhsKA2luahIUMTAwMDAwMDAwMDAwMDAwMDAwMDAKuQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSmAEKKmluajFocXJzbWZsdjc2dDB3MGZxcm16d3p4dHhxdWUzNG12MzRtc3h2bRIqaW5qMXVsMjM1c2ZwZm55bWNnOGdodXQ5OHV3c251NjlsbnpuYTN6ZGpkGj4KL3BlZ2d5MHg4N2FCM0I0Qzg2NjFlMDdENjM3MjM2MTIxMUI5NmVkNERjMzZCMUI1EgsxMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMWhxcnNtZmx2NzZ0MHcwZnFybXp3enh0eHF1ZTM0bXYzNG1zeHZtEippbmoxdWwyMzVzZnBmbnltY2c4Z2h1dDk4dXdzbnU2OWxuem5hM3pkamQaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvdXNkYxILMTAwMDAwMDAwMDAKxQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSpAEKKmluajFocXJzbWZsdjc2dDB3MGZxcm16d3p4dHhxdWUzNG12MzRtc3h2bRIqaW5qMXVsMjM1c2ZwZm55bWNnOGdodXQ5OHV3c251NjlsbnpuYTN6ZGpkGkoKL3BlZ2d5MHg0NEMyMWFmQWFGMjBjMjcwRUJiRjU5MTRDZmMzYjUwMjIxNzNGRUI3EhcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMWhxcnNtZmx2NzZ0MHcwZnFybXp3enh0eHF1ZTM0bXYzNG1zeHZtEippbmoxdWwyMzVzZnBmbnltY2c4Z2h1dDk4dXdzbnU2OWxuem5hM3pkamQaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvYWF2ZRILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajFocXJzbWZsdjc2dDB3MGZxcm16d3p4dHhxdWUzNG12MzRtc3h2bRIqaW5qMXVsMjM1c2ZwZm55bWNnOGdodXQ5OHV3c251NjlsbnpuYTN6ZGpkGkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2NydhILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajFocXJzbWZsdjc2dDB3MGZxcm16d3p4dHhxdWUzNG12MzRtc3h2bRIqaW5qMXVsMjM1c2ZwZm55bWNnOGdodXQ5OHV3c251NjlsbnpuYTN6ZGpkGkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2N2eBILMTAwMDAwMDAwMDAKwQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSoAEKKmluajFocXJzbWZsdjc2dDB3MGZxcm16d3p4dHhxdWUzNG12MzRtc3h2bRIqaW5qMXVsMjM1c2ZwZm55bWNnOGdodXQ5OHV3c251NjlsbnpuYTN6ZGpkGkYKN2ZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL3NoaWISCzEwMDAwMDAwMDAwGJ3+wwcSggEKYApUCi0vaW5qZWN0aXZlLmNyeXB0by52MWJldGExLmV0aHNlY3AyNTZrMS5QdWJLZXkSIwohAimG00m9nDJwqtOiErp8o619mH/3VcEADzWzSqGpnGdIEgQKAggBGLuRARIeChcKA2luahIQMTYwMDAwMDAwMDAwMDAwMBCAqMMBGkCnWeua6pt6p7Te8JuofcIaJWaZEhgiOuFqskm9sjQ9yi5qJkOEQXCmCRFCS5uYBpk0/1tuwYXJwtro9GdxHJMI", + "CvMLCpUBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEnUKKmluajFnMG04cTNrZHczMzNzeHEyOXc3bmMzNm1mZmN2aDgwZ3ZjZDM5ZBIqaW5qMW45d2ZoN2E2Y2cydWdneWdhZDlhZGxqODNhNHl3ZHp1dmhybXB2GhsKA2luahIUMTAwMDAwMDAwMDAwMDAwMDAwMDAKuQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSmAEKKmluajFnMG04cTNrZHczMzNzeHEyOXc3bmMzNm1mZmN2aDgwZ3ZjZDM5ZBIqaW5qMW45d2ZoN2E2Y2cydWdneWdhZDlhZGxqODNhNHl3ZHp1dmhybXB2Gj4KL3BlZ2d5MHg4N2FCM0I0Qzg2NjFlMDdENjM3MjM2MTIxMUI5NmVkNERjMzZCMUI1EgsxMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMWcwbThxM2tkdzMzM3N4cTI5dzduYzM2bWZmY3ZoODBndmNkMzlkEippbmoxbjl3Zmg3YTZjZzJ1Z2d5Z2FkOWFkbGo4M2E0eXdkenV2aHJtcHYaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvdXNkYxILMTAwMDAwMDAwMDAKxQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSpAEKKmluajFnMG04cTNrZHczMzNzeHEyOXc3bmMzNm1mZmN2aDgwZ3ZjZDM5ZBIqaW5qMW45d2ZoN2E2Y2cydWdneWdhZDlhZGxqODNhNHl3ZHp1dmhybXB2GkoKL3BlZ2d5MHg0NEMyMWFmQWFGMjBjMjcwRUJiRjU5MTRDZmMzYjUwMjIxNzNGRUI3EhcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMWcwbThxM2tkdzMzM3N4cTI5dzduYzM2bWZmY3ZoODBndmNkMzlkEippbmoxbjl3Zmg3YTZjZzJ1Z2d5Z2FkOWFkbGo4M2E0eXdkenV2aHJtcHYaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvYWF2ZRILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajFnMG04cTNrZHczMzNzeHEyOXc3bmMzNm1mZmN2aDgwZ3ZjZDM5ZBIqaW5qMW45d2ZoN2E2Y2cydWdneWdhZDlhZGxqODNhNHl3ZHp1dmhybXB2GkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2NydhILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajFnMG04cTNrZHczMzNzeHEyOXc3bmMzNm1mZmN2aDgwZ3ZjZDM5ZBIqaW5qMW45d2ZoN2E2Y2cydWdneWdhZDlhZGxqODNhNHl3ZHp1dmhybXB2GkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2N2eBILMTAwMDAwMDAwMDAKwQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSoAEKKmluajFnMG04cTNrZHczMzNzeHEyOXc3bmMzNm1mZmN2aDgwZ3ZjZDM5ZBIqaW5qMW45d2ZoN2E2Y2cydWdneWdhZDlhZGxqODNhNHl3ZHp1dmhybXB2GkYKN2ZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL3NoaWISCzEwMDAwMDAwMDAwGJ3+wwcSggEKYApUCi0vaW5qZWN0aXZlLmNyeXB0by52MWJldGExLmV0aHNlY3AyNTZrMS5QdWJLZXkSIwohAhKZIyozzEpDEuAl3ypUW3R3JoD7AtBIAujqq4wwPfVdEgQKAggBGOufARIeChcKA2luahIQMTYwMDAwMDAwMDAwMDAwMBCAqMMBGkDMNT7feu38IDUKGBHpWaoydtomgYQZjGPXjj7pb8fEj0MshAm2XfDad53SLdLeKmsXMjQ5cXyYyH15EwUxDYSU", + "CvMLCpUBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEnUKKmluajFueHpoZTk0Z3NjOWpzeXVjM3dxa3Vuanl2czhwNGVtZTBndTRrZRIqaW5qMWxxa2dyZGxoeXFreTN3ZzZybW54ZGo1a3d0ZXI3NGUydWowbWZmGhsKA2luahIUMTAwMDAwMDAwMDAwMDAwMDAwMDAKuQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSmAEKKmluajFueHpoZTk0Z3NjOWpzeXVjM3dxa3Vuanl2czhwNGVtZTBndTRrZRIqaW5qMWxxa2dyZGxoeXFreTN3ZzZybW54ZGo1a3d0ZXI3NGUydWowbWZmGj4KL3BlZ2d5MHg4N2FCM0I0Qzg2NjFlMDdENjM3MjM2MTIxMUI5NmVkNERjMzZCMUI1EgsxMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMW54emhlOTRnc2M5anN5dWMzd3FrdW5qeXZzOHA0ZW1lMGd1NGtlEippbmoxbHFrZ3JkbGh5cWt5M3dnNnJtbnhkajVrd3Rlcjc0ZTJ1ajBtZmYaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvdXNkYxILMTAwMDAwMDAwMDAKxQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSpAEKKmluajFueHpoZTk0Z3NjOWpzeXVjM3dxa3Vuanl2czhwNGVtZTBndTRrZRIqaW5qMWxxa2dyZGxoeXFreTN3ZzZybW54ZGo1a3d0ZXI3NGUydWowbWZmGkoKL3BlZ2d5MHg0NEMyMWFmQWFGMjBjMjcwRUJiRjU5MTRDZmMzYjUwMjIxNzNGRUI3EhcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMW54emhlOTRnc2M5anN5dWMzd3FrdW5qeXZzOHA0ZW1lMGd1NGtlEippbmoxbHFrZ3JkbGh5cWt5M3dnNnJtbnhkajVrd3Rlcjc0ZTJ1ajBtZmYaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvYWF2ZRILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajFueHpoZTk0Z3NjOWpzeXVjM3dxa3Vuanl2czhwNGVtZTBndTRrZRIqaW5qMWxxa2dyZGxoeXFreTN3ZzZybW54ZGo1a3d0ZXI3NGUydWowbWZmGkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2NydhILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajFueHpoZTk0Z3NjOWpzeXVjM3dxa3Vuanl2czhwNGVtZTBndTRrZRIqaW5qMWxxa2dyZGxoeXFreTN3ZzZybW54ZGo1a3d0ZXI3NGUydWowbWZmGkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2N2eBILMTAwMDAwMDAwMDAKwQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSoAEKKmluajFueHpoZTk0Z3NjOWpzeXVjM3dxa3Vuanl2czhwNGVtZTBndTRrZRIqaW5qMWxxa2dyZGxoeXFreTN3ZzZybW54ZGo1a3d0ZXI3NGUydWowbWZmGkYKN2ZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL3NoaWISCzEwMDAwMDAwMDAwGJ3+wwcSggEKYApUCi0vaW5qZWN0aXZlLmNyeXB0by52MWJldGExLmV0aHNlY3AyNTZrMS5QdWJLZXkSIwohAxg89Ih7H74zbkYrMXXb55tjKWTQJQ3D2Sk00p5Y0/ZEEgQKAggBGIqVARIeChcKA2luahIQMTYwMDAwMDAwMDAwMDAwMBCAqMMBGkCo/7pJIihg01V2zd+y3WH++KyVIB4m7WC9DAHPRzJIAghGLVJkAJjzGWTHrIGlh7CIira+E0UeSdy1Ag4GMBfS", + "CvMLCpUBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEnUKKmluajE5Y2hlY3h3enVmZjA5Zm02NmM1MDN4MnJtZmowa3l6emZoM2Z0ZhIqaW5qMWt0djIyYXp2dDVoOG5xejQ4d25ocXNqOTZ1bGU0eHgwZGF3N2pqGhsKA2luahIUMTAwMDAwMDAwMDAwMDAwMDAwMDAKuQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSmAEKKmluajE5Y2hlY3h3enVmZjA5Zm02NmM1MDN4MnJtZmowa3l6emZoM2Z0ZhIqaW5qMWt0djIyYXp2dDVoOG5xejQ4d25ocXNqOTZ1bGU0eHgwZGF3N2pqGj4KL3BlZ2d5MHg4N2FCM0I0Qzg2NjFlMDdENjM3MjM2MTIxMUI5NmVkNERjMzZCMUI1EgsxMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMTljaGVjeHd6dWZmMDlmbTY2YzUwM3gycm1majBreXp6ZmgzZnRmEippbmoxa3R2MjJhenZ0NWg4bnF6NDh3bmhxc2o5NnVsZTR4eDBkYXc3amoaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvdXNkYxILMTAwMDAwMDAwMDAKxQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSpAEKKmluajE5Y2hlY3h3enVmZjA5Zm02NmM1MDN4MnJtZmowa3l6emZoM2Z0ZhIqaW5qMWt0djIyYXp2dDVoOG5xejQ4d25ocXNqOTZ1bGU0eHgwZGF3N2pqGkoKL3BlZ2d5MHg0NEMyMWFmQWFGMjBjMjcwRUJiRjU5MTRDZmMzYjUwMjIxNzNGRUI3EhcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMTljaGVjeHd6dWZmMDlmbTY2YzUwM3gycm1majBreXp6ZmgzZnRmEippbmoxa3R2MjJhenZ0NWg4bnF6NDh3bmhxc2o5NnVsZTR4eDBkYXc3amoaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvYWF2ZRILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajE5Y2hlY3h3enVmZjA5Zm02NmM1MDN4MnJtZmowa3l6emZoM2Z0ZhIqaW5qMWt0djIyYXp2dDVoOG5xejQ4d25ocXNqOTZ1bGU0eHgwZGF3N2pqGkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2NydhILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajE5Y2hlY3h3enVmZjA5Zm02NmM1MDN4MnJtZmowa3l6emZoM2Z0ZhIqaW5qMWt0djIyYXp2dDVoOG5xejQ4d25ocXNqOTZ1bGU0eHgwZGF3N2pqGkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2N2eBILMTAwMDAwMDAwMDAKwQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSoAEKKmluajE5Y2hlY3h3enVmZjA5Zm02NmM1MDN4MnJtZmowa3l6emZoM2Z0ZhIqaW5qMWt0djIyYXp2dDVoOG5xejQ4d25ocXNqOTZ1bGU0eHgwZGF3N2pqGkYKN2ZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL3NoaWISCzEwMDAwMDAwMDAwGJ3+wwcSggEKYApUCi0vaW5qZWN0aXZlLmNyeXB0by52MWJldGExLmV0aHNlY3AyNTZrMS5QdWJLZXkSIwohAgVaAkMOV5+9OJP2xYw3tKy3aU3SiAIummY3gRAIGDj/EgQKAggBGOihARIeChcKA2luahIQMTYwMDAwMDAwMDAwMDAwMBCAqMMBGkBSSP+Fx12//aSYEjjLjr5gl5X4jOUktkOREMTfArsWVxl4Xl7cyV3f7kYAF7kBbQQqrgMerHsc9KePhRVoXB0k", + "CvMLCpUBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEnUKKmluajFwMzBra2w2dXh5YWhtOGhmMGVkOGY0MDJmNjdhMmo5eHJjNDJ5ZhIqaW5qMXo1ZzRwYXA3YThoaHhhYXkycG5md2czYXduNWRxcDVyNHN2OGthGhsKA2luahIUMTAwMDAwMDAwMDAwMDAwMDAwMDAKuQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSmAEKKmluajFwMzBra2w2dXh5YWhtOGhmMGVkOGY0MDJmNjdhMmo5eHJjNDJ5ZhIqaW5qMXo1ZzRwYXA3YThoaHhhYXkycG5md2czYXduNWRxcDVyNHN2OGthGj4KL3BlZ2d5MHg4N2FCM0I0Qzg2NjFlMDdENjM3MjM2MTIxMUI5NmVkNERjMzZCMUI1EgsxMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMXAzMGtrbDZ1eHlhaG04aGYwZWQ4ZjQwMmY2N2Eyajl4cmM0MnlmEippbmoxejVnNHBhcDdhOGhoeGFheTJwbmZ3ZzNhd241ZHFwNXI0c3Y4a2EaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvdXNkYxILMTAwMDAwMDAwMDAKxQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSpAEKKmluajFwMzBra2w2dXh5YWhtOGhmMGVkOGY0MDJmNjdhMmo5eHJjNDJ5ZhIqaW5qMXo1ZzRwYXA3YThoaHhhYXkycG5md2czYXduNWRxcDVyNHN2OGthGkoKL3BlZ2d5MHg0NEMyMWFmQWFGMjBjMjcwRUJiRjU5MTRDZmMzYjUwMjIxNzNGRUI3EhcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMXAzMGtrbDZ1eHlhaG04aGYwZWQ4ZjQwMmY2N2Eyajl4cmM0MnlmEippbmoxejVnNHBhcDdhOGhoeGFheTJwbmZ3ZzNhd241ZHFwNXI0c3Y4a2EaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvYWF2ZRILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajFwMzBra2w2dXh5YWhtOGhmMGVkOGY0MDJmNjdhMmo5eHJjNDJ5ZhIqaW5qMXo1ZzRwYXA3YThoaHhhYXkycG5md2czYXduNWRxcDVyNHN2OGthGkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2NydhILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajFwMzBra2w2dXh5YWhtOGhmMGVkOGY0MDJmNjdhMmo5eHJjNDJ5ZhIqaW5qMXo1ZzRwYXA3YThoaHhhYXkycG5md2czYXduNWRxcDVyNHN2OGthGkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2N2eBILMTAwMDAwMDAwMDAKwQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSoAEKKmluajFwMzBra2w2dXh5YWhtOGhmMGVkOGY0MDJmNjdhMmo5eHJjNDJ5ZhIqaW5qMXo1ZzRwYXA3YThoaHhhYXkycG5md2czYXduNWRxcDVyNHN2OGthGkYKN2ZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL3NoaWISCzEwMDAwMDAwMDAwGJ3+wwcSggEKYApUCi0vaW5qZWN0aXZlLmNyeXB0by52MWJldGExLmV0aHNlY3AyNTZrMS5QdWJLZXkSIwohAl0obf7huaZwDxwoKhqdWfwakrBU8rFlrc/Ihiquc4P5EgQKAggBGIOAARIeChcKA2luahIQMTYwMDAwMDAwMDAwMDAwMBCAqMMBGkCGyhKBN8mu+4qID3ZzBPskvusEorT6TXytayPg3k6UpGMaLx38dXS9wmX2yrLrn4G67rihS/fKVCG2yMhdwk4y", + "CvMLCpUBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEnUKKmluajE0dDVmOTRtNWZnNHY2ZHJzNHFxa2QzZDczM3k2c3MwbGp5eXFsbRIqaW5qMWhtOXVobWhrZHRyeXd6MG1xazh2YTQwMmUzdWQweXBqbHFmcjNqGhsKA2luahIUMTAwMDAwMDAwMDAwMDAwMDAwMDAKuQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSmAEKKmluajE0dDVmOTRtNWZnNHY2ZHJzNHFxa2QzZDczM3k2c3MwbGp5eXFsbRIqaW5qMWhtOXVobWhrZHRyeXd6MG1xazh2YTQwMmUzdWQweXBqbHFmcjNqGj4KL3BlZ2d5MHg4N2FCM0I0Qzg2NjFlMDdENjM3MjM2MTIxMUI5NmVkNERjMzZCMUI1EgsxMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMTR0NWY5NG01Zmc0djZkcnM0cXFrZDNkNzMzeTZzczBsanl5cWxtEippbmoxaG05dWhtaGtkdHJ5d3owbXFrOHZhNDAyZTN1ZDB5cGpscWZyM2oaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvdXNkYxILMTAwMDAwMDAwMDAKxQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSpAEKKmluajE0dDVmOTRtNWZnNHY2ZHJzNHFxa2QzZDczM3k2c3MwbGp5eXFsbRIqaW5qMWhtOXVobWhrZHRyeXd6MG1xazh2YTQwMmUzdWQweXBqbHFmcjNqGkoKL3BlZ2d5MHg0NEMyMWFmQWFGMjBjMjcwRUJiRjU5MTRDZmMzYjUwMjIxNzNGRUI3EhcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMTR0NWY5NG01Zmc0djZkcnM0cXFrZDNkNzMzeTZzczBsanl5cWxtEippbmoxaG05dWhtaGtkdHJ5d3owbXFrOHZhNDAyZTN1ZDB5cGpscWZyM2oaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvYWF2ZRILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajE0dDVmOTRtNWZnNHY2ZHJzNHFxa2QzZDczM3k2c3MwbGp5eXFsbRIqaW5qMWhtOXVobWhrZHRyeXd6MG1xazh2YTQwMmUzdWQweXBqbHFmcjNqGkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2NydhILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajE0dDVmOTRtNWZnNHY2ZHJzNHFxa2QzZDczM3k2c3MwbGp5eXFsbRIqaW5qMWhtOXVobWhrZHRyeXd6MG1xazh2YTQwMmUzdWQweXBqbHFmcjNqGkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2N2eBILMTAwMDAwMDAwMDAKwQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSoAEKKmluajE0dDVmOTRtNWZnNHY2ZHJzNHFxa2QzZDczM3k2c3MwbGp5eXFsbRIqaW5qMWhtOXVobWhrZHRyeXd6MG1xazh2YTQwMmUzdWQweXBqbHFmcjNqGkYKN2ZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL3NoaWISCzEwMDAwMDAwMDAwGJ3+wwcSggEKYApUCi0vaW5qZWN0aXZlLmNyeXB0by52MWJldGExLmV0aHNlY3AyNTZrMS5QdWJLZXkSIwohA4fTy5A+DmuZfsXgjM48ntVqTXlOBW287TjXr91D0VGREgQKAggBGLuVARIeChcKA2luahIQMTYwMDAwMDAwMDAwMDAwMBCAqMMBGkBdYIUr7S8ky4p9g+WWi2Ef8Cnq9W5eRsQ6Q6YNcnr0rhzy6lgo31o9tJg6XB0ZHtaJb00qBdU8/igNmfhEZXqk", + "CvMLCpUBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEnUKKmluajFhNHc5OXo0cWdxY2Q2bDZ1NGRqZnlsY3VjdDUzZHVxa3VxbnI1ZBIqaW5qMTUyNmszNmNrM2xodm1yZzhzeXlhODd0eTY5dXBsOHl6enJrNWZxGhsKA2luahIUMTAwMDAwMDAwMDAwMDAwMDAwMDAKuQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSmAEKKmluajFhNHc5OXo0cWdxY2Q2bDZ1NGRqZnlsY3VjdDUzZHVxa3VxbnI1ZBIqaW5qMTUyNmszNmNrM2xodm1yZzhzeXlhODd0eTY5dXBsOHl6enJrNWZxGj4KL3BlZ2d5MHg4N2FCM0I0Qzg2NjFlMDdENjM3MjM2MTIxMUI5NmVkNERjMzZCMUI1EgsxMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMWE0dzk5ejRxZ3FjZDZsNnU0ZGpmeWxjdWN0NTNkdXFrdXFucjVkEippbmoxNTI2azM2Y2szbGh2bXJnOHN5eWE4N3R5Njl1cGw4eXp6cms1ZnEaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvdXNkYxILMTAwMDAwMDAwMDAKxQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSpAEKKmluajFhNHc5OXo0cWdxY2Q2bDZ1NGRqZnlsY3VjdDUzZHVxa3VxbnI1ZBIqaW5qMTUyNmszNmNrM2xodm1yZzhzeXlhODd0eTY5dXBsOHl6enJrNWZxGkoKL3BlZ2d5MHg0NEMyMWFmQWFGMjBjMjcwRUJiRjU5MTRDZmMzYjUwMjIxNzNGRUI3EhcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMWE0dzk5ejRxZ3FjZDZsNnU0ZGpmeWxjdWN0NTNkdXFrdXFucjVkEippbmoxNTI2azM2Y2szbGh2bXJnOHN5eWE4N3R5Njl1cGw4eXp6cms1ZnEaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvYWF2ZRILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajFhNHc5OXo0cWdxY2Q2bDZ1NGRqZnlsY3VjdDUzZHVxa3VxbnI1ZBIqaW5qMTUyNmszNmNrM2xodm1yZzhzeXlhODd0eTY5dXBsOHl6enJrNWZxGkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2NydhILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajFhNHc5OXo0cWdxY2Q2bDZ1NGRqZnlsY3VjdDUzZHVxa3VxbnI1ZBIqaW5qMTUyNmszNmNrM2xodm1yZzhzeXlhODd0eTY5dXBsOHl6enJrNWZxGkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2N2eBILMTAwMDAwMDAwMDAKwQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSoAEKKmluajFhNHc5OXo0cWdxY2Q2bDZ1NGRqZnlsY3VjdDUzZHVxa3VxbnI1ZBIqaW5qMTUyNmszNmNrM2xodm1yZzhzeXlhODd0eTY5dXBsOHl6enJrNWZxGkYKN2ZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL3NoaWISCzEwMDAwMDAwMDAwGJ3+wwcSggEKYApUCi0vaW5qZWN0aXZlLmNyeXB0by52MWJldGExLmV0aHNlY3AyNTZrMS5QdWJLZXkSIwohArGVpE2Qtw7Pq625UTe8FZfqFAGc7IaBTZYPusGkLfnlEgQKAggBGMmAARIeChcKA2luahIQMTYwMDAwMDAwMDAwMDAwMBCAqMMBGkDk8e2Du8ReB4Jz73ZkpdaWHIBSo5x0XtILIMecnJzbQ3TykogSC6OQ+tWOCFQp9mUhff++iCbVpFwAx08k+zYS", + "CvMLCpUBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEnUKKmluajFnZHZ0ZGtsdjNxZzQzM3Z1bjlqYXBhZGFucjk2MHgwdTI0cWtxbBIqaW5qMWFlYTRtOGZhcnc5ZHI5Y204N2FnN2QwejZtY2ZwMm54bnYyOGE3GhsKA2luahIUMTAwMDAwMDAwMDAwMDAwMDAwMDAKuQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSmAEKKmluajFnZHZ0ZGtsdjNxZzQzM3Z1bjlqYXBhZGFucjk2MHgwdTI0cWtxbBIqaW5qMWFlYTRtOGZhcnc5ZHI5Y204N2FnN2QwejZtY2ZwMm54bnYyOGE3Gj4KL3BlZ2d5MHg4N2FCM0I0Qzg2NjFlMDdENjM3MjM2MTIxMUI5NmVkNERjMzZCMUI1EgsxMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMWdkdnRka2x2M3FnNDMzdnVuOWphcGFkYW5yOTYweDB1MjRxa3FsEippbmoxYWVhNG04ZmFydzlkcjljbTg3YWc3ZDB6Nm1jZnAybnhudjI4YTcaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvdXNkYxILMTAwMDAwMDAwMDAKxQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSpAEKKmluajFnZHZ0ZGtsdjNxZzQzM3Z1bjlqYXBhZGFucjk2MHgwdTI0cWtxbBIqaW5qMWFlYTRtOGZhcnc5ZHI5Y204N2FnN2QwejZtY2ZwMm54bnYyOGE3GkoKL3BlZ2d5MHg0NEMyMWFmQWFGMjBjMjcwRUJiRjU5MTRDZmMzYjUwMjIxNzNGRUI3EhcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMWdkdnRka2x2M3FnNDMzdnVuOWphcGFkYW5yOTYweDB1MjRxa3FsEippbmoxYWVhNG04ZmFydzlkcjljbTg3YWc3ZDB6Nm1jZnAybnhudjI4YTcaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvYWF2ZRILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajFnZHZ0ZGtsdjNxZzQzM3Z1bjlqYXBhZGFucjk2MHgwdTI0cWtxbBIqaW5qMWFlYTRtOGZhcnc5ZHI5Y204N2FnN2QwejZtY2ZwMm54bnYyOGE3GkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2NydhILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajFnZHZ0ZGtsdjNxZzQzM3Z1bjlqYXBhZGFucjk2MHgwdTI0cWtxbBIqaW5qMWFlYTRtOGZhcnc5ZHI5Y204N2FnN2QwejZtY2ZwMm54bnYyOGE3GkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2N2eBILMTAwMDAwMDAwMDAKwQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSoAEKKmluajFnZHZ0ZGtsdjNxZzQzM3Z1bjlqYXBhZGFucjk2MHgwdTI0cWtxbBIqaW5qMWFlYTRtOGZhcnc5ZHI5Y204N2FnN2QwejZtY2ZwMm54bnYyOGE3GkYKN2ZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL3NoaWISCzEwMDAwMDAwMDAwGJ3+wwcSggEKYApUCi0vaW5qZWN0aXZlLmNyeXB0by52MWJldGExLmV0aHNlY3AyNTZrMS5QdWJLZXkSIwohAz+Zjrtxo20HOm1w4l5I57H9MAmt+87msPR5/1R/D1McEgQKAggBGMSqARIeChcKA2luahIQMTYwMDAwMDAwMDAwMDAwMBCAqMMBGkDhGCp0+Crr0dfoCZrTb5otuTMtIxxTj9tWfxrfN7cnBTEgKFXVDlsXbay4Wlxz4QBVX4Fb6gtUgQbtDrazOEj9", + "CvMLCpUBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEnUKKmluajFobm1kbGVhdHR1N3RldHU2ZWt3dzlybTBjbTAzZXpnNWpsdHJxehIqaW5qMW02M3U1eWtzYWdzc2o3d2N4Zmw1czd0NHU4N2s3MGpmeW5uazJqGhsKA2luahIUMTAwMDAwMDAwMDAwMDAwMDAwMDAKuQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSmAEKKmluajFobm1kbGVhdHR1N3RldHU2ZWt3dzlybTBjbTAzZXpnNWpsdHJxehIqaW5qMW02M3U1eWtzYWdzc2o3d2N4Zmw1czd0NHU4N2s3MGpmeW5uazJqGj4KL3BlZ2d5MHg4N2FCM0I0Qzg2NjFlMDdENjM3MjM2MTIxMUI5NmVkNERjMzZCMUI1EgsxMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMWhubWRsZWF0dHU3dGV0dTZla3d3OXJtMGNtMDNlemc1amx0cnF6EippbmoxbTYzdTV5a3NhZ3Nzajd3Y3hmbDVzN3Q0dTg3azcwamZ5bm5rMmoaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvdXNkYxILMTAwMDAwMDAwMDAKxQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSpAEKKmluajFobm1kbGVhdHR1N3RldHU2ZWt3dzlybTBjbTAzZXpnNWpsdHJxehIqaW5qMW02M3U1eWtzYWdzc2o3d2N4Zmw1czd0NHU4N2s3MGpmeW5uazJqGkoKL3BlZ2d5MHg0NEMyMWFmQWFGMjBjMjcwRUJiRjU5MTRDZmMzYjUwMjIxNzNGRUI3EhcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMWhubWRsZWF0dHU3dGV0dTZla3d3OXJtMGNtMDNlemc1amx0cnF6EippbmoxbTYzdTV5a3NhZ3Nzajd3Y3hmbDVzN3Q0dTg3azcwamZ5bm5rMmoaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvYWF2ZRILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajFobm1kbGVhdHR1N3RldHU2ZWt3dzlybTBjbTAzZXpnNWpsdHJxehIqaW5qMW02M3U1eWtzYWdzc2o3d2N4Zmw1czd0NHU4N2s3MGpmeW5uazJqGkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2NydhILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajFobm1kbGVhdHR1N3RldHU2ZWt3dzlybTBjbTAzZXpnNWpsdHJxehIqaW5qMW02M3U1eWtzYWdzc2o3d2N4Zmw1czd0NHU4N2s3MGpmeW5uazJqGkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2N2eBILMTAwMDAwMDAwMDAKwQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSoAEKKmluajFobm1kbGVhdHR1N3RldHU2ZWt3dzlybTBjbTAzZXpnNWpsdHJxehIqaW5qMW02M3U1eWtzYWdzc2o3d2N4Zmw1czd0NHU4N2s3MGpmeW5uazJqGkYKN2ZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL3NoaWISCzEwMDAwMDAwMDAwGJ3+wwcSggEKYApUCi0vaW5qZWN0aXZlLmNyeXB0by52MWJldGExLmV0aHNlY3AyNTZrMS5QdWJLZXkSIwohA+OlGuxc2hUmrU+iVLb2MDnHy6W4exQyJrbMie9/Sv27EgQKAggBGJqQARIeChcKA2luahIQMTYwMDAwMDAwMDAwMDAwMBCAqMMBGkBTfe9A/RDSoHQCDunT60QgdtBrz3eIGvIgLEISRMAh/2w3+A9UB5SoDNGZNUfpNsxZyyq2Emi6pXuVpFzUCjI5" + ] + }, + "evidence":{ + "evidence":[ + + ] + }, + "lastCommit":{ + "height":"15793859", + "blockId":{ + "hash":"RRhRSiIf1E08mJAtACM4J1RFSVJ96eR0PBVuoD7rb2c=", + "partSetHeader":{ + "total":1, + "hash":"SeO5JkVtLUrhegd0rwDatDbvS5PQf/0Yvn+BmL1MOko=" + } + }, + "signatures":[ + { + "blockIdFlag":"BLOCK_ID_FLAG_COMMIT", + "validatorAddress":"y8ctJ4QpJ0S7ZTVY7RTE4z1hS2c=", + "timestamp":"2023-09-07T03:59:36.496584825Z", + "signature":"AxnPc5AEa6jizZuKhXUAkNi4vic6miF9emyAx+uSMco7oKVwoXGDJ6L0wneNGYOqpKkMVMQm4hcnWgDBjiBLAA==" + }, + { + "blockIdFlag":"BLOCK_ID_FLAG_COMMIT", + "validatorAddress":"M5HjW2EATgO+uI+h2rRES5E7174=", + "timestamp":"2023-09-07T03:59:36.293269404Z", + "signature":"mjODCd7P7xHo6Gn+6Qi6/u+FI72noRs9/vcbvpiqz7Hr5hRNhk2a2Jj2tw59GC6cURd2Q6c/CdZhXHgVqzMdAg==" + }, + { + "blockIdFlag":"BLOCK_ID_FLAG_COMMIT", + "validatorAddress":"Nv8cuLE25L4mgnBx8shCmG68xfc=", + "timestamp":"2023-09-07T03:59:36.393462082Z", + "signature":"NyTk5W6WLxEbouVJ7LxSwV88FnH/CtmXkr6JczPqEehdrymqrGqT02OJLutGVsBmrPEkMhwa2BegkqvmPLJrBQ==" + }, + { + "blockIdFlag":"BLOCK_ID_FLAG_COMMIT", + "validatorAddress":"ObUXYdS8jfTSNPonUBFPJkft7eA=", + "timestamp":"2023-09-07T03:59:36.296674286Z", + "signature":"OAwmf7pEjsXbwIWMD5HbzWiae6OAn0ME49FbXaRLvKIYKWSDKv9f0gprsgRJznOdj60SontlntwmvV+23MV6DQ==" + } + ], + "round":0 + } + }, + "sdkBlock":{ + "header":{ + "version":{ + "block":"11", + "app":"0" + }, + "chainId":"injective-888", + "height":"15793860", + "time":"2023-09-07T03:59:36.393462082Z", + "lastBlockId":{ + "hash":"RRhRSiIf1E08mJAtACM4J1RFSVJ96eR0PBVuoD7rb2c=", + "partSetHeader":{ + "total":1, + "hash":"SeO5JkVtLUrhegd0rwDatDbvS5PQf/0Yvn+BmL1MOko=" + } + }, + "lastCommitHash":"rNxjhSihfCPkPMak9qPlmUYeXRc0weFu1nmmKMUPLAQ=", + "dataHash":"1RjS2VAhrWt2lLnVLozfeI7oAi7PoDILROzeheXN5H0=", + "validatorsHash":"6lDaVNHY4DtceWtHsVS7SdR8XuPSATqQ7qNKWIxcnhg=", + "nextValidatorsHash":"6lDaVNHY4DtceWtHsVS7SdR8XuPSATqQ7qNKWIxcnhg=", + "consensusHash":"ItjUyLlUnqkCxmoaGPck+PeXC45MXx6zsLXxtOHeBTE=", + "appHash":"Sv2MdUKQxwE/glEI8c8RFQKmc4HSyKO7j3sAqySultQ=", + "lastResultsHash":"Le4RmI//Wh43Mq6ro+VMWn7ZbVZRw3HXUAQILODtag8=", + "evidenceHash":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=", + "proposerAddress":"injvalcons18x63wcw5hjxlf535lgn4qy20yer7mm0qedu0la" + }, + "data":{ + "txs":[ + "CvMLCpUBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEnUKKmluajF3bGY1NzdtbHd0eW01N3Njem1semtsN2tjdDAycXNsZHN4Z2p2NxIqaW5qMXIyNDh5c3IyeTQwcW0yazgzMHZhbnF4bm02dmNtbGhxcnVtczJlGhsKA2luahIUMTAwMDAwMDAwMDAwMDAwMDAwMDAKuQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSmAEKKmluajF3bGY1NzdtbHd0eW01N3Njem1semtsN2tjdDAycXNsZHN4Z2p2NxIqaW5qMXIyNDh5c3IyeTQwcW0yazgzMHZhbnF4bm02dmNtbGhxcnVtczJlGj4KL3BlZ2d5MHg4N2FCM0I0Qzg2NjFlMDdENjM3MjM2MTIxMUI5NmVkNERjMzZCMUI1EgsxMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMXdsZjU3N21sd3R5bTU3c2N6bWx6a2w3a2N0MDJxc2xkc3hnanY3EippbmoxcjI0OHlzcjJ5NDBxbTJrODMwdmFucXhubTZ2Y21saHFydW1zMmUaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvdXNkYxILMTAwMDAwMDAwMDAKxQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSpAEKKmluajF3bGY1NzdtbHd0eW01N3Njem1semtsN2tjdDAycXNsZHN4Z2p2NxIqaW5qMXIyNDh5c3IyeTQwcW0yazgzMHZhbnF4bm02dmNtbGhxcnVtczJlGkoKL3BlZ2d5MHg0NEMyMWFmQWFGMjBjMjcwRUJiRjU5MTRDZmMzYjUwMjIxNzNGRUI3EhcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMXdsZjU3N21sd3R5bTU3c2N6bWx6a2w3a2N0MDJxc2xkc3hnanY3EippbmoxcjI0OHlzcjJ5NDBxbTJrODMwdmFucXhubTZ2Y21saHFydW1zMmUaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvYWF2ZRILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajF3bGY1NzdtbHd0eW01N3Njem1semtsN2tjdDAycXNsZHN4Z2p2NxIqaW5qMXIyNDh5c3IyeTQwcW0yazgzMHZhbnF4bm02dmNtbGhxcnVtczJlGkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2NydhILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajF3bGY1NzdtbHd0eW01N3Njem1semtsN2tjdDAycXNsZHN4Z2p2NxIqaW5qMXIyNDh5c3IyeTQwcW0yazgzMHZhbnF4bm02dmNtbGhxcnVtczJlGkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2N2eBILMTAwMDAwMDAwMDAKwQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSoAEKKmluajF3bGY1NzdtbHd0eW01N3Njem1semtsN2tjdDAycXNsZHN4Z2p2NxIqaW5qMXIyNDh5c3IyeTQwcW0yazgzMHZhbnF4bm02dmNtbGhxcnVtczJlGkYKN2ZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL3NoaWISCzEwMDAwMDAwMDAwGJz+wwcSggEKYApUCi0vaW5qZWN0aXZlLmNyeXB0by52MWJldGExLmV0aHNlY3AyNTZrMS5QdWJLZXkSIwohAjr+rkaXrlMyQvUjnSB+viWNMY4CU7VHptUN/MxDVEOVEgQKAggBGLymARIeChcKA2luahIQMTYwMDAwMDAwMDAwMDAwMBCAqMMBGkCHh6hdDRsHw1dfkRZkwLOmP7uNT6RSwNJPIBf8dg1bsnLtzAhpBlAd1nF1V7oWvAvoZ/gVoiNVdzjCWYYcUB/s", + "CvMLCpUBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEnUKKmluajFwMmh2N2Z6NnY3ZTk5c3dramZhNjllcmhjaGNkeGgya3l4cWp6axIqaW5qMWN6dGw4aDU4bDh6Y3YyM2xtMHpyOGg4cnlzdTVoeGNmZ2Q1MHl1GhsKA2luahIUMTAwMDAwMDAwMDAwMDAwMDAwMDAKuQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSmAEKKmluajFwMmh2N2Z6NnY3ZTk5c3dramZhNjllcmhjaGNkeGgya3l4cWp6axIqaW5qMWN6dGw4aDU4bDh6Y3YyM2xtMHpyOGg4cnlzdTVoeGNmZ2Q1MHl1Gj4KL3BlZ2d5MHg4N2FCM0I0Qzg2NjFlMDdENjM3MjM2MTIxMUI5NmVkNERjMzZCMUI1EgsxMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMXAyaHY3Zno2djdlOTlzd2tqZmE2OWVyaGNoY2R4aDJreXhxanprEippbmoxY3p0bDhoNThsOHpjdjIzbG0wenI4aDhyeXN1NWh4Y2ZnZDUweXUaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvdXNkYxILMTAwMDAwMDAwMDAKxQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSpAEKKmluajFwMmh2N2Z6NnY3ZTk5c3dramZhNjllcmhjaGNkeGgya3l4cWp6axIqaW5qMWN6dGw4aDU4bDh6Y3YyM2xtMHpyOGg4cnlzdTVoeGNmZ2Q1MHl1GkoKL3BlZ2d5MHg0NEMyMWFmQWFGMjBjMjcwRUJiRjU5MTRDZmMzYjUwMjIxNzNGRUI3EhcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMXAyaHY3Zno2djdlOTlzd2tqZmE2OWVyaGNoY2R4aDJreXhxanprEippbmoxY3p0bDhoNThsOHpjdjIzbG0wenI4aDhyeXN1NWh4Y2ZnZDUweXUaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvYWF2ZRILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajFwMmh2N2Z6NnY3ZTk5c3dramZhNjllcmhjaGNkeGgya3l4cWp6axIqaW5qMWN6dGw4aDU4bDh6Y3YyM2xtMHpyOGg4cnlzdTVoeGNmZ2Q1MHl1GkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2NydhILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajFwMmh2N2Z6NnY3ZTk5c3dramZhNjllcmhjaGNkeGgya3l4cWp6axIqaW5qMWN6dGw4aDU4bDh6Y3YyM2xtMHpyOGg4cnlzdTVoeGNmZ2Q1MHl1GkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2N2eBILMTAwMDAwMDAwMDAKwQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSoAEKKmluajFwMmh2N2Z6NnY3ZTk5c3dramZhNjllcmhjaGNkeGgya3l4cWp6axIqaW5qMWN6dGw4aDU4bDh6Y3YyM2xtMHpyOGg4cnlzdTVoeGNmZ2Q1MHl1GkYKN2ZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL3NoaWISCzEwMDAwMDAwMDAwGJz+wwcSggEKYApUCi0vaW5qZWN0aXZlLmNyeXB0by52MWJldGExLmV0aHNlY3AyNTZrMS5QdWJLZXkSIwohA3SZsAXlR9pzcFHog/kjOFSR1EiYHVqNOnWpNWiq7NcuEgQKAggBGNmNARIeChcKA2luahIQMTYwMDAwMDAwMDAwMDAwMBCAqMMBGkA0yE1i3DE6GGITZpVWhESrrYNgKdPRPYKCAnz9QcAdEkwOLHJ9HgOz2Ok9NhjFN5akpyxZTKRGTFX11//hT3Wd", + "CugFCrgECjgvaW5qZWN0aXZlLmV4Y2hhbmdlLnYxYmV0YTEuTXNnUHJpdmlsZWdlZEV4ZWN1dGVDb250cmFjdBL7AwoqaW5qMWV6dGttMzZ5NmMzZTZ6bXI0aGc0Zzc3YTZ3eWoweGMwZDVneDV2EngxMDIwMDAwMDAwIGZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL3VzZGMsIDExMDAgcGVnZ3kweDg3YUIzQjRDODY2MWUwN0Q2MzcyMzYxMjExQjk2ZWQ0RGMzNkIxQjUaKmluajE3cTdkczB5aDdoaHR1c2ZmN2d6OGE1a3gydXd4cnV0dGx4dXI5NiKmAnsiYXJncyI6eyJtc2ciOnsic3Vic2NyaWJlIjp7fX0sInRyYWRlcl9zdWJhY2NvdW50X2lkIjoiMHhjODk3NmRjNzQ0ZDYyMzlkMGI2M2FkZDE1NDdiZGRkMzg5Mjc5YjBmMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwidmF1bHRfc3ViYWNjb3VudF9pZCI6IjB4ZjAzY2Q4M2M5N2Y1ZWViZTQxMjlmMjA0N2VkMmM2NTcxYzYxZjE2YjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMyJ9LCJuYW1lIjoiVmF1bHRTdWJzY3JpYmUiLCJvcmlnaW4iOiJpbmoxZXp0a20zNnk2YzNlNnptcjRoZzRnNzdhNnd5ajB4YzBkNWd4NXYifRjp/cMH+j+kAQovL2luamVjdGl2ZS50eXBlcy52MWJldGExLkV4dGVuc2lvbk9wdGlvbnNXZWIzVHgScQgFEippbmoxN2drdWV0OGY2cHNzeGQ4bnljbTNxcjlkOXk2OTlydXB2NjM5N3oaQS7bNDH7L/B112pVzWT5OTygLht+2aFCIbvRfdlbaJqFAEXaPzWWgHCwBc4C3bCN22c8OHvjiS4ExPfg9EKkTKgAEn4KXgpUCi0vaW5qZWN0aXZlLmNyeXB0by52MWJldGExLmV0aHNlY3AyNTZrMS5QdWJLZXkSIwohAp46ZxDpNDxsP5gvCZkCc84ZllP7P7q0tL57X7fN0WOcEgQKAgh/GGYSHAoWCgNpbmoSDzM2Mjg2MjUwMDAwMDAwMBDdpSwaQXHoIQ/X5yai6B0reASgAArSShjzpxprthDLEyr+zX7GR07Hr+r8UmZftLbafrcZfRX2UwFw8Q8pHaMINsSjckgb", + "CvMLCpUBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEnUKKmluajE5dXE4Z2Rta3hxZnJnaHRlazQ5d2E4azJmOGhobTN4ZTZ2OXZ4eBIqaW5qMXc5cnY1dTM1NWtlMDdjamY0d2cwd2EyY3ZhdG1keWNkaDZud2czGhsKA2luahIUMTAwMDAwMDAwMDAwMDAwMDAwMDAKuQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSmAEKKmluajE5dXE4Z2Rta3hxZnJnaHRlazQ5d2E4azJmOGhobTN4ZTZ2OXZ4eBIqaW5qMXc5cnY1dTM1NWtlMDdjamY0d2cwd2EyY3ZhdG1keWNkaDZud2czGj4KL3BlZ2d5MHg4N2FCM0I0Qzg2NjFlMDdENjM3MjM2MTIxMUI5NmVkNERjMzZCMUI1EgsxMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMTl1cThnZG1reHFmcmdodGVrNDl3YThrMmY4aGhtM3hlNnY5dnh4EippbmoxdzlydjV1MzU1a2UwN2NqZjR3ZzB3YTJjdmF0bWR5Y2RoNm53ZzMaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvdXNkYxILMTAwMDAwMDAwMDAKxQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSpAEKKmluajE5dXE4Z2Rta3hxZnJnaHRlazQ5d2E4azJmOGhobTN4ZTZ2OXZ4eBIqaW5qMXc5cnY1dTM1NWtlMDdjamY0d2cwd2EyY3ZhdG1keWNkaDZud2czGkoKL3BlZ2d5MHg0NEMyMWFmQWFGMjBjMjcwRUJiRjU5MTRDZmMzYjUwMjIxNzNGRUI3EhcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMTl1cThnZG1reHFmcmdodGVrNDl3YThrMmY4aGhtM3hlNnY5dnh4EippbmoxdzlydjV1MzU1a2UwN2NqZjR3ZzB3YTJjdmF0bWR5Y2RoNm53ZzMaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvYWF2ZRILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajE5dXE4Z2Rta3hxZnJnaHRlazQ5d2E4azJmOGhobTN4ZTZ2OXZ4eBIqaW5qMXc5cnY1dTM1NWtlMDdjamY0d2cwd2EyY3ZhdG1keWNkaDZud2czGkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2NydhILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajE5dXE4Z2Rta3hxZnJnaHRlazQ5d2E4azJmOGhobTN4ZTZ2OXZ4eBIqaW5qMXc5cnY1dTM1NWtlMDdjamY0d2cwd2EyY3ZhdG1keWNkaDZud2czGkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2N2eBILMTAwMDAwMDAwMDAKwQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSoAEKKmluajE5dXE4Z2Rta3hxZnJnaHRlazQ5d2E4azJmOGhobTN4ZTZ2OXZ4eBIqaW5qMXc5cnY1dTM1NWtlMDdjamY0d2cwd2EyY3ZhdG1keWNkaDZud2czGkYKN2ZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL3NoaWISCzEwMDAwMDAwMDAwGJ3+wwcSggEKYApUCi0vaW5qZWN0aXZlLmNyeXB0by52MWJldGExLmV0aHNlY3AyNTZrMS5QdWJLZXkSIwohA9YRhWDK9v8bR+HRAI7OzzTaeuCFfDffiIO9zTWhbk4cEgQKAggBGMmeARIeChcKA2luahIQMTYwMDAwMDAwMDAwMDAwMBCAqMMBGkBAcshkCtJATtQYYHVorDRUSOGQ7gR1bLp17ZXO5S5aTmB+pRc+/uz8cY3zfP28wpZE4BFa40sSn+vsN7YDc0Ne", + "CvMLCpUBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEnUKKmluajFocXJzbWZsdjc2dDB3MGZxcm16d3p4dHhxdWUzNG12MzRtc3h2bRIqaW5qMXVsMjM1c2ZwZm55bWNnOGdodXQ5OHV3c251NjlsbnpuYTN6ZGpkGhsKA2luahIUMTAwMDAwMDAwMDAwMDAwMDAwMDAKuQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSmAEKKmluajFocXJzbWZsdjc2dDB3MGZxcm16d3p4dHhxdWUzNG12MzRtc3h2bRIqaW5qMXVsMjM1c2ZwZm55bWNnOGdodXQ5OHV3c251NjlsbnpuYTN6ZGpkGj4KL3BlZ2d5MHg4N2FCM0I0Qzg2NjFlMDdENjM3MjM2MTIxMUI5NmVkNERjMzZCMUI1EgsxMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMWhxcnNtZmx2NzZ0MHcwZnFybXp3enh0eHF1ZTM0bXYzNG1zeHZtEippbmoxdWwyMzVzZnBmbnltY2c4Z2h1dDk4dXdzbnU2OWxuem5hM3pkamQaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvdXNkYxILMTAwMDAwMDAwMDAKxQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSpAEKKmluajFocXJzbWZsdjc2dDB3MGZxcm16d3p4dHhxdWUzNG12MzRtc3h2bRIqaW5qMXVsMjM1c2ZwZm55bWNnOGdodXQ5OHV3c251NjlsbnpuYTN6ZGpkGkoKL3BlZ2d5MHg0NEMyMWFmQWFGMjBjMjcwRUJiRjU5MTRDZmMzYjUwMjIxNzNGRUI3EhcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMWhxcnNtZmx2NzZ0MHcwZnFybXp3enh0eHF1ZTM0bXYzNG1zeHZtEippbmoxdWwyMzVzZnBmbnltY2c4Z2h1dDk4dXdzbnU2OWxuem5hM3pkamQaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvYWF2ZRILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajFocXJzbWZsdjc2dDB3MGZxcm16d3p4dHhxdWUzNG12MzRtc3h2bRIqaW5qMXVsMjM1c2ZwZm55bWNnOGdodXQ5OHV3c251NjlsbnpuYTN6ZGpkGkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2NydhILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajFocXJzbWZsdjc2dDB3MGZxcm16d3p4dHhxdWUzNG12MzRtc3h2bRIqaW5qMXVsMjM1c2ZwZm55bWNnOGdodXQ5OHV3c251NjlsbnpuYTN6ZGpkGkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2N2eBILMTAwMDAwMDAwMDAKwQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSoAEKKmluajFocXJzbWZsdjc2dDB3MGZxcm16d3p4dHhxdWUzNG12MzRtc3h2bRIqaW5qMXVsMjM1c2ZwZm55bWNnOGdodXQ5OHV3c251NjlsbnpuYTN6ZGpkGkYKN2ZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL3NoaWISCzEwMDAwMDAwMDAwGJ3+wwcSggEKYApUCi0vaW5qZWN0aXZlLmNyeXB0by52MWJldGExLmV0aHNlY3AyNTZrMS5QdWJLZXkSIwohAimG00m9nDJwqtOiErp8o619mH/3VcEADzWzSqGpnGdIEgQKAggBGLuRARIeChcKA2luahIQMTYwMDAwMDAwMDAwMDAwMBCAqMMBGkCnWeua6pt6p7Te8JuofcIaJWaZEhgiOuFqskm9sjQ9yi5qJkOEQXCmCRFCS5uYBpk0/1tuwYXJwtro9GdxHJMI", + "CvMLCpUBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEnUKKmluajFnMG04cTNrZHczMzNzeHEyOXc3bmMzNm1mZmN2aDgwZ3ZjZDM5ZBIqaW5qMW45d2ZoN2E2Y2cydWdneWdhZDlhZGxqODNhNHl3ZHp1dmhybXB2GhsKA2luahIUMTAwMDAwMDAwMDAwMDAwMDAwMDAKuQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSmAEKKmluajFnMG04cTNrZHczMzNzeHEyOXc3bmMzNm1mZmN2aDgwZ3ZjZDM5ZBIqaW5qMW45d2ZoN2E2Y2cydWdneWdhZDlhZGxqODNhNHl3ZHp1dmhybXB2Gj4KL3BlZ2d5MHg4N2FCM0I0Qzg2NjFlMDdENjM3MjM2MTIxMUI5NmVkNERjMzZCMUI1EgsxMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMWcwbThxM2tkdzMzM3N4cTI5dzduYzM2bWZmY3ZoODBndmNkMzlkEippbmoxbjl3Zmg3YTZjZzJ1Z2d5Z2FkOWFkbGo4M2E0eXdkenV2aHJtcHYaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvdXNkYxILMTAwMDAwMDAwMDAKxQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSpAEKKmluajFnMG04cTNrZHczMzNzeHEyOXc3bmMzNm1mZmN2aDgwZ3ZjZDM5ZBIqaW5qMW45d2ZoN2E2Y2cydWdneWdhZDlhZGxqODNhNHl3ZHp1dmhybXB2GkoKL3BlZ2d5MHg0NEMyMWFmQWFGMjBjMjcwRUJiRjU5MTRDZmMzYjUwMjIxNzNGRUI3EhcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMWcwbThxM2tkdzMzM3N4cTI5dzduYzM2bWZmY3ZoODBndmNkMzlkEippbmoxbjl3Zmg3YTZjZzJ1Z2d5Z2FkOWFkbGo4M2E0eXdkenV2aHJtcHYaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvYWF2ZRILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajFnMG04cTNrZHczMzNzeHEyOXc3bmMzNm1mZmN2aDgwZ3ZjZDM5ZBIqaW5qMW45d2ZoN2E2Y2cydWdneWdhZDlhZGxqODNhNHl3ZHp1dmhybXB2GkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2NydhILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajFnMG04cTNrZHczMzNzeHEyOXc3bmMzNm1mZmN2aDgwZ3ZjZDM5ZBIqaW5qMW45d2ZoN2E2Y2cydWdneWdhZDlhZGxqODNhNHl3ZHp1dmhybXB2GkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2N2eBILMTAwMDAwMDAwMDAKwQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSoAEKKmluajFnMG04cTNrZHczMzNzeHEyOXc3bmMzNm1mZmN2aDgwZ3ZjZDM5ZBIqaW5qMW45d2ZoN2E2Y2cydWdneWdhZDlhZGxqODNhNHl3ZHp1dmhybXB2GkYKN2ZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL3NoaWISCzEwMDAwMDAwMDAwGJ3+wwcSggEKYApUCi0vaW5qZWN0aXZlLmNyeXB0by52MWJldGExLmV0aHNlY3AyNTZrMS5QdWJLZXkSIwohAhKZIyozzEpDEuAl3ypUW3R3JoD7AtBIAujqq4wwPfVdEgQKAggBGOufARIeChcKA2luahIQMTYwMDAwMDAwMDAwMDAwMBCAqMMBGkDMNT7feu38IDUKGBHpWaoydtomgYQZjGPXjj7pb8fEj0MshAm2XfDad53SLdLeKmsXMjQ5cXyYyH15EwUxDYSU", + "CvMLCpUBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEnUKKmluajFueHpoZTk0Z3NjOWpzeXVjM3dxa3Vuanl2czhwNGVtZTBndTRrZRIqaW5qMWxxa2dyZGxoeXFreTN3ZzZybW54ZGo1a3d0ZXI3NGUydWowbWZmGhsKA2luahIUMTAwMDAwMDAwMDAwMDAwMDAwMDAKuQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSmAEKKmluajFueHpoZTk0Z3NjOWpzeXVjM3dxa3Vuanl2czhwNGVtZTBndTRrZRIqaW5qMWxxa2dyZGxoeXFreTN3ZzZybW54ZGo1a3d0ZXI3NGUydWowbWZmGj4KL3BlZ2d5MHg4N2FCM0I0Qzg2NjFlMDdENjM3MjM2MTIxMUI5NmVkNERjMzZCMUI1EgsxMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMW54emhlOTRnc2M5anN5dWMzd3FrdW5qeXZzOHA0ZW1lMGd1NGtlEippbmoxbHFrZ3JkbGh5cWt5M3dnNnJtbnhkajVrd3Rlcjc0ZTJ1ajBtZmYaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvdXNkYxILMTAwMDAwMDAwMDAKxQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSpAEKKmluajFueHpoZTk0Z3NjOWpzeXVjM3dxa3Vuanl2czhwNGVtZTBndTRrZRIqaW5qMWxxa2dyZGxoeXFreTN3ZzZybW54ZGo1a3d0ZXI3NGUydWowbWZmGkoKL3BlZ2d5MHg0NEMyMWFmQWFGMjBjMjcwRUJiRjU5MTRDZmMzYjUwMjIxNzNGRUI3EhcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMW54emhlOTRnc2M5anN5dWMzd3FrdW5qeXZzOHA0ZW1lMGd1NGtlEippbmoxbHFrZ3JkbGh5cWt5M3dnNnJtbnhkajVrd3Rlcjc0ZTJ1ajBtZmYaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvYWF2ZRILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajFueHpoZTk0Z3NjOWpzeXVjM3dxa3Vuanl2czhwNGVtZTBndTRrZRIqaW5qMWxxa2dyZGxoeXFreTN3ZzZybW54ZGo1a3d0ZXI3NGUydWowbWZmGkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2NydhILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajFueHpoZTk0Z3NjOWpzeXVjM3dxa3Vuanl2czhwNGVtZTBndTRrZRIqaW5qMWxxa2dyZGxoeXFreTN3ZzZybW54ZGo1a3d0ZXI3NGUydWowbWZmGkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2N2eBILMTAwMDAwMDAwMDAKwQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSoAEKKmluajFueHpoZTk0Z3NjOWpzeXVjM3dxa3Vuanl2czhwNGVtZTBndTRrZRIqaW5qMWxxa2dyZGxoeXFreTN3ZzZybW54ZGo1a3d0ZXI3NGUydWowbWZmGkYKN2ZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL3NoaWISCzEwMDAwMDAwMDAwGJ3+wwcSggEKYApUCi0vaW5qZWN0aXZlLmNyeXB0by52MWJldGExLmV0aHNlY3AyNTZrMS5QdWJLZXkSIwohAxg89Ih7H74zbkYrMXXb55tjKWTQJQ3D2Sk00p5Y0/ZEEgQKAggBGIqVARIeChcKA2luahIQMTYwMDAwMDAwMDAwMDAwMBCAqMMBGkCo/7pJIihg01V2zd+y3WH++KyVIB4m7WC9DAHPRzJIAghGLVJkAJjzGWTHrIGlh7CIira+E0UeSdy1Ag4GMBfS", + "CvMLCpUBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEnUKKmluajE5Y2hlY3h3enVmZjA5Zm02NmM1MDN4MnJtZmowa3l6emZoM2Z0ZhIqaW5qMWt0djIyYXp2dDVoOG5xejQ4d25ocXNqOTZ1bGU0eHgwZGF3N2pqGhsKA2luahIUMTAwMDAwMDAwMDAwMDAwMDAwMDAKuQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSmAEKKmluajE5Y2hlY3h3enVmZjA5Zm02NmM1MDN4MnJtZmowa3l6emZoM2Z0ZhIqaW5qMWt0djIyYXp2dDVoOG5xejQ4d25ocXNqOTZ1bGU0eHgwZGF3N2pqGj4KL3BlZ2d5MHg4N2FCM0I0Qzg2NjFlMDdENjM3MjM2MTIxMUI5NmVkNERjMzZCMUI1EgsxMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMTljaGVjeHd6dWZmMDlmbTY2YzUwM3gycm1majBreXp6ZmgzZnRmEippbmoxa3R2MjJhenZ0NWg4bnF6NDh3bmhxc2o5NnVsZTR4eDBkYXc3amoaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvdXNkYxILMTAwMDAwMDAwMDAKxQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSpAEKKmluajE5Y2hlY3h3enVmZjA5Zm02NmM1MDN4MnJtZmowa3l6emZoM2Z0ZhIqaW5qMWt0djIyYXp2dDVoOG5xejQ4d25ocXNqOTZ1bGU0eHgwZGF3N2pqGkoKL3BlZ2d5MHg0NEMyMWFmQWFGMjBjMjcwRUJiRjU5MTRDZmMzYjUwMjIxNzNGRUI3EhcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMTljaGVjeHd6dWZmMDlmbTY2YzUwM3gycm1majBreXp6ZmgzZnRmEippbmoxa3R2MjJhenZ0NWg4bnF6NDh3bmhxc2o5NnVsZTR4eDBkYXc3amoaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvYWF2ZRILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajE5Y2hlY3h3enVmZjA5Zm02NmM1MDN4MnJtZmowa3l6emZoM2Z0ZhIqaW5qMWt0djIyYXp2dDVoOG5xejQ4d25ocXNqOTZ1bGU0eHgwZGF3N2pqGkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2NydhILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajE5Y2hlY3h3enVmZjA5Zm02NmM1MDN4MnJtZmowa3l6emZoM2Z0ZhIqaW5qMWt0djIyYXp2dDVoOG5xejQ4d25ocXNqOTZ1bGU0eHgwZGF3N2pqGkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2N2eBILMTAwMDAwMDAwMDAKwQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSoAEKKmluajE5Y2hlY3h3enVmZjA5Zm02NmM1MDN4MnJtZmowa3l6emZoM2Z0ZhIqaW5qMWt0djIyYXp2dDVoOG5xejQ4d25ocXNqOTZ1bGU0eHgwZGF3N2pqGkYKN2ZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL3NoaWISCzEwMDAwMDAwMDAwGJ3+wwcSggEKYApUCi0vaW5qZWN0aXZlLmNyeXB0by52MWJldGExLmV0aHNlY3AyNTZrMS5QdWJLZXkSIwohAgVaAkMOV5+9OJP2xYw3tKy3aU3SiAIummY3gRAIGDj/EgQKAggBGOihARIeChcKA2luahIQMTYwMDAwMDAwMDAwMDAwMBCAqMMBGkBSSP+Fx12//aSYEjjLjr5gl5X4jOUktkOREMTfArsWVxl4Xl7cyV3f7kYAF7kBbQQqrgMerHsc9KePhRVoXB0k", + "CvMLCpUBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEnUKKmluajFwMzBra2w2dXh5YWhtOGhmMGVkOGY0MDJmNjdhMmo5eHJjNDJ5ZhIqaW5qMXo1ZzRwYXA3YThoaHhhYXkycG5md2czYXduNWRxcDVyNHN2OGthGhsKA2luahIUMTAwMDAwMDAwMDAwMDAwMDAwMDAKuQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSmAEKKmluajFwMzBra2w2dXh5YWhtOGhmMGVkOGY0MDJmNjdhMmo5eHJjNDJ5ZhIqaW5qMXo1ZzRwYXA3YThoaHhhYXkycG5md2czYXduNWRxcDVyNHN2OGthGj4KL3BlZ2d5MHg4N2FCM0I0Qzg2NjFlMDdENjM3MjM2MTIxMUI5NmVkNERjMzZCMUI1EgsxMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMXAzMGtrbDZ1eHlhaG04aGYwZWQ4ZjQwMmY2N2Eyajl4cmM0MnlmEippbmoxejVnNHBhcDdhOGhoeGFheTJwbmZ3ZzNhd241ZHFwNXI0c3Y4a2EaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvdXNkYxILMTAwMDAwMDAwMDAKxQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSpAEKKmluajFwMzBra2w2dXh5YWhtOGhmMGVkOGY0MDJmNjdhMmo5eHJjNDJ5ZhIqaW5qMXo1ZzRwYXA3YThoaHhhYXkycG5md2czYXduNWRxcDVyNHN2OGthGkoKL3BlZ2d5MHg0NEMyMWFmQWFGMjBjMjcwRUJiRjU5MTRDZmMzYjUwMjIxNzNGRUI3EhcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMXAzMGtrbDZ1eHlhaG04aGYwZWQ4ZjQwMmY2N2Eyajl4cmM0MnlmEippbmoxejVnNHBhcDdhOGhoeGFheTJwbmZ3ZzNhd241ZHFwNXI0c3Y4a2EaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvYWF2ZRILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajFwMzBra2w2dXh5YWhtOGhmMGVkOGY0MDJmNjdhMmo5eHJjNDJ5ZhIqaW5qMXo1ZzRwYXA3YThoaHhhYXkycG5md2czYXduNWRxcDVyNHN2OGthGkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2NydhILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajFwMzBra2w2dXh5YWhtOGhmMGVkOGY0MDJmNjdhMmo5eHJjNDJ5ZhIqaW5qMXo1ZzRwYXA3YThoaHhhYXkycG5md2czYXduNWRxcDVyNHN2OGthGkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2N2eBILMTAwMDAwMDAwMDAKwQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSoAEKKmluajFwMzBra2w2dXh5YWhtOGhmMGVkOGY0MDJmNjdhMmo5eHJjNDJ5ZhIqaW5qMXo1ZzRwYXA3YThoaHhhYXkycG5md2czYXduNWRxcDVyNHN2OGthGkYKN2ZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL3NoaWISCzEwMDAwMDAwMDAwGJ3+wwcSggEKYApUCi0vaW5qZWN0aXZlLmNyeXB0by52MWJldGExLmV0aHNlY3AyNTZrMS5QdWJLZXkSIwohAl0obf7huaZwDxwoKhqdWfwakrBU8rFlrc/Ihiquc4P5EgQKAggBGIOAARIeChcKA2luahIQMTYwMDAwMDAwMDAwMDAwMBCAqMMBGkCGyhKBN8mu+4qID3ZzBPskvusEorT6TXytayPg3k6UpGMaLx38dXS9wmX2yrLrn4G67rihS/fKVCG2yMhdwk4y", + "CvMLCpUBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEnUKKmluajE0dDVmOTRtNWZnNHY2ZHJzNHFxa2QzZDczM3k2c3MwbGp5eXFsbRIqaW5qMWhtOXVobWhrZHRyeXd6MG1xazh2YTQwMmUzdWQweXBqbHFmcjNqGhsKA2luahIUMTAwMDAwMDAwMDAwMDAwMDAwMDAKuQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSmAEKKmluajE0dDVmOTRtNWZnNHY2ZHJzNHFxa2QzZDczM3k2c3MwbGp5eXFsbRIqaW5qMWhtOXVobWhrZHRyeXd6MG1xazh2YTQwMmUzdWQweXBqbHFmcjNqGj4KL3BlZ2d5MHg4N2FCM0I0Qzg2NjFlMDdENjM3MjM2MTIxMUI5NmVkNERjMzZCMUI1EgsxMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMTR0NWY5NG01Zmc0djZkcnM0cXFrZDNkNzMzeTZzczBsanl5cWxtEippbmoxaG05dWhtaGtkdHJ5d3owbXFrOHZhNDAyZTN1ZDB5cGpscWZyM2oaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvdXNkYxILMTAwMDAwMDAwMDAKxQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSpAEKKmluajE0dDVmOTRtNWZnNHY2ZHJzNHFxa2QzZDczM3k2c3MwbGp5eXFsbRIqaW5qMWhtOXVobWhrZHRyeXd6MG1xazh2YTQwMmUzdWQweXBqbHFmcjNqGkoKL3BlZ2d5MHg0NEMyMWFmQWFGMjBjMjcwRUJiRjU5MTRDZmMzYjUwMjIxNzNGRUI3EhcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMTR0NWY5NG01Zmc0djZkcnM0cXFrZDNkNzMzeTZzczBsanl5cWxtEippbmoxaG05dWhtaGtkdHJ5d3owbXFrOHZhNDAyZTN1ZDB5cGpscWZyM2oaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvYWF2ZRILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajE0dDVmOTRtNWZnNHY2ZHJzNHFxa2QzZDczM3k2c3MwbGp5eXFsbRIqaW5qMWhtOXVobWhrZHRyeXd6MG1xazh2YTQwMmUzdWQweXBqbHFmcjNqGkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2NydhILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajE0dDVmOTRtNWZnNHY2ZHJzNHFxa2QzZDczM3k2c3MwbGp5eXFsbRIqaW5qMWhtOXVobWhrZHRyeXd6MG1xazh2YTQwMmUzdWQweXBqbHFmcjNqGkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2N2eBILMTAwMDAwMDAwMDAKwQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSoAEKKmluajE0dDVmOTRtNWZnNHY2ZHJzNHFxa2QzZDczM3k2c3MwbGp5eXFsbRIqaW5qMWhtOXVobWhrZHRyeXd6MG1xazh2YTQwMmUzdWQweXBqbHFmcjNqGkYKN2ZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL3NoaWISCzEwMDAwMDAwMDAwGJ3+wwcSggEKYApUCi0vaW5qZWN0aXZlLmNyeXB0by52MWJldGExLmV0aHNlY3AyNTZrMS5QdWJLZXkSIwohA4fTy5A+DmuZfsXgjM48ntVqTXlOBW287TjXr91D0VGREgQKAggBGLuVARIeChcKA2luahIQMTYwMDAwMDAwMDAwMDAwMBCAqMMBGkBdYIUr7S8ky4p9g+WWi2Ef8Cnq9W5eRsQ6Q6YNcnr0rhzy6lgo31o9tJg6XB0ZHtaJb00qBdU8/igNmfhEZXqk", + "CvMLCpUBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEnUKKmluajFhNHc5OXo0cWdxY2Q2bDZ1NGRqZnlsY3VjdDUzZHVxa3VxbnI1ZBIqaW5qMTUyNmszNmNrM2xodm1yZzhzeXlhODd0eTY5dXBsOHl6enJrNWZxGhsKA2luahIUMTAwMDAwMDAwMDAwMDAwMDAwMDAKuQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSmAEKKmluajFhNHc5OXo0cWdxY2Q2bDZ1NGRqZnlsY3VjdDUzZHVxa3VxbnI1ZBIqaW5qMTUyNmszNmNrM2xodm1yZzhzeXlhODd0eTY5dXBsOHl6enJrNWZxGj4KL3BlZ2d5MHg4N2FCM0I0Qzg2NjFlMDdENjM3MjM2MTIxMUI5NmVkNERjMzZCMUI1EgsxMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMWE0dzk5ejRxZ3FjZDZsNnU0ZGpmeWxjdWN0NTNkdXFrdXFucjVkEippbmoxNTI2azM2Y2szbGh2bXJnOHN5eWE4N3R5Njl1cGw4eXp6cms1ZnEaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvdXNkYxILMTAwMDAwMDAwMDAKxQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSpAEKKmluajFhNHc5OXo0cWdxY2Q2bDZ1NGRqZnlsY3VjdDUzZHVxa3VxbnI1ZBIqaW5qMTUyNmszNmNrM2xodm1yZzhzeXlhODd0eTY5dXBsOHl6enJrNWZxGkoKL3BlZ2d5MHg0NEMyMWFmQWFGMjBjMjcwRUJiRjU5MTRDZmMzYjUwMjIxNzNGRUI3EhcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMWE0dzk5ejRxZ3FjZDZsNnU0ZGpmeWxjdWN0NTNkdXFrdXFucjVkEippbmoxNTI2azM2Y2szbGh2bXJnOHN5eWE4N3R5Njl1cGw4eXp6cms1ZnEaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvYWF2ZRILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajFhNHc5OXo0cWdxY2Q2bDZ1NGRqZnlsY3VjdDUzZHVxa3VxbnI1ZBIqaW5qMTUyNmszNmNrM2xodm1yZzhzeXlhODd0eTY5dXBsOHl6enJrNWZxGkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2NydhILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajFhNHc5OXo0cWdxY2Q2bDZ1NGRqZnlsY3VjdDUzZHVxa3VxbnI1ZBIqaW5qMTUyNmszNmNrM2xodm1yZzhzeXlhODd0eTY5dXBsOHl6enJrNWZxGkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2N2eBILMTAwMDAwMDAwMDAKwQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSoAEKKmluajFhNHc5OXo0cWdxY2Q2bDZ1NGRqZnlsY3VjdDUzZHVxa3VxbnI1ZBIqaW5qMTUyNmszNmNrM2xodm1yZzhzeXlhODd0eTY5dXBsOHl6enJrNWZxGkYKN2ZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL3NoaWISCzEwMDAwMDAwMDAwGJ3+wwcSggEKYApUCi0vaW5qZWN0aXZlLmNyeXB0by52MWJldGExLmV0aHNlY3AyNTZrMS5QdWJLZXkSIwohArGVpE2Qtw7Pq625UTe8FZfqFAGc7IaBTZYPusGkLfnlEgQKAggBGMmAARIeChcKA2luahIQMTYwMDAwMDAwMDAwMDAwMBCAqMMBGkDk8e2Du8ReB4Jz73ZkpdaWHIBSo5x0XtILIMecnJzbQ3TykogSC6OQ+tWOCFQp9mUhff++iCbVpFwAx08k+zYS", + "CvMLCpUBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEnUKKmluajFnZHZ0ZGtsdjNxZzQzM3Z1bjlqYXBhZGFucjk2MHgwdTI0cWtxbBIqaW5qMWFlYTRtOGZhcnc5ZHI5Y204N2FnN2QwejZtY2ZwMm54bnYyOGE3GhsKA2luahIUMTAwMDAwMDAwMDAwMDAwMDAwMDAKuQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSmAEKKmluajFnZHZ0ZGtsdjNxZzQzM3Z1bjlqYXBhZGFucjk2MHgwdTI0cWtxbBIqaW5qMWFlYTRtOGZhcnc5ZHI5Y204N2FnN2QwejZtY2ZwMm54bnYyOGE3Gj4KL3BlZ2d5MHg4N2FCM0I0Qzg2NjFlMDdENjM3MjM2MTIxMUI5NmVkNERjMzZCMUI1EgsxMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMWdkdnRka2x2M3FnNDMzdnVuOWphcGFkYW5yOTYweDB1MjRxa3FsEippbmoxYWVhNG04ZmFydzlkcjljbTg3YWc3ZDB6Nm1jZnAybnhudjI4YTcaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvdXNkYxILMTAwMDAwMDAwMDAKxQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSpAEKKmluajFnZHZ0ZGtsdjNxZzQzM3Z1bjlqYXBhZGFucjk2MHgwdTI0cWtxbBIqaW5qMWFlYTRtOGZhcnc5ZHI5Y204N2FnN2QwejZtY2ZwMm54bnYyOGE3GkoKL3BlZ2d5MHg0NEMyMWFmQWFGMjBjMjcwRUJiRjU5MTRDZmMzYjUwMjIxNzNGRUI3EhcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMWdkdnRka2x2M3FnNDMzdnVuOWphcGFkYW5yOTYweDB1MjRxa3FsEippbmoxYWVhNG04ZmFydzlkcjljbTg3YWc3ZDB6Nm1jZnAybnhudjI4YTcaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvYWF2ZRILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajFnZHZ0ZGtsdjNxZzQzM3Z1bjlqYXBhZGFucjk2MHgwdTI0cWtxbBIqaW5qMWFlYTRtOGZhcnc5ZHI5Y204N2FnN2QwejZtY2ZwMm54bnYyOGE3GkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2NydhILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajFnZHZ0ZGtsdjNxZzQzM3Z1bjlqYXBhZGFucjk2MHgwdTI0cWtxbBIqaW5qMWFlYTRtOGZhcnc5ZHI5Y204N2FnN2QwejZtY2ZwMm54bnYyOGE3GkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2N2eBILMTAwMDAwMDAwMDAKwQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSoAEKKmluajFnZHZ0ZGtsdjNxZzQzM3Z1bjlqYXBhZGFucjk2MHgwdTI0cWtxbBIqaW5qMWFlYTRtOGZhcnc5ZHI5Y204N2FnN2QwejZtY2ZwMm54bnYyOGE3GkYKN2ZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL3NoaWISCzEwMDAwMDAwMDAwGJ3+wwcSggEKYApUCi0vaW5qZWN0aXZlLmNyeXB0by52MWJldGExLmV0aHNlY3AyNTZrMS5QdWJLZXkSIwohAz+Zjrtxo20HOm1w4l5I57H9MAmt+87msPR5/1R/D1McEgQKAggBGMSqARIeChcKA2luahIQMTYwMDAwMDAwMDAwMDAwMBCAqMMBGkDhGCp0+Crr0dfoCZrTb5otuTMtIxxTj9tWfxrfN7cnBTEgKFXVDlsXbay4Wlxz4QBVX4Fb6gtUgQbtDrazOEj9", + "CvMLCpUBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEnUKKmluajFobm1kbGVhdHR1N3RldHU2ZWt3dzlybTBjbTAzZXpnNWpsdHJxehIqaW5qMW02M3U1eWtzYWdzc2o3d2N4Zmw1czd0NHU4N2s3MGpmeW5uazJqGhsKA2luahIUMTAwMDAwMDAwMDAwMDAwMDAwMDAKuQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSmAEKKmluajFobm1kbGVhdHR1N3RldHU2ZWt3dzlybTBjbTAzZXpnNWpsdHJxehIqaW5qMW02M3U1eWtzYWdzc2o3d2N4Zmw1czd0NHU4N2s3MGpmeW5uazJqGj4KL3BlZ2d5MHg4N2FCM0I0Qzg2NjFlMDdENjM3MjM2MTIxMUI5NmVkNERjMzZCMUI1EgsxMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMWhubWRsZWF0dHU3dGV0dTZla3d3OXJtMGNtMDNlemc1amx0cnF6EippbmoxbTYzdTV5a3NhZ3Nzajd3Y3hmbDVzN3Q0dTg3azcwamZ5bm5rMmoaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvdXNkYxILMTAwMDAwMDAwMDAKxQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSpAEKKmluajFobm1kbGVhdHR1N3RldHU2ZWt3dzlybTBjbTAzZXpnNWpsdHJxehIqaW5qMW02M3U1eWtzYWdzc2o3d2N4Zmw1czd0NHU4N2s3MGpmeW5uazJqGkoKL3BlZ2d5MHg0NEMyMWFmQWFGMjBjMjcwRUJiRjU5MTRDZmMzYjUwMjIxNzNGRUI3EhcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMArBAQocL2Nvc21vcy5iYW5rLnYxYmV0YTEuTXNnU2VuZBKgAQoqaW5qMWhubWRsZWF0dHU3dGV0dTZla3d3OXJtMGNtMDNlemc1amx0cnF6EippbmoxbTYzdTV5a3NhZ3Nzajd3Y3hmbDVzN3Q0dTg3azcwamZ5bm5rMmoaRgo3ZmFjdG9yeS9pbmoxN3Z5dGR3cWN6cXo3Mmo2NXNhdWtwbHJrdGQ0Z3lmbWU1YWdmNmMvYWF2ZRILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajFobm1kbGVhdHR1N3RldHU2ZWt3dzlybTBjbTAzZXpnNWpsdHJxehIqaW5qMW02M3U1eWtzYWdzc2o3d2N4Zmw1czd0NHU4N2s3MGpmeW5uazJqGkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2NydhILMTAwMDAwMDAwMDAKwAEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSnwEKKmluajFobm1kbGVhdHR1N3RldHU2ZWt3dzlybTBjbTAzZXpnNWpsdHJxehIqaW5qMW02M3U1eWtzYWdzc2o3d2N4Zmw1czd0NHU4N2s3MGpmeW5uazJqGkUKNmZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL2N2eBILMTAwMDAwMDAwMDAKwQEKHC9jb3Ntb3MuYmFuay52MWJldGExLk1zZ1NlbmQSoAEKKmluajFobm1kbGVhdHR1N3RldHU2ZWt3dzlybTBjbTAzZXpnNWpsdHJxehIqaW5qMW02M3U1eWtzYWdzc2o3d2N4Zmw1czd0NHU4N2s3MGpmeW5uazJqGkYKN2ZhY3RvcnkvaW5qMTd2eXRkd3FjenF6NzJqNjVzYXVrcGxya3RkNGd5Zm1lNWFnZjZjL3NoaWISCzEwMDAwMDAwMDAwGJ3+wwcSggEKYApUCi0vaW5qZWN0aXZlLmNyeXB0by52MWJldGExLmV0aHNlY3AyNTZrMS5QdWJLZXkSIwohA+OlGuxc2hUmrU+iVLb2MDnHy6W4exQyJrbMie9/Sv27EgQKAggBGJqQARIeChcKA2luahIQMTYwMDAwMDAwMDAwMDAwMBCAqMMBGkBTfe9A/RDSoHQCDunT60QgdtBrz3eIGvIgLEISRMAh/2w3+A9UB5SoDNGZNUfpNsxZyyq2Emi6pXuVpFzUCjI5" + ] + }, + "evidence":{ + "evidence":[ + + ] + }, + "lastCommit":{ + "height":"15793859", + "blockId":{ + "hash":"RRhRSiIf1E08mJAtACM4J1RFSVJ96eR0PBVuoD7rb2c=", + "partSetHeader":{ + "total":1, + "hash":"SeO5JkVtLUrhegd0rwDatDbvS5PQf/0Yvn+BmL1MOko=" + } + }, + "signatures":[ + { + "blockIdFlag":"BLOCK_ID_FLAG_COMMIT", + "validatorAddress":"y8ctJ4QpJ0S7ZTVY7RTE4z1hS2c=", + "timestamp":"2023-09-07T03:59:36.496584825Z", + "signature":"AxnPc5AEa6jizZuKhXUAkNi4vic6miF9emyAx+uSMco7oKVwoXGDJ6L0wneNGYOqpKkMVMQm4hcnWgDBjiBLAA==" + }, + { + "blockIdFlag":"BLOCK_ID_FLAG_COMMIT", + "validatorAddress":"M5HjW2EATgO+uI+h2rRES5E7174=", + "timestamp":"2023-09-07T03:59:36.293269404Z", + "signature":"mjODCd7P7xHo6Gn+6Qi6/u+FI72noRs9/vcbvpiqz7Hr5hRNhk2a2Jj2tw59GC6cURd2Q6c/CdZhXHgVqzMdAg==" + }, + { + "blockIdFlag":"BLOCK_ID_FLAG_COMMIT", + "validatorAddress":"Nv8cuLE25L4mgnBx8shCmG68xfc=", + "timestamp":"2023-09-07T03:59:36.393462082Z", + "signature":"NyTk5W6WLxEbouVJ7LxSwV88FnH/CtmXkr6JczPqEehdrymqrGqT02OJLutGVsBmrPEkMhwa2BegkqvmPLJrBQ==" + }, + { + "blockIdFlag":"BLOCK_ID_FLAG_COMMIT", + "validatorAddress":"ObUXYdS8jfTSNPonUBFPJkft7eA=", + "timestamp":"2023-09-07T03:59:36.296674286Z", + "signature":"OAwmf7pEjsXbwIWMD5HbzWiae6OAn0ME49FbXaRLvKIYKWSDKv9f0gprsgRJznOdj60SontlntwmvV+23MV6DQ==" + } + ], + "round":0 + } + } +} +``` + + + +
ParameterTypeDescription
block_idBlockIDBlock identifier
sdk_blockBlockBlock details
+ + +
+ +**BlockID** + + + +
ParameterTypeDescription
hashBytesBlock hash
part_set_headerPartSetHeader
+ + +
+ +**PartSetHeader** + + + +
ParameterTypeDescription
totalInteger
hashBytes
+ + +
+ +**Block** + + + + + +
ParameterTypeDescription
headerHeaderHeader information
dataDataBlock data
evidenceEvidenceList
last_commitCommit
+ + +
+ +**Header** + + + + + + + + + + + + + + + +
ParameterTypeDescription
versionConsensus
chain_idStringChain identifier
heightIntegerBlock height
timeTimeBlock time
last_block_idBlockIDPrevious block identifier
last_commit_hashBytesLast commit hash
data_hashBytesBlock data hash
validators_hashBytesValidators information hash
next_validators_hashBytesValidators information hash
consensus_hashBytesConsensus information hash
app_hashBytesApplication hash
last_result_hashBytesLast result hash
evidence_hashBytesEvidence data hash
proposer_addressStringBlock proposer's address
+ + +
+ +**Consensus** + + + + + + + + + + + + + + + +
ParameterTypeDescription
versionConsensus
chain_idStringChain identifier
heightIntegerBlock height
timeTimeBlock time
last_block_idBlockIDPrevious block identifier
last_commit_hashBytesLast commit hash
data_hashBytesBlock data hash
validators_hashBytesValidators information hash
next_validators_hashBytesValidators information hash
consensus_hashBytesConsensus information hash
app_hashBytesApplication hash
last_result_hashBytesLast result hash
evidence_hashBytesEvidence data hash
proposer_addressStringBlock proposer's address
+ + +
+ +**Data** + + +
ParameterTypeDescription
txsBytes ArrayTxs that will be applied by state @ block.Height+1. NOTE: not all txs here are valid. We're just agreeing on the order first. This means that block.AppHash does not include these txs.
+ + +
+ +**EvidenceList** + + +
ParameterTypeDescription
evidenceEvidence ArrayBlock evidence
+ + +
+ +**Evidence** + + +
ParameterTypeDescription
sumisEvidence_SumValid types for 'sum' are Evidence_DuplicateVoteEvidence and Evidence_LightClientAttackEvidence
+ + +
+ +**Commit** + + + + + +
ParameterTypeDescription
heightIntegerBlock height
roundIntegerConsensus round
block_idBlockIDBlock identifier
signaturesCommitSig ArraySigantures
+ + +
+ +**CommitSig** + + + + + +
ParameterTypeDescription
block_id_flagBlockIDFlagBlock height
validator_addressBytesValidator address
timestampTimeBlock time
signatureBytesBlock signature
+ + +
+ +**BlockIDFlag** + + + + + +
CodeName
0BLOCK_ID_FLAG_UNKNOWN
1BLOCK_ID_FLAG_ABSENT
2BLOCK_ID_FLAG_COMMIT
3BLOCK_ID_FLAG_NIL
+ + + +## GetLatestValidatorSet + +Get the latest validator-set + +**IP rate limit group:** `chain` + +### Request Parameters +> Request Example: + + + +```py +import asyncio + +from google.protobuf import symbol_database + +from pyinjective.async_client import AsyncClient +from pyinjective.core.network import Network + + +async def main() -> None: + network = Network.testnet() + client = AsyncClient(network) + + validator_set = await client.fetch_latest_validator_set() + print(validator_set) + + +if __name__ == "__main__": + symbol_db = symbol_database.Default() + asyncio.get_event_loop().run_until_complete(main()) +``` + + + + +```go +package main + +import ( + "context" + "fmt" + + "os" + + "github.com/InjectiveLabs/sdk-go/client" + chainclient "github.com/InjectiveLabs/sdk-go/client/chain" + "github.com/InjectiveLabs/sdk-go/client/common" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" +) + +func main() { + network := common.LoadNetwork("testnet", "lb") + tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket") + if err != nil { + panic(err) + } + + senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring( + os.Getenv("HOME")+"/.injectived", + "injectived", + "file", + "inj-user", + "12345678", + "5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided + false, + ) + + if err != nil { + panic(err) + } + + clientCtx, err := chainclient.NewClientContext( + network.ChainId, + senderAddress.String(), + cosmosKeyring, + ) + + if err != nil { + panic(err) + } + + clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) + + chainClient, err := chainclient.NewChainClient( + clientCtx, + network, + common.OptionGasPrices(client.DefaultGasPriceWithDenom), + ) + + if err != nil { + panic(err) + } + + ctx := context.Background() + + res, err := chainClient.FetchLatestValidatorSet(ctx) + if err != nil { + fmt.Println(err) + } + + fmt.Print(res.String()) + +} +``` + + +No parameters + + +### Response Parameters +> Response Example: + +``` json +{ + "blockHeight":"23201498", + "validators":[ + { + "address":"injvalcons1xml3ew93xmjtuf5zwpcl9jzznphte30hvdre9a", + "pubKey":{ + "@type":"/cosmos.crypto.ed25519.PubKey", + "key":"Bi/7vbVB1uj/zz40/aozZOvVBFkV6hLqqxBIQr5kSc4=" + }, + "votingPower":"200001152291153", + "proposerPriority":"234447499678197" + }, + { + "address":"injvalcons18x63wcw5hjxlf535lgn4qy20yer7mm0qedu0la", + "pubKey":{ + "@type":"/cosmos.crypto.ed25519.PubKey", + "key":"WlL4lTR+iTbd0rn3xP6oH0juOnGRZ+Hh73Oj6/Lt/Wg=" + }, + "votingPower":"200000153326260", + "proposerPriority":"-270628320740096" + }, + { + "address":"injvalcons1xwg7xkmpqp8q804c37sa4dzyfwgnh4a74ll9pz", + "pubKey":{ + "@type":"/cosmos.crypto.ed25519.PubKey", + "key":"Puku/I45dAZ4wKeN+rbYKnmuUUA7Yh7/TrKX3ZoTmk4=" + }, + "votingPower":"199859452893177", + "proposerPriority":"-192489141052575" + }, + { + "address":"injvalcons1e0rj6fuy9yn5fwm9x4vw69xyuv7kzjm8rvw5r3", + "pubKey":{ + "@type":"/cosmos.crypto.ed25519.PubKey", + "key":"1mF7OEpB9A60O0e+64pICbqS/nN8VnsVfoySMEW2w1Q=" + }, + "votingPower":"199826816954736", + "proposerPriority":"228669962114476" + } + ], + "pagination":{ + "total":"4", + "nextKey":"" + } +} +``` + + + + +
ParameterTypeDescription
block_heightIntegerBlock height
validatorsValidator ArrayList of validators
paginationPageResponsePagination information in the response
+ + +
+ +**Validator** + + + + + +
ParameterTypeDescription
addressStringValidator's address
pub_keyAnyValidator's public key
voting_powerIntegerValidator's voting power
proposer_priorityInteger
+ + +
+ +**PageResponse** + + + +
ParameterTypeDescription
next_keyByte ArrayThe key to be passed to PageRequest.key to query the next page most efficiently. It will be empty if there are no more results.
totalIntegerTotal number of results available if PageRequest.count_total was set, its value is undefined otherwise
+ + + +## GetValidatorSetByHeight + +Get the validator-set at a given height + +**IP rate limit group:** `chain` + +### Request Parameters +> Request Example: + + + +```py +import asyncio + +from google.protobuf import symbol_database + +from pyinjective.async_client import AsyncClient +from pyinjective.client.model.pagination import PaginationOption +from pyinjective.core.network import Network + + +async def main() -> None: + network = Network.testnet() + client = AsyncClient(network) + + pagination = PaginationOption(skip=2, limit=4) + + validator_set = await client.fetch_validator_set_by_height(height=23040174, pagination=pagination) + print(validator_set) + + +if __name__ == "__main__": + symbol_db = symbol_database.Default() + asyncio.get_event_loop().run_until_complete(main()) +``` + + + + +```go +package main + +import ( + "context" + "fmt" + + "github.com/cosmos/cosmos-sdk/types/query" + + "os" + + "github.com/InjectiveLabs/sdk-go/client" + chainclient "github.com/InjectiveLabs/sdk-go/client/chain" + "github.com/InjectiveLabs/sdk-go/client/common" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" +) + +func main() { + network := common.LoadNetwork("testnet", "lb") + tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket") + if err != nil { + panic(err) + } + + senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring( + os.Getenv("HOME")+"/.injectived", + "injectived", + "file", + "inj-user", + "12345678", + "5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided + false, + ) + + if err != nil { + panic(err) + } + + clientCtx, err := chainclient.NewClientContext( + network.ChainId, + senderAddress.String(), + cosmosKeyring, + ) + + if err != nil { + panic(err) + } + + clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) + + chainClient, err := chainclient.NewChainClient( + clientCtx, + network, + common.OptionGasPrices(client.DefaultGasPriceWithDenom), + ) + + if err != nil { + panic(err) + } + + ctx := context.Background() + + height := int64(23040174) + pagination := query.PageRequest{Offset: 2, Limit: 10} + res, err := chainClient.FetchValidatorSetByHeight(ctx, height, &pagination) + if err != nil { + fmt.Println(err) + } + + fmt.Print(res.String()) + +} +``` + + + + +
ParameterTypeDescriptionRequired
heightIntegerBlock heightYes
paginationPageRequestThe optional pagination for the requestNo
+ + +
+ +**PageRequest** + + + + + + +
ParameterTypeDescriptionRequired
keyByte ArrayKey is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be setNo
offsetIntegerNumeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be setNo
limitIntegerTotal number of results to be returned in the result pageNo
count_totalBooleanSet to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. It is only respected when offset is used. It is ignored when key is setNo
reverseBooleanReverse is set to true if results are to be returned in the descending orderNo
+ + + +### Response Parameters +> Response Example: + +``` json +{ + "blockHeight":"23040174", + "validators":[ + { + "address":"injvalcons1xml3ew93xmjtuf5zwpcl9jzznphte30hvdre9a", + "pubKey":{ + "@type":"/cosmos.crypto.ed25519.PubKey", + "key":"Bi/7vbVB1uj/zz40/aozZOvVBFkV6hLqqxBIQr5kSc4=" + }, + "votingPower":"200001152291142", + "proposerPriority":"-117113073985972" + }, + { + "address":"injvalcons18x63wcw5hjxlf535lgn4qy20yer7mm0qedu0la", + "pubKey":{ + "@type":"/cosmos.crypto.ed25519.PubKey", + "key":"WlL4lTR+iTbd0rn3xP6oH0juOnGRZ+Hh73Oj6/Lt/Wg=" + }, + "votingPower":"200000153326249", + "proposerPriority":"-30678774375098" + }, + { + "address":"injvalcons1xwg7xkmpqp8q804c37sa4dzyfwgnh4a74ll9pz", + "pubKey":{ + "@type":"/cosmos.crypto.ed25519.PubKey", + "key":"Puku/I45dAZ4wKeN+rbYKnmuUUA7Yh7/TrKX3ZoTmk4=" + }, + "votingPower":"199859452893172", + "proposerPriority":"358858430481236" + }, + { + "address":"injvalcons1e0rj6fuy9yn5fwm9x4vw69xyuv7kzjm8rvw5r3", + "pubKey":{ + "@type":"/cosmos.crypto.ed25519.PubKey", + "key":"1mF7OEpB9A60O0e+64pICbqS/nN8VnsVfoySMEW2w1Q=" + }, + "votingPower":"199826816954540", + "proposerPriority":"504834849146021" + } + ], + "pagination":{ + "total":"7", + "nextKey":"" + } +} +``` + + + + +
ParameterTypeDescription
block_heightIntegerBlock height
validatorsValidator ArrayList of validators
paginationPageResponsePagination information in the response
+ + +
+ +**Validator** + + + + + +
ParameterTypeDescription
addressStringValidator's address
pub_keyAnyValidator's public key
voting_powerIntegerValidator's voting power
proposer_priorityInteger
+ + +
+ +**PageResponse** + + + +
ParameterTypeDescription
next_keyByte ArrayThe key to be passed to PageRequest.key to query the next page most efficiently. It will be empty if there are no more results.
totalIntegerTotal number of results available if PageRequest.count_total was set, its value is undefined otherwise
+ + + +## ABCIQuery + +Defines a query handler that supports ABCI queries directly to the application, bypassing Tendermint completely. The ABCI query must contain a valid and supported path, including app, custom, p2p, and store. + +**IP rate limit group:** `chain` + +### Request Parameters +> Request Example: + + + + + +
ParameterTypeDescriptionRequired
dataBytesQuery dataNo
pathStringQuery pathYes
haightIntegerBlock heightNo
proveBooleanNo
+ + +### Response Parameters +> Response Example: + +``` json + +``` + + + + + + + + + + +
ParameterTypeDescription
codeIntegerQuery result code (zero: success, non-zero: error
logString
infoString
indexInteger
keyBytes
valueBytes
proof_opsProofOps
heightIntegerBlock height
codespaceString
+ + +
+ +**ProofOps** + + +
ParameterTypeDescription
opsProofOp Array
+ + +
+ +**ProofOp** + + + + +
ParameterTypeDescription
typeString
keyBytes
dataBytes
+ diff --git a/source/index.html.md b/source/index.html.md index 76cd85f0..69923c3d 100644 --- a/source/index.html.md +++ b/source/index.html.md @@ -39,6 +39,7 @@ includes: - insurance - oracle - staking + - tendermint - tokenfactory - wasm - wasmx diff --git a/source/json_tables/chain/tendermint/abciQueryRequest.json b/source/json_tables/chain/tendermint/abciQueryRequest.json new file mode 100644 index 00000000..fec3c0c8 --- /dev/null +++ b/source/json_tables/chain/tendermint/abciQueryRequest.json @@ -0,0 +1,6 @@ +[ + {"Parameter": "data", "Type": "Bytes", "Description": "Query data", "Required": "No"}, + {"Parameter": "path", "Type": "String", "Description": "Query path", "Required": "Yes"}, + {"Parameter": "haight", "Type": "Integer", "Description": "Block height", "Required": "No"}, + {"Parameter": "prove", "Type": "Boolean", "Description": "", "Required": "No"} +] \ No newline at end of file diff --git a/source/json_tables/chain/tendermint/abciQueryResponse.json b/source/json_tables/chain/tendermint/abciQueryResponse.json new file mode 100644 index 00000000..f73f93c0 --- /dev/null +++ b/source/json_tables/chain/tendermint/abciQueryResponse.json @@ -0,0 +1,11 @@ +[ + {"Parameter": "code", "Type": "Integer", "Description": "Query result code (zero: success, non-zero: error"}, + {"Parameter": "log", "Type": "String", "Description": ""}, + {"Parameter": "info", "Type": "String", "Description": ""}, + {"Parameter": "index", "Type": "Integer", "Description": ""}, + {"Parameter": "key", "Type": "Bytes", "Description": ""}, + {"Parameter": "value", "Type": "Bytes", "Description": ""}, + {"Parameter": "proof_ops", "Type": "ProofOps", "Description": ""}, + {"Parameter": "height", "Type": "Integer", "Description": "Block height"}, + {"Parameter": "codespace", "Type": "String", "Description": ""} +] \ No newline at end of file diff --git a/source/json_tables/chain/tendermint/block.json b/source/json_tables/chain/tendermint/block.json new file mode 100644 index 00000000..f5f04ae2 --- /dev/null +++ b/source/json_tables/chain/tendermint/block.json @@ -0,0 +1,6 @@ +[ + {"Parameter": "header", "Type": "Header", "Description": "Header information"}, + {"Parameter": "data", "Type": "Data", "Description": "Block data"}, + {"Parameter": "evidence", "Type": "EvidenceList", "Description": ""}, + {"Parameter": "last_commit", "Type": "Commit", "Description": ""} +] \ No newline at end of file diff --git a/source/json_tables/chain/tendermint/blockID.json b/source/json_tables/chain/tendermint/blockID.json new file mode 100644 index 00000000..e4a6d109 --- /dev/null +++ b/source/json_tables/chain/tendermint/blockID.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "hash", "Type": "Bytes", "Description": "Block hash"}, + {"Parameter": "part_set_header", "Type": "PartSetHeader", "Description": ""} +] \ No newline at end of file diff --git a/source/json_tables/chain/tendermint/blockIDFlag.json b/source/json_tables/chain/tendermint/blockIDFlag.json new file mode 100644 index 00000000..614a3ad9 --- /dev/null +++ b/source/json_tables/chain/tendermint/blockIDFlag.json @@ -0,0 +1,6 @@ +[ + {"Code": "0", "Name": "BLOCK_ID_FLAG_UNKNOWN"}, + {"Code": "1", "Name": "BLOCK_ID_FLAG_ABSENT"}, + {"Code": "2", "Name": "BLOCK_ID_FLAG_COMMIT"}, + {"Code": "3", "Name": "BLOCK_ID_FLAG_NIL"} +] \ No newline at end of file diff --git a/source/json_tables/chain/tendermint/commit.json b/source/json_tables/chain/tendermint/commit.json new file mode 100644 index 00000000..6ce8184b --- /dev/null +++ b/source/json_tables/chain/tendermint/commit.json @@ -0,0 +1,6 @@ +[ + {"Parameter": "height", "Type": "Integer", "Description": "Block height"}, + {"Parameter": "round", "Type": "Integer", "Description": "Consensus round"}, + {"Parameter": "block_id", "Type": "BlockID", "Description": "Block identifier"}, + {"Parameter": "signatures", "Type": "CommitSig Array", "Description": "Sigantures"} +] \ No newline at end of file diff --git a/source/json_tables/chain/tendermint/commitSig.json b/source/json_tables/chain/tendermint/commitSig.json new file mode 100644 index 00000000..31107bab --- /dev/null +++ b/source/json_tables/chain/tendermint/commitSig.json @@ -0,0 +1,6 @@ +[ + {"Parameter": "block_id_flag", "Type": "BlockIDFlag", "Description": "Block height"}, + {"Parameter": "validator_address", "Type": "Bytes", "Description": "Validator address"}, + {"Parameter": "timestamp", "Type": "Time", "Description": "Block time"}, + {"Parameter": "signature", "Type": "Bytes", "Description": "Block signature"} +] \ No newline at end of file diff --git a/source/json_tables/chain/tendermint/consensus.json b/source/json_tables/chain/tendermint/consensus.json new file mode 100644 index 00000000..91a5e695 --- /dev/null +++ b/source/json_tables/chain/tendermint/consensus.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "block", "Type": "Integer", "Description": ""}, + {"Parameter": "app", "Type": "Integer", "Description": ""} +] \ No newline at end of file diff --git a/source/json_tables/chain/tendermint/data.json b/source/json_tables/chain/tendermint/data.json new file mode 100644 index 00000000..613a9f87 --- /dev/null +++ b/source/json_tables/chain/tendermint/data.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "txs", "Type": "Bytes Array", "Description": "Txs that will be applied by state @ block.Height+1. NOTE: not all txs here are valid. We're just agreeing on the order first. This means that block.AppHash does not include these txs."} +] \ No newline at end of file diff --git a/source/json_tables/chain/tendermint/defaultNodeInfo.json b/source/json_tables/chain/tendermint/defaultNodeInfo.json new file mode 100644 index 00000000..10cb5cde --- /dev/null +++ b/source/json_tables/chain/tendermint/defaultNodeInfo.json @@ -0,0 +1,10 @@ +[ + {"Parameter": "protocol_version", "Type": "ProtocolVersion", "Description": "Protocol version information"}, + {"Parameter": "default_nod_id", "Type": "String", "Description": "Node identifier"}, + {"Parameter": "listen_addr", "Type": "String", "Description": "URI of the node's listening endpoint"}, + {"Parameter": "network", "Type": "String", "Description": "The chain network name"}, + {"Parameter": "version", "Type": "String", "Description": "The version number"}, + {"Parameter": "channels", "Type": "Bytes", "Description": "Channels information"}, + {"Parameter": "moniker", "Type": "String", "Description": ""}, + {"Parameter": "other", "Type": "DefaultNodeInfoOther", "Description": "Extra node information"} +] \ No newline at end of file diff --git a/source/json_tables/chain/tendermint/defaultNodeInfoOther.json b/source/json_tables/chain/tendermint/defaultNodeInfoOther.json new file mode 100644 index 00000000..f3b58931 --- /dev/null +++ b/source/json_tables/chain/tendermint/defaultNodeInfoOther.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "tx_index", "Type": "String", "Description": "TX indexing status (on/off)"}, + {"Parameter": "rpc_address", "Type": "String", "Description": "URI for RPC connections"} +] \ No newline at end of file diff --git a/source/json_tables/chain/tendermint/evidence.json b/source/json_tables/chain/tendermint/evidence.json new file mode 100644 index 00000000..55055422 --- /dev/null +++ b/source/json_tables/chain/tendermint/evidence.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "sum", "Type": "isEvidence_Sum", "Description": "Valid types for 'sum' are Evidence_DuplicateVoteEvidence and Evidence_LightClientAttackEvidence"} +] \ No newline at end of file diff --git a/source/json_tables/chain/tendermint/evidenceList.json b/source/json_tables/chain/tendermint/evidenceList.json new file mode 100644 index 00000000..19e28976 --- /dev/null +++ b/source/json_tables/chain/tendermint/evidenceList.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "evidence", "Type": "Evidence Array", "Description": "Block evidence"} +] \ No newline at end of file diff --git a/source/json_tables/chain/tendermint/getBlockByHeightRequest.json b/source/json_tables/chain/tendermint/getBlockByHeightRequest.json new file mode 100644 index 00000000..4bde65be --- /dev/null +++ b/source/json_tables/chain/tendermint/getBlockByHeightRequest.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "height", "Type": "Integer", "Description": "Block height", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/chain/tendermint/getBlockByHeightResponse.json b/source/json_tables/chain/tendermint/getBlockByHeightResponse.json new file mode 100644 index 00000000..518ddbeb --- /dev/null +++ b/source/json_tables/chain/tendermint/getBlockByHeightResponse.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "block_id", "Type": "BlockID", "Description": "Block identifier"}, + {"Parameter": "sdk_block", "Type": "Block", "Description": "Block details"} +] \ No newline at end of file diff --git a/source/json_tables/chain/tendermint/getLatestBlockResponse.json b/source/json_tables/chain/tendermint/getLatestBlockResponse.json new file mode 100644 index 00000000..518ddbeb --- /dev/null +++ b/source/json_tables/chain/tendermint/getLatestBlockResponse.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "block_id", "Type": "BlockID", "Description": "Block identifier"}, + {"Parameter": "sdk_block", "Type": "Block", "Description": "Block details"} +] \ No newline at end of file diff --git a/source/json_tables/chain/tendermint/getLatestValidatorSetResponse.json b/source/json_tables/chain/tendermint/getLatestValidatorSetResponse.json new file mode 100644 index 00000000..45dbe73d --- /dev/null +++ b/source/json_tables/chain/tendermint/getLatestValidatorSetResponse.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "block_height", "Type": "Integer", "Description": "Block height"}, + {"Parameter": "validators", "Type": "Validator Array", "Description": "List of validators"}, + {"Parameter": "pagination", "Type": "PageResponse", "Description": "Pagination information in the response"} +] \ No newline at end of file diff --git a/source/json_tables/chain/tendermint/getNodeInfoResponse.json b/source/json_tables/chain/tendermint/getNodeInfoResponse.json new file mode 100644 index 00000000..8bbba07b --- /dev/null +++ b/source/json_tables/chain/tendermint/getNodeInfoResponse.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "default_node_info", "Type": "DefaultNodeInfo", "Description": "Node information"}, + {"Parameter": "application_version", "Type": "VersionInfo", "Description": "Node version information"} +] \ No newline at end of file diff --git a/source/json_tables/chain/tendermint/getSyncingResponse.json b/source/json_tables/chain/tendermint/getSyncingResponse.json new file mode 100644 index 00000000..e27b5544 --- /dev/null +++ b/source/json_tables/chain/tendermint/getSyncingResponse.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "syncing", "Type": "Boolean", "Description": "Syncing status"} +] \ No newline at end of file diff --git a/source/json_tables/chain/tendermint/getValidatorSetByHeightRequest.json b/source/json_tables/chain/tendermint/getValidatorSetByHeightRequest.json new file mode 100644 index 00000000..25dba463 --- /dev/null +++ b/source/json_tables/chain/tendermint/getValidatorSetByHeightRequest.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "height", "Type": "Integer", "Description": "Block height", "Required": "Yes"}, + {"Parameter": "pagination", "Type": "PageRequest", "Description": "The optional pagination for the request", "Required": "No"} +] \ No newline at end of file diff --git a/source/json_tables/chain/tendermint/getValidatorSetByHeightResponse.json b/source/json_tables/chain/tendermint/getValidatorSetByHeightResponse.json new file mode 100644 index 00000000..45dbe73d --- /dev/null +++ b/source/json_tables/chain/tendermint/getValidatorSetByHeightResponse.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "block_height", "Type": "Integer", "Description": "Block height"}, + {"Parameter": "validators", "Type": "Validator Array", "Description": "List of validators"}, + {"Parameter": "pagination", "Type": "PageResponse", "Description": "Pagination information in the response"} +] \ No newline at end of file diff --git a/source/json_tables/chain/tendermint/header.json b/source/json_tables/chain/tendermint/header.json new file mode 100644 index 00000000..b1a3bcc3 --- /dev/null +++ b/source/json_tables/chain/tendermint/header.json @@ -0,0 +1,16 @@ +[ + {"Parameter": "version", "Type": "Consensus", "Description": ""}, + {"Parameter": "chain_id", "Type": "String", "Description": "Chain identifier"}, + {"Parameter": "height", "Type": "Integer", "Description": "Block height"}, + {"Parameter": "time", "Type": "Time", "Description": "Block time"}, + {"Parameter": "last_block_id", "Type": "BlockID", "Description": "Previous block identifier"}, + {"Parameter": "last_commit_hash", "Type": "Bytes", "Description": "Last commit hash"}, + {"Parameter": "data_hash", "Type": "Bytes", "Description": "Block data hash"}, + {"Parameter": "validators_hash", "Type": "Bytes", "Description": "Validators information hash"}, + {"Parameter": "next_validators_hash", "Type": "Bytes", "Description": "Validators information hash"}, + {"Parameter": "consensus_hash", "Type": "Bytes", "Description": "Consensus information hash"}, + {"Parameter": "app_hash", "Type": "Bytes", "Description": "Application hash"}, + {"Parameter": "last_result_hash", "Type": "Bytes", "Description": "Last result hash"}, + {"Parameter": "evidence_hash", "Type": "Bytes", "Description": "Evidence data hash"}, + {"Parameter": "proposer_address", "Type": "String", "Description": "Block proposer's address"} +] \ No newline at end of file diff --git a/source/json_tables/chain/tendermint/module.json b/source/json_tables/chain/tendermint/module.json new file mode 100644 index 00000000..c172e38b --- /dev/null +++ b/source/json_tables/chain/tendermint/module.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "path", "Type": "String", "Description": "Module path"}, + {"Parameter": "version", "Type": "String", "Description": "Module version"}, + {"Parameter": "sum", "Type": "String", "Description": "Checksum"} +] \ No newline at end of file diff --git a/source/json_tables/chain/tendermint/partSetHeader.json b/source/json_tables/chain/tendermint/partSetHeader.json new file mode 100644 index 00000000..5d363ecb --- /dev/null +++ b/source/json_tables/chain/tendermint/partSetHeader.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "total", "Type": "Integer", "Description": ""}, + {"Parameter": "hash", "Type": "Bytes", "Description": ""} +] \ No newline at end of file diff --git a/source/json_tables/chain/tendermint/proofOp.json b/source/json_tables/chain/tendermint/proofOp.json new file mode 100644 index 00000000..74f049f3 --- /dev/null +++ b/source/json_tables/chain/tendermint/proofOp.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "type", "Type": "String", "Description": ""}, + {"Parameter": "key", "Type": "Bytes", "Description": ""}, + {"Parameter": "data", "Type": "Bytes", "Description": ""} +] \ No newline at end of file diff --git a/source/json_tables/chain/tendermint/proofOps.json b/source/json_tables/chain/tendermint/proofOps.json new file mode 100644 index 00000000..7ca18025 --- /dev/null +++ b/source/json_tables/chain/tendermint/proofOps.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "ops", "Type": "ProofOp Array", "Description": ""} +] \ No newline at end of file diff --git a/source/json_tables/chain/tendermint/protocolVersion.json b/source/json_tables/chain/tendermint/protocolVersion.json new file mode 100644 index 00000000..b7a88458 --- /dev/null +++ b/source/json_tables/chain/tendermint/protocolVersion.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "p2p", "Type": "Integer", "Description": ""}, + {"Parameter": "block", "Type": "Integer", "Description": ""}, + {"Parameter": "app", "Type": "Integer", "Description": ""} +] \ No newline at end of file diff --git a/source/json_tables/chain/tendermint/validator.json b/source/json_tables/chain/tendermint/validator.json new file mode 100644 index 00000000..bbc221a7 --- /dev/null +++ b/source/json_tables/chain/tendermint/validator.json @@ -0,0 +1,6 @@ +[ + {"Parameter": "address", "Type": "String", "Description": "Validator's address"}, + {"Parameter": "pub_key", "Type": "Any", "Description": "Validator's public key"}, + {"Parameter": "voting_power", "Type": "Integer", "Description": "Validator's voting power"}, + {"Parameter": "proposer_priority", "Type": "Integer", "Description": ""} +] \ No newline at end of file diff --git a/source/json_tables/chain/tendermint/versionInfo.json b/source/json_tables/chain/tendermint/versionInfo.json new file mode 100644 index 00000000..7cca363a --- /dev/null +++ b/source/json_tables/chain/tendermint/versionInfo.json @@ -0,0 +1,10 @@ +[ + {"Parameter": "name", "Type": "String", "Description": "The chain name"}, + {"Parameter": "app_name", "Type": "String", "Description": "Application name"}, + {"Parameter": "version", "Type": "String", "Description": "Application version"}, + {"Parameter": "git_commit", "Type": "String", "Description": "Git commit hash"}, + {"Parameter": "build_tags", "Type": "String", "Description": "Application build tags"}, + {"Parameter": "go_version", "Type": "String", "Description": "GoLang version used to compile the application"}, + {"Parameter": "build_deps", "Type": "Module Array", "Description": "Application dependencies"}, + {"Parameter": "cosmos_sdk_version", "Type": "String", "Description": "Cosmos SDK version used by the application"} +] \ No newline at end of file From 443ae68ea5c882f5d5cb4c962d54ff0a247d9cd6 Mon Sep 17 00:00:00 2001 From: abel Date: Wed, 17 Apr 2024 12:02:37 -0300 Subject: [PATCH 2/4] (fix) Added IBC Transfer module queries and transfer message details --- source/includes/_changelog.md | 1 + source/includes/_ibctransfer.md | 1019 +++++++++++++++++ source/index.html.md | 2 +- source/json_tables/chain/ibc/core/height.json | 4 + .../chain/ibc/transfer/denomTrace.json | 4 + .../chain/ibc/transfer/msgTransfer.json | 10 + .../ibc/transfer/queryDenomHashRequest.json | 3 + .../ibc/transfer/queryDenomHashResponse.json | 3 + .../ibc/transfer/queryDenomTraceRequest.json | 3 + .../ibc/transfer/queryDenomTraceResponse.json | 3 + .../ibc/transfer/queryDenomTracesRequest.json | 3 + .../transfer/queryDenomTracesResponse.json | 4 + .../transfer/queryEscrowAddressRequest.json | 4 + .../transfer/queryEscrowAddressResponse.json | 3 + .../queryTotalEscrowForDenomRequest.json | 3 + .../queryTotalEscrowForDenomResponse.json | 3 + 16 files changed, 1071 insertions(+), 1 deletion(-) create mode 100644 source/includes/_ibctransfer.md create mode 100644 source/json_tables/chain/ibc/core/height.json create mode 100644 source/json_tables/chain/ibc/transfer/denomTrace.json create mode 100644 source/json_tables/chain/ibc/transfer/msgTransfer.json create mode 100644 source/json_tables/chain/ibc/transfer/queryDenomHashRequest.json create mode 100644 source/json_tables/chain/ibc/transfer/queryDenomHashResponse.json create mode 100644 source/json_tables/chain/ibc/transfer/queryDenomTraceRequest.json create mode 100644 source/json_tables/chain/ibc/transfer/queryDenomTraceResponse.json create mode 100644 source/json_tables/chain/ibc/transfer/queryDenomTracesRequest.json create mode 100644 source/json_tables/chain/ibc/transfer/queryDenomTracesResponse.json create mode 100644 source/json_tables/chain/ibc/transfer/queryEscrowAddressRequest.json create mode 100644 source/json_tables/chain/ibc/transfer/queryEscrowAddressResponse.json create mode 100644 source/json_tables/chain/ibc/transfer/queryTotalEscrowForDenomRequest.json create mode 100644 source/json_tables/chain/ibc/transfer/queryTotalEscrowForDenomResponse.json diff --git a/source/includes/_changelog.md b/source/includes/_changelog.md index 90ec61ff..f779a5dc 100644 --- a/source/includes/_changelog.md +++ b/source/includes/_changelog.md @@ -4,6 +4,7 @@ - Updated the API documentation to include all queries and messages for the `tendermint` module - Python SDK v1.5.0 - Added support for all queries from the `tendermint` module + - Added support for all queries from the `IBC transfer` modulee ## 2024-03-08 - Updated the API documentation to include all queries and messages for the `distribution` and `chain exchange` modules diff --git a/source/includes/_ibctransfer.md b/source/includes/_ibctransfer.md new file mode 100644 index 00000000..6f7c99c3 --- /dev/null +++ b/source/includes/_ibctransfer.md @@ -0,0 +1,1019 @@ +# - IBC Transfer + +Includes all the messages and queries associated to transfers from the IBC chain module + +## DenomTrace + +Queries a denomination trace information + +**IP rate limit group:** `chain` + +### Request Parameters +> Request Example: + + + +```py +import asyncio +from hashlib import sha256 + +from google.protobuf import symbol_database + +from pyinjective.async_client import AsyncClient +from pyinjective.core.network import Network + + +async def main() -> None: + network = Network.testnet() + client = AsyncClient(network) + + path = "transfer/channel-126" + base_denom = "uluna" + full_path = f"{path}/{base_denom}" + path_hash = sha256(full_path.encode()).hexdigest() + trace_hash = f"ibc/{path_hash}" + + denom_trace = await client.fetch_denom_trace(hash=trace_hash) + print(denom_trace) + + +if __name__ == "__main__": + symbol_db = symbol_database.Default() + asyncio.get_event_loop().run_until_complete(main()) +``` + + + + +```go +package main + +import ( + "context" + "encoding/json" + "fmt" + + "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" + + "github.com/InjectiveLabs/sdk-go/client" + + chainclient "github.com/InjectiveLabs/sdk-go/client/chain" + "github.com/InjectiveLabs/sdk-go/client/common" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" + + "os" +) + +func main() { + network := common.LoadNetwork("testnet", "lb") + tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket") + if err != nil { + panic(err) + } + + senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring( + os.Getenv("HOME")+"/.injectived", + "injectived", + "file", + "inj-user", + "12345678", + "5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided + false, + ) + + if err != nil { + panic(err) + } + + clientCtx, err := chainclient.NewClientContext( + network.ChainId, + senderAddress.String(), + cosmosKeyring, + ) + + if err != nil { + panic(err) + } + + clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) + + chainClient, err := chainclient.NewChainClient( + clientCtx, + network, + common.OptionGasPrices(client.DefaultGasPriceWithDenom), + ) + + if err != nil { + panic(err) + } + + denomTrace := types.DenomTrace{ + Path: "transfer/channel-126", + BaseDenom: "uluna", + } + ctx := context.Background() + + res, err := chainClient.FetchDenomTrace(ctx, denomTrace.Hash().String()) + if err != nil { + fmt.Println(err) + } + + str, _ := json.MarshalIndent(res, "", " ") + fmt.Print(string(str)) + +} +``` + + + +
ParameterTypeDescriptionRequired
hashStringThe denom trace hashYes
+ + +### Response Parameters +> Response Example: + +``` json +{ + "denomTrace":{ + "path":"transfer/channel-126", + "baseDenom":"uluna" + } +} +``` + + +
ParameterTypeDescription
denom_traceDenomTraceDenom trace information
+ + +
+ +**DenomTrace** + + + +
ParameterTypeDescription
pathStringPath is the port and channel
base_denomStringThe token denom
+ + + +## DenomTraces + +Queries all denomination traces + +**IP rate limit group:** `chain` + +### Request Parameters +> Request Example: + + + +```py +import asyncio + +from google.protobuf import symbol_database + +from pyinjective.async_client import AsyncClient +from pyinjective.client.model.pagination import PaginationOption +from pyinjective.core.network import Network + + +async def main() -> None: + network = Network.testnet() + client = AsyncClient(network) + + pagination = PaginationOption(skip=2, limit=4) + + denom_traces = await client.fetch_denom_traces(pagination=pagination) + print(denom_traces) + + +if __name__ == "__main__": + symbol_db = symbol_database.Default() + asyncio.get_event_loop().run_until_complete(main()) +``` + + + + +```go +package main + +import ( + "context" + "encoding/json" + "fmt" + + "github.com/InjectiveLabs/sdk-go/client" + "github.com/cosmos/cosmos-sdk/types/query" + + chainclient "github.com/InjectiveLabs/sdk-go/client/chain" + "github.com/InjectiveLabs/sdk-go/client/common" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" + + "os" +) + +func main() { + network := common.LoadNetwork("testnet", "lb") + tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket") + if err != nil { + panic(err) + } + + senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring( + os.Getenv("HOME")+"/.injectived", + "injectived", + "file", + "inj-user", + "12345678", + "5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided + false, + ) + + if err != nil { + panic(err) + } + + clientCtx, err := chainclient.NewClientContext( + network.ChainId, + senderAddress.String(), + cosmosKeyring, + ) + + if err != nil { + panic(err) + } + + clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) + + chainClient, err := chainclient.NewChainClient( + clientCtx, + network, + common.OptionGasPrices(client.DefaultGasPriceWithDenom), + ) + + if err != nil { + panic(err) + } + + pagination := query.PageRequest{Offset: 2, Limit: 4} + ctx := context.Background() + + res, err := chainClient.FetchDenomTraces(ctx, &pagination) + if err != nil { + fmt.Println(err) + } + + str, _ := json.MarshalIndent(res, "", " ") + fmt.Print(string(str)) + +} +``` + + + +
ParameterTypeDescriptionRequired
paginationPageRequestThe optional pagination for the requestNo
+ + +
+ +**PageRequest** + + + + + + +
ParameterTypeDescriptionRequired
keyByte ArrayKey is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be setNo
offsetIntegerNumeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be setNo
limitIntegerTotal number of results to be returned in the result pageNo
count_totalBooleanSet to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. It is only respected when offset is used. It is ignored when key is setNo
reverseBooleanReverse is set to true if results are to be returned in the descending orderNo
+ + +### Response Parameters +> Response Example: + +``` json +{ + "denomTraces":[ + { + "path":"transfer/channel-160", + "baseDenom":"uatom" + }, + { + "path":"transfer/channel-2", + "baseDenom":"uphoton" + }, + { + "path":"transfer/channel-43", + "baseDenom":"uandr" + }, + { + "path":"transfer/channel-6", + "baseDenom":"cw20:terra167dsqkh2alurx997wmycw9ydkyu54gyswe3ygmrs4lwume3vmwks8ruqnv" + } + ], + "pagination":{ + "nextKey":"WZNnsWM6uaj4vFpbpqm1M+3mVbhdRvmgClPl/2jiXlc=", + "total":"0" + } +} +``` + + + +
ParameterTypeDescription
denom_tracesDenomTrace ArrayDenom traces information
paginationPageResponsePagination information in the response
+ + +
+ +**PageResponse** + + + +
ParameterTypeDescription
next_keyByte ArrayThe key to be passed to PageRequest.key to query the next page most efficiently. It will be empty if there are no more results.
totalIntegerTotal number of results available if PageRequest.count_total was set, its value is undefined otherwise
+ + + +## DenomHash + +Queries a denomination hash information + +**IP rate limit group:** `chain` + +### Request Parameters +> Request Example: + + + +```py +import asyncio + +from google.protobuf import symbol_database + +from pyinjective.async_client import AsyncClient +from pyinjective.core.network import Network + + +async def main() -> None: + network = Network.testnet() + client = AsyncClient(network) + + path = "transfer/channel-126" + base_denom = "uluna" + full_path = f"{path}/{base_denom}" + + denom_hash = await client.fetch_denom_hash(trace=full_path) + print(denom_hash) + + +if __name__ == "__main__": + symbol_db = symbol_database.Default() + asyncio.get_event_loop().run_until_complete(main()) +``` + + + + +```go +package main + +import ( + "context" + "encoding/json" + "fmt" + + "github.com/InjectiveLabs/sdk-go/client" + + chainclient "github.com/InjectiveLabs/sdk-go/client/chain" + "github.com/InjectiveLabs/sdk-go/client/common" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" + + "os" +) + +func main() { + network := common.LoadNetwork("testnet", "lb") + tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket") + if err != nil { + panic(err) + } + + senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring( + os.Getenv("HOME")+"/.injectived", + "injectived", + "file", + "inj-user", + "12345678", + "5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided + false, + ) + + if err != nil { + panic(err) + } + + clientCtx, err := chainclient.NewClientContext( + network.ChainId, + senderAddress.String(), + cosmosKeyring, + ) + + if err != nil { + panic(err) + } + + clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) + + chainClient, err := chainclient.NewChainClient( + clientCtx, + network, + common.OptionGasPrices(client.DefaultGasPriceWithDenom), + ) + + if err != nil { + panic(err) + } + + path := "transfer/channel-126" + baseDenom := "uluna" + fullPath := fmt.Sprintf("%s/%s", path, baseDenom) + ctx := context.Background() + + res, err := chainClient.FetchDenomHash(ctx, fullPath) + if err != nil { + fmt.Println(err) + } + + str, _ := json.MarshalIndent(res, "", " ") + fmt.Print(string(str)) + +} +``` + + + +
ParameterTypeDescriptionRequired
traceStringThe denomination trace ([port_id]/[channel_id])+/[denom]Yes
+ + +### Response Parameters +> Response Example: + +``` json +{ + "hash":"97498452BF27CC90656FD7D6EFDA287FA2BFFFF3E84691C84CB9E0451F6DF0A4" +} +``` + + +
ParameterTypeDescription
hashStringHash (in hex format) of the denomination trace information
+ + + +## EscrowAddress + +Returns the escrow address for a particular port and channel id + +**IP rate limit group:** `chain` + +### Request Parameters +> Request Example: + + + +```py +import asyncio + +from google.protobuf import symbol_database + +from pyinjective.async_client import AsyncClient +from pyinjective.core.network import Network + + +async def main() -> None: + network = Network.testnet() + client = AsyncClient(network) + + port_id = "transfer" + channel_id = "channel-126" + + escrow_address = await client.fetch_escrow_address(port_id=port_id, channel_id=channel_id) + print(escrow_address) + + +if __name__ == "__main__": + symbol_db = symbol_database.Default() + asyncio.get_event_loop().run_until_complete(main()) +``` + + + + +```go +package main + +import ( + "context" + "encoding/json" + "fmt" + + "github.com/InjectiveLabs/sdk-go/client" + + chainclient "github.com/InjectiveLabs/sdk-go/client/chain" + "github.com/InjectiveLabs/sdk-go/client/common" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" + + "os" +) + +func main() { + network := common.LoadNetwork("testnet", "lb") + tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket") + if err != nil { + panic(err) + } + + senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring( + os.Getenv("HOME")+"/.injectived", + "injectived", + "file", + "inj-user", + "12345678", + "5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided + false, + ) + + if err != nil { + panic(err) + } + + clientCtx, err := chainclient.NewClientContext( + network.ChainId, + senderAddress.String(), + cosmosKeyring, + ) + + if err != nil { + panic(err) + } + + clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) + + chainClient, err := chainclient.NewChainClient( + clientCtx, + network, + common.OptionGasPrices(client.DefaultGasPriceWithDenom), + ) + + if err != nil { + panic(err) + } + + portId := "transfer" + channelId := "channel-126" + ctx := context.Background() + + res, err := chainClient.FetchEscrowAddress(ctx, portId, channelId) + if err != nil { + fmt.Println(err) + } + + str, _ := json.MarshalIndent(res, "", " ") + fmt.Print(string(str)) + +} +``` + + + + +
ParameterTypeDescriptionRequired
port_idStringThe unique port identifierYes
channel_idStringThe unique channel identifierYes
+ + +### Response Parameters +> Response Example: + +``` json +{ + "escrowAddress":"inj1w8ent9jwwqy2d5s8grq6muk2hqa6kj2863m3mg" +} +``` + + +
ParameterTypeDescription
escrow_addressStringThe escrow account address
+ + + +## TotalEscrowForDenom + +Returns the total amount of tokens in escrow based on the denom + +**IP rate limit group:** `chain` + +### Request Parameters +> Request Example: + + + +```py +import asyncio + +from google.protobuf import symbol_database + +from pyinjective.async_client import AsyncClient +from pyinjective.core.network import Network + + +async def main() -> None: + network = Network.testnet() + client = AsyncClient(network) + + base_denom = "uluna" + + escrow = await client.fetch_total_escrow_for_denom(denom=base_denom) + print(escrow) + + +if __name__ == "__main__": + symbol_db = symbol_database.Default() + asyncio.get_event_loop().run_until_complete(main()) +``` + + + + +```go +package main + +import ( + "context" + "encoding/json" + "fmt" + + "github.com/InjectiveLabs/sdk-go/client" + + chainclient "github.com/InjectiveLabs/sdk-go/client/chain" + "github.com/InjectiveLabs/sdk-go/client/common" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" + + "os" +) + +func main() { + network := common.LoadNetwork("testnet", "lb") + tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket") + if err != nil { + panic(err) + } + + senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring( + os.Getenv("HOME")+"/.injectived", + "injectived", + "file", + "inj-user", + "12345678", + "5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided + false, + ) + + if err != nil { + panic(err) + } + + clientCtx, err := chainclient.NewClientContext( + network.ChainId, + senderAddress.String(), + cosmosKeyring, + ) + + if err != nil { + panic(err) + } + + clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) + + chainClient, err := chainclient.NewChainClient( + clientCtx, + network, + common.OptionGasPrices(client.DefaultGasPriceWithDenom), + ) + + if err != nil { + panic(err) + } + + baseDenom := "uluna" + ctx := context.Background() + + res, err := chainClient.FetchTotalEscrowForDenom(ctx, baseDenom) + if err != nil { + fmt.Println(err) + } + + str, _ := json.MarshalIndent(res, "", " ") + fmt.Print(string(str)) + +} +``` + + + +
ParameterTypeDescriptionRequired
denomStringToken denomYes
+ + +### Response Parameters +> Response Example: + +``` json +{ + "amount":{ + "denom":"uluna", + "amount":"0" + } +} +``` + + +
ParameterTypeDescription
amountCoinAmount of token in the escrow
+ + +
+ +**Coin** + + + +
ParameterTypeDescriptionRequired
denomStringThe token denomYes
amountStringThe amount of tokensYes
+ + + +## MsgTransfer + +Defines a msg to transfer fungible tokens (i.e Coins) between ICS20 enabled chains. See ICS Spec here: ICS Spec + +**IP rate limit group:** `chain` + +### Request Parameters +> Request Example: + + + +```py +import asyncio +import os +from decimal import Decimal + +import dotenv + +from pyinjective.async_client import AsyncClient +from pyinjective.core.broadcaster import MsgBroadcasterWithPk +from pyinjective.core.network import Network +from pyinjective.wallet import PrivateKey + + +async def main() -> None: + dotenv.load_dotenv() + configured_private_key = os.getenv("INJECTIVE_PRIVATE_KEY") + + # select network: local, testnet, mainnet + network = Network.testnet() + + # initialize grpc client + client = AsyncClient(network) + await client.initialize_tokens_from_chain_denoms() + composer = await client.composer() + await client.sync_timeout_height() + + message_broadcaster = MsgBroadcasterWithPk.new_using_simulation( + network=network, + private_key=configured_private_key, + ) + + # load account + priv_key = PrivateKey.from_hex(configured_private_key) + pub_key = priv_key.to_public_key() + address = pub_key.to_address() + await client.fetch_account(address.to_acc_bech32()) + + source_port = "transfer" + source_channel = "channel-126" + token_amount = composer.create_coin_amount(amount=Decimal("0.1"), token_name="INJ") + sender = address.to_acc_bech32() + receiver = "inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r" + timeout_height = 10 + + # prepare tx msg + message = composer.msg_ibc_transfer( + source_port=source_port, + source_channel=source_channel, + token_amount=token_amount, + sender=sender, + receiver=receiver, + timeout_height=timeout_height, + ) + + # broadcast the transaction + result = await message_broadcaster.broadcast([message]) + print("---Transaction Response---") + print(result) + + +if __name__ == "__main__": + asyncio.get_event_loop().run_until_complete(main()) +``` + + + + +```go +package main + +import ( + "encoding/json" + "fmt" + "os" + + "github.com/InjectiveLabs/sdk-go/client" + "github.com/InjectiveLabs/sdk-go/client/common" + + chainclient "github.com/InjectiveLabs/sdk-go/client/chain" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" + sdktypes "github.com/cosmos/cosmos-sdk/types" + ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" + ibccoretypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" +) + +func main() { + network := common.LoadNetwork("testnet", "lb") + tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket") + if err != nil { + panic(err) + } + + senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring( + os.Getenv("HOME")+"/.injectived", + "injectived", + "file", + "inj-user", + "12345678", + "5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided + false, + ) + + if err != nil { + panic(err) + } + + // initialize grpc client + clientCtx, err := chainclient.NewClientContext( + network.ChainId, + senderAddress.String(), + cosmosKeyring, + ) + if err != nil { + panic(err) + } + clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) + + chainClient, err := chainclient.NewChainClient( + clientCtx, + network, + common.OptionGasPrices(client.DefaultGasPriceWithDenom), + ) + + if err != nil { + panic(err) + } + + sourcePort := "transfer" + sourceChannel := "channel-126" + coin := sdktypes.Coin{ + Denom: "inj", Amount: sdktypes.NewInt(1000000000000000000), // 1 INJ + } + sender := senderAddress.String() + receiver := "inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r" + timeoutHeight := ibccoretypes.Height{RevisionNumber: 10, RevisionHeight: 10} + + msg := &ibctransfertypes.MsgTransfer{ + SourcePort: sourcePort, + SourceChannel: sourceChannel, + Token: coin, + Sender: sender, + Receiver: receiver, + TimeoutHeight: timeoutHeight, + } + + //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + response, err := chainClient.AsyncBroadcastMsg(msg) + + if err != nil { + panic(err) + } + + str, _ := json.MarshalIndent(response, "", " ") + fmt.Print(string(str)) +} +``` + + + + + + + + + + +
ParameterTypeDescription
source_portStringThe port on which the packet will be sent
source_channelStringThe channel by which the packet will be sent
tokenCoinThe tokens to be transferred
senderStringThe sender address
receiverStringThe recipient address on the destination chain
timeout_heightHeightTimeout height relative to the current block height. The timeout is disabled when set to 0
timeout_timestampIntegerTimeout timestamp in absolute nanoseconds since unix epoch. The timeout is disabled when set to 0
memoStringOptional memo
+ + +
+ +**Coin** + + + +
ParameterTypeDescriptionRequired
denomStringThe token denomYes
amountStringThe amount of tokensYes
+ + +
+ +**Height** + + + +
ParameterTypeDescription
revision_numberIntegerThe revision that the client is currently on
revision_heightIntegerThe height within the given revision
+ + +### Response Parameters +> Response Example: + +``` json +``` + + +
ParamterTypeDescription
tx_responseTxResponseTransaction details
+ + +
+ +**TxResponse** + + + + + + + + + + + + + + +
ParameterTypeDescription
heightIntegerThe block height
tx_hashStringTransaction hash
codespaceStringNamespace for the code
codeIntegerResponse code (zero for success, non-zero for errors)
dataStringBytes, if any
raw_logStringThe output of the application's logger (raw string)
logsABCIMessageLog ArrayThe output of the application's logger (typed)
infoStringAdditional information
gas_wantedIntegerAmount of gas requested for the transaction
gas_usedIntegerAmount of gas consumed by the transaction
txAnyThe request transaction bytes
timestampStringTime of the previous block. For heights > 1, it's the weighted median of the timestamps of the valid votes in the block.LastCommit. For height == 1, it's genesis time
eventsEvent ArrayEvents defines all the events emitted by processing a transaction. Note, these events include those emitted by processing all the messages and those emitted from the ante. Whereas Logs contains the events, with additional metadata, emitted only by processing the messages.
+ + +
+ +**ABCIMessageLog** + + + + +
ParameterTypeDescription
msg_indexIntegerThe message index
logStringThe log message
eventsStringEvent ArrayEvent objects that were emitted during the execution
+ + +
+ +**Event** + + + +
ParameterTypeDescription
typeStringEvent type
attributesEventAttribute ArrayAll event object details
+ + +
+ +**StringEvent** + + + +
ParameterTypeDescription
typeStringEvent type
attributesAttribute ArrayEvent data
+ + +
+ +**EventAttribute** + + + + +
ParameterTypeDescription
keyStringAttribute key
valueStringAttribute value
indexBooleanIf attribute is indexed
+ + +
+ +**Attribute** + + + +
ParameterTypeDescription
keyStringAttribute key
valueStringAttribute value
+ \ No newline at end of file diff --git a/source/index.html.md b/source/index.html.md index 69923c3d..ecf52b80 100644 --- a/source/index.html.md +++ b/source/index.html.md @@ -36,6 +36,7 @@ includes: - derivatives - spot - binaryoptions + - ibctransfer - insurance - oracle - staking @@ -47,7 +48,6 @@ includes: - healthapi - glossary - faq - # - chronosrpc - errors search: true diff --git a/source/json_tables/chain/ibc/core/height.json b/source/json_tables/chain/ibc/core/height.json new file mode 100644 index 00000000..452877d6 --- /dev/null +++ b/source/json_tables/chain/ibc/core/height.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "revision_number", "Type": "Integer", "Description": "The revision that the client is currently on"}, + {"Parameter": "revision_height", "Type": "Integer", "Description": "The height within the given revision"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/transfer/denomTrace.json b/source/json_tables/chain/ibc/transfer/denomTrace.json new file mode 100644 index 00000000..c78692d1 --- /dev/null +++ b/source/json_tables/chain/ibc/transfer/denomTrace.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "path", "Type": "String", "Description": "Path is the port and channel"}, + {"Parameter": "base_denom", "Type": "String", "Description": "The token denom"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/transfer/msgTransfer.json b/source/json_tables/chain/ibc/transfer/msgTransfer.json new file mode 100644 index 00000000..2480e848 --- /dev/null +++ b/source/json_tables/chain/ibc/transfer/msgTransfer.json @@ -0,0 +1,10 @@ +[ + {"Parameter": "source_port", "Type": "String", "Description": "The port on which the packet will be sent"}, + {"Parameter": "source_channel", "Type": "String", "Description": "The channel by which the packet will be sent"}, + {"Parameter": "token", "Type": "Coin", "Description": "The tokens to be transferred"}, + {"Parameter": "sender", "Type": "String", "Description": "The sender address"}, + {"Parameter": "receiver", "Type": "String", "Description": "The recipient address on the destination chain"}, + {"Parameter": "timeout_height", "Type": "Height", "Description": "Timeout height relative to the current block height. The timeout is disabled when set to 0"}, + {"Parameter": "timeout_timestamp", "Type": "Integer", "Description": "Timeout timestamp in absolute nanoseconds since unix epoch. The timeout is disabled when set to 0"}, + {"Parameter": "memo", "Type": "String", "Description": "Optional memo"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/transfer/queryDenomHashRequest.json b/source/json_tables/chain/ibc/transfer/queryDenomHashRequest.json new file mode 100644 index 00000000..ce0e4376 --- /dev/null +++ b/source/json_tables/chain/ibc/transfer/queryDenomHashRequest.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "trace", "Type": "String", "Description": "The denomination trace ([port_id]/[channel_id])+/[denom]", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/transfer/queryDenomHashResponse.json b/source/json_tables/chain/ibc/transfer/queryDenomHashResponse.json new file mode 100644 index 00000000..78b747d3 --- /dev/null +++ b/source/json_tables/chain/ibc/transfer/queryDenomHashResponse.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "hash", "Type": "String", "Description": "Hash (in hex format) of the denomination trace information"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/transfer/queryDenomTraceRequest.json b/source/json_tables/chain/ibc/transfer/queryDenomTraceRequest.json new file mode 100644 index 00000000..bbaede68 --- /dev/null +++ b/source/json_tables/chain/ibc/transfer/queryDenomTraceRequest.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "hash", "Type": "String", "Description": "The denom trace hash", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/transfer/queryDenomTraceResponse.json b/source/json_tables/chain/ibc/transfer/queryDenomTraceResponse.json new file mode 100644 index 00000000..dab3d692 --- /dev/null +++ b/source/json_tables/chain/ibc/transfer/queryDenomTraceResponse.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "denom_trace", "Type": "DenomTrace", "Description": "Denom trace information"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/transfer/queryDenomTracesRequest.json b/source/json_tables/chain/ibc/transfer/queryDenomTracesRequest.json new file mode 100644 index 00000000..9da294d1 --- /dev/null +++ b/source/json_tables/chain/ibc/transfer/queryDenomTracesRequest.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "pagination", "Type": "PageRequest", "Description": "The optional pagination for the request", "Required": "No"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/transfer/queryDenomTracesResponse.json b/source/json_tables/chain/ibc/transfer/queryDenomTracesResponse.json new file mode 100644 index 00000000..031cdcda --- /dev/null +++ b/source/json_tables/chain/ibc/transfer/queryDenomTracesResponse.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "denom_traces", "Type": "DenomTrace Array", "Description": "Denom traces information"}, + {"Parameter": "pagination", "Type": "PageResponse", "Description": "Pagination information in the response"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/transfer/queryEscrowAddressRequest.json b/source/json_tables/chain/ibc/transfer/queryEscrowAddressRequest.json new file mode 100644 index 00000000..929fc40c --- /dev/null +++ b/source/json_tables/chain/ibc/transfer/queryEscrowAddressRequest.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "port_id", "Type": "String", "Description": "The unique port identifier", "Required": "Yes"}, + {"Parameter": "channel_id", "Type": "String", "Description": "The unique channel identifier", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/transfer/queryEscrowAddressResponse.json b/source/json_tables/chain/ibc/transfer/queryEscrowAddressResponse.json new file mode 100644 index 00000000..ebab83a1 --- /dev/null +++ b/source/json_tables/chain/ibc/transfer/queryEscrowAddressResponse.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "escrow_address", "Type": "String", "Description": "The escrow account address"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/transfer/queryTotalEscrowForDenomRequest.json b/source/json_tables/chain/ibc/transfer/queryTotalEscrowForDenomRequest.json new file mode 100644 index 00000000..deec1dcc --- /dev/null +++ b/source/json_tables/chain/ibc/transfer/queryTotalEscrowForDenomRequest.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "denom", "Type": "String", "Description": "Token denom", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/transfer/queryTotalEscrowForDenomResponse.json b/source/json_tables/chain/ibc/transfer/queryTotalEscrowForDenomResponse.json new file mode 100644 index 00000000..e293f519 --- /dev/null +++ b/source/json_tables/chain/ibc/transfer/queryTotalEscrowForDenomResponse.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "amount", "Type": "Coin", "Description": "Amount of token in the escrow"} +] \ No newline at end of file From ec2a73744398a2c9713d383fe6b55d65d13ee7c1 Mon Sep 17 00:00:00 2001 From: abel Date: Fri, 19 Apr 2024 14:58:33 -0300 Subject: [PATCH 3/4] (feat) Added documentation for all IBC Core Channel queries --- source/includes/_account.md | 60 +- source/includes/_accountsrpc.md | 72 +- source/includes/_auction.md | 8 +- source/includes/_auctionsrpc.md | 24 +- source/includes/_authz.md | 32 +- source/includes/_bank.md | 92 +- source/includes/_binaryoptions.md | 40 +- source/includes/_broadcaster.md | 16 +- source/includes/_chainexchange.md | 224 +- source/includes/_chainstream.md | 8 +- source/includes/_changelog.md | 5 +- source/includes/_derivatives.md | 208 +- source/includes/_derivativesrpc.md | 144 +- source/includes/_explorerrpc.md | 100 +- source/includes/_ibccorechannel.md | 2544 +++++++++++++++++ source/includes/_ibctransfer.md | 50 +- source/includes/_insurance.md | 12 +- source/includes/_insurancerpc.md | 16 +- source/includes/_metarpc.md | 32 +- source/includes/_oracle.md | 12 +- source/includes/_oraclerpc.md | 24 +- source/includes/_portfoliorpc.md | 16 +- source/includes/_spot.md | 128 +- source/includes/_spotrpc.md | 96 +- source/includes/_staking.md | 112 +- source/includes/_tendermint.md | 52 +- source/includes/_tokenfactory.md | 64 +- source/includes/_wasm.md | 84 +- source/includes/_wasmx.md | 8 +- source/index.html.md | 1 + .../chain/ibc/core/channel/channel.json | 7 + .../chain/ibc/core/channel/counterparty.json | 4 + .../ibc/core/channel/identifiedChannel.json | 9 + .../chain/ibc/core/channel/order.json | 5 + .../chain/ibc/core/channel/packetState.json | 6 + .../queryChannelClientStateRequest.json | 4 + .../queryChannelClientStateResponse.json | 5 + .../queryChannelConsensusStateRequest.json | 6 + .../queryChannelConsensusStateResponse.json | 6 + .../ibc/core/channel/queryChannelRequest.json | 4 + .../core/channel/queryChannelResponse.json | 5 + .../core/channel/queryChannelsRequest.json | 3 + .../core/channel/queryChannelsResponse.json | 5 + .../queryConnectionChannelsRequest.json | 4 + .../queryConnectionChannelsResponse.json | 5 + .../queryNextSequenceReceiveRequest.json | 4 + .../queryNextSequenceReceiveResponse.json | 5 + .../queryPacketAcknowledgementRequest.json | 5 + .../queryPacketAcknowledgementResponse.json | 5 + .../queryPacketAcknowledgementsRequest.json | 6 + .../queryPacketAcknowledgementsResponse.json | 5 + .../channel/queryPacketCommitmentRequest.json | 5 + .../queryPacketCommitmentResponse.json | 5 + .../queryPacketCommitmentsRequest.json | 5 + .../queryPacketCommitmentsResponse.json | 5 + .../channel/queryPacketReceiptRequest.json | 5 + .../channel/queryPacketReceiptResponse.json | 5 + .../channel/queryUnreceivedAcksRequest.json | 5 + .../channel/queryUnreceivedAcksResponse.json | 4 + .../queryUnreceivedPacketsRequest.json | 5 + .../queryUnreceivedPacketsResponse.json | 4 + .../chain/ibc/core/channel/state.json | 7 + source/json_tables/chain/tendermint/data.json | 2 +- 63 files changed, 3579 insertions(+), 870 deletions(-) create mode 100644 source/includes/_ibccorechannel.md create mode 100644 source/json_tables/chain/ibc/core/channel/channel.json create mode 100644 source/json_tables/chain/ibc/core/channel/counterparty.json create mode 100644 source/json_tables/chain/ibc/core/channel/identifiedChannel.json create mode 100644 source/json_tables/chain/ibc/core/channel/order.json create mode 100644 source/json_tables/chain/ibc/core/channel/packetState.json create mode 100644 source/json_tables/chain/ibc/core/channel/queryChannelClientStateRequest.json create mode 100644 source/json_tables/chain/ibc/core/channel/queryChannelClientStateResponse.json create mode 100644 source/json_tables/chain/ibc/core/channel/queryChannelConsensusStateRequest.json create mode 100644 source/json_tables/chain/ibc/core/channel/queryChannelConsensusStateResponse.json create mode 100644 source/json_tables/chain/ibc/core/channel/queryChannelRequest.json create mode 100644 source/json_tables/chain/ibc/core/channel/queryChannelResponse.json create mode 100644 source/json_tables/chain/ibc/core/channel/queryChannelsRequest.json create mode 100644 source/json_tables/chain/ibc/core/channel/queryChannelsResponse.json create mode 100644 source/json_tables/chain/ibc/core/channel/queryConnectionChannelsRequest.json create mode 100644 source/json_tables/chain/ibc/core/channel/queryConnectionChannelsResponse.json create mode 100644 source/json_tables/chain/ibc/core/channel/queryNextSequenceReceiveRequest.json create mode 100644 source/json_tables/chain/ibc/core/channel/queryNextSequenceReceiveResponse.json create mode 100644 source/json_tables/chain/ibc/core/channel/queryPacketAcknowledgementRequest.json create mode 100644 source/json_tables/chain/ibc/core/channel/queryPacketAcknowledgementResponse.json create mode 100644 source/json_tables/chain/ibc/core/channel/queryPacketAcknowledgementsRequest.json create mode 100644 source/json_tables/chain/ibc/core/channel/queryPacketAcknowledgementsResponse.json create mode 100644 source/json_tables/chain/ibc/core/channel/queryPacketCommitmentRequest.json create mode 100644 source/json_tables/chain/ibc/core/channel/queryPacketCommitmentResponse.json create mode 100644 source/json_tables/chain/ibc/core/channel/queryPacketCommitmentsRequest.json create mode 100644 source/json_tables/chain/ibc/core/channel/queryPacketCommitmentsResponse.json create mode 100644 source/json_tables/chain/ibc/core/channel/queryPacketReceiptRequest.json create mode 100644 source/json_tables/chain/ibc/core/channel/queryPacketReceiptResponse.json create mode 100644 source/json_tables/chain/ibc/core/channel/queryUnreceivedAcksRequest.json create mode 100644 source/json_tables/chain/ibc/core/channel/queryUnreceivedAcksResponse.json create mode 100644 source/json_tables/chain/ibc/core/channel/queryUnreceivedPacketsRequest.json create mode 100644 source/json_tables/chain/ibc/core/channel/queryUnreceivedPacketsResponse.json create mode 100644 source/json_tables/chain/ibc/core/channel/state.json diff --git a/source/includes/_account.md b/source/includes/_account.md index 30d4afac..46c50d3e 100644 --- a/source/includes/_account.md +++ b/source/includes/_account.md @@ -10,8 +10,8 @@ Includes all messages related to accounts and transfers. ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -96,8 +96,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -300,8 +300,8 @@ gas fee: 0.0000660495 INJ ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -384,8 +384,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -588,8 +588,8 @@ gas fee: 0.000064803 INJ ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -680,8 +680,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -886,8 +886,8 @@ gas fee: 0.0000610515 INJ ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -978,8 +978,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1184,8 +1184,8 @@ gas fee: 0.0000611985 INJ ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -1281,8 +1281,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1416,8 +1416,8 @@ gas fee: 0.0000809535 INJ ### Request Parameters > Request Example: - - + + ```py import asyncio import json @@ -1505,8 +1505,8 @@ Transaction hash: 0xb538abc7c2f893a2fe24c7a8ea606ff48d980a754499f1bec89b862c2bcb ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1527,8 +1527,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2303,8 +2303,8 @@ txhash: A2B2B971C690AE7977451D24D6F450AECE6BCCB271E91E32C2563342DDA5254B > Request Example: - - + + ```py import asyncio import base64 @@ -2356,8 +2356,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_accountsrpc.md b/source/includes/_accountsrpc.md index 2f27d209..38d84bc2 100644 --- a/source/includes/_accountsrpc.md +++ b/source/includes/_accountsrpc.md @@ -11,8 +11,8 @@ Get a list of subaccounts for a specific address. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -33,8 +33,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -108,8 +108,8 @@ Get the subaccount's transfer history. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -142,8 +142,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -315,8 +315,8 @@ Get the balance of a subaccount for a specific denom. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -338,8 +338,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -442,8 +442,8 @@ List the subaccount's balances for all denoms. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -465,8 +465,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -599,8 +599,8 @@ Get a summary of the subaccount's active/unfilled orders. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -625,8 +625,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -708,8 +708,8 @@ Stream the subaccount's balance for all denoms. ### Request Parameters > Request Example: - - + + ```py import asyncio from typing import Any, Dict @@ -756,8 +756,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -900,8 +900,8 @@ Get orders with an order hash. This request will return market orders and limit ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -931,8 +931,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1094,8 +1094,8 @@ Get an overview of your portfolio. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1116,8 +1116,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1289,8 +1289,8 @@ Get the rewards for Trade & Earn, the request will fetch all addresses for the l ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1312,8 +1312,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_auction.md b/source/includes/_auction.md index c7534548..f270a06a 100644 --- a/source/includes/_auction.md +++ b/source/includes/_auction.md @@ -9,8 +9,8 @@ Includes the message for placing bids in auctions. ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -92,8 +92,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_auctionsrpc.md b/source/includes/_auctionsrpc.md index 20c70b1a..de932865 100644 --- a/source/includes/_auctionsrpc.md +++ b/source/includes/_auctionsrpc.md @@ -12,8 +12,8 @@ Get the details of a specific auction. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -35,8 +35,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -183,8 +183,8 @@ Get the details of previous auctions. > Request Example: - - + + ```py import asyncio @@ -205,8 +205,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -382,8 +382,8 @@ Stream live updates for auction bids. > Request Example: - - + + ```py import asyncio from typing import Any, Dict @@ -428,8 +428,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_authz.md b/source/includes/_authz.md index 40d75849..f4a2742a 100644 --- a/source/includes/_authz.md +++ b/source/includes/_authz.md @@ -11,8 +11,8 @@ There are two types of authorization, Generic and Typed. Generic authorization w ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -114,8 +114,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -272,8 +272,8 @@ gas fee: 0.0000589365 INJ ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -382,8 +382,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -571,8 +571,8 @@ gas fee: 0.000066986 INJ ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -659,8 +659,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -784,8 +784,8 @@ Get the details of an authorization between a granter and a grantee. ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -813,8 +813,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_bank.md b/source/includes/_bank.md index ff452aad..4ea8039d 100644 --- a/source/includes/_bank.md +++ b/source/includes/_bank.md @@ -9,8 +9,8 @@ Bank module. ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -97,8 +97,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -224,8 +224,8 @@ gas fee: 0.0000599355 INJ ### Request Parameters > Request Example: - - + + ```go package main @@ -390,8 +390,8 @@ Get the bank balance for all denoms. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -412,8 +412,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -590,8 +590,8 @@ Get the bank balance for a specific denom. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -613,8 +613,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -740,8 +740,8 @@ Get the bank spendable balances for a specific address. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -762,8 +762,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -979,8 +979,8 @@ Get the bank spendable balances for a specific address and denom. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1002,8 +1002,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1129,8 +1129,8 @@ Get the total supply for all tokens ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1153,8 +1153,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1364,8 +1364,8 @@ Queries the supply of a single token ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1385,8 +1385,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1505,8 +1505,8 @@ Queries the metadata of a single token ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1527,8 +1527,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1676,8 +1676,8 @@ Queries the metadata of all tokens ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1700,8 +1700,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2095,8 +2095,8 @@ Queries for all account addresses that own a particular token ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -2121,8 +2121,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2334,8 +2334,8 @@ This query only returns denominations that have specific SendEnabled settings. A ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -2360,8 +2360,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_binaryoptions.md b/source/includes/_binaryoptions.md index fdf8a92a..163f964d 100644 --- a/source/includes/_binaryoptions.md +++ b/source/includes/_binaryoptions.md @@ -11,8 +11,8 @@ Retrieves binary options markets ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -36,8 +36,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -183,8 +183,8 @@ func main() { ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -249,8 +249,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -484,8 +484,8 @@ func main() { ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -739,8 +739,8 @@ gas fee: 0.0000606245 INJ ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -989,8 +989,8 @@ gas fee: 0.0000539515 INJ ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -1202,8 +1202,8 @@ gas fee: 0.0000556515 INJ ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -1428,8 +1428,8 @@ Further note that if no marketIDs are provided in the SpotMarketIdsToCancelAll o ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -1610,8 +1610,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_broadcaster.md b/source/includes/_broadcaster.md index c0feb113..41778a2a 100644 --- a/source/includes/_broadcaster.md +++ b/source/includes/_broadcaster.md @@ -14,8 +14,8 @@ To use the broadcaster you just need to create an instance of *MsgBroadcasterWit > Example - Calculate gas fee simulating the transaction: - - + + ```py import asyncio import os @@ -151,8 +151,8 @@ This is the most common broadcaster configuration. Unless you are using grantee > Example - Calculate gas fee without simulation: - - + + ```py import asyncio import os @@ -241,8 +241,8 @@ This is the required broadcaster configuration when operating with grantee accou > Example - Calculate gas fee simulating the transaction: - - + + ```py import asyncio import os @@ -361,8 +361,8 @@ For the broadcaster to calculate the gas fee running the simulation, create an i > Example - Calculate gas fee without simulation: - - + + ```py import asyncio import os diff --git a/source/includes/_chainexchange.md b/source/includes/_chainexchange.md index 0dd1d07f..2f27905d 100644 --- a/source/includes/_chainexchange.md +++ b/source/includes/_chainexchange.md @@ -11,8 +11,8 @@ Retrieves a subaccount's deposits ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -51,8 +51,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -202,8 +202,8 @@ Retrieves a subaccount's deposit ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -242,8 +242,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -359,8 +359,8 @@ Retrieves the balances for all accounts registered in the exchange module ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -383,8 +383,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -509,8 +509,8 @@ Retrieves the aggregate volumes for the specified account or subaccount ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -551,8 +551,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -703,8 +703,8 @@ Retrieves the aggregate volumes for specified accounts ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -743,8 +743,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -899,8 +899,8 @@ Retrieves the aggregate volume for the specified market ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -926,8 +926,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1042,8 +1042,8 @@ Retrieves the aggregate market volumes for specified markets ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1069,8 +1069,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1199,8 +1199,8 @@ Retrieves the number of decimals used for a denom ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1224,8 +1224,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1328,8 +1328,8 @@ Retrieves the denom decimals for multiple denoms ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1353,8 +1353,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1476,8 +1476,8 @@ Retrieves subaccount's orders ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -1519,8 +1519,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1649,8 +1649,8 @@ Retrieves a subaccount's trade nonce ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -1691,8 +1691,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1795,8 +1795,8 @@ Retrieves subaccount's order metadata ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -1837,8 +1837,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1988,8 +1988,8 @@ Retrieves the account and total trade rewards points ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -2028,8 +2028,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2134,8 +2134,8 @@ Retrieves the pending account and total trade rewards points ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -2174,8 +2174,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2280,8 +2280,8 @@ Retrieves the trade reward campaign ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -2318,8 +2318,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2470,8 +2470,8 @@ Retrieves the account's fee discount info ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -2510,8 +2510,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2639,8 +2639,8 @@ Retrieves the fee discount schedule ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -2664,8 +2664,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2852,8 +2852,8 @@ Retrieves mismatches between available vs. total balance ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -2877,8 +2877,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -3110,8 +3110,8 @@ Retrieves available and total balances with balance holds ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -3135,8 +3135,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -3261,8 +3261,8 @@ Retrieves fee discount tier stats ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -3286,8 +3286,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -3431,8 +3431,8 @@ Retrieves market making pool info ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -3456,8 +3456,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -3569,8 +3569,8 @@ Returns the market ID for a given vault subaccount ID ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -3594,8 +3594,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -3695,8 +3695,8 @@ Retrieves historical trade records for a given market ID ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -3722,8 +3722,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -3861,8 +3861,8 @@ Retrieves if the account is opted out of rewards ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -3901,8 +3901,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -4003,8 +4003,8 @@ Retrieves all accounts opted out of rewards ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -4028,8 +4028,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -4136,8 +4136,8 @@ Computes the volatility for spot and derivative markets trading history ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -4172,8 +4172,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -4347,8 +4347,8 @@ Retrieves the atomic execution fee multiplier ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -4374,8 +4374,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -4476,8 +4476,8 @@ func main() { ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -4559,8 +4559,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_chainstream.md b/source/includes/_chainstream.md index 81e0886f..957f9267 100644 --- a/source/includes/_chainstream.md +++ b/source/includes/_chainstream.md @@ -11,8 +11,8 @@ A filter can be specified with a list of values, generally MarketIds, Subaccount A filter can also be omitted, in this case the stream will return all the events for the specified type. In addition each filter supports a `*` wildcard to match all possible values. - - + + ```py import asyncio from typing import Any, Dict @@ -95,8 +95,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_changelog.md b/source/includes/_changelog.md index f779a5dc..90681f37 100644 --- a/source/includes/_changelog.md +++ b/source/includes/_changelog.md @@ -2,9 +2,10 @@ ## 9999-99-99 - Updated the API documentation to include all queries and messages for the `tendermint` module -- Python SDK v1.5.0 +- Python SDK v1.6.0 - Added support for all queries from the `tendermint` module - - Added support for all queries from the `IBC transfer` modulee + - Added support for all queries from the `IBC transfer` module + - Added support for all queries from the `IBC core channel` module ## 2024-03-08 - Updated the API documentation to include all queries and messages for the `distribution` and `chain exchange` modules diff --git a/source/includes/_derivatives.md b/source/includes/_derivatives.md index e43203fe..85b7b582 100644 --- a/source/includes/_derivatives.md +++ b/source/includes/_derivatives.md @@ -11,8 +11,8 @@ Retrieves a derivative market's mid-price ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -38,8 +38,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -145,8 +145,8 @@ Retrieves a derivative market's orderbook by marketID ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -176,8 +176,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -315,8 +315,8 @@ Retrieves a trader's derivative orders ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -358,8 +358,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -478,8 +478,8 @@ Retrieves all account address' derivative orders ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -519,8 +519,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -638,8 +638,8 @@ Retrieves a trader's derivative orders ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -682,8 +682,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -804,8 +804,8 @@ Retrieves a trader's transient derivative orders ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -847,8 +847,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -967,8 +967,8 @@ Retrieves a list of derivative markets ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -995,8 +995,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1247,8 +1247,8 @@ Retrieves a derivative market by market ID ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1274,8 +1274,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1520,8 +1520,8 @@ Retrieves a derivative market's corresponding address for fees that contribute t ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1547,8 +1547,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1653,8 +1653,8 @@ Retrieves the entire exchange module's positions ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1678,8 +1678,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1823,8 +1823,8 @@ Retrieves subaccount's positions ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -1865,8 +1865,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2047,8 +2047,8 @@ Retrieves subaccount's position in market ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -2090,8 +2090,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2214,8 +2214,8 @@ Retrieves subaccount's position in market ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -2257,8 +2257,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2379,8 +2379,8 @@ Retrieves perpetual market's info ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -2406,8 +2406,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2528,8 +2528,8 @@ Retrieves expiry market's info ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -2555,8 +2555,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2669,8 +2669,8 @@ Retrieves perpetual market funding ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -2696,8 +2696,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2814,8 +2814,8 @@ Retrieves a trader's derivative conditional orders ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -2857,8 +2857,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2976,8 +2976,8 @@ func main() { ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -3043,8 +3043,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -3276,8 +3276,8 @@ func main() { ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -3344,8 +3344,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -3579,8 +3579,8 @@ func main() { ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -3686,8 +3686,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -3975,8 +3975,8 @@ gas fee: 0.0000857195 INJ ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -4082,8 +4082,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -4374,8 +4374,8 @@ gas fee: 0.000069981 INJ ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -4464,8 +4464,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -4688,8 +4688,8 @@ Further note that if no marketIDs are provided in the SpotMarketIdsToCancelAll o ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -4870,8 +4870,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -5244,8 +5244,8 @@ To detect the liquidable positions please use the Indexer endpoint called [Liqui ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -5359,8 +5359,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -5615,8 +5615,8 @@ func main() { ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -5709,8 +5709,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -5910,8 +5910,8 @@ This function computes order hashes locally for SpotOrder and DerivativeOrder. F ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -6182,8 +6182,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_derivativesrpc.md b/source/includes/_derivativesrpc.md index 008cde71..0c5ab506 100644 --- a/source/includes/_derivativesrpc.md +++ b/source/includes/_derivativesrpc.md @@ -11,8 +11,8 @@ Get details of a single derivative market. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -34,8 +34,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -239,8 +239,8 @@ Get a list of one or more derivative markets. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -263,8 +263,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -546,8 +546,8 @@ Stream live updates of derivative markets. ### Request Parameters > Request Example: - - + + ```py import asyncio from typing import Any, Dict @@ -592,8 +592,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -816,8 +816,8 @@ Lists historical orders posted from a subaccount ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -850,8 +850,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1157,8 +1157,8 @@ Stream order updates of a derivative market. ### Request Parameters > Request Example: - - + + ```py import asyncio from typing import Any, Dict @@ -1205,8 +1205,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1415,8 +1415,8 @@ The difference between `Trades` and `TradesV2` is that the latter returns a `tra ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1445,8 +1445,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1825,8 +1825,8 @@ The difference between `StreamTrades` and `StreamTradesV2` is that the latter re ### Request Parameters > Request Example: - - + + ```py import asyncio from typing import Any, Dict @@ -1878,8 +1878,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2135,8 +2135,8 @@ Get the positions of a market. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -2174,8 +2174,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2451,8 +2451,8 @@ Stream position updates for a specific market. ### Request Parameters > Request Example: - - + + ```py import asyncio from typing import Any, Dict @@ -2501,8 +2501,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2678,8 +2678,8 @@ Gets all the liquidable positions ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -2707,8 +2707,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2990,8 +2990,8 @@ Get an orderbook snapshot for one or more derivative markets. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -3016,8 +3016,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -3236,8 +3236,8 @@ Stream orderbook snapshot updates for one or more derivative markets ### Request Parameters > Request Example: - - + + ```py import asyncio from typing import Any, Dict @@ -3284,8 +3284,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -3402,8 +3402,8 @@ Stream incremental orderbook updates for one or more derivative markets. This st ### Request Parameters > Request Example: - - + + ```py import asyncio from decimal import Decimal @@ -3563,8 +3563,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -3843,8 +3843,8 @@ Get the derivative orders of a specific subaccount. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -3873,8 +3873,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -4059,8 +4059,8 @@ Get the derivative trades for a specific subaccount. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -4095,8 +4095,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -4283,8 +4283,8 @@ Get the funding payments for a subaccount. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -4314,8 +4314,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -4458,8 +4458,8 @@ Get the historical funding rates for a specific market. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -4486,8 +4486,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -4615,8 +4615,8 @@ Get details of a single binary options market. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -4728,8 +4728,8 @@ Get a list of binary options markets. ### Request Parameters > Request Example: - - + + ```py import asyncio diff --git a/source/includes/_explorerrpc.md b/source/includes/_explorerrpc.md index 38b8b5dd..3236a6a7 100644 --- a/source/includes/_explorerrpc.md +++ b/source/includes/_explorerrpc.md @@ -12,8 +12,8 @@ Get the details for a specific transaction. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -42,8 +42,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -267,8 +267,8 @@ Get the details for a specific transaction. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -304,8 +304,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -683,8 +683,8 @@ Get data for blocks. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -708,8 +708,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -852,8 +852,8 @@ Get detailed data for a single block. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -875,8 +875,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1020,8 +1020,8 @@ Get the transactions. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1045,8 +1045,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1250,8 +1250,8 @@ Stream transactions. > Request Example: - - + + ```py import asyncio from typing import Any, Dict @@ -1296,8 +1296,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1443,8 +1443,8 @@ Stream blocks. > Request Example: - - + + ```py import asyncio from typing import Any, Dict @@ -1489,8 +1489,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1624,8 +1624,8 @@ Get info on peggy deposits. By default, deposits for all senders and receivers w ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1647,8 +1647,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1824,8 +1824,8 @@ Get info on peggy withdrawals. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1850,8 +1850,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2045,8 +2045,8 @@ Get data on IBC transfers. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -2085,8 +2085,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2249,8 +2249,8 @@ List all cosmwasm code on injective chain. Results are paginated. > Request Example: - - + + ```go package main @@ -2435,8 +2435,8 @@ Get cosmwasm code by its code ID > Request Example: - - + + ```go package main @@ -2539,8 +2539,8 @@ Get cosmwasm instantiated contracts on injective-chain. Results are paginated. > Request Example: - - + + ```go package main @@ -2751,8 +2751,8 @@ Get cosmwasm contract by its address > Request Example: - - + + ```go package main @@ -2876,8 +2876,8 @@ Get CW20 balances of an injective account across all instantiated CW20 contracts > Request Example: - - + + ```go package main diff --git a/source/includes/_ibccorechannel.md b/source/includes/_ibccorechannel.md new file mode 100644 index 00000000..7fc479a7 --- /dev/null +++ b/source/includes/_ibccorechannel.md @@ -0,0 +1,2544 @@ +# - IBC Core Channel + +Includes all the messages and queries associated to channels from the IBC core channel module + +## Channel + +Queries an IBC Channel + +**IP rate limit group:** `chain` + +### Request Parameters +> Request Example: + + + +```py +import asyncio + +from google.protobuf import symbol_database + +from pyinjective.async_client import AsyncClient +from pyinjective.core.network import Network + + +async def main() -> None: + network = Network.testnet() + client = AsyncClient(network) + + port_id = "transfer" + channel_id = "channel-126" + + channel = await client.fetch_ibc_channel(port_id=port_id, channel_id=channel_id) + print(channel) + + +if __name__ == "__main__": + symbol_db = symbol_database.Default() + asyncio.get_event_loop().run_until_complete(main()) +``` + + + + +```go +package main + +import ( + "context" + "encoding/json" + "fmt" + + "github.com/InjectiveLabs/sdk-go/client" + + chainclient "github.com/InjectiveLabs/sdk-go/client/chain" + "github.com/InjectiveLabs/sdk-go/client/common" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" + + "os" +) + +func main() { + network := common.LoadNetwork("testnet", "lb") + tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket") + if err != nil { + panic(err) + } + + senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring( + os.Getenv("HOME")+"/.injectived", + "injectived", + "file", + "inj-user", + "12345678", + "5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided + false, + ) + + if err != nil { + panic(err) + } + + clientCtx, err := chainclient.NewClientContext( + network.ChainId, + senderAddress.String(), + cosmosKeyring, + ) + + if err != nil { + panic(err) + } + + clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) + + chainClient, err := chainclient.NewChainClient( + clientCtx, + network, + common.OptionGasPrices(client.DefaultGasPriceWithDenom), + ) + + if err != nil { + panic(err) + } + + portId := "transfer" + channelId := "channel-126" + ctx := context.Background() + + res, err := chainClient.FetchIBCChannel(ctx, portId, channelId) + if err != nil { + fmt.Println(err) + } + + str, _ := json.MarshalIndent(res, "", " ") + fmt.Print(string(str)) + +} +``` + + + + +
ParameterTypeDescriptionRequired
port_idStringPort unique identifierYes
channel_idStringChannel unique identifierYes
+ + +### Response Parameters +> Response Example: + +``` json +{ + "channel":{ + "state":"STATE_OPEN", + "ordering":"ORDER_UNORDERED", + "counterparty":{ + "portId":"transfer", + "channelId":"channel-352" + }, + "connectionHops":[ + "connection-173" + ], + "version":"ics20-1" + }, + "proofHeight":{ + "revisionNumber":"888", + "revisionHeight":"26820151" + }, + "proof":"" +} +``` + + + + +
ParameterTypeDescription
channelChannelChannel details
proofByte ArrayMerkle proof of existence
proof_heightHeightHeight at which the proof was retrieved
+ + +
+ +**Channel** + + + + +
ParameterTypeDescription
channelChannelChannel details
proofByte ArrayMerkle proof of existence
proof_heightHeightHeight at which the proof was retrieved
+ + +
+ +**State** + + + + + + +
CodeName
0STATE_UNINITIALIZED_UNSPECIFIED
1STATE_INIT
2STATE_TRYOPEN
3STATE_OPEN
4STATE_CLOSED
+ + +
+ +**Order** + + + + +
CodeName
0ORDER_NONE_UNSPECIFIED
1ORDER_UNORDERED
2ORDER_ORDERED
+ + +
+ +**Counterparty** + + + +
ParameterTypeDescription
port_idStringPort on the counterparty chain which owns the other end of the channel
channel_idStringChannel end on the counterparty chain
+ + +
+ +**Height** + + + +
ParameterTypeDescription
revision_numberIntegerThe revision that the client is currently on
revision_heightIntegerThe height within the given revision
+ + + +## Channels + +Queries all the IBC channels of a chain + +**IP rate limit group:** `chain` + +### Request Parameters +> Request Example: + + + +```py +import asyncio + +from google.protobuf import symbol_database + +from pyinjective.async_client import AsyncClient +from pyinjective.client.model.pagination import PaginationOption +from pyinjective.core.network import Network + + +async def main() -> None: + network = Network.testnet() + client = AsyncClient(network) + + pagination = PaginationOption(skip=2, limit=4) + + channels = await client.fetch_ibc_channels(pagination=pagination) + print(channels) + + +if __name__ == "__main__": + symbol_db = symbol_database.Default() + asyncio.get_event_loop().run_until_complete(main()) +``` + + + + +```go +package main + +import ( + "context" + "encoding/json" + "fmt" + + "github.com/cosmos/cosmos-sdk/types/query" + + "github.com/InjectiveLabs/sdk-go/client" + + chainclient "github.com/InjectiveLabs/sdk-go/client/chain" + "github.com/InjectiveLabs/sdk-go/client/common" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" + + "os" +) + +func main() { + network := common.LoadNetwork("testnet", "lb") + tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket") + if err != nil { + panic(err) + } + + senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring( + os.Getenv("HOME")+"/.injectived", + "injectived", + "file", + "inj-user", + "12345678", + "5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided + false, + ) + + if err != nil { + panic(err) + } + + clientCtx, err := chainclient.NewClientContext( + network.ChainId, + senderAddress.String(), + cosmosKeyring, + ) + + if err != nil { + panic(err) + } + + clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) + + chainClient, err := chainclient.NewChainClient( + clientCtx, + network, + common.OptionGasPrices(client.DefaultGasPriceWithDenom), + ) + + if err != nil { + panic(err) + } + + pagination := query.PageRequest{Offset: 2, Limit: 4} + ctx := context.Background() + + res, err := chainClient.FetchIBCChannels(ctx, &pagination) + if err != nil { + fmt.Println(err) + } + + str, _ := json.MarshalIndent(res, "", " ") + fmt.Print(string(str)) + +} +``` + + + +
ParameterTypeDescriptionRequired
paginationPageRequestThe optional pagination for the requestNo
+ + +
+ +**PageRequest** + + + + + + +
ParameterTypeDescriptionRequired
keyByte ArrayKey is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be setNo
offsetIntegerNumeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be setNo
limitIntegerTotal number of results to be returned in the result pageNo
count_totalBooleanSet to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. It is only respected when offset is used. It is ignored when key is setNo
reverseBooleanReverse is set to true if results are to be returned in the descending orderNo
+ + +### Response Parameters +> Response Example: + +``` json +{ + "channels":[ + { + "state":"STATE_OPEN", + "ordering":"ORDER_ORDERED", + "counterparty":{ + "portId":"icacontroller-sweep-inj", + "channelId":"channel-19" + }, + "connectionHops":[ + "connection-182" + ], + "version":"{\"version\":\"ics27-1\",\"controller_connection_id\":\"connection-9\",\"host_connection_id\":\"connection-182\",\"address\":\"inj1v0es67dxtlmzmauhr3krk058sp9cvt6e2hvmys2g8pjnpj30fezq93qp07\",\"encoding\":\"proto3\",\"tx_type\":\"sdk_multi_msg\"}", + "portId":"icahost", + "channelId":"channel-134" + }, + { + "state":"STATE_CLOSED", + "ordering":"ORDER_ORDERED", + "counterparty":{ + "portId":"icacontroller-delegation-inj", + "channelId":"channel-20" + }, + "connectionHops":[ + "connection-182" + ], + "version":"{\"version\":\"ics27-1\",\"controller_connection_id\":\"connection-9\",\"host_connection_id\":\"connection-182\",\"address\":\"inj1urqc59ft3hl75mxhru4848xusu5rhpghz48zdfypyuu923w2gzyqm8y02d\",\"encoding\":\"proto3\",\"tx_type\":\"sdk_multi_msg\"}", + "portId":"icahost", + "channelId":"channel-136" + }, + { + "state":"STATE_OPEN", + "ordering":"ORDER_ORDERED", + "counterparty":{ + "portId":"icacontroller-sweep-inj", + "channelId":"channel-21" + }, + "connectionHops":[ + "connection-185" + ], + "version":"{\"version\":\"ics27-1\",\"controller_connection_id\":\"connection-3\",\"host_connection_id\":\"connection-185\",\"address\":\"inj1s58qfzwjduykz6emh936v8uxytvck4cf0lkvpuerh2qwt6jkaj9qh9cl7x\",\"encoding\":\"proto3\",\"tx_type\":\"sdk_multi_msg\"}", + "portId":"icahost", + "channelId":"channel-182" + }, + { + "state":"STATE_OPEN", + "ordering":"ORDER_ORDERED", + "counterparty":{ + "portId":"icacontroller-reward-inj", + "channelId":"channel-20" + }, + "connectionHops":[ + "connection-185" + ], + "version":"{\"version\":\"ics27-1\",\"controller_connection_id\":\"connection-3\",\"host_connection_id\":\"connection-185\",\"address\":\"inj1k3cdwxqkjmmjn62tesyumlynj0n5ap2k9ysnyn56zar4uns09a5qvy575s\",\"encoding\":\"proto3\",\"tx_type\":\"sdk_multi_msg\"}", + "portId":"icahost", + "channelId":"channel-183" + } + ], + "pagination":{ + "nextKey":"L3BvcnRzL2ljYWhvc3QvY2hhbm5lbHMvY2hhbm5lbC0xODQ=", + "total":"0" + }, + "height":{ + "revisionNumber":"888", + "revisionHeight":"26823064" + } +} +``` + + + + +
ParameterTypeDescription
channelsIdentifiedChannel ArrayList of channels
paginationPageResponsePagination information in the response
heightHeightQuery block height
+ + +
+ +**IdentifiedChannel** + + + + + + + + +
ParameterTypeDescription
stateStateCurrent state of the channel end
orderingOrderWhether the channel is ordered or unordered
counterpartyCounterpartyCounterparty channel end
connection_hopsString ArrayList of connection identifiers, in order, along which packets sent on this channel will travel
versionStringOpaque channel version, which is agreed upon during the handshake
port_idStringPort identifier
channel_idStringChannel identifier
+ + +
+ +**State** + + + + + + +
CodeName
0STATE_UNINITIALIZED_UNSPECIFIED
1STATE_INIT
2STATE_TRYOPEN
3STATE_OPEN
4STATE_CLOSED
+ + +
+ +**Order** + + + + +
CodeName
0ORDER_NONE_UNSPECIFIED
1ORDER_UNORDERED
2ORDER_ORDERED
+ + +
+ +**Counterparty** + + + +
ParameterTypeDescription
port_idStringPort on the counterparty chain which owns the other end of the channel
channel_idStringChannel end on the counterparty chain
+ + +
+ +**PageResponse** + + + +
ParameterTypeDescription
next_keyByte ArrayThe key to be passed to PageRequest.key to query the next page most efficiently. It will be empty if there are no more results.
totalIntegerTotal number of results available if PageRequest.count_total was set, its value is undefined otherwise
+ + +
+ +**Height** + + + +
ParameterTypeDescription
revision_numberIntegerThe revision that the client is currently on
revision_heightIntegerThe height within the given revision
+ + + +## ConnectionChannels + +Queries all the channels associated with a connection end + +**IP rate limit group:** `chain` + +### Request Parameters +> Request Example: + + + +```py +import asyncio + +from google.protobuf import symbol_database + +from pyinjective.async_client import AsyncClient +from pyinjective.client.model.pagination import PaginationOption +from pyinjective.core.network import Network + + +async def main() -> None: + network = Network.testnet() + client = AsyncClient(network) + + connection = "connection-182" + pagination = PaginationOption(skip=2, limit=4) + + channels = await client.fetch_ibc_connection_channels(connection=connection, pagination=pagination) + print(channels) + + +if __name__ == "__main__": + symbol_db = symbol_database.Default() + asyncio.get_event_loop().run_until_complete(main()) +``` + + + + +```go +package main + +import ( + "context" + "encoding/json" + "fmt" + + "github.com/cosmos/cosmos-sdk/types/query" + + "github.com/InjectiveLabs/sdk-go/client" + + chainclient "github.com/InjectiveLabs/sdk-go/client/chain" + "github.com/InjectiveLabs/sdk-go/client/common" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" + + "os" +) + +func main() { + network := common.LoadNetwork("testnet", "lb") + tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket") + if err != nil { + panic(err) + } + + senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring( + os.Getenv("HOME")+"/.injectived", + "injectived", + "file", + "inj-user", + "12345678", + "5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided + false, + ) + + if err != nil { + panic(err) + } + + clientCtx, err := chainclient.NewClientContext( + network.ChainId, + senderAddress.String(), + cosmosKeyring, + ) + + if err != nil { + panic(err) + } + + clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) + + chainClient, err := chainclient.NewChainClient( + clientCtx, + network, + common.OptionGasPrices(client.DefaultGasPriceWithDenom), + ) + + if err != nil { + panic(err) + } + + connection := "connection-182" + pagination := query.PageRequest{Offset: 2, Limit: 4} + ctx := context.Background() + + res, err := chainClient.FetchIBCConnectionChannels(ctx, connection, &pagination) + if err != nil { + fmt.Println(err) + } + + str, _ := json.MarshalIndent(res, "", " ") + fmt.Print(string(str)) + +} +``` + + + + +
ParameterTypeDescriptionRequired
connectionStringConnection unique identifierYes
paginationPageRequestThe optional pagination for the requestNo
+ + +
+ +**PageRequest** + + + + + + +
ParameterTypeDescriptionRequired
keyByte ArrayKey is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be setNo
offsetIntegerNumeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be setNo
limitIntegerTotal number of results to be returned in the result pageNo
count_totalBooleanSet to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. It is only respected when offset is used. It is ignored when key is setNo
reverseBooleanReverse is set to true if results are to be returned in the descending orderNo
+ + +### Response Parameters +> Response Example: + +``` json +{ + "channels":[ + { + "state":"STATE_CLOSED", + "ordering":"ORDER_ORDERED", + "counterparty":{ + "portId":"icacontroller-delegation-inj", + "channelId":"channel-17" + }, + "connectionHops":[ + "connection-182" + ], + "version":"{\"version\":\"ics27-1\",\"controller_connection_id\":\"connection-9\",\"host_connection_id\":\"connection-182\",\"address\":\"inj1urqc59ft3hl75mxhru4848xusu5rhpghz48zdfypyuu923w2gzyqm8y02d\",\"encoding\":\"proto3\",\"tx_type\":\"sdk_multi_msg\"}", + "portId":"icahost", + "channelId":"channel-132" + }, + { + "state":"STATE_OPEN", + "ordering":"ORDER_ORDERED", + "counterparty":{ + "portId":"icacontroller-reward-inj", + "channelId":"channel-18" + }, + "connectionHops":[ + "connection-182" + ], + "version":"{\"version\":\"ics27-1\",\"controller_connection_id\":\"connection-9\",\"host_connection_id\":\"connection-182\",\"address\":\"inj1mn3p9d2aw02mdrkfhleefmvr70skrx39mlkkc4f5rnewlc5aux3qs37nt6\",\"encoding\":\"proto3\",\"tx_type\":\"sdk_multi_msg\"}", + "portId":"icahost", + "channelId":"channel-133" + }, + { + "state":"STATE_OPEN", + "ordering":"ORDER_ORDERED", + "counterparty":{ + "portId":"icacontroller-sweep-inj", + "channelId":"channel-19" + }, + "connectionHops":[ + "connection-182" + ], + "version":"{\"version\":\"ics27-1\",\"controller_connection_id\":\"connection-9\",\"host_connection_id\":\"connection-182\",\"address\":\"inj1v0es67dxtlmzmauhr3krk058sp9cvt6e2hvmys2g8pjnpj30fezq93qp07\",\"encoding\":\"proto3\",\"tx_type\":\"sdk_multi_msg\"}", + "portId":"icahost", + "channelId":"channel-134" + }, + { + "state":"STATE_CLOSED", + "ordering":"ORDER_ORDERED", + "counterparty":{ + "portId":"icacontroller-delegation-inj", + "channelId":"channel-20" + }, + "connectionHops":[ + "connection-182" + ], + "version":"{\"version\":\"ics27-1\",\"controller_connection_id\":\"connection-9\",\"host_connection_id\":\"connection-182\",\"address\":\"inj1urqc59ft3hl75mxhru4848xusu5rhpghz48zdfypyuu923w2gzyqm8y02d\",\"encoding\":\"proto3\",\"tx_type\":\"sdk_multi_msg\"}", + "portId":"icahost", + "channelId":"channel-136" + }, + { + "state":"STATE_OPEN", + "ordering":"ORDER_UNORDERED", + "counterparty":{ + "portId":"transfer", + "channelId":"channel-16" + }, + "connectionHops":[ + "connection-182" + ], + "version":"ics20-1", + "portId":"transfer", + "channelId":"channel-131" + } + ], + "pagination":{ + "nextKey":"", + "total":"0" + }, + "height":{ + "revisionNumber":"888", + "revisionHeight":"26832162" + } +} +``` + + + + +
ParameterTypeDescription
channelsIdentifiedChannel ArrayList of channels
paginationPageResponsePagination information in the response
heightHeightQuery block height
+ + +
+ +**IdentifiedChannel** + + + + + + + + +
ParameterTypeDescription
stateStateCurrent state of the channel end
orderingOrderWhether the channel is ordered or unordered
counterpartyCounterpartyCounterparty channel end
connection_hopsString ArrayList of connection identifiers, in order, along which packets sent on this channel will travel
versionStringOpaque channel version, which is agreed upon during the handshake
port_idStringPort identifier
channel_idStringChannel identifier
+ + +
+ +**State** + + + + + + +
CodeName
0STATE_UNINITIALIZED_UNSPECIFIED
1STATE_INIT
2STATE_TRYOPEN
3STATE_OPEN
4STATE_CLOSED
+ + +
+ +**Order** + + + + +
CodeName
0ORDER_NONE_UNSPECIFIED
1ORDER_UNORDERED
2ORDER_ORDERED
+ + +
+ +**Counterparty** + + + +
ParameterTypeDescription
port_idStringPort on the counterparty chain which owns the other end of the channel
channel_idStringChannel end on the counterparty chain
+ + +
+ +**PageResponse** + + + +
ParameterTypeDescription
next_keyByte ArrayThe key to be passed to PageRequest.key to query the next page most efficiently. It will be empty if there are no more results.
totalIntegerTotal number of results available if PageRequest.count_total was set, its value is undefined otherwise
+ + +
+ +**Height** + + + +
ParameterTypeDescription
revision_numberIntegerThe revision that the client is currently on
revision_heightIntegerThe height within the given revision
+ + + +## ChannelClientState + +Queries the client state for the channel associated with the provided channel identifiers + +**IP rate limit group:** `chain` + +### Request Parameters +> Request Example: + + + +```py +import asyncio + +from google.protobuf import symbol_database + +from pyinjective.async_client import AsyncClient +from pyinjective.core.network import Network + + +async def main() -> None: + network = Network.testnet() + client = AsyncClient(network) + + port_id = "transfer" + channel_id = "channel-126" + + state = await client.fetch_ibc_channel_client_state(port_id=port_id, channel_id=channel_id) + print(state) + + +if __name__ == "__main__": + symbol_db = symbol_database.Default() + asyncio.get_event_loop().run_until_complete(main()) +``` + + + + +```go +package main + +import ( + "context" + "fmt" + + "github.com/InjectiveLabs/sdk-go/client" + + chainclient "github.com/InjectiveLabs/sdk-go/client/chain" + "github.com/InjectiveLabs/sdk-go/client/common" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" + + "os" +) + +func main() { + network := common.LoadNetwork("testnet", "lb") + tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket") + if err != nil { + panic(err) + } + + senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring( + os.Getenv("HOME")+"/.injectived", + "injectived", + "file", + "inj-user", + "12345678", + "5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided + false, + ) + + if err != nil { + panic(err) + } + + clientCtx, err := chainclient.NewClientContext( + network.ChainId, + senderAddress.String(), + cosmosKeyring, + ) + + if err != nil { + panic(err) + } + + clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) + + chainClient, err := chainclient.NewChainClient( + clientCtx, + network, + common.OptionGasPrices(client.DefaultGasPriceWithDenom), + ) + + if err != nil { + panic(err) + } + + portId := "transfer" + channelId := "channel-126" + ctx := context.Background() + + res, err := chainClient.FetchIBCChannelClientState(ctx, portId, channelId) + if err != nil { + fmt.Println(err) + } + + fmt.Print(res) + +} +``` + + + + +
ParameterTypeDescriptionRequired
port_idStringPort unique identifierYes
channel_idStringChannel unique identifierYes
+ + +### Response Parameters +> Response Example: + +``` json +{ + "identifiedClientState":{ + "clientId":"07-tendermint-179", + "clientState":{ + "@type":"/ibc.lightclients.tendermint.v1.ClientState", + "chainId":"pisco-1", + "trustLevel":{ + "numerator":"1", + "denominator":"3" + }, + "trustingPeriod":"288000s", + "unbondingPeriod":"432000s", + "maxClockDrift":"40s", + "frozenHeight":{ + "revisionNumber":"0", + "revisionHeight":"0" + }, + "latestHeight":{ + "revisionNumber":"1", + "revisionHeight":"7990906" + }, + "proofSpecs":[ + { + "leafSpec":{ + "hash":"SHA256", + "prehashValue":"SHA256", + "length":"VAR_PROTO", + "prefix":"AA==", + "prehashKey":"NO_HASH" + }, + "innerSpec":{ + "childOrder":[ + 0, + 1 + ], + "childSize":33, + "minPrefixLength":4, + "maxPrefixLength":12, + "hash":"SHA256", + "emptyChild":"" + }, + "maxDepth":0, + "minDepth":0, + "prehashKeyBeforeComparison":false + }, + { + "leafSpec":{ + "hash":"SHA256", + "prehashValue":"SHA256", + "length":"VAR_PROTO", + "prefix":"AA==", + "prehashKey":"NO_HASH" + }, + "innerSpec":{ + "childOrder":[ + 0, + 1 + ], + "childSize":32, + "minPrefixLength":1, + "maxPrefixLength":1, + "hash":"SHA256", + "emptyChild":"" + }, + "maxDepth":0, + "minDepth":0, + "prehashKeyBeforeComparison":false + } + ], + "upgradePath":[ + "upgrade", + "upgradedIBCState" + ], + "allowUpdateAfterExpiry":true, + "allowUpdateAfterMisbehaviour":true + } + }, + "proofHeight":{ + "revisionNumber":"888", + "revisionHeight":"26834667" + }, + "proof":"" +} +``` + + + + +
ParameterTypeDescription
identified_client_stateIdentifiedChannelClient state associated with the channel
proofByte ArrayMerkle proof of existence
proof_heightHeightHeight at which the proof was retrieved
+ + +
+ +**IdentifiedChannel** + + + + + + + + +
ParameterTypeDescription
stateStateCurrent state of the channel end
orderingOrderWhether the channel is ordered or unordered
counterpartyCounterpartyCounterparty channel end
connection_hopsString ArrayList of connection identifiers, in order, along which packets sent on this channel will travel
versionStringOpaque channel version, which is agreed upon during the handshake
port_idStringPort identifier
channel_idStringChannel identifier
+ + +
+ +**State** + + + + + + +
CodeName
0STATE_UNINITIALIZED_UNSPECIFIED
1STATE_INIT
2STATE_TRYOPEN
3STATE_OPEN
4STATE_CLOSED
+ + +
+ +**Order** + + + + +
CodeName
0ORDER_NONE_UNSPECIFIED
1ORDER_UNORDERED
2ORDER_ORDERED
+ + +
+ +**Counterparty** + + + +
ParameterTypeDescription
port_idStringPort on the counterparty chain which owns the other end of the channel
channel_idStringChannel end on the counterparty chain
+ + +
+ +**Height** + + + +
ParameterTypeDescription
revision_numberIntegerThe revision that the client is currently on
revision_heightIntegerThe height within the given revision
+ + + +## ChannelConsensusState + +Queries the client state for the channel associated with the provided channel identifiers + +**IP rate limit group:** `chain` + +### Request Parameters +> Request Example: + + + +```py +import asyncio + +from google.protobuf import symbol_database + +from pyinjective.async_client import AsyncClient +from pyinjective.core.network import Network + + +async def main() -> None: + network = Network.testnet() + client = AsyncClient(network) + + port_id = "transfer" + channel_id = "channel-126" + revision_number = 1 + revision_height = 7990906 + + state = await client.fetch_ibc_channel_consensus_state( + port_id=port_id, channel_id=channel_id, revision_number=revision_number, revision_height=revision_height + ) + print(state) + + +if __name__ == "__main__": + symbol_db = symbol_database.Default() + asyncio.get_event_loop().run_until_complete(main()) +``` + + + + +```go +package main + +import ( + "context" + "fmt" + + "github.com/InjectiveLabs/sdk-go/client" + + chainclient "github.com/InjectiveLabs/sdk-go/client/chain" + "github.com/InjectiveLabs/sdk-go/client/common" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" + + "os" +) + +func main() { + network := common.LoadNetwork("testnet", "lb") + tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket") + if err != nil { + panic(err) + } + + senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring( + os.Getenv("HOME")+"/.injectived", + "injectived", + "file", + "inj-user", + "12345678", + "5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided + false, + ) + + if err != nil { + panic(err) + } + + clientCtx, err := chainclient.NewClientContext( + network.ChainId, + senderAddress.String(), + cosmosKeyring, + ) + + if err != nil { + panic(err) + } + + clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) + + chainClient, err := chainclient.NewChainClient( + clientCtx, + network, + common.OptionGasPrices(client.DefaultGasPriceWithDenom), + ) + + if err != nil { + panic(err) + } + + portId := "transfer" + channelId := "channel-126" + revisionNumber := uint64(1) + revisionHeight := uint64(7990906) + ctx := context.Background() + + res, err := chainClient.FetchIBCChannelConsensusState(ctx, portId, channelId, revisionNumber, revisionHeight) + if err != nil { + fmt.Println(err) + } + + fmt.Print(res) + +} +``` + + + + + + +
ParameterTypeDescriptionRequired
port_idStringPort unique identifierYes
channel_idStringChannel unique identifierYes
revision_numberIntegerRevision number of the consensus stateYes
revision_heightIntegerRevision height of the consensus stateYes
+ + +### Response Parameters +> Response Example: + +``` json +{ + "consensusState":{ + "@type":"/ibc.lightclients.tendermint.v1.ConsensusState", + "timestamp":"2023-10-21T14:57:23.344911848Z", + "root":{ + "hash":"89ggv/9AgSoyCBZ0ohhBSMI0LX+ZYe24VdUOA1x6i6I=" + }, + "nextValidatorsHash":"8DzvA/mMhLfz2C0qSK5+YtbfTopxfFpKm4kApB/u10Y=" + }, + "clientId":"07-tendermint-179", + "proofHeight":{ + "revisionNumber":"888", + "revisionHeight":"26835676" + }, + "proof":"" +} +``` + + + + + +
ParameterTypeDescription
consensus_stateAnyConsensus state associated with the channel
client_idStringClient ID associated with the consensus state
proofByte ArrayMerkle proof of existence
proof_heightHeightHeight at which the proof was retrieved
+ + +
+ +**Height** + + + +
ParameterTypeDescription
revision_numberIntegerThe revision that the client is currently on
revision_heightIntegerThe height within the given revision
+ + + +## PacketCommitment + +Queries a stored packet commitment hash + +**IP rate limit group:** `chain` + +### Request Parameters +> Request Example: + + + +```py +import asyncio + +from google.protobuf import symbol_database + +from pyinjective.async_client import AsyncClient +from pyinjective.core.network import Network + + +async def main() -> None: + network = Network.testnet() + client = AsyncClient(network) + + port_id = "transfer" + channel_id = "channel-126" + sequence = 1 + + commitment = await client.fetch_ibc_packet_commitment(port_id=port_id, channel_id=channel_id, sequence=sequence) + print(commitment) + + +if __name__ == "__main__": + symbol_db = symbol_database.Default() + asyncio.get_event_loop().run_until_complete(main()) +``` + + + + +```go +package main + +import ( + "context" + "encoding/json" + "fmt" + + "github.com/InjectiveLabs/sdk-go/client" + + chainclient "github.com/InjectiveLabs/sdk-go/client/chain" + "github.com/InjectiveLabs/sdk-go/client/common" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" + + "os" +) + +func main() { + network := common.LoadNetwork("testnet", "lb") + tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket") + if err != nil { + panic(err) + } + + senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring( + os.Getenv("HOME")+"/.injectived", + "injectived", + "file", + "inj-user", + "12345678", + "5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided + false, + ) + + if err != nil { + panic(err) + } + + clientCtx, err := chainclient.NewClientContext( + network.ChainId, + senderAddress.String(), + cosmosKeyring, + ) + + if err != nil { + panic(err) + } + + clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) + + chainClient, err := chainclient.NewChainClient( + clientCtx, + network, + common.OptionGasPrices(client.DefaultGasPriceWithDenom), + ) + + if err != nil { + panic(err) + } + + portId := "transfer" + channelId := "channel-126" + sequence := uint64(1) + ctx := context.Background() + + res, err := chainClient.FetchIBCPacketCommitment(ctx, portId, channelId, sequence) + if err != nil { + fmt.Println(err) + } + + str, _ := json.MarshalIndent(res, "", " ") + fmt.Print(string(str)) + +} +``` + + + + + +
ParameterTypeDescriptionRequired
port_idStringPort unique identifierYes
channel_idStringChannel unique identifierYes
sequenceIntegerPacket sequenceYes
+ + +### Response Parameters +> Response Example: + +``` json +{ + "commitment":"bIKl7JAqoA1IGSDDlb0McwW2A/A77Jpph0yt87BnCO4=", + "proofHeight":{ + "revisionNumber":"888", + "revisionHeight":"26836334" + }, + "proof":"" +} +``` + + + + +
ParameterTypeDescription
commitmentByte ArrayPacket associated with the request fields
proofByte ArrayMerkle proof of existence
proof_heightHeightHeight at which the proof was retrieved
+ + +
+ +**Height** + + + +
ParameterTypeDescription
revision_numberIntegerThe revision that the client is currently on
revision_heightIntegerThe height within the given revision
+ + + +## PacketCommitments + +Returns all the packet commitments hashes associated with a channel + +**IP rate limit group:** `chain` + +### Request Parameters +> Request Example: + + + +```py +import asyncio + +from google.protobuf import symbol_database + +from pyinjective.async_client import AsyncClient +from pyinjective.client.model.pagination import PaginationOption +from pyinjective.core.network import Network + + +async def main() -> None: + network = Network.testnet() + client = AsyncClient(network) + + port_id = "transfer" + channel_id = "channel-126" + pagination = PaginationOption(skip=2, limit=4) + + commitment = await client.fetch_ibc_packet_commitments( + port_id=port_id, + channel_id=channel_id, + pagination=pagination, + ) + print(commitment) + + +if __name__ == "__main__": + symbol_db = symbol_database.Default() + asyncio.get_event_loop().run_until_complete(main()) +``` + + + + +```go +package main + +import ( + "context" + "encoding/json" + "fmt" + + "github.com/cosmos/cosmos-sdk/types/query" + + "github.com/InjectiveLabs/sdk-go/client" + + chainclient "github.com/InjectiveLabs/sdk-go/client/chain" + "github.com/InjectiveLabs/sdk-go/client/common" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" + + "os" +) + +func main() { + network := common.LoadNetwork("testnet", "lb") + tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket") + if err != nil { + panic(err) + } + + senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring( + os.Getenv("HOME")+"/.injectived", + "injectived", + "file", + "inj-user", + "12345678", + "5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided + false, + ) + + if err != nil { + panic(err) + } + + clientCtx, err := chainclient.NewClientContext( + network.ChainId, + senderAddress.String(), + cosmosKeyring, + ) + + if err != nil { + panic(err) + } + + clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) + + chainClient, err := chainclient.NewChainClient( + clientCtx, + network, + common.OptionGasPrices(client.DefaultGasPriceWithDenom), + ) + + if err != nil { + panic(err) + } + + portId := "transfer" + channelId := "channel-126" + pagination := query.PageRequest{Offset: 2, Limit: 4} + ctx := context.Background() + + res, err := chainClient.FetchIBCPacketCommitments(ctx, portId, channelId, &pagination) + if err != nil { + fmt.Println(err) + } + + str, _ := json.MarshalIndent(res, "", " ") + fmt.Print(string(str)) + +} +``` + + + + + +
ParameterTypeDescriptionRequired
port_idStringPort unique identifierYes
channel_idStringChannel unique identifierYes
paginationPageRequestThe optional pagination for the requestNo
+ + +### Response Parameters +> Response Example: + +``` json +{ + "commitments":[ + { + "portId":"transfer", + "channelId":"channel-126", + "sequence":"100", + "data":"CMcjhUhXioc12WQEv+SVK7pdCdBei9Zw2MNyKm64aII=" + }, + { + "portId":"transfer", + "channelId":"channel-126", + "sequence":"101", + "data":"hUdJyOfw9Y4X6IqtcZNwOy9vvkir2SK6MGlhqn6gF7w=" + }, + { + "portId":"transfer", + "channelId":"channel-126", + "sequence":"102", + "data":"pi3qUxhzyDrgmrTHMu+9AW3vEsGBl1W6YUsEgi/UCwo=" + }, + { + "portId":"transfer", + "channelId":"channel-126", + "sequence":"103", + "data":"eDSZipO0vWlCEzM5sS2DNL254KBMSMH5JZn0u5ccIIs=" + } + ], + "pagination":{ + "nextKey":"LzEwNA==", + "total":"0" + }, + "height":{ + "revisionNumber":"888", + "revisionHeight":"26836728" + } +} +``` + + + + +
ParameterTypeDescription
commitmentsPacketState ArrayCommitments information
paginationPageResponsePagination information in the response
heightHeightQuery block height
+ + +
+ +**PacketState** + + + + + +
ParameterTypeDescription
port_idStringPort identifier
channel_idStringChannel identifier
sequenceIntegerPacket sequence
dataByte ArrayEmbedded data that represents packet state
+ + +
+ +**PageResponse** + + + +
ParameterTypeDescription
next_keyByte ArrayThe key to be passed to PageRequest.key to query the next page most efficiently. It will be empty if there are no more results.
totalIntegerTotal number of results available if PageRequest.count_total was set, its value is undefined otherwise
+ + +
+ +**Height** + + + +
ParameterTypeDescription
revision_numberIntegerThe revision that the client is currently on
revision_heightIntegerThe height within the given revision
+ + + +## PacketReceipt + +Queries if a given packet sequence has been received on the queried chain + +**IP rate limit group:** `chain` + +### Request Parameters +> Request Example: + + + +```py +import asyncio + +from google.protobuf import symbol_database + +from pyinjective.async_client import AsyncClient +from pyinjective.core.network import Network + + +async def main() -> None: + network = Network.testnet() + client = AsyncClient(network) + + port_id = "transfer" + channel_id = "channel-126" + sequence = 1 + + receipt = await client.fetch_ibc_packet_receipt(port_id=port_id, channel_id=channel_id, sequence=sequence) + print(receipt) + + +if __name__ == "__main__": + symbol_db = symbol_database.Default() + asyncio.get_event_loop().run_until_complete(main()) +``` + + + + +```go +package main + +import ( + "context" + "encoding/json" + "fmt" + + "github.com/InjectiveLabs/sdk-go/client" + + chainclient "github.com/InjectiveLabs/sdk-go/client/chain" + "github.com/InjectiveLabs/sdk-go/client/common" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" + + "os" +) + +func main() { + network := common.LoadNetwork("testnet", "lb") + tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket") + if err != nil { + panic(err) + } + + senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring( + os.Getenv("HOME")+"/.injectived", + "injectived", + "file", + "inj-user", + "12345678", + "5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided + false, + ) + + if err != nil { + panic(err) + } + + clientCtx, err := chainclient.NewClientContext( + network.ChainId, + senderAddress.String(), + cosmosKeyring, + ) + + if err != nil { + panic(err) + } + + clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) + + chainClient, err := chainclient.NewChainClient( + clientCtx, + network, + common.OptionGasPrices(client.DefaultGasPriceWithDenom), + ) + + if err != nil { + panic(err) + } + + portId := "transfer" + channelId := "channel-126" + sequence := uint64(1) + ctx := context.Background() + + res, err := chainClient.FetchIBCPacketReceipt(ctx, portId, channelId, sequence) + if err != nil { + fmt.Println(err) + } + + str, _ := json.MarshalIndent(res, "", " ") + fmt.Print(string(str)) + +} +``` + + + + + +
ParameterTypeDescriptionRequired
port_idStringPort unique identifierYes
channel_idStringChannel unique identifierYes
sequenceIntegerPacket sequenceYes
+ + +### Response Parameters +> Response Example: + +``` json +{ + "received":true, + "proofHeight":{ + "revisionNumber":"888", + "revisionHeight":"27058834" + }, + "proof":"" +} +``` + + + + +
ParameterTypeDescription
receivedBooleanSuccess flag to mark if the receipt exists
proofByte ArrayMerkle proof of existence
proof_heightHeightHeight at which the proof was retrieved
+ + +
+ +**Height** + + + +
ParameterTypeDescription
revision_numberIntegerThe revision that the client is currently on
revision_heightIntegerThe height within the given revision
+ + + +## PacketAcknowledgement + +Queries a stored packet acknowledgement hash + +**IP rate limit group:** `chain` + +### Request Parameters +> Request Example: + + + +```py +import asyncio + +from google.protobuf import symbol_database + +from pyinjective.async_client import AsyncClient +from pyinjective.core.network import Network + + +async def main() -> None: + network = Network.testnet() + client = AsyncClient(network) + + port_id = "transfer" + channel_id = "channel-126" + sequence = 1 + + acknowledgement = await client.fetch_ibc_packet_acknowledgement( + port_id=port_id, channel_id=channel_id, sequence=sequence + ) + print(acknowledgement) + + +if __name__ == "__main__": + symbol_db = symbol_database.Default() + asyncio.get_event_loop().run_until_complete(main()) +``` + + + + +```go +package main + +import ( + "context" + "encoding/json" + "fmt" + + "github.com/InjectiveLabs/sdk-go/client" + + chainclient "github.com/InjectiveLabs/sdk-go/client/chain" + "github.com/InjectiveLabs/sdk-go/client/common" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" + + "os" +) + +func main() { + network := common.LoadNetwork("testnet", "lb") + tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket") + if err != nil { + panic(err) + } + + senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring( + os.Getenv("HOME")+"/.injectived", + "injectived", + "file", + "inj-user", + "12345678", + "5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided + false, + ) + + if err != nil { + panic(err) + } + + clientCtx, err := chainclient.NewClientContext( + network.ChainId, + senderAddress.String(), + cosmosKeyring, + ) + + if err != nil { + panic(err) + } + + clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) + + chainClient, err := chainclient.NewChainClient( + clientCtx, + network, + common.OptionGasPrices(client.DefaultGasPriceWithDenom), + ) + + if err != nil { + panic(err) + } + + portId := "transfer" + channelId := "channel-126" + sequence := uint64(1) + ctx := context.Background() + + res, err := chainClient.FetchIBCPacketAcknowledgement(ctx, portId, channelId, sequence) + if err != nil { + fmt.Println(err) + } + + str, _ := json.MarshalIndent(res, "", " ") + fmt.Print(string(str)) + +} +``` + + + + + +
ParameterTypeDescriptionRequired
port_idStringPort unique identifierYes
channel_idStringChannel unique identifierYes
sequenceIntegerPacket sequenceYes
+ + +### Response Parameters +> Response Example: + +``` json +{ + "acknowledgement":"CPdVftUYJv4Y2EUSvyTsdQAe268hI6R333KgqfNkCnw=", + "proofHeight":{ + "revisionNumber":"888", + "revisionHeight":"27065978" + }, + "proof":"" +} +``` + + + + +
ParameterTypeDescription
acknowledgementByte ArraySuccess flag to mark if the receipt exists
proofByte ArrayMerkle proof of existence
proof_heightHeightHeight at which the proof was retrieved
+ + +
+ +**Height** + + + +
ParameterTypeDescription
revision_numberIntegerThe revision that the client is currently on
revision_heightIntegerThe height within the given revision
+ + + +## PacketAcknowledgements + +Returns all the packet acknowledgements associated with a channel + +**IP rate limit group:** `chain` + +### Request Parameters +> Request Example: + + + +```py +import asyncio + +from google.protobuf import symbol_database + +from pyinjective.async_client import AsyncClient +from pyinjective.client.model.pagination import PaginationOption +from pyinjective.core.network import Network + + +async def main() -> None: + network = Network.testnet() + client = AsyncClient(network) + + port_id = "transfer" + channel_id = "channel-126" + sequences = [1, 2] + pagination = PaginationOption(skip=2, limit=4) + + acknowledgements = await client.fetch_ibc_packet_acknowledgements( + port_id=port_id, + channel_id=channel_id, + packet_commitment_sequences=sequences, + pagination=pagination, + ) + print(acknowledgements) + + +if __name__ == "__main__": + symbol_db = symbol_database.Default() + asyncio.get_event_loop().run_until_complete(main()) +``` + + + + +```go +package main + +import ( + "context" + "encoding/json" + "fmt" + + "github.com/cosmos/cosmos-sdk/types/query" + + "github.com/InjectiveLabs/sdk-go/client" + + chainclient "github.com/InjectiveLabs/sdk-go/client/chain" + "github.com/InjectiveLabs/sdk-go/client/common" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" + + "os" +) + +func main() { + network := common.LoadNetwork("testnet", "lb") + tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket") + if err != nil { + panic(err) + } + + senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring( + os.Getenv("HOME")+"/.injectived", + "injectived", + "file", + "inj-user", + "12345678", + "5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided + false, + ) + + if err != nil { + panic(err) + } + + clientCtx, err := chainclient.NewClientContext( + network.ChainId, + senderAddress.String(), + cosmosKeyring, + ) + + if err != nil { + panic(err) + } + + clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) + + chainClient, err := chainclient.NewChainClient( + clientCtx, + network, + common.OptionGasPrices(client.DefaultGasPriceWithDenom), + ) + + if err != nil { + panic(err) + } + + portId := "transfer" + channelId := "channel-126" + sequences := []uint64{1, 2} + pagination := query.PageRequest{Offset: 2, Limit: 4} + ctx := context.Background() + + res, err := chainClient.FetchIBCPacketAcknowledgements(ctx, portId, channelId, sequences, &pagination) + if err != nil { + fmt.Println(err) + } + + str, _ := json.MarshalIndent(res, "", " ") + fmt.Print(string(str)) + +} +``` + + + + + + +
ParameterTypeDescriptionRequired
port_idStringPort unique identifierYes
channel_idStringChannel unique identifierYes
paginationPageRequestThe optional pagination for the requestNo
packet_commitment_sequencesInteger ArrayList of packet sequencesNo
+ + +
+ +**PageRequest** + + + + + + +
ParameterTypeDescriptionRequired
keyByte ArrayKey is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be setNo
offsetIntegerNumeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be setNo
limitIntegerTotal number of results to be returned in the result pageNo
count_totalBooleanSet to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. It is only respected when offset is used. It is ignored when key is setNo
reverseBooleanReverse is set to true if results are to be returned in the descending orderNo
+ + +### Response Parameters +> Response Example: + +``` json +{ + "acknowledgements":[ + { + "portId":"transfer", + "channelId":"channel-126", + "sequence":"1", + "data":"CPdVftUYJv4Y2EUSvyTsdQAe268hI6R333KgqfNkCnw=" + }, + { + "portId":"transfer", + "channelId":"channel-126", + "sequence":"2", + "data":"CPdVftUYJv4Y2EUSvyTsdQAe268hI6R333KgqfNkCnw=" + } + ], + "height":{ + "revisionNumber":"888", + "revisionHeight":"27066401" + } +} +``` + + + + +
ParameterTypeDescription
acknowledgementsPacketState ArrayAcknowledgements details
paginationPageResponsePagination information in the response
heightHeightQuery block height
+ + +**PacketState** + + + + + +
ParameterTypeDescription
port_idStringPort identifier
channel_idStringChannel identifier
sequenceIntegerPacket sequence
dataByte ArrayEmbedded data that represents packet state
+ + +
+ +**PageResponse** + + + +
ParameterTypeDescription
next_keyByte ArrayThe key to be passed to PageRequest.key to query the next page most efficiently. It will be empty if there are no more results.
totalIntegerTotal number of results available if PageRequest.count_total was set, its value is undefined otherwise
+ + +
+ +**Height** + + + +
ParameterTypeDescription
revision_numberIntegerThe revision that the client is currently on
revision_heightIntegerThe height within the given revision
+ + + +## UnreceivedPackets + +Returns all the unreceived IBC packets associated with a channel and sequences + +**IP rate limit group:** `chain` + +### Request Parameters +> Request Example: + + + +```py +import asyncio + +from google.protobuf import symbol_database + +from pyinjective.async_client import AsyncClient +from pyinjective.core.network import Network + + +async def main() -> None: + network = Network.testnet() + client = AsyncClient(network) + + port_id = "transfer" + channel_id = "channel-126" + sequences = [1, 2] + + packets = await client.fetch_ibc_unreceived_packets( + port_id=port_id, channel_id=channel_id, packet_commitment_sequences=sequences + ) + print(packets) + + +if __name__ == "__main__": + symbol_db = symbol_database.Default() + asyncio.get_event_loop().run_until_complete(main()) +``` + + + + +```go +package main + +import ( + "context" + "encoding/json" + "fmt" + + "github.com/InjectiveLabs/sdk-go/client" + + chainclient "github.com/InjectiveLabs/sdk-go/client/chain" + "github.com/InjectiveLabs/sdk-go/client/common" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" + + "os" +) + +func main() { + network := common.LoadNetwork("testnet", "lb") + tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket") + if err != nil { + panic(err) + } + + senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring( + os.Getenv("HOME")+"/.injectived", + "injectived", + "file", + "inj-user", + "12345678", + "5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided + false, + ) + + if err != nil { + panic(err) + } + + clientCtx, err := chainclient.NewClientContext( + network.ChainId, + senderAddress.String(), + cosmosKeyring, + ) + + if err != nil { + panic(err) + } + + clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) + + chainClient, err := chainclient.NewChainClient( + clientCtx, + network, + common.OptionGasPrices(client.DefaultGasPriceWithDenom), + ) + + if err != nil { + panic(err) + } + + portId := "transfer" + channelId := "channel-126" + sequences := []uint64{1, 2} + ctx := context.Background() + + res, err := chainClient.FetchIBCUnreceivedPackets(ctx, portId, channelId, sequences) + if err != nil { + fmt.Println(err) + } + + str, _ := json.MarshalIndent(res, "", " ") + fmt.Print(string(str)) + +} +``` + + + + + +
ParameterTypeDescriptionRequired
port_idStringPort unique identifierYes
channel_idStringChannel unique identifierYes
packet_commitment_sequencesInteger ArrayList of packet sequencesNo
+ + +### Response Parameters +> Response Example: + +``` json +{ + "height":{ + "revisionNumber":"888", + "revisionHeight":"27067282" + }, + "sequences":[ + + ] +} +``` + + + +
ParameterTypeDescription
sequencesInteger ArrayList of unreceived packet sequences
heightHeightQuery block height
+ + +
+ +**Height** + + + +
ParameterTypeDescription
revision_numberIntegerThe revision that the client is currently on
revision_heightIntegerThe height within the given revision
+ + + +## UnreceivedAcks + +Returns all the unreceived IBC acknowledgements associated with a channel and sequences + +**IP rate limit group:** `chain` + +### Request Parameters +> Request Example: + + + +```py +import asyncio + +from google.protobuf import symbol_database + +from pyinjective.async_client import AsyncClient +from pyinjective.core.network import Network + + +async def main() -> None: + network = Network.testnet() + client = AsyncClient(network) + + port_id = "transfer" + channel_id = "channel-126" + + acks = await client.fetch_ibc_unreceived_acks( + port_id=port_id, + channel_id=channel_id, + ) + print(acks) + + +if __name__ == "__main__": + symbol_db = symbol_database.Default() + asyncio.get_event_loop().run_until_complete(main()) +``` + + + + +```go +package main + +import ( + "context" + "encoding/json" + "fmt" + + "github.com/InjectiveLabs/sdk-go/client" + + chainclient "github.com/InjectiveLabs/sdk-go/client/chain" + "github.com/InjectiveLabs/sdk-go/client/common" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" + + "os" +) + +func main() { + network := common.LoadNetwork("testnet", "lb") + tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket") + if err != nil { + panic(err) + } + + senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring( + os.Getenv("HOME")+"/.injectived", + "injectived", + "file", + "inj-user", + "12345678", + "5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided + false, + ) + + if err != nil { + panic(err) + } + + clientCtx, err := chainclient.NewClientContext( + network.ChainId, + senderAddress.String(), + cosmosKeyring, + ) + + if err != nil { + panic(err) + } + + clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) + + chainClient, err := chainclient.NewChainClient( + clientCtx, + network, + common.OptionGasPrices(client.DefaultGasPriceWithDenom), + ) + + if err != nil { + panic(err) + } + + portId := "transfer" + channelId := "channel-126" + sequences := []uint64{1, 2} + ctx := context.Background() + + res, err := chainClient.FetchIBCUnreceivedAcks(ctx, portId, channelId, sequences) + if err != nil { + fmt.Println(err) + } + + str, _ := json.MarshalIndent(res, "", " ") + fmt.Print(string(str)) + +} +``` + + + + + +
ParameterTypeDescriptionRequired
port_idStringPort unique identifierYes
channel_idStringChannel unique identifierYes
packet_ack_sequencesInteger ArrayList of acknowledgement sequencesNo
+ + +### Response Parameters +> Response Example: + +``` json +{ + "height":{ + "revisionNumber":"888", + "revisionHeight":"27067653" + }, + "sequences":[ + + ] +} +``` + + + +
ParameterTypeDescription
sequencesInteger ArrayList of unreceived packet sequences
heightHeightQuery block height
+ + +
+ +**Height** + + + +
ParameterTypeDescription
revision_numberIntegerThe revision that the client is currently on
revision_heightIntegerThe height within the given revision
+ + + +## NextSequenceReceive + +Returns the next receive sequence for a given channel + +**IP rate limit group:** `chain` + +### Request Parameters +> Request Example: + + + +```py +import asyncio + +from google.protobuf import symbol_database + +from pyinjective.async_client import AsyncClient +from pyinjective.core.network import Network + + +async def main() -> None: + network = Network.testnet() + client = AsyncClient(network) + + port_id = "transfer" + channel_id = "channel-126" + + sequence = await client.fetch_next_sequence_receive( + port_id=port_id, + channel_id=channel_id, + ) + print(sequence) + + +if __name__ == "__main__": + symbol_db = symbol_database.Default() + asyncio.get_event_loop().run_until_complete(main()) +``` + + + + +```go +package main + +import ( + "context" + "encoding/json" + "fmt" + + "github.com/InjectiveLabs/sdk-go/client" + + chainclient "github.com/InjectiveLabs/sdk-go/client/chain" + "github.com/InjectiveLabs/sdk-go/client/common" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" + + "os" +) + +func main() { + network := common.LoadNetwork("testnet", "lb") + tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket") + if err != nil { + panic(err) + } + + senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring( + os.Getenv("HOME")+"/.injectived", + "injectived", + "file", + "inj-user", + "12345678", + "5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided + false, + ) + + if err != nil { + panic(err) + } + + clientCtx, err := chainclient.NewClientContext( + network.ChainId, + senderAddress.String(), + cosmosKeyring, + ) + + if err != nil { + panic(err) + } + + clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) + + chainClient, err := chainclient.NewChainClient( + clientCtx, + network, + common.OptionGasPrices(client.DefaultGasPriceWithDenom), + ) + + if err != nil { + panic(err) + } + + portId := "transfer" + channelId := "channel-126" + ctx := context.Background() + + res, err := chainClient.FetchIBCNextSequenceReceive(ctx, portId, channelId) + if err != nil { + fmt.Println(err) + } + + str, _ := json.MarshalIndent(res, "", " ") + fmt.Print(string(str)) + +} +``` + + + + +
ParameterTypeDescriptionRequired
port_idStringPort unique identifierYes
channel_idStringChannel unique identifierYes
+ + +### Response Parameters +> Response Example: + +``` json +{ + "nextSequenceReceive":"1", + "proofHeight":{ + "revisionNumber":"888", + "revisionHeight":"27067952" + }, + "proof":"" +} +``` + + + + +
ParameterTypeDescription
next_sequence_receiveIntegerNext sequence receive number
proofByte ArrayMerkle proof of existence
proof_heightHeightHeight at which the proof was retrieved
+ + +
+ +**Height** + + + +
ParameterTypeDescription
revision_numberIntegerThe revision that the client is currently on
revision_heightIntegerThe height within the given revision
+ diff --git a/source/includes/_ibctransfer.md b/source/includes/_ibctransfer.md index 6f7c99c3..a83173eb 100644 --- a/source/includes/_ibctransfer.md +++ b/source/includes/_ibctransfer.md @@ -1,6 +1,6 @@ # - IBC Transfer -Includes all the messages and queries associated to transfers from the IBC chain module +Includes all the messages and queries associated to transfers from the IBC transfer module ## DenomTrace @@ -11,8 +11,8 @@ Queries a denomination trace information ### Request Parameters > Request Example: - - + + ```py import asyncio from hashlib import sha256 @@ -43,8 +43,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -164,8 +164,8 @@ Queries all denomination traces ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -192,8 +192,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -340,8 +340,8 @@ Queries a denomination hash information ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -369,8 +369,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -475,8 +475,8 @@ Returns the escrow address for a particular port and channel id ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -503,8 +503,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -609,8 +609,8 @@ Returns the total amount of tokens in escrow based on the denom ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -636,8 +636,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -752,8 +752,8 @@ Defines a msg to transfer fungible tokens (i.e Coins) between ICS20 enabled chai ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -819,8 +819,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_insurance.md b/source/includes/_insurance.md index 169bdf60..6728afc1 100644 --- a/source/includes/_insurance.md +++ b/source/includes/_insurance.md @@ -9,8 +9,8 @@ Includes the messages to create, underwrite and redeem in insurance funds. ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -131,8 +131,8 @@ gas fee: 0.000075824 INJ ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -244,8 +244,8 @@ gas fee: 0.000071021 INJ ### Request Parameters > Request Example: - - + + ```py import asyncio import os diff --git a/source/includes/_insurancerpc.md b/source/includes/_insurancerpc.md index 402cd64a..4a8517c2 100644 --- a/source/includes/_insurancerpc.md +++ b/source/includes/_insurancerpc.md @@ -11,8 +11,8 @@ List all the insurance funds. > Request Example: - - + + ```py import asyncio @@ -33,8 +33,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -169,8 +169,8 @@ Get a list of redemptions. If no parameters are provided, redemptions for all po ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -194,8 +194,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_metarpc.md b/source/includes/_metarpc.md index daccdd6f..d6609c11 100644 --- a/source/includes/_metarpc.md +++ b/source/includes/_metarpc.md @@ -10,8 +10,8 @@ Get the server health. > Request Example: - - + + ```py import asyncio @@ -32,8 +32,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -89,8 +89,8 @@ Get the server version. > Request Example: - - + + ```py import asyncio @@ -111,8 +111,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -198,8 +198,8 @@ Get the server information. ### Request Parameters > Request Example: - - + + ```py import asyncio import time @@ -224,8 +224,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -309,8 +309,8 @@ Subscribe to a stream and gracefully disconnect and connect to another sentry no > Request Example: - - + + ```py import asyncio from typing import Any, Dict @@ -373,8 +373,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_oracle.md b/source/includes/_oracle.md index 0aa48131..a6efd2bc 100644 --- a/source/includes/_oracle.md +++ b/source/includes/_oracle.md @@ -9,8 +9,8 @@ Includes the message to relay a price feed. ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -97,8 +97,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -225,8 +225,8 @@ gas fee: 0.0000568235 INJ ### Request Parameters > Request Example: - - + + ```py import asyncio import os diff --git a/source/includes/_oraclerpc.md b/source/includes/_oraclerpc.md index 66cb88f6..8951c312 100644 --- a/source/includes/_oraclerpc.md +++ b/source/includes/_oraclerpc.md @@ -11,8 +11,8 @@ Get a list of all oracles. > Request Example: - - + + ```py import asyncio @@ -33,8 +33,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -173,8 +173,8 @@ Get the oracle price of an asset. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -207,8 +207,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -285,8 +285,8 @@ Stream new price changes for a specified oracle. If no oracles are provided, all ### Request Parameters > Request Example: - - + + ```py import asyncio from typing import Any, Dict @@ -341,8 +341,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_portfoliorpc.md b/source/includes/_portfoliorpc.md index e054c1a1..44224c48 100644 --- a/source/includes/_portfoliorpc.md +++ b/source/includes/_portfoliorpc.md @@ -12,8 +12,8 @@ Get details about an account's portfolio. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -35,8 +35,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -291,8 +291,8 @@ Get continuous updates on account's portfolio. ### Request Parameters > Request Example: - - + + ```py import asyncio from typing import Any, Dict @@ -338,8 +338,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_spot.md b/source/includes/_spot.md index 88a82640..98835e4a 100644 --- a/source/includes/_spot.md +++ b/source/includes/_spot.md @@ -11,8 +11,8 @@ Retrieves a list of spot markets ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -39,8 +39,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -187,8 +187,8 @@ Retrieves a spot market by ticker ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -214,8 +214,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -358,8 +358,8 @@ Retrieves a list of spot markets with extra information ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -387,8 +387,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -563,8 +563,8 @@ Retrieves a spot market with extra information ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -591,8 +591,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -763,8 +763,8 @@ Retrieves a spot market's orderbook ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -795,8 +795,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -942,8 +942,8 @@ Retrieves a trader's spot orders ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -985,8 +985,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1131,8 +1131,8 @@ Retrieves all account address spot orders ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -1172,8 +1172,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1338,8 +1338,8 @@ Retrieves spot orders corresponding to specified order hashes for a given subacc ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -1382,8 +1382,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1509,8 +1509,8 @@ Retrieves a trader's transient spot orders ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -1552,8 +1552,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1671,8 +1671,8 @@ Retrieves a spot market's mid-price ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1698,8 +1698,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1803,8 +1803,8 @@ func main() { ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -1863,8 +1863,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2066,8 +2066,8 @@ func main() { ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -2172,8 +2172,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2461,8 +2461,8 @@ gas fee: 0.000064956 INJ ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -2565,8 +2565,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2852,8 +2852,8 @@ gas fee: 0.000065298 INJ ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -2942,8 +2942,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -3145,8 +3145,8 @@ Further note that if no marketIDs are provided in the SpotMarketIdsToCancelAll o ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -3327,8 +3327,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -3698,8 +3698,8 @@ This function computes order hashes locally for SpotOrder and DerivativeOrder. F ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -3970,8 +3970,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_spotrpc.md b/source/includes/_spotrpc.md index 77908c3a..83c24f5f 100644 --- a/source/includes/_spotrpc.md +++ b/source/includes/_spotrpc.md @@ -12,8 +12,8 @@ Get details of a single spot market. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -34,8 +34,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -178,8 +178,8 @@ Get a list of spot markets. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -204,8 +204,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -384,8 +384,8 @@ Stream live updates of spot markets. ### Request Parameters > Request Example: - - + + ```py import asyncio from typing import Any, Dict @@ -430,8 +430,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -599,8 +599,8 @@ List history of orders (all states) for a spot market. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -632,8 +632,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -972,8 +972,8 @@ Stream order updates for spot markets. If no parameters are given, updates to al ### Request Parameters > Request Example: - - + + ```py import asyncio from typing import Any, Dict @@ -1021,8 +1021,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1203,8 +1203,8 @@ Get trade history for a spot market. The default request returns all spot trades ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1235,8 +1235,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1556,8 +1556,8 @@ Stream newly executed trades of spot markets. The default request streams trades ### Request Parameters > Request Example: - - + + ```py import asyncio from typing import Any, Dict @@ -1614,8 +1614,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1815,8 +1815,8 @@ Get an orderbook snapshot for one or more spot markets. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1840,8 +1840,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1986,8 +1986,8 @@ Stream orderbook snapshot updates for one or more spot markets. ### Request Parameters > Request Example: - - + + ```py import asyncio from typing import Any, Dict @@ -2036,8 +2036,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2165,8 +2165,8 @@ Stream incremental orderbook updates for one or more spot markets. This stream s ### Request Parameters > Request Example: - - + + ```py import asyncio from decimal import Decimal @@ -2326,8 +2326,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2607,8 +2607,8 @@ Get orders of a subaccount. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -2637,8 +2637,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2830,8 +2830,8 @@ Get trades of a subaccount. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -2866,8 +2866,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_staking.md b/source/includes/_staking.md index 54a582da..fdff2098 100644 --- a/source/includes/_staking.md +++ b/source/includes/_staking.md @@ -10,8 +10,8 @@ Queries validator commission and self-delegation rewards for validator ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -32,8 +32,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -158,8 +158,8 @@ Queries rewards of a validator address ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -180,8 +180,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -307,8 +307,8 @@ Queries accumulated commission for a validator ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -329,8 +329,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -456,8 +456,8 @@ Queries slash events of a validator ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -482,8 +482,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -621,8 +621,8 @@ Queries the total rewards accrued by a delegation ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -646,8 +646,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -765,8 +765,8 @@ Queries the total rewards accrued by each validator ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -789,8 +789,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -951,8 +951,8 @@ Queries the validators of a delegator ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -975,8 +975,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1084,8 +1084,8 @@ Queries the withdraw address of a delegator ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1108,8 +1108,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1211,8 +1211,8 @@ Queries the community pool coins ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1232,8 +1232,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1346,8 +1346,8 @@ Changes the withdraw address for a delegator (or validator self-delegation) ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -1398,8 +1398,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1572,8 +1572,8 @@ Withdraw rewards of a delegator ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -1625,8 +1625,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1816,8 +1816,8 @@ Withdraws the full commission to the validator address ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -1867,8 +1867,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2039,8 +2039,8 @@ Allows an account to directly fund the community pool ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -2092,8 +2092,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2276,8 +2276,8 @@ Performs a coins delegation from a delegator to a validator ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -2364,8 +2364,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_tendermint.md b/source/includes/_tendermint.md index c07697b7..d3df248d 100644 --- a/source/includes/_tendermint.md +++ b/source/includes/_tendermint.md @@ -11,8 +11,8 @@ Gets the current node info ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -33,8 +33,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -231,8 +231,8 @@ Returns the node's syncing status ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -253,8 +253,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -354,8 +354,8 @@ Get the latest block ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -376,8 +376,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -698,7 +698,7 @@ No parameters **Data** -
ParameterTypeDescription
txsBytes ArrayTxs that will be applied by state @ block.Height+1. NOTE: not all txs here are valid. We're just agreeing on the order first. This means that block.AppHash does not include these txs.
+
ParameterTypeDescription
txsByte ArrayTxs that will be applied by state @ block.Height+1. NOTE: not all txs here are valid. We're just agreeing on the order first. This means that block.AppHash does not include these txs.

@@ -760,8 +760,8 @@ Get the block for a given height ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -782,8 +782,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1132,7 +1132,7 @@ func main() { **Data** -
ParameterTypeDescription
txsBytes ArrayTxs that will be applied by state @ block.Height+1. NOTE: not all txs here are valid. We're just agreeing on the order first. This means that block.AppHash does not include these txs.
+
ParameterTypeDescription
txsByte ArrayTxs that will be applied by state @ block.Height+1. NOTE: not all txs here are valid. We're just agreeing on the order first. This means that block.AppHash does not include these txs.

@@ -1194,8 +1194,8 @@ Get the latest validator-set ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1219,8 +1219,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1382,8 +1382,8 @@ Get the validator-set at a given height ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1410,8 +1410,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_tokenfactory.md b/source/includes/_tokenfactory.md index 71c8fad5..cfd78b47 100644 --- a/source/includes/_tokenfactory.md +++ b/source/includes/_tokenfactory.md @@ -11,8 +11,8 @@ Gets the authority metadata for tokens by their creator address ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -35,8 +35,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -157,8 +157,8 @@ Gets all the tokens created by a specific admin/creator ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -178,8 +178,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -368,8 +368,8 @@ Retrieves the entire auctions module's state ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -389,8 +389,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -605,8 +605,8 @@ Create a new denom ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -651,8 +651,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -756,8 +756,8 @@ Allows a token admin's account to mint more units ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -805,8 +805,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -918,8 +918,8 @@ Allows a token admin's account to burn circulating units ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -967,8 +967,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1080,8 +1080,8 @@ Allows a token admin's account to set the token metadata ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -1144,8 +1144,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1295,8 +1295,8 @@ Allows a token admin's account to transfer administrative privileged to other ac ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -1343,8 +1343,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_wasm.md b/source/includes/_wasm.md index 91855481..23222307 100644 --- a/source/includes/_wasm.md +++ b/source/includes/_wasm.md @@ -12,8 +12,8 @@ Queries validator commission and self-delegation rewards for validator ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -34,8 +34,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -180,8 +180,8 @@ Gets the contract code history ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -206,8 +206,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -431,8 +431,8 @@ Get all smart contracts for a code id ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -457,8 +457,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -587,8 +587,8 @@ Gets all raw store data for a single contract ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -613,8 +613,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -758,8 +758,8 @@ Gets single key from the raw store data of a contract ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -781,8 +781,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -885,8 +885,8 @@ Get smart query result from the contract ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -908,8 +908,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1018,8 +1018,8 @@ Gets the binary code and metadata for a contract ### Request Parameters > Request Example: - - + + ```py import asyncio import base64 @@ -1044,8 +1044,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1197,8 +1197,8 @@ Gets the metadata for all stored contract codes ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1222,8 +1222,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1407,8 +1407,8 @@ Gets the pinned code ids ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1432,8 +1432,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1560,8 +1560,8 @@ Gets the contracts by creator ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1586,8 +1586,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1711,8 +1711,8 @@ func main() { ### Request Parameters > Request Example: - - + + ```py import asyncio import os diff --git a/source/includes/_wasmx.md b/source/includes/_wasmx.md index 7c7a2676..c7855e5a 100644 --- a/source/includes/_wasmx.md +++ b/source/includes/_wasmx.md @@ -10,8 +10,8 @@ Wasmx smart contract interactions. ### Request Parameters > Request Example: - - + + ```py import asyncio import json @@ -105,8 +105,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/index.html.md b/source/index.html.md index ecf52b80..f739319d 100644 --- a/source/index.html.md +++ b/source/index.html.md @@ -36,6 +36,7 @@ includes: - derivatives - spot - binaryoptions + - ibccorechannel - ibctransfer - insurance - oracle diff --git a/source/json_tables/chain/ibc/core/channel/channel.json b/source/json_tables/chain/ibc/core/channel/channel.json new file mode 100644 index 00000000..a8181b4d --- /dev/null +++ b/source/json_tables/chain/ibc/core/channel/channel.json @@ -0,0 +1,7 @@ +[ + {"Parameter": "state", "Type": "State", "Description": "Current state of the channel end"}, + {"Parameter": "ordering", "Type": "Order", "Description": "Whether the channel is ordered or unordered"}, + {"Parameter": "counterparty", "Type": "Counterparty", "Description": "Counterparty channel end"}, + {"Parameter": "connection_hops", "Type": "String Array", "Description": "List of connection identifiers, in order, along which packets sent on this channel will travel"}, + {"Parameter": "version", "Type": "String", "Description": "Opaque channel version, which is agreed upon during the handshake"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/channel/counterparty.json b/source/json_tables/chain/ibc/core/channel/counterparty.json new file mode 100644 index 00000000..4228bff5 --- /dev/null +++ b/source/json_tables/chain/ibc/core/channel/counterparty.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "port_id", "Type": "String", "Description": "Port on the counterparty chain which owns the other end of the channel"}, + {"Parameter": "channel_id", "Type": "String", "Description": "Channel end on the counterparty chain"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/channel/identifiedChannel.json b/source/json_tables/chain/ibc/core/channel/identifiedChannel.json new file mode 100644 index 00000000..ef3c9bb8 --- /dev/null +++ b/source/json_tables/chain/ibc/core/channel/identifiedChannel.json @@ -0,0 +1,9 @@ +[ + {"Parameter": "state", "Type": "State", "Description": "Current state of the channel end"}, + {"Parameter": "ordering", "Type": "Order", "Description": "Whether the channel is ordered or unordered"}, + {"Parameter": "counterparty", "Type": "Counterparty", "Description": "Counterparty channel end"}, + {"Parameter": "connection_hops", "Type": "String Array", "Description": "List of connection identifiers, in order, along which packets sent on this channel will travel"}, + {"Parameter": "version", "Type": "String", "Description": "Opaque channel version, which is agreed upon during the handshake"}, + {"Parameter": "port_id", "Type": "String", "Description": "Port identifier"}, + {"Parameter": "channel_id", "Type": "String", "Description": "Channel identifier"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/channel/order.json b/source/json_tables/chain/ibc/core/channel/order.json new file mode 100644 index 00000000..a1c3d3ea --- /dev/null +++ b/source/json_tables/chain/ibc/core/channel/order.json @@ -0,0 +1,5 @@ +[ + {"Code": "0", "Name": "ORDER_NONE_UNSPECIFIED"}, + {"Code": "1", "Name": "ORDER_UNORDERED"}, + {"Code": "2", "Name": "ORDER_ORDERED"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/channel/packetState.json b/source/json_tables/chain/ibc/core/channel/packetState.json new file mode 100644 index 00000000..76cec0ee --- /dev/null +++ b/source/json_tables/chain/ibc/core/channel/packetState.json @@ -0,0 +1,6 @@ +[ + {"Parameter": "port_id", "Type": "String", "Description": "Port identifier"}, + {"Parameter": "channel_id", "Type": "String", "Description": "Channel identifier"}, + {"Parameter": "sequence", "Type": "Integer", "Description": "Packet sequence"}, + {"Parameter": "data", "Type": "Byte Array", "Description": "Embedded data that represents packet state"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/channel/queryChannelClientStateRequest.json b/source/json_tables/chain/ibc/core/channel/queryChannelClientStateRequest.json new file mode 100644 index 00000000..2a57e58d --- /dev/null +++ b/source/json_tables/chain/ibc/core/channel/queryChannelClientStateRequest.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "port_id", "Type": "String", "Description": "Port unique identifier", "Required": "Yes"}, + {"Parameter": "channel_id", "Type": "String", "Description": "Channel unique identifier", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/channel/queryChannelClientStateResponse.json b/source/json_tables/chain/ibc/core/channel/queryChannelClientStateResponse.json new file mode 100644 index 00000000..4b74ab4f --- /dev/null +++ b/source/json_tables/chain/ibc/core/channel/queryChannelClientStateResponse.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "identified_client_state", "Type": "IdentifiedChannel", "Description": "Client state associated with the channel"}, + {"Parameter": "proof", "Type": "Byte Array", "Description": "Merkle proof of existence"}, + {"Parameter": "proof_height", "Type": "Height", "Description": "Height at which the proof was retrieved"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/channel/queryChannelConsensusStateRequest.json b/source/json_tables/chain/ibc/core/channel/queryChannelConsensusStateRequest.json new file mode 100644 index 00000000..a289ff2e --- /dev/null +++ b/source/json_tables/chain/ibc/core/channel/queryChannelConsensusStateRequest.json @@ -0,0 +1,6 @@ +[ + {"Parameter": "port_id", "Type": "String", "Description": "Port unique identifier", "Required": "Yes"}, + {"Parameter": "channel_id", "Type": "String", "Description": "Channel unique identifier", "Required": "Yes"}, + {"Parameter": "revision_number", "Type": "Integer", "Description": "Revision number of the consensus state", "Required": "Yes"}, + {"Parameter": "revision_height", "Type": "Integer", "Description": "Revision height of the consensus state", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/channel/queryChannelConsensusStateResponse.json b/source/json_tables/chain/ibc/core/channel/queryChannelConsensusStateResponse.json new file mode 100644 index 00000000..a0106ae2 --- /dev/null +++ b/source/json_tables/chain/ibc/core/channel/queryChannelConsensusStateResponse.json @@ -0,0 +1,6 @@ +[ + {"Parameter": "consensus_state", "Type": "Any", "Description": "Consensus state associated with the channel"}, + {"Parameter": "client_id", "Type": "String", "Description": "Client ID associated with the consensus state"}, + {"Parameter": "proof", "Type": "Byte Array", "Description": "Merkle proof of existence"}, + {"Parameter": "proof_height", "Type": "Height", "Description": "Height at which the proof was retrieved"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/channel/queryChannelRequest.json b/source/json_tables/chain/ibc/core/channel/queryChannelRequest.json new file mode 100644 index 00000000..2a57e58d --- /dev/null +++ b/source/json_tables/chain/ibc/core/channel/queryChannelRequest.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "port_id", "Type": "String", "Description": "Port unique identifier", "Required": "Yes"}, + {"Parameter": "channel_id", "Type": "String", "Description": "Channel unique identifier", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/channel/queryChannelResponse.json b/source/json_tables/chain/ibc/core/channel/queryChannelResponse.json new file mode 100644 index 00000000..915d7e0c --- /dev/null +++ b/source/json_tables/chain/ibc/core/channel/queryChannelResponse.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "channel", "Type": "Channel", "Description": "Channel details"}, + {"Parameter": "proof", "Type": "Byte Array", "Description": "Merkle proof of existence"}, + {"Parameter": "proof_height", "Type": "Height", "Description": "Height at which the proof was retrieved"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/channel/queryChannelsRequest.json b/source/json_tables/chain/ibc/core/channel/queryChannelsRequest.json new file mode 100644 index 00000000..9da294d1 --- /dev/null +++ b/source/json_tables/chain/ibc/core/channel/queryChannelsRequest.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "pagination", "Type": "PageRequest", "Description": "The optional pagination for the request", "Required": "No"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/channel/queryChannelsResponse.json b/source/json_tables/chain/ibc/core/channel/queryChannelsResponse.json new file mode 100644 index 00000000..d518ebf5 --- /dev/null +++ b/source/json_tables/chain/ibc/core/channel/queryChannelsResponse.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "channels", "Type": "IdentifiedChannel Array", "Description": "List of channels"}, + {"Parameter": "pagination", "Type": "PageResponse", "Description": "Pagination information in the response"}, + {"Parameter": "height", "Type": "Height", "Description": "Query block height"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/channel/queryConnectionChannelsRequest.json b/source/json_tables/chain/ibc/core/channel/queryConnectionChannelsRequest.json new file mode 100644 index 00000000..c14b0a65 --- /dev/null +++ b/source/json_tables/chain/ibc/core/channel/queryConnectionChannelsRequest.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "connection", "Type": "String", "Description": "Connection unique identifier", "Required": "Yes"}, + {"Parameter": "pagination", "Type": "PageRequest", "Description": "The optional pagination for the request", "Required": "No"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/channel/queryConnectionChannelsResponse.json b/source/json_tables/chain/ibc/core/channel/queryConnectionChannelsResponse.json new file mode 100644 index 00000000..d518ebf5 --- /dev/null +++ b/source/json_tables/chain/ibc/core/channel/queryConnectionChannelsResponse.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "channels", "Type": "IdentifiedChannel Array", "Description": "List of channels"}, + {"Parameter": "pagination", "Type": "PageResponse", "Description": "Pagination information in the response"}, + {"Parameter": "height", "Type": "Height", "Description": "Query block height"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/channel/queryNextSequenceReceiveRequest.json b/source/json_tables/chain/ibc/core/channel/queryNextSequenceReceiveRequest.json new file mode 100644 index 00000000..2a57e58d --- /dev/null +++ b/source/json_tables/chain/ibc/core/channel/queryNextSequenceReceiveRequest.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "port_id", "Type": "String", "Description": "Port unique identifier", "Required": "Yes"}, + {"Parameter": "channel_id", "Type": "String", "Description": "Channel unique identifier", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/channel/queryNextSequenceReceiveResponse.json b/source/json_tables/chain/ibc/core/channel/queryNextSequenceReceiveResponse.json new file mode 100644 index 00000000..7298d44c --- /dev/null +++ b/source/json_tables/chain/ibc/core/channel/queryNextSequenceReceiveResponse.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "next_sequence_receive", "Type": "Integer", "Description": "Next sequence receive number"}, + {"Parameter": "proof", "Type": "Byte Array", "Description": "Merkle proof of existence"}, + {"Parameter": "proof_height", "Type": "Height", "Description": "Height at which the proof was retrieved"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/channel/queryPacketAcknowledgementRequest.json b/source/json_tables/chain/ibc/core/channel/queryPacketAcknowledgementRequest.json new file mode 100644 index 00000000..0cf6b279 --- /dev/null +++ b/source/json_tables/chain/ibc/core/channel/queryPacketAcknowledgementRequest.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "port_id", "Type": "String", "Description": "Port unique identifier", "Required": "Yes"}, + {"Parameter": "channel_id", "Type": "String", "Description": "Channel unique identifier", "Required": "Yes"}, + {"Parameter": "sequence", "Type": "Integer", "Description": "Packet sequence", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/channel/queryPacketAcknowledgementResponse.json b/source/json_tables/chain/ibc/core/channel/queryPacketAcknowledgementResponse.json new file mode 100644 index 00000000..af953b0b --- /dev/null +++ b/source/json_tables/chain/ibc/core/channel/queryPacketAcknowledgementResponse.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "acknowledgement", "Type": "Byte Array", "Description": "Success flag to mark if the receipt exists"}, + {"Parameter": "proof", "Type": "Byte Array", "Description": "Merkle proof of existence"}, + {"Parameter": "proof_height", "Type": "Height", "Description": "Height at which the proof was retrieved"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/channel/queryPacketAcknowledgementsRequest.json b/source/json_tables/chain/ibc/core/channel/queryPacketAcknowledgementsRequest.json new file mode 100644 index 00000000..e3186a0e --- /dev/null +++ b/source/json_tables/chain/ibc/core/channel/queryPacketAcknowledgementsRequest.json @@ -0,0 +1,6 @@ +[ + {"Parameter": "port_id", "Type": "String", "Description": "Port unique identifier", "Required": "Yes"}, + {"Parameter": "channel_id", "Type": "String", "Description": "Channel unique identifier", "Required": "Yes"}, + {"Parameter": "pagination", "Type": "PageRequest", "Description": "The optional pagination for the request", "Required": "No"}, + {"Parameter": "packet_commitment_sequences", "Type": "Integer Array", "Description": "List of packet sequences", "Required": "No"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/channel/queryPacketAcknowledgementsResponse.json b/source/json_tables/chain/ibc/core/channel/queryPacketAcknowledgementsResponse.json new file mode 100644 index 00000000..e4254ce5 --- /dev/null +++ b/source/json_tables/chain/ibc/core/channel/queryPacketAcknowledgementsResponse.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "acknowledgements", "Type": "PacketState Array", "Description": "Acknowledgements details"}, + {"Parameter": "pagination", "Type": "PageResponse", "Description": "Pagination information in the response"}, + {"Parameter": "height", "Type": "Height", "Description": "Query block height"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/channel/queryPacketCommitmentRequest.json b/source/json_tables/chain/ibc/core/channel/queryPacketCommitmentRequest.json new file mode 100644 index 00000000..0cf6b279 --- /dev/null +++ b/source/json_tables/chain/ibc/core/channel/queryPacketCommitmentRequest.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "port_id", "Type": "String", "Description": "Port unique identifier", "Required": "Yes"}, + {"Parameter": "channel_id", "Type": "String", "Description": "Channel unique identifier", "Required": "Yes"}, + {"Parameter": "sequence", "Type": "Integer", "Description": "Packet sequence", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/channel/queryPacketCommitmentResponse.json b/source/json_tables/chain/ibc/core/channel/queryPacketCommitmentResponse.json new file mode 100644 index 00000000..b9b2ab40 --- /dev/null +++ b/source/json_tables/chain/ibc/core/channel/queryPacketCommitmentResponse.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "commitment", "Type": "Byte Array", "Description": "Packet associated with the request fields"}, + {"Parameter": "proof", "Type": "Byte Array", "Description": "Merkle proof of existence"}, + {"Parameter": "proof_height", "Type": "Height", "Description": "Height at which the proof was retrieved"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/channel/queryPacketCommitmentsRequest.json b/source/json_tables/chain/ibc/core/channel/queryPacketCommitmentsRequest.json new file mode 100644 index 00000000..d47dfe9e --- /dev/null +++ b/source/json_tables/chain/ibc/core/channel/queryPacketCommitmentsRequest.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "port_id", "Type": "String", "Description": "Port unique identifier", "Required": "Yes"}, + {"Parameter": "channel_id", "Type": "String", "Description": "Channel unique identifier", "Required": "Yes"}, + {"Parameter": "pagination", "Type": "PageRequest", "Description": "The optional pagination for the request", "Required": "No"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/channel/queryPacketCommitmentsResponse.json b/source/json_tables/chain/ibc/core/channel/queryPacketCommitmentsResponse.json new file mode 100644 index 00000000..d373c70b --- /dev/null +++ b/source/json_tables/chain/ibc/core/channel/queryPacketCommitmentsResponse.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "commitments", "Type": "PacketState Array", "Description": "Commitments information"}, + {"Parameter": "pagination", "Type": "PageResponse", "Description": "Pagination information in the response"}, + {"Parameter": "height", "Type": "Height", "Description": "Query block height"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/channel/queryPacketReceiptRequest.json b/source/json_tables/chain/ibc/core/channel/queryPacketReceiptRequest.json new file mode 100644 index 00000000..0cf6b279 --- /dev/null +++ b/source/json_tables/chain/ibc/core/channel/queryPacketReceiptRequest.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "port_id", "Type": "String", "Description": "Port unique identifier", "Required": "Yes"}, + {"Parameter": "channel_id", "Type": "String", "Description": "Channel unique identifier", "Required": "Yes"}, + {"Parameter": "sequence", "Type": "Integer", "Description": "Packet sequence", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/channel/queryPacketReceiptResponse.json b/source/json_tables/chain/ibc/core/channel/queryPacketReceiptResponse.json new file mode 100644 index 00000000..f27c918f --- /dev/null +++ b/source/json_tables/chain/ibc/core/channel/queryPacketReceiptResponse.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "received", "Type": "Boolean", "Description": "Success flag to mark if the receipt exists"}, + {"Parameter": "proof", "Type": "Byte Array", "Description": "Merkle proof of existence"}, + {"Parameter": "proof_height", "Type": "Height", "Description": "Height at which the proof was retrieved"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/channel/queryUnreceivedAcksRequest.json b/source/json_tables/chain/ibc/core/channel/queryUnreceivedAcksRequest.json new file mode 100644 index 00000000..9cd86f55 --- /dev/null +++ b/source/json_tables/chain/ibc/core/channel/queryUnreceivedAcksRequest.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "port_id", "Type": "String", "Description": "Port unique identifier", "Required": "Yes"}, + {"Parameter": "channel_id", "Type": "String", "Description": "Channel unique identifier", "Required": "Yes"}, + {"Parameter": "packet_ack_sequences", "Type": "Integer Array", "Description": "List of acknowledgement sequences", "Required": "No"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/channel/queryUnreceivedAcksResponse.json b/source/json_tables/chain/ibc/core/channel/queryUnreceivedAcksResponse.json new file mode 100644 index 00000000..53e3d720 --- /dev/null +++ b/source/json_tables/chain/ibc/core/channel/queryUnreceivedAcksResponse.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "sequences", "Type": "Integer Array", "Description": "List of unreceived packet sequences"}, + {"Parameter": "height", "Type": "Height", "Description": "Query block height"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/channel/queryUnreceivedPacketsRequest.json b/source/json_tables/chain/ibc/core/channel/queryUnreceivedPacketsRequest.json new file mode 100644 index 00000000..a4a275f6 --- /dev/null +++ b/source/json_tables/chain/ibc/core/channel/queryUnreceivedPacketsRequest.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "port_id", "Type": "String", "Description": "Port unique identifier", "Required": "Yes"}, + {"Parameter": "channel_id", "Type": "String", "Description": "Channel unique identifier", "Required": "Yes"}, + {"Parameter": "packet_commitment_sequences", "Type": "Integer Array", "Description": "List of packet sequences", "Required": "No"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/channel/queryUnreceivedPacketsResponse.json b/source/json_tables/chain/ibc/core/channel/queryUnreceivedPacketsResponse.json new file mode 100644 index 00000000..53e3d720 --- /dev/null +++ b/source/json_tables/chain/ibc/core/channel/queryUnreceivedPacketsResponse.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "sequences", "Type": "Integer Array", "Description": "List of unreceived packet sequences"}, + {"Parameter": "height", "Type": "Height", "Description": "Query block height"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/channel/state.json b/source/json_tables/chain/ibc/core/channel/state.json new file mode 100644 index 00000000..8896ee70 --- /dev/null +++ b/source/json_tables/chain/ibc/core/channel/state.json @@ -0,0 +1,7 @@ +[ + {"Code": "0", "Name": "STATE_UNINITIALIZED_UNSPECIFIED"}, + {"Code": "1", "Name": "STATE_INIT"}, + {"Code": "2", "Name": "STATE_TRYOPEN"}, + {"Code": "3", "Name": "STATE_OPEN"}, + {"Code": "4", "Name": "STATE_CLOSED"} +] \ No newline at end of file diff --git a/source/json_tables/chain/tendermint/data.json b/source/json_tables/chain/tendermint/data.json index 613a9f87..94b278fd 100644 --- a/source/json_tables/chain/tendermint/data.json +++ b/source/json_tables/chain/tendermint/data.json @@ -1,3 +1,3 @@ [ - {"Parameter": "txs", "Type": "Bytes Array", "Description": "Txs that will be applied by state @ block.Height+1. NOTE: not all txs here are valid. We're just agreeing on the order first. This means that block.AppHash does not include these txs."} + {"Parameter": "txs", "Type": "Byte Array", "Description": "Txs that will be applied by state @ block.Height+1. NOTE: not all txs here are valid. We're just agreeing on the order first. This means that block.AppHash does not include these txs."} ] \ No newline at end of file From b195cc1eac65d7f7cc08fb4a1965c736838ab7d4 Mon Sep 17 00:00:00 2001 From: abel Date: Tue, 23 Apr 2024 16:29:34 -0300 Subject: [PATCH 4/4] (feat) Added documentation for IBC Core Client module --- source/includes/_account.md | 60 +- source/includes/_accountsrpc.md | 72 +- source/includes/_auction.md | 8 +- source/includes/_auctionsrpc.md | 24 +- source/includes/_authz.md | 32 +- source/includes/_bank.md | 92 +- source/includes/_binaryoptions.md | 40 +- source/includes/_broadcaster.md | 16 +- source/includes/_chainexchange.md | 224 +- source/includes/_chainstream.md | 8 +- source/includes/_changelog.md | 1 + source/includes/_derivatives.md | 208 +- source/includes/_derivativesrpc.md | 144 +- source/includes/_explorerrpc.md | 100 +- source/includes/_ibccorechannel.md | 104 +- source/includes/_ibccoreclient.md | 1960 +++++++++++++++++ source/includes/_ibctransfer.md | 48 +- source/includes/_insurance.md | 12 +- source/includes/_insurancerpc.md | 16 +- source/includes/_metarpc.md | 32 +- source/includes/_oracle.md | 12 +- source/includes/_oraclerpc.md | 24 +- source/includes/_portfoliorpc.md | 16 +- source/includes/_spot.md | 128 +- source/includes/_spotrpc.md | 96 +- source/includes/_staking.md | 112 +- source/includes/_tendermint.md | 48 +- source/includes/_tokenfactory.md | 64 +- source/includes/_wasm.md | 84 +- source/includes/_wasmx.md | 8 +- source/index.html.md | 1 + .../core/client/consensusStateWithHeight.json | 4 + .../core/client/identifiedClientState.json | 4 + .../chain/ibc/core/client/params.json | 3 + .../client/queryClientParamsResponse.json | 3 + .../core/client/queryClientStateRequest.json | 3 + .../core/client/queryClientStateResponse.json | 5 + .../core/client/queryClientStatesRequest.json | 3 + .../client/queryClientStatesResponse.json | 4 + .../core/client/queryClientStatusRequest.json | 3 + .../client/queryClientStatusResponse.json | 3 + .../queryConsensusStateHeightsRequest.json | 4 + .../queryConsensusStateHeightsResponse.json | 4 + .../client/queryConsensusStateRequest.json | 6 + .../client/queryConsensusStateResponse.json | 5 + .../client/queryConsensusStatesRequest.json | 4 + .../client/queryConsensusStatesResponse.json | 4 + .../queryUpgradedClientStateResponse.json | 3 + .../queryUpgradedConsensusStateResponse.json | 3 + 49 files changed, 2946 insertions(+), 916 deletions(-) create mode 100644 source/includes/_ibccoreclient.md create mode 100644 source/json_tables/chain/ibc/core/client/consensusStateWithHeight.json create mode 100644 source/json_tables/chain/ibc/core/client/identifiedClientState.json create mode 100644 source/json_tables/chain/ibc/core/client/params.json create mode 100644 source/json_tables/chain/ibc/core/client/queryClientParamsResponse.json create mode 100644 source/json_tables/chain/ibc/core/client/queryClientStateRequest.json create mode 100644 source/json_tables/chain/ibc/core/client/queryClientStateResponse.json create mode 100644 source/json_tables/chain/ibc/core/client/queryClientStatesRequest.json create mode 100644 source/json_tables/chain/ibc/core/client/queryClientStatesResponse.json create mode 100644 source/json_tables/chain/ibc/core/client/queryClientStatusRequest.json create mode 100644 source/json_tables/chain/ibc/core/client/queryClientStatusResponse.json create mode 100644 source/json_tables/chain/ibc/core/client/queryConsensusStateHeightsRequest.json create mode 100644 source/json_tables/chain/ibc/core/client/queryConsensusStateHeightsResponse.json create mode 100644 source/json_tables/chain/ibc/core/client/queryConsensusStateRequest.json create mode 100644 source/json_tables/chain/ibc/core/client/queryConsensusStateResponse.json create mode 100644 source/json_tables/chain/ibc/core/client/queryConsensusStatesRequest.json create mode 100644 source/json_tables/chain/ibc/core/client/queryConsensusStatesResponse.json create mode 100644 source/json_tables/chain/ibc/core/client/queryUpgradedClientStateResponse.json create mode 100644 source/json_tables/chain/ibc/core/client/queryUpgradedConsensusStateResponse.json diff --git a/source/includes/_account.md b/source/includes/_account.md index 46c50d3e..30d4afac 100644 --- a/source/includes/_account.md +++ b/source/includes/_account.md @@ -10,8 +10,8 @@ Includes all messages related to accounts and transfers. ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -96,8 +96,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -300,8 +300,8 @@ gas fee: 0.0000660495 INJ ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -384,8 +384,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -588,8 +588,8 @@ gas fee: 0.000064803 INJ ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -680,8 +680,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -886,8 +886,8 @@ gas fee: 0.0000610515 INJ ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -978,8 +978,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1184,8 +1184,8 @@ gas fee: 0.0000611985 INJ ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -1281,8 +1281,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1416,8 +1416,8 @@ gas fee: 0.0000809535 INJ ### Request Parameters > Request Example: - - + + ```py import asyncio import json @@ -1505,8 +1505,8 @@ Transaction hash: 0xb538abc7c2f893a2fe24c7a8ea606ff48d980a754499f1bec89b862c2bcb ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1527,8 +1527,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2303,8 +2303,8 @@ txhash: A2B2B971C690AE7977451D24D6F450AECE6BCCB271E91E32C2563342DDA5254B > Request Example: - - + + ```py import asyncio import base64 @@ -2356,8 +2356,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_accountsrpc.md b/source/includes/_accountsrpc.md index 38d84bc2..2f27d209 100644 --- a/source/includes/_accountsrpc.md +++ b/source/includes/_accountsrpc.md @@ -11,8 +11,8 @@ Get a list of subaccounts for a specific address. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -33,8 +33,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -108,8 +108,8 @@ Get the subaccount's transfer history. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -142,8 +142,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -315,8 +315,8 @@ Get the balance of a subaccount for a specific denom. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -338,8 +338,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -442,8 +442,8 @@ List the subaccount's balances for all denoms. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -465,8 +465,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -599,8 +599,8 @@ Get a summary of the subaccount's active/unfilled orders. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -625,8 +625,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -708,8 +708,8 @@ Stream the subaccount's balance for all denoms. ### Request Parameters > Request Example: - - + + ```py import asyncio from typing import Any, Dict @@ -756,8 +756,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -900,8 +900,8 @@ Get orders with an order hash. This request will return market orders and limit ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -931,8 +931,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1094,8 +1094,8 @@ Get an overview of your portfolio. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1116,8 +1116,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1289,8 +1289,8 @@ Get the rewards for Trade & Earn, the request will fetch all addresses for the l ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1312,8 +1312,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_auction.md b/source/includes/_auction.md index f270a06a..c7534548 100644 --- a/source/includes/_auction.md +++ b/source/includes/_auction.md @@ -9,8 +9,8 @@ Includes the message for placing bids in auctions. ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -92,8 +92,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_auctionsrpc.md b/source/includes/_auctionsrpc.md index de932865..20c70b1a 100644 --- a/source/includes/_auctionsrpc.md +++ b/source/includes/_auctionsrpc.md @@ -12,8 +12,8 @@ Get the details of a specific auction. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -35,8 +35,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -183,8 +183,8 @@ Get the details of previous auctions. > Request Example: - - + + ```py import asyncio @@ -205,8 +205,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -382,8 +382,8 @@ Stream live updates for auction bids. > Request Example: - - + + ```py import asyncio from typing import Any, Dict @@ -428,8 +428,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_authz.md b/source/includes/_authz.md index f4a2742a..40d75849 100644 --- a/source/includes/_authz.md +++ b/source/includes/_authz.md @@ -11,8 +11,8 @@ There are two types of authorization, Generic and Typed. Generic authorization w ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -114,8 +114,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -272,8 +272,8 @@ gas fee: 0.0000589365 INJ ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -382,8 +382,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -571,8 +571,8 @@ gas fee: 0.000066986 INJ ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -659,8 +659,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -784,8 +784,8 @@ Get the details of an authorization between a granter and a grantee. ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -813,8 +813,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_bank.md b/source/includes/_bank.md index 4ea8039d..ff452aad 100644 --- a/source/includes/_bank.md +++ b/source/includes/_bank.md @@ -9,8 +9,8 @@ Bank module. ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -97,8 +97,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -224,8 +224,8 @@ gas fee: 0.0000599355 INJ ### Request Parameters > Request Example: - - + + ```go package main @@ -390,8 +390,8 @@ Get the bank balance for all denoms. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -412,8 +412,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -590,8 +590,8 @@ Get the bank balance for a specific denom. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -613,8 +613,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -740,8 +740,8 @@ Get the bank spendable balances for a specific address. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -762,8 +762,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -979,8 +979,8 @@ Get the bank spendable balances for a specific address and denom. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1002,8 +1002,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1129,8 +1129,8 @@ Get the total supply for all tokens ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1153,8 +1153,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1364,8 +1364,8 @@ Queries the supply of a single token ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1385,8 +1385,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1505,8 +1505,8 @@ Queries the metadata of a single token ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1527,8 +1527,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1676,8 +1676,8 @@ Queries the metadata of all tokens ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1700,8 +1700,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2095,8 +2095,8 @@ Queries for all account addresses that own a particular token ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -2121,8 +2121,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2334,8 +2334,8 @@ This query only returns denominations that have specific SendEnabled settings. A ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -2360,8 +2360,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_binaryoptions.md b/source/includes/_binaryoptions.md index 163f964d..fdf8a92a 100644 --- a/source/includes/_binaryoptions.md +++ b/source/includes/_binaryoptions.md @@ -11,8 +11,8 @@ Retrieves binary options markets ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -36,8 +36,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -183,8 +183,8 @@ func main() { ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -249,8 +249,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -484,8 +484,8 @@ func main() { ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -739,8 +739,8 @@ gas fee: 0.0000606245 INJ ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -989,8 +989,8 @@ gas fee: 0.0000539515 INJ ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -1202,8 +1202,8 @@ gas fee: 0.0000556515 INJ ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -1428,8 +1428,8 @@ Further note that if no marketIDs are provided in the SpotMarketIdsToCancelAll o ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -1610,8 +1610,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_broadcaster.md b/source/includes/_broadcaster.md index 41778a2a..c0feb113 100644 --- a/source/includes/_broadcaster.md +++ b/source/includes/_broadcaster.md @@ -14,8 +14,8 @@ To use the broadcaster you just need to create an instance of *MsgBroadcasterWit > Example - Calculate gas fee simulating the transaction: - - + + ```py import asyncio import os @@ -151,8 +151,8 @@ This is the most common broadcaster configuration. Unless you are using grantee > Example - Calculate gas fee without simulation: - - + + ```py import asyncio import os @@ -241,8 +241,8 @@ This is the required broadcaster configuration when operating with grantee accou > Example - Calculate gas fee simulating the transaction: - - + + ```py import asyncio import os @@ -361,8 +361,8 @@ For the broadcaster to calculate the gas fee running the simulation, create an i > Example - Calculate gas fee without simulation: - - + + ```py import asyncio import os diff --git a/source/includes/_chainexchange.md b/source/includes/_chainexchange.md index 2f27905d..0dd1d07f 100644 --- a/source/includes/_chainexchange.md +++ b/source/includes/_chainexchange.md @@ -11,8 +11,8 @@ Retrieves a subaccount's deposits ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -51,8 +51,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -202,8 +202,8 @@ Retrieves a subaccount's deposit ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -242,8 +242,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -359,8 +359,8 @@ Retrieves the balances for all accounts registered in the exchange module ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -383,8 +383,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -509,8 +509,8 @@ Retrieves the aggregate volumes for the specified account or subaccount ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -551,8 +551,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -703,8 +703,8 @@ Retrieves the aggregate volumes for specified accounts ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -743,8 +743,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -899,8 +899,8 @@ Retrieves the aggregate volume for the specified market ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -926,8 +926,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1042,8 +1042,8 @@ Retrieves the aggregate market volumes for specified markets ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1069,8 +1069,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1199,8 +1199,8 @@ Retrieves the number of decimals used for a denom ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1224,8 +1224,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1328,8 +1328,8 @@ Retrieves the denom decimals for multiple denoms ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1353,8 +1353,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1476,8 +1476,8 @@ Retrieves subaccount's orders ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -1519,8 +1519,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1649,8 +1649,8 @@ Retrieves a subaccount's trade nonce ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -1691,8 +1691,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1795,8 +1795,8 @@ Retrieves subaccount's order metadata ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -1837,8 +1837,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1988,8 +1988,8 @@ Retrieves the account and total trade rewards points ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -2028,8 +2028,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2134,8 +2134,8 @@ Retrieves the pending account and total trade rewards points ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -2174,8 +2174,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2280,8 +2280,8 @@ Retrieves the trade reward campaign ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -2318,8 +2318,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2470,8 +2470,8 @@ Retrieves the account's fee discount info ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -2510,8 +2510,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2639,8 +2639,8 @@ Retrieves the fee discount schedule ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -2664,8 +2664,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2852,8 +2852,8 @@ Retrieves mismatches between available vs. total balance ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -2877,8 +2877,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -3110,8 +3110,8 @@ Retrieves available and total balances with balance holds ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -3135,8 +3135,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -3261,8 +3261,8 @@ Retrieves fee discount tier stats ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -3286,8 +3286,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -3431,8 +3431,8 @@ Retrieves market making pool info ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -3456,8 +3456,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -3569,8 +3569,8 @@ Returns the market ID for a given vault subaccount ID ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -3594,8 +3594,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -3695,8 +3695,8 @@ Retrieves historical trade records for a given market ID ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -3722,8 +3722,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -3861,8 +3861,8 @@ Retrieves if the account is opted out of rewards ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -3901,8 +3901,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -4003,8 +4003,8 @@ Retrieves all accounts opted out of rewards ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -4028,8 +4028,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -4136,8 +4136,8 @@ Computes the volatility for spot and derivative markets trading history ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -4172,8 +4172,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -4347,8 +4347,8 @@ Retrieves the atomic execution fee multiplier ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -4374,8 +4374,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -4476,8 +4476,8 @@ func main() { ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -4559,8 +4559,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_chainstream.md b/source/includes/_chainstream.md index 957f9267..81e0886f 100644 --- a/source/includes/_chainstream.md +++ b/source/includes/_chainstream.md @@ -11,8 +11,8 @@ A filter can be specified with a list of values, generally MarketIds, Subaccount A filter can also be omitted, in this case the stream will return all the events for the specified type. In addition each filter supports a `*` wildcard to match all possible values. - - + + ```py import asyncio from typing import Any, Dict @@ -95,8 +95,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_changelog.md b/source/includes/_changelog.md index 90681f37..dd4c5044 100644 --- a/source/includes/_changelog.md +++ b/source/includes/_changelog.md @@ -6,6 +6,7 @@ - Added support for all queries from the `tendermint` module - Added support for all queries from the `IBC transfer` module - Added support for all queries from the `IBC core channel` module + - Added support for all queries from the `IBC core client` module ## 2024-03-08 - Updated the API documentation to include all queries and messages for the `distribution` and `chain exchange` modules diff --git a/source/includes/_derivatives.md b/source/includes/_derivatives.md index 85b7b582..e43203fe 100644 --- a/source/includes/_derivatives.md +++ b/source/includes/_derivatives.md @@ -11,8 +11,8 @@ Retrieves a derivative market's mid-price ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -38,8 +38,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -145,8 +145,8 @@ Retrieves a derivative market's orderbook by marketID ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -176,8 +176,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -315,8 +315,8 @@ Retrieves a trader's derivative orders ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -358,8 +358,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -478,8 +478,8 @@ Retrieves all account address' derivative orders ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -519,8 +519,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -638,8 +638,8 @@ Retrieves a trader's derivative orders ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -682,8 +682,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -804,8 +804,8 @@ Retrieves a trader's transient derivative orders ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -847,8 +847,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -967,8 +967,8 @@ Retrieves a list of derivative markets ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -995,8 +995,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1247,8 +1247,8 @@ Retrieves a derivative market by market ID ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1274,8 +1274,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1520,8 +1520,8 @@ Retrieves a derivative market's corresponding address for fees that contribute t ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1547,8 +1547,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1653,8 +1653,8 @@ Retrieves the entire exchange module's positions ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1678,8 +1678,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1823,8 +1823,8 @@ Retrieves subaccount's positions ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -1865,8 +1865,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2047,8 +2047,8 @@ Retrieves subaccount's position in market ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -2090,8 +2090,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2214,8 +2214,8 @@ Retrieves subaccount's position in market ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -2257,8 +2257,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2379,8 +2379,8 @@ Retrieves perpetual market's info ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -2406,8 +2406,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2528,8 +2528,8 @@ Retrieves expiry market's info ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -2555,8 +2555,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2669,8 +2669,8 @@ Retrieves perpetual market funding ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -2696,8 +2696,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2814,8 +2814,8 @@ Retrieves a trader's derivative conditional orders ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -2857,8 +2857,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2976,8 +2976,8 @@ func main() { ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -3043,8 +3043,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -3276,8 +3276,8 @@ func main() { ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -3344,8 +3344,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -3579,8 +3579,8 @@ func main() { ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -3686,8 +3686,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -3975,8 +3975,8 @@ gas fee: 0.0000857195 INJ ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -4082,8 +4082,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -4374,8 +4374,8 @@ gas fee: 0.000069981 INJ ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -4464,8 +4464,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -4688,8 +4688,8 @@ Further note that if no marketIDs are provided in the SpotMarketIdsToCancelAll o ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -4870,8 +4870,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -5244,8 +5244,8 @@ To detect the liquidable positions please use the Indexer endpoint called [Liqui ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -5359,8 +5359,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -5615,8 +5615,8 @@ func main() { ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -5709,8 +5709,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -5910,8 +5910,8 @@ This function computes order hashes locally for SpotOrder and DerivativeOrder. F ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -6182,8 +6182,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_derivativesrpc.md b/source/includes/_derivativesrpc.md index 0c5ab506..008cde71 100644 --- a/source/includes/_derivativesrpc.md +++ b/source/includes/_derivativesrpc.md @@ -11,8 +11,8 @@ Get details of a single derivative market. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -34,8 +34,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -239,8 +239,8 @@ Get a list of one or more derivative markets. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -263,8 +263,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -546,8 +546,8 @@ Stream live updates of derivative markets. ### Request Parameters > Request Example: - - + + ```py import asyncio from typing import Any, Dict @@ -592,8 +592,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -816,8 +816,8 @@ Lists historical orders posted from a subaccount ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -850,8 +850,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1157,8 +1157,8 @@ Stream order updates of a derivative market. ### Request Parameters > Request Example: - - + + ```py import asyncio from typing import Any, Dict @@ -1205,8 +1205,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1415,8 +1415,8 @@ The difference between `Trades` and `TradesV2` is that the latter returns a `tra ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1445,8 +1445,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1825,8 +1825,8 @@ The difference between `StreamTrades` and `StreamTradesV2` is that the latter re ### Request Parameters > Request Example: - - + + ```py import asyncio from typing import Any, Dict @@ -1878,8 +1878,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2135,8 +2135,8 @@ Get the positions of a market. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -2174,8 +2174,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2451,8 +2451,8 @@ Stream position updates for a specific market. ### Request Parameters > Request Example: - - + + ```py import asyncio from typing import Any, Dict @@ -2501,8 +2501,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2678,8 +2678,8 @@ Gets all the liquidable positions ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -2707,8 +2707,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2990,8 +2990,8 @@ Get an orderbook snapshot for one or more derivative markets. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -3016,8 +3016,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -3236,8 +3236,8 @@ Stream orderbook snapshot updates for one or more derivative markets ### Request Parameters > Request Example: - - + + ```py import asyncio from typing import Any, Dict @@ -3284,8 +3284,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -3402,8 +3402,8 @@ Stream incremental orderbook updates for one or more derivative markets. This st ### Request Parameters > Request Example: - - + + ```py import asyncio from decimal import Decimal @@ -3563,8 +3563,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -3843,8 +3843,8 @@ Get the derivative orders of a specific subaccount. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -3873,8 +3873,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -4059,8 +4059,8 @@ Get the derivative trades for a specific subaccount. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -4095,8 +4095,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -4283,8 +4283,8 @@ Get the funding payments for a subaccount. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -4314,8 +4314,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -4458,8 +4458,8 @@ Get the historical funding rates for a specific market. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -4486,8 +4486,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -4615,8 +4615,8 @@ Get details of a single binary options market. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -4728,8 +4728,8 @@ Get a list of binary options markets. ### Request Parameters > Request Example: - - + + ```py import asyncio diff --git a/source/includes/_explorerrpc.md b/source/includes/_explorerrpc.md index 3236a6a7..38b8b5dd 100644 --- a/source/includes/_explorerrpc.md +++ b/source/includes/_explorerrpc.md @@ -12,8 +12,8 @@ Get the details for a specific transaction. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -42,8 +42,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -267,8 +267,8 @@ Get the details for a specific transaction. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -304,8 +304,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -683,8 +683,8 @@ Get data for blocks. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -708,8 +708,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -852,8 +852,8 @@ Get detailed data for a single block. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -875,8 +875,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1020,8 +1020,8 @@ Get the transactions. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1045,8 +1045,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1250,8 +1250,8 @@ Stream transactions. > Request Example: - - + + ```py import asyncio from typing import Any, Dict @@ -1296,8 +1296,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1443,8 +1443,8 @@ Stream blocks. > Request Example: - - + + ```py import asyncio from typing import Any, Dict @@ -1489,8 +1489,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1624,8 +1624,8 @@ Get info on peggy deposits. By default, deposits for all senders and receivers w ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1647,8 +1647,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1824,8 +1824,8 @@ Get info on peggy withdrawals. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1850,8 +1850,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2045,8 +2045,8 @@ Get data on IBC transfers. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -2085,8 +2085,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2249,8 +2249,8 @@ List all cosmwasm code on injective chain. Results are paginated. > Request Example: - - + + ```go package main @@ -2435,8 +2435,8 @@ Get cosmwasm code by its code ID > Request Example: - - + + ```go package main @@ -2539,8 +2539,8 @@ Get cosmwasm instantiated contracts on injective-chain. Results are paginated. > Request Example: - - + + ```go package main @@ -2751,8 +2751,8 @@ Get cosmwasm contract by its address > Request Example: - - + + ```go package main @@ -2876,8 +2876,8 @@ Get CW20 balances of an injective account across all instantiated CW20 contracts > Request Example: - - + + ```go package main diff --git a/source/includes/_ibccorechannel.md b/source/includes/_ibccorechannel.md index 7fc479a7..f1bb688f 100644 --- a/source/includes/_ibccorechannel.md +++ b/source/includes/_ibccorechannel.md @@ -11,8 +11,8 @@ Queries an IBC Channel ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -39,8 +39,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -213,8 +213,8 @@ Queries all the IBC channels of a chain ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -241,8 +241,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -489,8 +489,8 @@ Queries all the channels associated with a connection end ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -518,8 +518,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -782,8 +782,8 @@ Queries the client state for the channel associated with the provided channel id ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -810,8 +810,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1050,8 +1050,8 @@ Queries the client state for the channel associated with the provided channel id ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1082,8 +1082,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1215,8 +1215,8 @@ Queries a stored packet commitment hash ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1244,8 +1244,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1368,8 +1368,8 @@ Returns all the packet commitments hashes associated with a channel ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1402,8 +1402,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1576,8 +1576,8 @@ Queries if a given packet sequence has been received on the queried chain ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1605,8 +1605,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1729,8 +1729,8 @@ Queries a stored packet acknowledgement hash ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1760,8 +1760,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1884,8 +1884,8 @@ Returns all the packet acknowledgements associated with a channel ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1920,8 +1920,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2090,8 +2090,8 @@ Returns all the unreceived IBC packets associated with a channel and sequences ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -2121,8 +2121,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2245,8 +2245,8 @@ Returns all the unreceived IBC acknowledgements associated with a channel and se ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -2276,8 +2276,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2400,8 +2400,8 @@ Returns the next receive sequence for a given channel ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -2431,8 +2431,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_ibccoreclient.md b/source/includes/_ibccoreclient.md new file mode 100644 index 00000000..70aa0a6e --- /dev/null +++ b/source/includes/_ibccoreclient.md @@ -0,0 +1,1960 @@ +# - IBC Core Client + +Includes all the messages and queries associated to clients and consensus from the IBC core client module + +## ClientState + +Queries an IBC light client + +**IP rate limit group:** `chain` + +### Request Parameters +> Request Example: + + + +```py +import asyncio + +from google.protobuf import symbol_database + +from pyinjective.async_client import AsyncClient +from pyinjective.core.network import Network + + +async def main() -> None: + network = Network.testnet() + client = AsyncClient(network) + + client_id = "07-tendermint-0" + + state = await client.fetch_ibc_client_state(client_id=client_id) + print(state) + + +if __name__ == "__main__": + symbol_db = symbol_database.Default() + asyncio.get_event_loop().run_until_complete(main()) +``` + + + + +```go +package main + +import ( + "context" + "fmt" + + "github.com/InjectiveLabs/sdk-go/client" + + chainclient "github.com/InjectiveLabs/sdk-go/client/chain" + "github.com/InjectiveLabs/sdk-go/client/common" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" + + "os" +) + +func main() { + network := common.LoadNetwork("testnet", "lb") + tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket") + if err != nil { + panic(err) + } + + senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring( + os.Getenv("HOME")+"/.injectived", + "injectived", + "file", + "inj-user", + "12345678", + "5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided + false, + ) + + if err != nil { + panic(err) + } + + clientCtx, err := chainclient.NewClientContext( + network.ChainId, + senderAddress.String(), + cosmosKeyring, + ) + + if err != nil { + panic(err) + } + + clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) + + chainClient, err := chainclient.NewChainClient( + clientCtx, + network, + common.OptionGasPrices(client.DefaultGasPriceWithDenom), + ) + + if err != nil { + panic(err) + } + + clientId := "07-tendermint-0" + ctx := context.Background() + + res, err := chainClient.FetchIBCClientState(ctx, clientId) + if err != nil { + fmt.Println(err) + } + + fmt.Print(res) + +} +``` + + + +
ParameterTypeDescriptionRequired
client_idStringClient state unique identifierYes
+ + +### Response Parameters +> Response Example: + +``` json +{ + "clientState":{ + "@type":"/ibc.lightclients.tendermint.v1.ClientState", + "chainId":"band-laozi-testnet4", + "trustLevel":{ + "numerator":"1", + "denominator":"3" + }, + "trustingPeriod":"1209600s", + "unbondingPeriod":"1814400s", + "maxClockDrift":"20s", + "frozenHeight":{ + "revisionNumber":"0", + "revisionHeight":"0" + }, + "latestHeight":{ + "revisionHeight":"7379538", + "revisionNumber":"0" + }, + "proofSpecs":[ + { + "leafSpec":{ + "hash":"SHA256", + "prehashValue":"SHA256", + "length":"VAR_PROTO", + "prefix":"AA==", + "prehashKey":"NO_HASH" + }, + "innerSpec":{ + "childOrder":[ + 0, + 1 + ], + "childSize":33, + "minPrefixLength":4, + "maxPrefixLength":12, + "hash":"SHA256", + "emptyChild":"" + }, + "maxDepth":0, + "minDepth":0, + "prehashKeyBeforeComparison":false + }, + { + "leafSpec":{ + "hash":"SHA256", + "prehashValue":"SHA256", + "length":"VAR_PROTO", + "prefix":"AA==", + "prehashKey":"NO_HASH" + }, + "innerSpec":{ + "childOrder":[ + 0, + 1 + ], + "childSize":32, + "minPrefixLength":1, + "maxPrefixLength":1, + "hash":"SHA256", + "emptyChild":"" + }, + "maxDepth":0, + "minDepth":0, + "prehashKeyBeforeComparison":false + } + ], + "upgradePath":[ + "upgrade", + "upgradedIBCState" + ], + "allowUpdateAfterExpiry":true, + "allowUpdateAfterMisbehaviour":true + }, + "proofHeight":{ + "revisionNumber":"888", + "revisionHeight":"27527237" + }, + "proof":"" +} +``` + + + + +
ParameterTypeDescription
client_stateAnyClient state associated with the request identifier
proofByte ArrayMerkle proof of existence
proof_heightHeightHeight at which the proof was retrieved
+ + +
+ +**Height** + + + +
ParameterTypeDescription
revision_numberIntegerThe revision that the client is currently on
revision_heightIntegerThe height within the given revision
+ + + +## ClientStates + +Queries all the IBC light clients of a chain + +**IP rate limit group:** `chain` + +### Request Parameters +> Request Example: + + + +```py +import asyncio + +from google.protobuf import symbol_database + +from pyinjective.async_client import AsyncClient +from pyinjective.client.model.pagination import PaginationOption +from pyinjective.core.network import Network + + +async def main() -> None: + network = Network.testnet() + client = AsyncClient(network) + + pagination = PaginationOption(skip=2, limit=4) + + states = await client.fetch_ibc_client_states(pagination=pagination) + print(states) + + +if __name__ == "__main__": + symbol_db = symbol_database.Default() + asyncio.get_event_loop().run_until_complete(main()) +``` + + + + +```go +package main + +import ( + "context" + "fmt" + + "github.com/cosmos/cosmos-sdk/types/query" + + "github.com/InjectiveLabs/sdk-go/client" + + chainclient "github.com/InjectiveLabs/sdk-go/client/chain" + "github.com/InjectiveLabs/sdk-go/client/common" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" + + "os" +) + +func main() { + network := common.LoadNetwork("testnet", "lb") + tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket") + if err != nil { + panic(err) + } + + senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring( + os.Getenv("HOME")+"/.injectived", + "injectived", + "file", + "inj-user", + "12345678", + "5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided + false, + ) + + if err != nil { + panic(err) + } + + clientCtx, err := chainclient.NewClientContext( + network.ChainId, + senderAddress.String(), + cosmosKeyring, + ) + + if err != nil { + panic(err) + } + + clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) + + chainClient, err := chainclient.NewChainClient( + clientCtx, + network, + common.OptionGasPrices(client.DefaultGasPriceWithDenom), + ) + + if err != nil { + panic(err) + } + + pagination := query.PageRequest{Offset: 2, Limit: 4} + ctx := context.Background() + + res, err := chainClient.FetchIBCClientStates(ctx, &pagination) + if err != nil { + fmt.Println(err) + } + + fmt.Print(res) + +} +``` + + + +
ParameterTypeDescriptionRequired
paginationPageRequestThe optional pagination for the requestNo
+ + +### Response Parameters +> Response Example: + +``` json +{ + "clientStates":[ + { + "clientId":"07-tendermint-0", + "clientState":{ + "@type":"/ibc.lightclients.tendermint.v1.ClientState", + "chainId":"band-laozi-testnet4", + "trustLevel":{ + "numerator":"1", + "denominator":"3" + }, + "trustingPeriod":"1209600s", + "unbondingPeriod":"1814400s", + "maxClockDrift":"20s", + "frozenHeight":{ + "revisionNumber":"0", + "revisionHeight":"0" + }, + "latestHeight":{ + "revisionHeight":"7379538", + "revisionNumber":"0" + }, + "proofSpecs":[ + { + "leafSpec":{ + "hash":"SHA256", + "prehashValue":"SHA256", + "length":"VAR_PROTO", + "prefix":"AA==", + "prehashKey":"NO_HASH" + }, + "innerSpec":{ + "childOrder":[ + 0, + 1 + ], + "childSize":33, + "minPrefixLength":4, + "maxPrefixLength":12, + "hash":"SHA256", + "emptyChild":"" + }, + "maxDepth":0, + "minDepth":0, + "prehashKeyBeforeComparison":false + }, + { + "leafSpec":{ + "hash":"SHA256", + "prehashValue":"SHA256", + "length":"VAR_PROTO", + "prefix":"AA==", + "prehashKey":"NO_HASH" + }, + "innerSpec":{ + "childOrder":[ + 0, + 1 + ], + "childSize":32, + "minPrefixLength":1, + "maxPrefixLength":1, + "hash":"SHA256", + "emptyChild":"" + }, + "maxDepth":0, + "minDepth":0, + "prehashKeyBeforeComparison":false + } + ], + "upgradePath":[ + "upgrade", + "upgradedIBCState" + ], + "allowUpdateAfterExpiry":true, + "allowUpdateAfterMisbehaviour":true + } + }, + { + "clientId":"07-tendermint-1", + "clientState":{ + "@type":"/ibc.lightclients.tendermint.v1.ClientState", + "chainId":"band-laozi-testnet4", + "trustLevel":{ + "numerator":"1", + "denominator":"3" + }, + "trustingPeriod":"1209600s", + "unbondingPeriod":"1814400s", + "maxClockDrift":"20s", + "frozenHeight":{ + "revisionNumber":"0", + "revisionHeight":"0" + }, + "latestHeight":{ + "revisionHeight":"7692651", + "revisionNumber":"0" + }, + "proofSpecs":[ + { + "leafSpec":{ + "hash":"SHA256", + "prehashValue":"SHA256", + "length":"VAR_PROTO", + "prefix":"AA==", + "prehashKey":"NO_HASH" + }, + "innerSpec":{ + "childOrder":[ + 0, + 1 + ], + "childSize":33, + "minPrefixLength":4, + "maxPrefixLength":12, + "hash":"SHA256", + "emptyChild":"" + }, + "maxDepth":0, + "minDepth":0, + "prehashKeyBeforeComparison":false + }, + { + "leafSpec":{ + "hash":"SHA256", + "prehashValue":"SHA256", + "length":"VAR_PROTO", + "prefix":"AA==", + "prehashKey":"NO_HASH" + }, + "innerSpec":{ + "childOrder":[ + 0, + 1 + ], + "childSize":32, + "minPrefixLength":1, + "maxPrefixLength":1, + "hash":"SHA256", + "emptyChild":"" + }, + "maxDepth":0, + "minDepth":0, + "prehashKeyBeforeComparison":false + } + ], + "upgradePath":[ + "upgrade", + "upgradedIBCState" + ], + "allowUpdateAfterExpiry":true, + "allowUpdateAfterMisbehaviour":true + } + }, + { + "clientId":"07-tendermint-10", + "clientState":{ + "@type":"/ibc.lightclients.tendermint.v1.ClientState", + "chainId":"pisco-1", + "trustLevel":{ + "numerator":"1", + "denominator":"3" + }, + "trustingPeriod":"345600s", + "unbondingPeriod":"432000s", + "maxClockDrift":"50s", + "frozenHeight":{ + "revisionNumber":"0", + "revisionHeight":"0" + }, + "latestHeight":{ + "revisionNumber":"1", + "revisionHeight":"2304261" + }, + "proofSpecs":[ + { + "leafSpec":{ + "hash":"SHA256", + "prehashValue":"SHA256", + "length":"VAR_PROTO", + "prefix":"AA==", + "prehashKey":"NO_HASH" + }, + "innerSpec":{ + "childOrder":[ + 0, + 1 + ], + "childSize":33, + "minPrefixLength":4, + "maxPrefixLength":12, + "hash":"SHA256", + "emptyChild":"" + }, + "maxDepth":0, + "minDepth":0, + "prehashKeyBeforeComparison":false + }, + { + "leafSpec":{ + "hash":"SHA256", + "prehashValue":"SHA256", + "length":"VAR_PROTO", + "prefix":"AA==", + "prehashKey":"NO_HASH" + }, + "innerSpec":{ + "childOrder":[ + 0, + 1 + ], + "childSize":32, + "minPrefixLength":1, + "maxPrefixLength":1, + "hash":"SHA256", + "emptyChild":"" + }, + "maxDepth":0, + "minDepth":0, + "prehashKeyBeforeComparison":false + } + ], + "upgradePath":[ + "upgrade", + "upgradedIBCState" + ], + "allowUpdateAfterExpiry":true, + "allowUpdateAfterMisbehaviour":true + } + }, + { + "clientId":"07-tendermint-100", + "clientState":{ + "@type":"/ibc.lightclients.tendermint.v1.ClientState", + "chainId":"osmo-test-4", + "trustLevel":{ + "numerator":"1", + "denominator":"3" + }, + "trustingPeriod":"806400s", + "unbondingPeriod":"1209600s", + "maxClockDrift":"20s", + "frozenHeight":{ + "revisionNumber":"0", + "revisionHeight":"0" + }, + "latestHeight":{ + "revisionNumber":"4", + "revisionHeight":"10356505" + }, + "proofSpecs":[ + { + "leafSpec":{ + "hash":"SHA256", + "prehashValue":"SHA256", + "length":"VAR_PROTO", + "prefix":"AA==", + "prehashKey":"NO_HASH" + }, + "innerSpec":{ + "childOrder":[ + 0, + 1 + ], + "childSize":33, + "minPrefixLength":4, + "maxPrefixLength":12, + "hash":"SHA256", + "emptyChild":"" + }, + "maxDepth":0, + "minDepth":0, + "prehashKeyBeforeComparison":false + }, + { + "leafSpec":{ + "hash":"SHA256", + "prehashValue":"SHA256", + "length":"VAR_PROTO", + "prefix":"AA==", + "prehashKey":"NO_HASH" + }, + "innerSpec":{ + "childOrder":[ + 0, + 1 + ], + "childSize":32, + "minPrefixLength":1, + "maxPrefixLength":1, + "hash":"SHA256", + "emptyChild":"" + }, + "maxDepth":0, + "minDepth":0, + "prehashKeyBeforeComparison":false + } + ], + "upgradePath":[ + "upgrade", + "upgradedIBCState" + ], + "allowUpdateAfterExpiry":true, + "allowUpdateAfterMisbehaviour":true + } + }, + { + "clientId":"07-tendermint-101", + "clientState":{ + "@type":"/ibc.lightclients.tendermint.v1.ClientState", + "chainId":"osmo-test-4", + "trustLevel":{ + "numerator":"1", + "denominator":"3" + }, + "trustingPeriod":"806400s", + "unbondingPeriod":"1209600s", + "maxClockDrift":"20s", + "frozenHeight":{ + "revisionNumber":"0", + "revisionHeight":"0" + }, + "latestHeight":{ + "revisionNumber":"4", + "revisionHeight":"10356847" + }, + "proofSpecs":[ + { + "leafSpec":{ + "hash":"SHA256", + "prehashValue":"SHA256", + "length":"VAR_PROTO", + "prefix":"AA==", + "prehashKey":"NO_HASH" + }, + "innerSpec":{ + "childOrder":[ + 0, + 1 + ], + "childSize":33, + "minPrefixLength":4, + "maxPrefixLength":12, + "hash":"SHA256", + "emptyChild":"" + }, + "maxDepth":0, + "minDepth":0, + "prehashKeyBeforeComparison":false + }, + { + "leafSpec":{ + "hash":"SHA256", + "prehashValue":"SHA256", + "length":"VAR_PROTO", + "prefix":"AA==", + "prehashKey":"NO_HASH" + }, + "innerSpec":{ + "childOrder":[ + 0, + 1 + ], + "childSize":32, + "minPrefixLength":1, + "maxPrefixLength":1, + "hash":"SHA256", + "emptyChild":"" + }, + "maxDepth":0, + "minDepth":0, + "prehashKeyBeforeComparison":false + } + ], + "upgradePath":[ + "upgrade", + "upgradedIBCState" + ], + "allowUpdateAfterExpiry":true, + "allowUpdateAfterMisbehaviour":true + } + }, + { + "clientId":"07-tendermint-102", + "clientState":{ + "@type":"/ibc.lightclients.tendermint.v1.ClientState", + "chainId":"osmo-test-4", + "trustLevel":{ + "numerator":"1", + "denominator":"3" + }, + "trustingPeriod":"806400s", + "unbondingPeriod":"1209600s", + "maxClockDrift":"20s", + "frozenHeight":{ + "revisionNumber":"0", + "revisionHeight":"0" + }, + "latestHeight":{ + "revisionNumber":"4", + "revisionHeight":"10357322" + }, + "proofSpecs":[ + { + "leafSpec":{ + "hash":"SHA256", + "prehashValue":"SHA256", + "length":"VAR_PROTO", + "prefix":"AA==", + "prehashKey":"NO_HASH" + }, + "innerSpec":{ + "childOrder":[ + 0, + 1 + ], + "childSize":33, + "minPrefixLength":4, + "maxPrefixLength":12, + "hash":"SHA256", + "emptyChild":"" + }, + "maxDepth":0, + "minDepth":0, + "prehashKeyBeforeComparison":false + }, + { + "leafSpec":{ + "hash":"SHA256", + "prehashValue":"SHA256", + "length":"VAR_PROTO", + "prefix":"AA==", + "prehashKey":"NO_HASH" + }, + "innerSpec":{ + "childOrder":[ + 0, + 1 + ], + "childSize":32, + "minPrefixLength":1, + "maxPrefixLength":1, + "hash":"SHA256", + "emptyChild":"" + }, + "maxDepth":0, + "minDepth":0, + "prehashKeyBeforeComparison":false + } + ], + "upgradePath":[ + "upgrade", + "upgradedIBCState" + ], + "allowUpdateAfterExpiry":true, + "allowUpdateAfterMisbehaviour":true + } + }, + { + "clientId":"07-tendermint-103", + "clientState":{ + "@type":"/ibc.lightclients.tendermint.v1.ClientState", + "chainId":"galileo-3", + "trustLevel":{ + "numerator":"1", + "denominator":"3" + }, + "trustingPeriod":"604800s", + "unbondingPeriod":"1814400s", + "maxClockDrift":"30s", + "frozenHeight":{ + "revisionNumber":"0", + "revisionHeight":"0" + }, + "latestHeight":{ + "revisionNumber":"3", + "revisionHeight":"2848767" + }, + "proofSpecs":[ + { + "leafSpec":{ + "hash":"SHA256", + "prehashValue":"SHA256", + "length":"VAR_PROTO", + "prefix":"AA==", + "prehashKey":"NO_HASH" + }, + "innerSpec":{ + "childOrder":[ + 0, + 1 + ], + "childSize":33, + "minPrefixLength":4, + "maxPrefixLength":12, + "hash":"SHA256", + "emptyChild":"" + }, + "maxDepth":0, + "minDepth":0, + "prehashKeyBeforeComparison":false + }, + { + "leafSpec":{ + "hash":"SHA256", + "prehashValue":"SHA256", + "length":"VAR_PROTO", + "prefix":"AA==", + "prehashKey":"NO_HASH" + }, + "innerSpec":{ + "childOrder":[ + 0, + 1 + ], + "childSize":32, + "minPrefixLength":1, + "maxPrefixLength":1, + "hash":"SHA256", + "emptyChild":"" + }, + "maxDepth":0, + "minDepth":0, + "prehashKeyBeforeComparison":false + } + ], + "upgradePath":[ + "upgrade", + "upgradedIBCState" + ], + "allowUpdateAfterExpiry":true, + "allowUpdateAfterMisbehaviour":true + } + } + ], + "pagination":{ + "nextKey":"LzA3LXRlbmRlcm1pbnQtMTAzL2NsaWVudFN0YXRl", + "total":"0" + } +} +``` + + + +
ParameterTypeDescription
client_statesIdentifiedClientState ArrayClient state associated with the request identifier
paginationPageResponsePagination information in the response
+ + +
+ +**IdentifiedClientState** + + + +
ParameterTypeDescription
client_idStringClient identifier
client_stateAnyClient state
+ + + +## ConsensusState + +Queries a consensus state associated with a client state at a given height + +**IP rate limit group:** `chain` + +### Request Parameters +> Request Example: + + + +```py +import asyncio + +from google.protobuf import symbol_database + +from pyinjective.async_client import AsyncClient +from pyinjective.core.network import Network + + +async def main() -> None: + network = Network.testnet() + client = AsyncClient(network) + + client_id = "07-tendermint-0" + revision_number = 0 + revision_height = 7379538 + + state = await client.fetch_ibc_consensus_state( + client_id=client_id, revision_number=revision_number, revision_height=revision_height + ) + print(state) + + +if __name__ == "__main__": + symbol_db = symbol_database.Default() + asyncio.get_event_loop().run_until_complete(main()) +``` + + + + +```go +package main + +import ( + "context" + "fmt" + + "github.com/InjectiveLabs/sdk-go/client" + + chainclient "github.com/InjectiveLabs/sdk-go/client/chain" + "github.com/InjectiveLabs/sdk-go/client/common" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" + + "os" +) + +func main() { + network := common.LoadNetwork("testnet", "lb") + tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket") + if err != nil { + panic(err) + } + + senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring( + os.Getenv("HOME")+"/.injectived", + "injectived", + "file", + "inj-user", + "12345678", + "5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided + false, + ) + + if err != nil { + panic(err) + } + + clientCtx, err := chainclient.NewClientContext( + network.ChainId, + senderAddress.String(), + cosmosKeyring, + ) + + if err != nil { + panic(err) + } + + clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) + + chainClient, err := chainclient.NewChainClient( + clientCtx, + network, + common.OptionGasPrices(client.DefaultGasPriceWithDenom), + ) + + if err != nil { + panic(err) + } + + clientId := "07-tendermint-0" + revisionNumber := uint64(0) + revisionHeight := uint64(7379538) + latestHeight := false + + ctx := context.Background() + + res, err := chainClient.FetchIBCConsensusState(ctx, clientId, revisionNumber, revisionHeight, latestHeight) + if err != nil { + fmt.Println(err) + } + + fmt.Print(res) + +} +``` + + + + + + +
ParameterTypeDescriptionRequired
client_idStringClient identifierYes
revision_numberIntegerConsensus state revision numberYes
client_idIntegerConsensus state revision heightYes
latest_heightBooleanOverrrides the height field and queries the latest stored ConsensusStateNo
+ + +### Response Parameters +> Response Example: + +``` json +{ + "consensusState":{ + "@type":"/ibc.lightclients.tendermint.v1.ConsensusState", + "timestamp":"2022-07-04T10:34:53.874345276Z", + "root":{ + "hash":"viI6JuzZ/kOAh6jIeecglN7Xt+mGQT/PpvAGqGLcVmM=" + }, + "nextValidatorsHash":"olPEfP4dzPCC07Oyg/3+6U5/uumw/HmELk2MwpMogSg=" + }, + "proofHeight":{ + "revisionNumber":"888", + "revisionHeight":"27531028" + }, + "proof":"" +} +``` + + + + +
ParameterTypeDescription
consensus_stateAnyClient state associated with the request identifier
proofByte ArrayMerkle proof of existence
proof_heightHeightHeight at which the proof was retrieved
+ + +
+ +**Height** + + + +
ParameterTypeDescription
revision_numberIntegerThe revision that the client is currently on
revision_heightIntegerThe height within the given revision
+ + + +## ConsensusStates + +Queries all the consensus state associated with a given client + +**IP rate limit group:** `chain` + +### Request Parameters +> Request Example: + + + +```py +import asyncio + +from google.protobuf import symbol_database + +from pyinjective.async_client import AsyncClient +from pyinjective.client.model.pagination import PaginationOption +from pyinjective.core.network import Network + + +async def main() -> None: + network = Network.testnet() + client = AsyncClient(network) + + client_id = "07-tendermint-0" + pagination = PaginationOption(skip=2, limit=4) + + states = await client.fetch_ibc_consensus_states(client_id=client_id, pagination=pagination) + print(states) + + +if __name__ == "__main__": + symbol_db = symbol_database.Default() + asyncio.get_event_loop().run_until_complete(main()) +``` + + + + +```go +package main + +import ( + "context" + "fmt" + + "github.com/cosmos/cosmos-sdk/types/query" + + "github.com/InjectiveLabs/sdk-go/client" + + chainclient "github.com/InjectiveLabs/sdk-go/client/chain" + "github.com/InjectiveLabs/sdk-go/client/common" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" + + "os" +) + +func main() { + network := common.LoadNetwork("testnet", "lb") + tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket") + if err != nil { + panic(err) + } + + senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring( + os.Getenv("HOME")+"/.injectived", + "injectived", + "file", + "inj-user", + "12345678", + "5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided + false, + ) + + if err != nil { + panic(err) + } + + clientCtx, err := chainclient.NewClientContext( + network.ChainId, + senderAddress.String(), + cosmosKeyring, + ) + + if err != nil { + panic(err) + } + + clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) + + chainClient, err := chainclient.NewChainClient( + clientCtx, + network, + common.OptionGasPrices(client.DefaultGasPriceWithDenom), + ) + + if err != nil { + panic(err) + } + + clientId := "07-tendermint-0" + pagination := query.PageRequest{Offset: 2, Limit: 4} + ctx := context.Background() + + res, err := chainClient.FetchIBCConsensusStates(ctx, clientId, &pagination) + if err != nil { + fmt.Println(err) + } + + fmt.Print(res) + +} +``` + + + + +
ParameterTypeDescriptionRequired
client_idStringClient identifierYes
paginationPageRequestThe optional pagination for the requestNo
+ + +### Response Parameters +> Response Example: + +``` json +{ + "consensusStates":[ + { + "height":{ + "revisionHeight":"7379500", + "revisionNumber":"0" + }, + "consensusState":{ + "@type":"/ibc.lightclients.tendermint.v1.ConsensusState", + "timestamp":"2022-07-04T10:32:23.232327085Z", + "root":{ + "hash":"PlwKOemX6GQh/sGlPzvT89sRijeZa0pUK+sjvASu/5s=" + }, + "nextValidatorsHash":"olPEfP4dzPCC07Oyg/3+6U5/uumw/HmELk2MwpMogSg=" + } + }, + { + "height":{ + "revisionHeight":"7379506", + "revisionNumber":"0" + }, + "consensusState":{ + "@type":"/ibc.lightclients.tendermint.v1.ConsensusState", + "timestamp":"2022-07-04T10:32:46.188675417Z", + "root":{ + "hash":"LTmLr8YzxO/yfajKO1RrnZeTK3JUMrvYcm/IZyi0XeY=" + }, + "nextValidatorsHash":"olPEfP4dzPCC07Oyg/3+6U5/uumw/HmELk2MwpMogSg=" + } + }, + { + "height":{ + "revisionHeight":"7379521", + "revisionNumber":"0" + }, + "consensusState":{ + "@type":"/ibc.lightclients.tendermint.v1.ConsensusState", + "timestamp":"2022-07-04T10:33:46.953207174Z", + "root":{ + "hash":"lyXb+gmcyDOcHL35Zppqv10y0irbqlnsllERaOEb9R4=" + }, + "nextValidatorsHash":"olPEfP4dzPCC07Oyg/3+6U5/uumw/HmELk2MwpMogSg=" + } + }, + { + "height":{ + "revisionHeight":"7379538", + "revisionNumber":"0" + }, + "consensusState":{ + "@type":"/ibc.lightclients.tendermint.v1.ConsensusState", + "timestamp":"2022-07-04T10:34:53.874345276Z", + "root":{ + "hash":"viI6JuzZ/kOAh6jIeecglN7Xt+mGQT/PpvAGqGLcVmM=" + }, + "nextValidatorsHash":"olPEfP4dzPCC07Oyg/3+6U5/uumw/HmELk2MwpMogSg=" + } + } + ], + "pagination":{ + "nextKey":"", + "total":"0" + } +} +``` + + + +
ParameterTypeDescription
consensus_statesConsensusStateWithHeight ArrayConsensus states associated with the identifier
paginationPageResponsePagination information in the response
+ + +
+ +**ConsensusStateWithHeight** + + + +
ParameterTypeDescription
heightHeightConsensus state height
consensus_stateAnyConsensus state
+ + +
+ +**Height** + + + +
ParameterTypeDescription
revision_numberIntegerThe revision that the client is currently on
revision_heightIntegerThe height within the given revision
+ + + +## ConsensusStateHeights + +Queries the height of every consensus states associated with a given client + +**IP rate limit group:** `chain` + +### Request Parameters +> Request Example: + + + +```py +import asyncio + +from google.protobuf import symbol_database + +from pyinjective.async_client import AsyncClient +from pyinjective.client.model.pagination import PaginationOption +from pyinjective.core.network import Network + + +async def main() -> None: + network = Network.testnet() + client = AsyncClient(network) + + client_id = "07-tendermint-0" + pagination = PaginationOption(skip=2, limit=4) + + states = await client.fetch_ibc_consensus_state_heights(client_id=client_id, pagination=pagination) + print(states) + + +if __name__ == "__main__": + symbol_db = symbol_database.Default() + asyncio.get_event_loop().run_until_complete(main()) +``` + + + + +```go +package main + +import ( + "context" + "fmt" + + "github.com/cosmos/cosmos-sdk/types/query" + + "github.com/InjectiveLabs/sdk-go/client" + + chainclient "github.com/InjectiveLabs/sdk-go/client/chain" + "github.com/InjectiveLabs/sdk-go/client/common" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" + + "os" +) + +func main() { + network := common.LoadNetwork("testnet", "lb") + tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket") + if err != nil { + panic(err) + } + + senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring( + os.Getenv("HOME")+"/.injectived", + "injectived", + "file", + "inj-user", + "12345678", + "5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided + false, + ) + + if err != nil { + panic(err) + } + + clientCtx, err := chainclient.NewClientContext( + network.ChainId, + senderAddress.String(), + cosmosKeyring, + ) + + if err != nil { + panic(err) + } + + clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) + + chainClient, err := chainclient.NewChainClient( + clientCtx, + network, + common.OptionGasPrices(client.DefaultGasPriceWithDenom), + ) + + if err != nil { + panic(err) + } + + clientId := "07-tendermint-0" + pagination := query.PageRequest{Offset: 2, Limit: 4} + ctx := context.Background() + + res, err := chainClient.FetchIBCConsensusStateHeights(ctx, clientId, &pagination) + if err != nil { + fmt.Println(err) + } + + fmt.Print(res) + +} +``` + + + + +
ParameterTypeDescriptionRequired
client_idStringClient identifierYes
paginationPageRequestThe optional pagination for the requestNo
+ + +### Response Parameters +> Response Example: + +``` json +{ + "consensusStateHeights":[ + { + "revisionHeight":"7379500", + "revisionNumber":"0" + }, + { + "revisionHeight":"7379506", + "revisionNumber":"0" + }, + { + "revisionHeight":"7379521", + "revisionNumber":"0" + }, + { + "revisionHeight":"7379538", + "revisionNumber":"0" + } + ], + "pagination":{ + "nextKey":"", + "total":"0" + } +} +``` + + + +
ParameterTypeDescription
consensus_state_heightsHeight ArrayConsensus state heights
paginationPageResponsePagination information in the response
+ + +
+ +**Height** + + + +
ParameterTypeDescription
revision_numberIntegerThe revision that the client is currently on
revision_heightIntegerThe height within the given revision
+ + + +## ClientStatus + +Queries the status of an IBC client + +**IP rate limit group:** `chain` + +### Request Parameters +> Request Example: + + + +```py +import asyncio + +from google.protobuf import symbol_database + +from pyinjective.async_client import AsyncClient +from pyinjective.core.network import Network + + +async def main() -> None: + network = Network.testnet() + client = AsyncClient(network) + + client_id = "07-tendermint-0" + + state = await client.fetch_ibc_client_status(client_id=client_id) + print(state) + + +if __name__ == "__main__": + symbol_db = symbol_database.Default() + asyncio.get_event_loop().run_until_complete(main()) +``` + + + + +```go +package main + +import ( + "context" + "encoding/json" + "fmt" + + "github.com/InjectiveLabs/sdk-go/client" + + chainclient "github.com/InjectiveLabs/sdk-go/client/chain" + "github.com/InjectiveLabs/sdk-go/client/common" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" + + "os" +) + +func main() { + network := common.LoadNetwork("testnet", "lb") + tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket") + if err != nil { + panic(err) + } + + senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring( + os.Getenv("HOME")+"/.injectived", + "injectived", + "file", + "inj-user", + "12345678", + "5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided + false, + ) + + if err != nil { + panic(err) + } + + clientCtx, err := chainclient.NewClientContext( + network.ChainId, + senderAddress.String(), + cosmosKeyring, + ) + + if err != nil { + panic(err) + } + + clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) + + chainClient, err := chainclient.NewChainClient( + clientCtx, + network, + common.OptionGasPrices(client.DefaultGasPriceWithDenom), + ) + + if err != nil { + panic(err) + } + + clientId := "07-tendermint-0" + ctx := context.Background() + + res, err := chainClient.FetchIBCClientStatus(ctx, clientId) + if err != nil { + fmt.Println(err) + } + + str, _ := json.MarshalIndent(res, "", " ") + fmt.Print(string(str)) + +} +``` + + + +
ParameterTypeDescriptionRequired
client_idStringClient unique identifierYes
+ + +### Response Parameters +> Response Example: + +``` json +{ + "status":"Expired" +} +``` + + +
ParameterTypeDescription
statusStringClient status
+ + + +## ClientParams + +Queries all parameters of the ibc client submodule + +**IP rate limit group:** `chain` + +### Request Parameters +> Request Example: + + + +```py +import asyncio + +from google.protobuf import symbol_database + +from pyinjective.async_client import AsyncClient +from pyinjective.core.network import Network + + +async def main() -> None: + network = Network.testnet() + client = AsyncClient(network) + + params = await client.fetch_ibc_client_params() + print(params) + + +if __name__ == "__main__": + symbol_db = symbol_database.Default() + asyncio.get_event_loop().run_until_complete(main()) +``` + + + + +```go +package main + +import ( + "context" + "encoding/json" + "fmt" + + "github.com/InjectiveLabs/sdk-go/client" + + chainclient "github.com/InjectiveLabs/sdk-go/client/chain" + "github.com/InjectiveLabs/sdk-go/client/common" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" + + "os" +) + +func main() { + network := common.LoadNetwork("testnet", "lb") + tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket") + if err != nil { + panic(err) + } + + senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring( + os.Getenv("HOME")+"/.injectived", + "injectived", + "file", + "inj-user", + "12345678", + "5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided + false, + ) + + if err != nil { + panic(err) + } + + clientCtx, err := chainclient.NewClientContext( + network.ChainId, + senderAddress.String(), + cosmosKeyring, + ) + + if err != nil { + panic(err) + } + + clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) + + chainClient, err := chainclient.NewChainClient( + clientCtx, + network, + common.OptionGasPrices(client.DefaultGasPriceWithDenom), + ) + + if err != nil { + panic(err) + } + + ctx := context.Background() + + res, err := chainClient.FetchIBCClientParams(ctx) + if err != nil { + fmt.Println(err) + } + + str, _ := json.MarshalIndent(res, "", " ") + fmt.Print(string(str)) + +} +``` + + +No parameters + +### Response Parameters +> Response Example: + +``` json +{ + "params":{ + "allowedClients":[ + "06-solomachine", + "07-tendermint" + ] + } +} +``` + + +
ParameterTypeDescription
paramsparamsModule's parameters
+ + +
+ +**Params** + + +
ParameterTypeDescription
allowed_clientsString ArrayAllowed_clients defines the list of allowed client state types which can be created and interacted with. If a client type is removed from the allowed clients list, usage of this client will be disabled until it is added again to the list
+ + + +## UpgradedClientState + +Queries an Upgraded IBC light client + +**IP rate limit group:** `chain` + +### Request Parameters +> Request Example: + + + +```py +import asyncio + +from google.protobuf import symbol_database + +from pyinjective.async_client import AsyncClient +from pyinjective.core.network import Network + + +async def main() -> None: + network = Network.testnet() + client = AsyncClient(network) + + state = await client.fetch_ibc_upgraded_client_state() + print(state) + + +if __name__ == "__main__": + symbol_db = symbol_database.Default() + asyncio.get_event_loop().run_until_complete(main()) +``` + + + + +```go +package main + +import ( + "context" + "encoding/json" + "fmt" + + "github.com/InjectiveLabs/sdk-go/client" + + chainclient "github.com/InjectiveLabs/sdk-go/client/chain" + "github.com/InjectiveLabs/sdk-go/client/common" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" + + "os" +) + +func main() { + network := common.LoadNetwork("testnet", "lb") + tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket") + if err != nil { + panic(err) + } + + senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring( + os.Getenv("HOME")+"/.injectived", + "injectived", + "file", + "inj-user", + "12345678", + "5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided + false, + ) + + if err != nil { + panic(err) + } + + clientCtx, err := chainclient.NewClientContext( + network.ChainId, + senderAddress.String(), + cosmosKeyring, + ) + + if err != nil { + panic(err) + } + + clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) + + chainClient, err := chainclient.NewChainClient( + clientCtx, + network, + common.OptionGasPrices(client.DefaultGasPriceWithDenom), + ) + + if err != nil { + panic(err) + } + + ctx := context.Background() + + res, err := chainClient.FetchIBCUpgradedClientState(ctx) + if err != nil { + fmt.Println(err) + } + + str, _ := json.MarshalIndent(res, "", " ") + fmt.Print(string(str)) + +} +``` + + +No parameters + +### Response Parameters +> Response Example: + +``` json + +``` + + +
ParameterTypeDescription
upgraded_client_stateAnyClient state associated with the request identifier
+ + + +## UpgradedConsensusState + +Queries an Upgraded IBC consensus state + +**IP rate limit group:** `chain` + +### Request Parameters +> Request Example: + + + +```py +import asyncio + +from google.protobuf import symbol_database + +from pyinjective.async_client import AsyncClient +from pyinjective.core.network import Network + + +async def main() -> None: + network = Network.testnet() + client = AsyncClient(network) + + state = await client.fetch_ibc_upgraded_consensus_state() + print(state) + + +if __name__ == "__main__": + symbol_db = symbol_database.Default() + asyncio.get_event_loop().run_until_complete(main()) +``` + + + + +```go +package main + +import ( + "context" + "encoding/json" + "fmt" + + "github.com/InjectiveLabs/sdk-go/client" + + chainclient "github.com/InjectiveLabs/sdk-go/client/chain" + "github.com/InjectiveLabs/sdk-go/client/common" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" + + "os" +) + +func main() { + network := common.LoadNetwork("testnet", "lb") + tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket") + if err != nil { + panic(err) + } + + senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring( + os.Getenv("HOME")+"/.injectived", + "injectived", + "file", + "inj-user", + "12345678", + "5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided + false, + ) + + if err != nil { + panic(err) + } + + clientCtx, err := chainclient.NewClientContext( + network.ChainId, + senderAddress.String(), + cosmosKeyring, + ) + + if err != nil { + panic(err) + } + + clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) + + chainClient, err := chainclient.NewChainClient( + clientCtx, + network, + common.OptionGasPrices(client.DefaultGasPriceWithDenom), + ) + + if err != nil { + panic(err) + } + + ctx := context.Background() + + res, err := chainClient.FetchIBCUpgradedConsensusState(ctx) + if err != nil { + fmt.Println(err) + } + + str, _ := json.MarshalIndent(res, "", " ") + fmt.Print(string(str)) + +} +``` + + +No parameters + +### Response Parameters +> Response Example: + +``` json + +``` + + +
ParameterTypeDescription
upgraded_consensus_stateAnyConsensus state associated with the request identifier
+ \ No newline at end of file diff --git a/source/includes/_ibctransfer.md b/source/includes/_ibctransfer.md index a83173eb..529baae7 100644 --- a/source/includes/_ibctransfer.md +++ b/source/includes/_ibctransfer.md @@ -11,8 +11,8 @@ Queries a denomination trace information ### Request Parameters > Request Example: - - + + ```py import asyncio from hashlib import sha256 @@ -43,8 +43,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -164,8 +164,8 @@ Queries all denomination traces ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -192,8 +192,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -340,8 +340,8 @@ Queries a denomination hash information ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -369,8 +369,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -475,8 +475,8 @@ Returns the escrow address for a particular port and channel id ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -503,8 +503,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -609,8 +609,8 @@ Returns the total amount of tokens in escrow based on the denom ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -636,8 +636,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -752,8 +752,8 @@ Defines a msg to transfer fungible tokens (i.e Coins) between ICS20 enabled chai ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -819,8 +819,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_insurance.md b/source/includes/_insurance.md index 6728afc1..169bdf60 100644 --- a/source/includes/_insurance.md +++ b/source/includes/_insurance.md @@ -9,8 +9,8 @@ Includes the messages to create, underwrite and redeem in insurance funds. ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -131,8 +131,8 @@ gas fee: 0.000075824 INJ ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -244,8 +244,8 @@ gas fee: 0.000071021 INJ ### Request Parameters > Request Example: - - + + ```py import asyncio import os diff --git a/source/includes/_insurancerpc.md b/source/includes/_insurancerpc.md index 4a8517c2..402cd64a 100644 --- a/source/includes/_insurancerpc.md +++ b/source/includes/_insurancerpc.md @@ -11,8 +11,8 @@ List all the insurance funds. > Request Example: - - + + ```py import asyncio @@ -33,8 +33,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -169,8 +169,8 @@ Get a list of redemptions. If no parameters are provided, redemptions for all po ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -194,8 +194,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_metarpc.md b/source/includes/_metarpc.md index d6609c11..daccdd6f 100644 --- a/source/includes/_metarpc.md +++ b/source/includes/_metarpc.md @@ -10,8 +10,8 @@ Get the server health. > Request Example: - - + + ```py import asyncio @@ -32,8 +32,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -89,8 +89,8 @@ Get the server version. > Request Example: - - + + ```py import asyncio @@ -111,8 +111,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -198,8 +198,8 @@ Get the server information. ### Request Parameters > Request Example: - - + + ```py import asyncio import time @@ -224,8 +224,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -309,8 +309,8 @@ Subscribe to a stream and gracefully disconnect and connect to another sentry no > Request Example: - - + + ```py import asyncio from typing import Any, Dict @@ -373,8 +373,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_oracle.md b/source/includes/_oracle.md index a6efd2bc..0aa48131 100644 --- a/source/includes/_oracle.md +++ b/source/includes/_oracle.md @@ -9,8 +9,8 @@ Includes the message to relay a price feed. ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -97,8 +97,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -225,8 +225,8 @@ gas fee: 0.0000568235 INJ ### Request Parameters > Request Example: - - + + ```py import asyncio import os diff --git a/source/includes/_oraclerpc.md b/source/includes/_oraclerpc.md index 8951c312..66cb88f6 100644 --- a/source/includes/_oraclerpc.md +++ b/source/includes/_oraclerpc.md @@ -11,8 +11,8 @@ Get a list of all oracles. > Request Example: - - + + ```py import asyncio @@ -33,8 +33,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -173,8 +173,8 @@ Get the oracle price of an asset. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -207,8 +207,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -285,8 +285,8 @@ Stream new price changes for a specified oracle. If no oracles are provided, all ### Request Parameters > Request Example: - - + + ```py import asyncio from typing import Any, Dict @@ -341,8 +341,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_portfoliorpc.md b/source/includes/_portfoliorpc.md index 44224c48..e054c1a1 100644 --- a/source/includes/_portfoliorpc.md +++ b/source/includes/_portfoliorpc.md @@ -12,8 +12,8 @@ Get details about an account's portfolio. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -35,8 +35,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -291,8 +291,8 @@ Get continuous updates on account's portfolio. ### Request Parameters > Request Example: - - + + ```py import asyncio from typing import Any, Dict @@ -338,8 +338,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_spot.md b/source/includes/_spot.md index 98835e4a..88a82640 100644 --- a/source/includes/_spot.md +++ b/source/includes/_spot.md @@ -11,8 +11,8 @@ Retrieves a list of spot markets ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -39,8 +39,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -187,8 +187,8 @@ Retrieves a spot market by ticker ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -214,8 +214,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -358,8 +358,8 @@ Retrieves a list of spot markets with extra information ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -387,8 +387,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -563,8 +563,8 @@ Retrieves a spot market with extra information ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -591,8 +591,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -763,8 +763,8 @@ Retrieves a spot market's orderbook ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -795,8 +795,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -942,8 +942,8 @@ Retrieves a trader's spot orders ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -985,8 +985,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1131,8 +1131,8 @@ Retrieves all account address spot orders ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -1172,8 +1172,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1338,8 +1338,8 @@ Retrieves spot orders corresponding to specified order hashes for a given subacc ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -1382,8 +1382,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1509,8 +1509,8 @@ Retrieves a trader's transient spot orders ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -1552,8 +1552,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1671,8 +1671,8 @@ Retrieves a spot market's mid-price ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1698,8 +1698,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1803,8 +1803,8 @@ func main() { ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -1863,8 +1863,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2066,8 +2066,8 @@ func main() { ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -2172,8 +2172,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2461,8 +2461,8 @@ gas fee: 0.000064956 INJ ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -2565,8 +2565,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2852,8 +2852,8 @@ gas fee: 0.000065298 INJ ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -2942,8 +2942,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -3145,8 +3145,8 @@ Further note that if no marketIDs are provided in the SpotMarketIdsToCancelAll o ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -3327,8 +3327,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -3698,8 +3698,8 @@ This function computes order hashes locally for SpotOrder and DerivativeOrder. F ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -3970,8 +3970,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_spotrpc.md b/source/includes/_spotrpc.md index 83c24f5f..77908c3a 100644 --- a/source/includes/_spotrpc.md +++ b/source/includes/_spotrpc.md @@ -12,8 +12,8 @@ Get details of a single spot market. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -34,8 +34,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -178,8 +178,8 @@ Get a list of spot markets. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -204,8 +204,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -384,8 +384,8 @@ Stream live updates of spot markets. ### Request Parameters > Request Example: - - + + ```py import asyncio from typing import Any, Dict @@ -430,8 +430,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -599,8 +599,8 @@ List history of orders (all states) for a spot market. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -632,8 +632,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -972,8 +972,8 @@ Stream order updates for spot markets. If no parameters are given, updates to al ### Request Parameters > Request Example: - - + + ```py import asyncio from typing import Any, Dict @@ -1021,8 +1021,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1203,8 +1203,8 @@ Get trade history for a spot market. The default request returns all spot trades ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1235,8 +1235,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1556,8 +1556,8 @@ Stream newly executed trades of spot markets. The default request streams trades ### Request Parameters > Request Example: - - + + ```py import asyncio from typing import Any, Dict @@ -1614,8 +1614,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1815,8 +1815,8 @@ Get an orderbook snapshot for one or more spot markets. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1840,8 +1840,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1986,8 +1986,8 @@ Stream orderbook snapshot updates for one or more spot markets. ### Request Parameters > Request Example: - - + + ```py import asyncio from typing import Any, Dict @@ -2036,8 +2036,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2165,8 +2165,8 @@ Stream incremental orderbook updates for one or more spot markets. This stream s ### Request Parameters > Request Example: - - + + ```py import asyncio from decimal import Decimal @@ -2326,8 +2326,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2607,8 +2607,8 @@ Get orders of a subaccount. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -2637,8 +2637,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2830,8 +2830,8 @@ Get trades of a subaccount. ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -2866,8 +2866,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_staking.md b/source/includes/_staking.md index fdff2098..54a582da 100644 --- a/source/includes/_staking.md +++ b/source/includes/_staking.md @@ -10,8 +10,8 @@ Queries validator commission and self-delegation rewards for validator ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -32,8 +32,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -158,8 +158,8 @@ Queries rewards of a validator address ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -180,8 +180,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -307,8 +307,8 @@ Queries accumulated commission for a validator ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -329,8 +329,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -456,8 +456,8 @@ Queries slash events of a validator ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -482,8 +482,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -621,8 +621,8 @@ Queries the total rewards accrued by a delegation ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -646,8 +646,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -765,8 +765,8 @@ Queries the total rewards accrued by each validator ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -789,8 +789,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -951,8 +951,8 @@ Queries the validators of a delegator ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -975,8 +975,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1084,8 +1084,8 @@ Queries the withdraw address of a delegator ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1108,8 +1108,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1211,8 +1211,8 @@ Queries the community pool coins ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1232,8 +1232,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1346,8 +1346,8 @@ Changes the withdraw address for a delegator (or validator self-delegation) ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -1398,8 +1398,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1572,8 +1572,8 @@ Withdraw rewards of a delegator ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -1625,8 +1625,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1816,8 +1816,8 @@ Withdraws the full commission to the validator address ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -1867,8 +1867,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2039,8 +2039,8 @@ Allows an account to directly fund the community pool ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -2092,8 +2092,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -2276,8 +2276,8 @@ Performs a coins delegation from a delegator to a validator ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -2364,8 +2364,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_tendermint.md b/source/includes/_tendermint.md index d3df248d..b8bbb6ac 100644 --- a/source/includes/_tendermint.md +++ b/source/includes/_tendermint.md @@ -11,8 +11,8 @@ Gets the current node info ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -33,8 +33,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -231,8 +231,8 @@ Returns the node's syncing status ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -253,8 +253,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -354,8 +354,8 @@ Get the latest block ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -376,8 +376,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -760,8 +760,8 @@ Get the block for a given height ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -782,8 +782,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1194,8 +1194,8 @@ Get the latest validator-set ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1219,8 +1219,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1382,8 +1382,8 @@ Get the validator-set at a given height ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1410,8 +1410,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_tokenfactory.md b/source/includes/_tokenfactory.md index cfd78b47..71c8fad5 100644 --- a/source/includes/_tokenfactory.md +++ b/source/includes/_tokenfactory.md @@ -11,8 +11,8 @@ Gets the authority metadata for tokens by their creator address ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -35,8 +35,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -157,8 +157,8 @@ Gets all the tokens created by a specific admin/creator ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -178,8 +178,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -368,8 +368,8 @@ Retrieves the entire auctions module's state ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -389,8 +389,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -605,8 +605,8 @@ Create a new denom ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -651,8 +651,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -756,8 +756,8 @@ Allows a token admin's account to mint more units ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -805,8 +805,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -918,8 +918,8 @@ Allows a token admin's account to burn circulating units ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -967,8 +967,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1080,8 +1080,8 @@ Allows a token admin's account to set the token metadata ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -1144,8 +1144,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1295,8 +1295,8 @@ Allows a token admin's account to transfer administrative privileged to other ac ### Request Parameters > Request Example: - - + + ```py import asyncio import os @@ -1343,8 +1343,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/includes/_wasm.md b/source/includes/_wasm.md index 23222307..91855481 100644 --- a/source/includes/_wasm.md +++ b/source/includes/_wasm.md @@ -12,8 +12,8 @@ Queries validator commission and self-delegation rewards for validator ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -34,8 +34,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -180,8 +180,8 @@ Gets the contract code history ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -206,8 +206,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -431,8 +431,8 @@ Get all smart contracts for a code id ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -457,8 +457,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -587,8 +587,8 @@ Gets all raw store data for a single contract ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -613,8 +613,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -758,8 +758,8 @@ Gets single key from the raw store data of a contract ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -781,8 +781,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -885,8 +885,8 @@ Get smart query result from the contract ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -908,8 +908,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1018,8 +1018,8 @@ Gets the binary code and metadata for a contract ### Request Parameters > Request Example: - - + + ```py import asyncio import base64 @@ -1044,8 +1044,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1197,8 +1197,8 @@ Gets the metadata for all stored contract codes ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1222,8 +1222,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1407,8 +1407,8 @@ Gets the pinned code ids ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1432,8 +1432,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1560,8 +1560,8 @@ Gets the contracts by creator ### Request Parameters > Request Example: - - + + ```py import asyncio @@ -1586,8 +1586,8 @@ if __name__ == "__main__": ``` - - + + ```go package main @@ -1711,8 +1711,8 @@ func main() { ### Request Parameters > Request Example: - - + + ```py import asyncio import os diff --git a/source/includes/_wasmx.md b/source/includes/_wasmx.md index c7855e5a..7c7a2676 100644 --- a/source/includes/_wasmx.md +++ b/source/includes/_wasmx.md @@ -10,8 +10,8 @@ Wasmx smart contract interactions. ### Request Parameters > Request Example: - - + + ```py import asyncio import json @@ -105,8 +105,8 @@ if __name__ == "__main__": ``` - - + + ```go package main diff --git a/source/index.html.md b/source/index.html.md index f739319d..e8198d00 100644 --- a/source/index.html.md +++ b/source/index.html.md @@ -37,6 +37,7 @@ includes: - spot - binaryoptions - ibccorechannel + - ibccoreclient - ibctransfer - insurance - oracle diff --git a/source/json_tables/chain/ibc/core/client/consensusStateWithHeight.json b/source/json_tables/chain/ibc/core/client/consensusStateWithHeight.json new file mode 100644 index 00000000..6931aff1 --- /dev/null +++ b/source/json_tables/chain/ibc/core/client/consensusStateWithHeight.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "height", "Type": "Height", "Description": "Consensus state height"}, + {"Parameter": "consensus_state", "Type": "Any", "Description": "Consensus state"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/client/identifiedClientState.json b/source/json_tables/chain/ibc/core/client/identifiedClientState.json new file mode 100644 index 00000000..6b6e737f --- /dev/null +++ b/source/json_tables/chain/ibc/core/client/identifiedClientState.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "client_id", "Type": "String", "Description": "Client identifier"}, + {"Parameter": "client_state", "Type": "Any", "Description": "Client state"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/client/params.json b/source/json_tables/chain/ibc/core/client/params.json new file mode 100644 index 00000000..31c14807 --- /dev/null +++ b/source/json_tables/chain/ibc/core/client/params.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "allowed_clients", "Type": "String Array", "Description": "Allowed_clients defines the list of allowed client state types which can be created and interacted with. If a client type is removed from the allowed clients list, usage of this client will be disabled until it is added again to the list"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/client/queryClientParamsResponse.json b/source/json_tables/chain/ibc/core/client/queryClientParamsResponse.json new file mode 100644 index 00000000..973f011e --- /dev/null +++ b/source/json_tables/chain/ibc/core/client/queryClientParamsResponse.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "params", "Type": "params", "Description": "Module's parameters"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/client/queryClientStateRequest.json b/source/json_tables/chain/ibc/core/client/queryClientStateRequest.json new file mode 100644 index 00000000..486be60e --- /dev/null +++ b/source/json_tables/chain/ibc/core/client/queryClientStateRequest.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "client_id", "Type": "String", "Description": "Client state unique identifier", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/client/queryClientStateResponse.json b/source/json_tables/chain/ibc/core/client/queryClientStateResponse.json new file mode 100644 index 00000000..9ef3661e --- /dev/null +++ b/source/json_tables/chain/ibc/core/client/queryClientStateResponse.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "client_state", "Type": "Any", "Description": "Client state associated with the request identifier"}, + {"Parameter": "proof", "Type": "Byte Array", "Description": "Merkle proof of existence"}, + {"Parameter": "proof_height", "Type": "Height", "Description": "Height at which the proof was retrieved"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/client/queryClientStatesRequest.json b/source/json_tables/chain/ibc/core/client/queryClientStatesRequest.json new file mode 100644 index 00000000..9da294d1 --- /dev/null +++ b/source/json_tables/chain/ibc/core/client/queryClientStatesRequest.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "pagination", "Type": "PageRequest", "Description": "The optional pagination for the request", "Required": "No"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/client/queryClientStatesResponse.json b/source/json_tables/chain/ibc/core/client/queryClientStatesResponse.json new file mode 100644 index 00000000..7d0d42d8 --- /dev/null +++ b/source/json_tables/chain/ibc/core/client/queryClientStatesResponse.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "client_states", "Type": "IdentifiedClientState Array", "Description": "Client state associated with the request identifier"}, + {"Parameter": "pagination", "Type": "PageResponse", "Description": "Pagination information in the response"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/client/queryClientStatusRequest.json b/source/json_tables/chain/ibc/core/client/queryClientStatusRequest.json new file mode 100644 index 00000000..77a27792 --- /dev/null +++ b/source/json_tables/chain/ibc/core/client/queryClientStatusRequest.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "client_id", "Type": "String", "Description": "Client unique identifier", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/client/queryClientStatusResponse.json b/source/json_tables/chain/ibc/core/client/queryClientStatusResponse.json new file mode 100644 index 00000000..51ea3f45 --- /dev/null +++ b/source/json_tables/chain/ibc/core/client/queryClientStatusResponse.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "status", "Type": "String", "Description": "Client status"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/client/queryConsensusStateHeightsRequest.json b/source/json_tables/chain/ibc/core/client/queryConsensusStateHeightsRequest.json new file mode 100644 index 00000000..99fe4f32 --- /dev/null +++ b/source/json_tables/chain/ibc/core/client/queryConsensusStateHeightsRequest.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "client_id", "Type": "String", "Description": "Client identifier", "Required": "Yes"}, + {"Parameter": "pagination", "Type": "PageRequest", "Description": "The optional pagination for the request", "Required": "No"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/client/queryConsensusStateHeightsResponse.json b/source/json_tables/chain/ibc/core/client/queryConsensusStateHeightsResponse.json new file mode 100644 index 00000000..25cb1581 --- /dev/null +++ b/source/json_tables/chain/ibc/core/client/queryConsensusStateHeightsResponse.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "consensus_state_heights", "Type": "Height Array", "Description": "Consensus state heights"}, + {"Parameter": "pagination", "Type": "PageResponse", "Description": "Pagination information in the response"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/client/queryConsensusStateRequest.json b/source/json_tables/chain/ibc/core/client/queryConsensusStateRequest.json new file mode 100644 index 00000000..ca0076b7 --- /dev/null +++ b/source/json_tables/chain/ibc/core/client/queryConsensusStateRequest.json @@ -0,0 +1,6 @@ +[ + {"Parameter": "client_id", "Type": "String", "Description": "Client identifier", "Required": "Yes"}, + {"Parameter": "revision_number", "Type": "Integer", "Description": "Consensus state revision number", "Required": "Yes"}, + {"Parameter": "client_id", "Type": "Integer", "Description": "Consensus state revision height", "Required": "Yes"}, + {"Parameter": "latest_height", "Type": "Boolean", "Description": "Overrrides the height field and queries the latest stored ConsensusState", "Required": "No"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/client/queryConsensusStateResponse.json b/source/json_tables/chain/ibc/core/client/queryConsensusStateResponse.json new file mode 100644 index 00000000..f4b7bdf0 --- /dev/null +++ b/source/json_tables/chain/ibc/core/client/queryConsensusStateResponse.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "consensus_state", "Type": "Any", "Description": "Client state associated with the request identifier"}, + {"Parameter": "proof", "Type": "Byte Array", "Description": "Merkle proof of existence"}, + {"Parameter": "proof_height", "Type": "Height", "Description": "Height at which the proof was retrieved"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/client/queryConsensusStatesRequest.json b/source/json_tables/chain/ibc/core/client/queryConsensusStatesRequest.json new file mode 100644 index 00000000..99fe4f32 --- /dev/null +++ b/source/json_tables/chain/ibc/core/client/queryConsensusStatesRequest.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "client_id", "Type": "String", "Description": "Client identifier", "Required": "Yes"}, + {"Parameter": "pagination", "Type": "PageRequest", "Description": "The optional pagination for the request", "Required": "No"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/client/queryConsensusStatesResponse.json b/source/json_tables/chain/ibc/core/client/queryConsensusStatesResponse.json new file mode 100644 index 00000000..639cef2e --- /dev/null +++ b/source/json_tables/chain/ibc/core/client/queryConsensusStatesResponse.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "consensus_states", "Type": "ConsensusStateWithHeight Array", "Description": "Consensus states associated with the identifier"}, + {"Parameter": "pagination", "Type": "PageResponse", "Description": "Pagination information in the response"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/client/queryUpgradedClientStateResponse.json b/source/json_tables/chain/ibc/core/client/queryUpgradedClientStateResponse.json new file mode 100644 index 00000000..99567127 --- /dev/null +++ b/source/json_tables/chain/ibc/core/client/queryUpgradedClientStateResponse.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "upgraded_client_state", "Type": "Any", "Description": "Client state associated with the request identifier"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/client/queryUpgradedConsensusStateResponse.json b/source/json_tables/chain/ibc/core/client/queryUpgradedConsensusStateResponse.json new file mode 100644 index 00000000..948ae7ab --- /dev/null +++ b/source/json_tables/chain/ibc/core/client/queryUpgradedConsensusStateResponse.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "upgraded_consensus_state", "Type": "Any", "Description": "Consensus state associated with the request identifier"} +] \ No newline at end of file