diff --git a/source/includes/_account.md b/source/includes/_account.md index e0fa3117..cd8cb328 100644 --- a/source/includes/_account.md +++ b/source/includes/_account.md @@ -106,6 +106,8 @@ import ( "os" "time" + "cosmossdk.io/math" + "github.com/InjectiveLabs/sdk-go/client" "github.com/InjectiveLabs/sdk-go/client/common" @@ -162,11 +164,11 @@ func main() { Sender: senderAddress.String(), SubaccountId: "0xaf79152ac5df276d9a8e1e2e22822f9713474902000000000000000000000000", Amount: sdktypes.Coin{ - Denom: "inj", Amount: sdktypes.NewInt(1000000000000000000), // 1 INJ + Denom: "inj", Amount: math.NewInt(1000000000000000000), // 1 INJ }, } - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg err = chainClient.QueueBroadcastMsg(msg) if err != nil { @@ -194,6 +196,7 @@ func main() {
+ **Coin** @@ -225,6 +228,7 @@ gas fee: 0.0000660495 INJ
+ **TxResponse** @@ -244,6 +248,7 @@ gas fee: 0.0000660495 INJ
+ **ABCIMessageLog** @@ -253,6 +258,7 @@ gas fee: 0.0000660495 INJ
+ **Event** @@ -261,6 +267,7 @@ gas fee: 0.0000660495 INJ
+ **StringEvent** @@ -269,6 +276,7 @@ gas fee: 0.0000660495 INJ
+ **EventAttribute** @@ -278,6 +286,7 @@ gas fee: 0.0000660495 INJ
+ **Attribute** @@ -387,6 +396,8 @@ import ( "os" "time" + "cosmossdk.io/math" + "github.com/InjectiveLabs/sdk-go/client" "github.com/InjectiveLabs/sdk-go/client/common" @@ -443,11 +454,11 @@ func main() { Sender: senderAddress.String(), SubaccountId: "0xaf79152ac5df276d9a8e1e2e22822f9713474902000000000000000000000000", Amount: sdktypes.Coin{ - Denom: "inj", Amount: sdktypes.NewInt(1000000000000000000), // 1 INJ + Denom: "inj", Amount: math.NewInt(1000000000000000000), // 1 INJ }, } - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg err = chainClient.QueueBroadcastMsg(msg) if err != nil { @@ -475,6 +486,7 @@ func main() {
+ **Coin** @@ -506,6 +518,7 @@ gas fee: 0.000064803 INJ
+ **TxResponse** @@ -525,6 +538,7 @@ gas fee: 0.000064803 INJ
+ **ABCIMessageLog** @@ -534,6 +548,7 @@ gas fee: 0.000064803 INJ
+ **Event** @@ -542,6 +557,7 @@ gas fee: 0.000064803 INJ
+ **StringEvent** @@ -550,6 +566,7 @@ gas fee: 0.000064803 INJ
+ **EventAttribute** @@ -559,6 +576,7 @@ gas fee: 0.000064803 INJ
+ **Attribute** @@ -676,6 +694,8 @@ import ( "os" "time" + "cosmossdk.io/math" + "github.com/InjectiveLabs/sdk-go/client" "github.com/InjectiveLabs/sdk-go/client/common" @@ -733,11 +753,11 @@ func main() { SourceSubaccountId: "0xaf79152ac5df276d9a8e1e2e22822f9713474902000000000000000000000000", DestinationSubaccountId: "0xaf79152ac5df276d9a8e1e2e22822f9713474902000000000000000000000001", Amount: sdktypes.Coin{ - Denom: "inj", Amount: sdktypes.NewInt(1000000000000000000), // 1 INJ + Denom: "inj", Amount: math.NewInt(1000000000000000000), // 1 INJ }, } - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg err = chainClient.QueueBroadcastMsg(msg) if err != nil { @@ -766,6 +786,7 @@ func main() {
+ **Coin** @@ -797,6 +818,7 @@ gas fee: 0.0000610515 INJ
+ **TxResponse** @@ -816,6 +838,7 @@ gas fee: 0.0000610515 INJ
+ **ABCIMessageLog** @@ -825,6 +848,7 @@ gas fee: 0.0000610515 INJ
+ **Event** @@ -833,6 +857,7 @@ gas fee: 0.0000610515 INJ
+ **StringEvent** @@ -841,6 +866,7 @@ gas fee: 0.0000610515 INJ
+ **EventAttribute** @@ -850,6 +876,7 @@ gas fee: 0.0000610515 INJ
+ **Attribute** @@ -967,6 +994,8 @@ import ( "os" "time" + "cosmossdk.io/math" + "github.com/InjectiveLabs/sdk-go/client" "github.com/InjectiveLabs/sdk-go/client/common" @@ -1024,11 +1053,11 @@ func main() { SourceSubaccountId: "0xaf79152ac5df276d9a8e1e2e22822f9713474902000000000000000000000000", DestinationSubaccountId: "0xbdaedec95d563fb05240d6e01821008454c24c36000000000000000000000000", Amount: sdktypes.Coin{ - Denom: "inj", Amount: sdktypes.NewInt(1000000000000000000), // 1 INJ + Denom: "inj", Amount: math.NewInt(1000000000000000000), // 1 INJ }, } - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg err = chainClient.QueueBroadcastMsg(msg) if err != nil { @@ -1057,6 +1086,7 @@ func main() {
+ **Coin** @@ -1088,6 +1118,7 @@ gas fee: 0.0000611985 INJ
+ **TxResponse** @@ -1107,6 +1138,7 @@ gas fee: 0.0000611985 INJ
+ **ABCIMessageLog** @@ -1116,6 +1148,7 @@ gas fee: 0.0000611985 INJ
+ **Event** @@ -1124,6 +1157,7 @@ gas fee: 0.0000611985 INJ
+ **StringEvent** @@ -1132,6 +1166,7 @@ gas fee: 0.0000611985 INJ
+ **EventAttribute** @@ -1141,6 +1176,7 @@ gas fee: 0.0000611985 INJ
+ **Attribute** @@ -1263,6 +1299,8 @@ import ( "os" "time" + "cosmossdk.io/math" + "github.com/InjectiveLabs/sdk-go/client" "github.com/InjectiveLabs/sdk-go/client/common" @@ -1318,10 +1356,10 @@ func main() { ethDest := "0xaf79152ac5df276d9a8e1e2e22822f9713474902" amount := sdktypes.Coin{ - Denom: "inj", Amount: sdktypes.NewInt(5000000000000000000), // 5 INJ + Denom: "inj", Amount: math.NewInt(5000000000000000000), // 5 INJ } bridgeFee := sdktypes.Coin{ - Denom: "inj", Amount: sdktypes.NewInt(2000000000000000000), // 2 INJ + Denom: "inj", Amount: math.NewInt(2000000000000000000), // 2 INJ } msg := &peggytypes.MsgSendToEth{ @@ -1331,7 +1369,7 @@ func main() { BridgeFee: bridgeFee, } - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg err = chainClient.QueueBroadcastMsg(msg) if err != nil { @@ -1352,13 +1390,21 @@ func main() { ``` -|Parameter|Type|Description|Required| -|----|----|----|----| -|sender|String|The Injective Chain address|Yes| -|amount|Integer|The amount of tokens to send|Yes| -|denom|String|The token denom|Yes| -|eth_dest|String|The ethereum destination address|Yes| -|bridge_fee|String|The bridge fee for the transfer|Yes| + + + + +
ParameterTypeDescriptionRequired
senderStringThe sender's addressYes
eth_destStringDestination Ethereum addressYes
amountCoinThe coin to send across the bridge (note the restriction that this is a single coin, not a set of coins)Yes
bridge_feeCoinThe fee paid for the bridge, distinct from the fee paid to the chain to actually send this message in the first place. So a successful send has two layers of fees for the userYes
+ + +
+ +**Coin** + + + +
ParameterTypeDescriptionRequired
denomStringThe token denomYes
amountStringThe amount of tokensYes
+ ### Response Parameters > Response Example: @@ -1379,6 +1425,77 @@ DEBU[0004] gas wanted: 161907 fn=func1 src="client/ch gas fee: 0.0000809535 INJ ``` + +
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
+ + ## SendToInjective @@ -1447,18 +1564,18 @@ if __name__ == "__main__": ``` -|Parameter|Type|Description|Required| -|----|----|----|----| -|ethereum_endpoint|String|The ethereum endpoint, you can get one from providers like Infura and Alchemy|Yes| -|private_key|String|Private key of the account to be used to sign the transaction|Yes| -|token_contract|String|The token contract, you can find the contract for the token you want to transfer on etherscan|Yes| -|receiver|String|The Injective Chain address to receive the funds|Yes| -|amount|Float|The amount you want to transfer|Yes| -|maxFeePerGas|Integer|The maxFeePerGas in Gwei|Yes| -|maxPriorityFeePerGas|Integer|The maxPriorityFeePerGas in Gwei|Yes| -|peggo_abi|String|Peggo contract ABI|Yes| -|data|String|The body of the message to send to Injective chain to do the deposit|Yes| -|decimals|Integer|Number of decimals in Injective chain of the token being transferred (default: 18)|No| + + + + + + + + + + +
ParameterTypeDescriptionRequired
ethereum_endpointStringThe ethereum endpoint, you can get one from providers like Infura and AlchemyYes
private_keyStringPrivate key of the account to be used to sign the transactionYes
token_contractStringThe token contract, you can find the contract for the token you want to transfer on etherscanYes
receiverStringThe Injective Chain address to receive the fundsYes
amountFloatThe amount to transferYes
maxFeePerGasIntegerThe maxFeePerGas in GweiYes
maxPriorityFeePerGasIntegerThe maxPriorityFeePerGas in GweiYes
peggo_abiStringPeggo contract ABI|Yes
dataStringThe body of the message to send to Injective chain to do the depositYes
decimalsIntegerNumber of decimals in Injective chain of the token being transferred (default: 18)No
+ ### Response Parameters > Response Example: @@ -1578,9 +1695,9 @@ func main() { ``` -|Parameter|Type|Description|Required| -|----|----|----|----| -|hash|String|The transaction hash|Yes| + +
ParameterTypeDescriptionRequired
hashStringThe TX hash to query, encoded as a hex stringYes
+ > Response Example: @@ -2268,6 +2385,157 @@ tx: txhash: A2B2B971C690AE7977451D24D6F450AECE6BCCB271E91E32C2563342DDA5254B ``` + + +
ParameterTypeDescription
txTxTransaction details
tx_resposneTxResponseTransaction details
+ + +
+ +**Tx** + + + + +
ParameterTypeDescription
bodyTxBodyBody is the processable content of the transaction
auth_infoAuthInfoAuthorization related content of the transaction (specifically signers, signer modes and fee)
signaturesBytes Array ArrayList of signatures that matches the length and order of AuthInfo's signer_infos to allow connecting signature meta information like public key and signing mode by position
+ + +
+ +**TxBody** + + + + + + +
ParameterTypeDescription
messagesAny ArrayList of messages to be executed. The required signers of those messages define the number and order of elements in AuthInfo's signer_infos and Tx's signatures. Each required signer address is added to the list only the first time it occurs. By convention, the first required signer (usually from the first message) is referred to as the primary signer and pays the fee for the whole transaction
memoStringMemo is any arbitrary note/comment to be added to the transaction
timeout_heightIntegerThe block height after which this transaction will not be processed by the chain
extension_optionsAny ArrayThese are arbitrary options that can be added by chains when the default options are not sufficient. If any of these are present and can't be handled, the transaction will be rejected
non_critical_extension_optionsAny ArrayThese are arbitrary options that can be added by chains when the default options are not sufficient. If any of these are present and can't be handled, they will be ignored
+ + +
+ +**AuthInfo** + + + + +
ParameterTypeDescription
signer_infosSignerInfo ArrayDefines the signing modes for the required signers. The number and order of elements must match the required signers from TxBody's messages. The first element is the primary signer and the one which pays the fee
feeFeeFee is the fee and gas limit for the transaction. The first signer is the primary signer and the one which pays the fee. The fee can be calculated based on the cost of evaluating the body and doing signature verification of the signers. This can be estimated via simulation
tipTipTip is the optional tip used for transactions fees paid in another denom (this field is ignored if the chain didn't enable tips, i.e. didn't add the `TipDecorator` in its posthandler)
+ + +
+ +**SignerInfo** + + + + +
ParameterTypeDescription
public_keyAnyPublic key of the signer. It is optional for accounts that already exist in state. If unset, the verifier can use the required signer address for this position and lookup the public key
mode_infoModeInfoDescribes the signing mode of the signer and is a nested structure to support nested multisig pubkey's
sequenceIntegerThe sequence of the account, which describes the number of committed transactions signed by a given address. It is used to prevent replay attacks
+ + +
+ +**ModeInfo** + + +
ParameterTypeDescription
sumSigning modeTypes that are valid to be assigned to Sum: *ModeInfo_Single_, *ModeInfo_Multi_
+ + +
+ +**Fee** + + + + + +
ParameterTypeDescription
amountCoin ArrayAmount of coins to be paid as a fee
gas_limitIntegerMaximum gas that can be used in transaction processing before an out of gas error occurs
payerStringIf unset, the first signer is responsible for paying the fees. If set, the specified account must pay the fees. The payer must be a tx signer (and thus have signed this field in AuthInfo). Setting this field does *not* change the ordering of required signers for the transaction
granterStringIf set, the fee payer (either the first signer or the value of the payer field) requests that a fee grant be used to pay fees instead of the fee payer's own balance. If an appropriate fee grant does not exist or the chain does not support fee grants, this will fail
+ + +
+ +**Coin** + + + +
ParameterTypeDescriptionRequired
denomStringThe token denomYes
amountStringThe amount of tokensYes
+ + +
+ +**Tip** + + + +
ParameterTypeDescription
amountCoin ArrayAmount of coins to be paid as a tip
tipperStringAddress of the account paying for the tip
+ + +
+ +**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
+ + ## StreamEventOrderFail diff --git a/source/includes/_accountsrpc.md b/source/includes/_accountsrpc.md index 2f27d209..04f97564 100644 --- a/source/includes/_accountsrpc.md +++ b/source/includes/_accountsrpc.md @@ -67,9 +67,9 @@ func main() { ``` -|Parameter|Type|Description|Required| -|----|----|----|----| -|account_address|String|The Injective Chain address|Yes| + +
ParameterTypeDescriptionRequired
account_addressStringInjective address of the account to query for subaccountsYes
+ ### Response Parameters @@ -94,9 +94,10 @@ func main() { } ``` -|Parameter|Type|Description| -|----|----|----| -|subaccounts|String Array|List of subaccounts, including default and all funded accounts| + +
ParameterTypeDescription
subaccountsString ArraySubaccounts list
+ + ## SubaccountHistory @@ -190,14 +191,14 @@ func main() { ``` -|Parameter|Type|Description|Required| -|----|----|----|----| -|subaccount_id|String|Filter by subaccount ID|Yes| -|denom|String|Filter by denom|No| -|transfer_types|String Array|Filter by transfer types. Valid options: [“internal”, “external”, withdraw”, “deposit”]|No| -|skip|Integer|Skip the last _n_ transfers, you can use this to fetch all transfers since the API caps at 100. Note: The end_time filter takes precedence over skip; any skips will use the filtered results from end_time|No| -|limit|Integer|Max number of items to be returned|No| -|end_time|Integer|Upper bound (inclusive) of account transfer history executed_at unix timestamp|No| + + + + + + +
ParameterTypeDescriptionRequired
subaccount_idStringID of the subaccount to get the history fromYes
denomStringFilter by token denomNo
transfer_typesString ArrayFilter by transfer types. Valid options: internal, external, withdraw, depositNo
skipIntegerSkip the first N items from the resultNo
limitIntegerMaximum number of items to be returnedNo
end_timeIntegerUpper bound (inclusive) of account transfer history executed_at unix timestampNo
+ ### Response Parameters @@ -276,33 +277,45 @@ func main() { } ``` -|Parameter|Type|Description| -|----|----|----| -|transfers|SubaccountBalanceTransfer|List of subaccount transfers| -|paging|Paging|Pagination of results| + + +
ParameterTypeDescription
transfersSubaccountBalanceTransfer ArrayTransfers list
pagingPagingPagination details
+ + +
**SubaccountBalanceTransfer** -|Parameter|Type|Description| -|----|----|----| -|amount|CosmosCoin|CosmosCoin| -|dst_account_address|String|Account address of the receiving side| -|executed_at|Integer|Timestamp of the transfer in UNIX millis| -|src_subaccount_id|String|Subaccount ID of the sending side| -|transfer_type|String|Type of the subaccount balance transfer. Valid options: ["internal", "external", "withdraw", "deposit"]| + + + + + + + +
ParameterTypeDescription
transfer_typeStringType of subaccount balance transfer
src_subaccount_idStringSubaccount ID of the sending side
src_account_addressStringAccount address of the sending side
dst_subaccount_idStringSubaccount ID of the receiving side
dst_account_addressStringAccount address of the receiving side
amountCosmosCoinTransfer amount
executed_atIntegerTransfer timestamp (in milliseconds)
+ + +
**CosmosCoin** -|Parameter|Type|Description| -|----|----|----| -|amount|String|Coin amount| -|denom|String|Coin denominator| + + +
ParameterTypeDescription
denomStringToken denom
amountStringToken amount
+ + +
**Paging** -|Parameter|Type|Description| -|----|----|----| -|total|Integer|Total number of available records| + + + + + +
ParameterTypeDescription
totalIntegerTotal number of available records
fromIntegerRecord index start
toIntegerRecord index end
count_by_subaccountIntegerCount entries by subaccount
nextString ArrayList of tokens to navigate to the next pages
+ ## SubaccountBalance @@ -373,10 +386,10 @@ func main() { ``` -|Parameter|Type|Description|Required| -|----|----|----|----| -|subaccount_id|String|Filter by subaccount ID|Yes| -|denom|String|Filter by denom|Yes| + + +
ParameterTypeDescriptionRequired
subaccount_idStringID of the subaccount to get the balances fromYes
denomStringFilter by token denomYes
+ ### Response Parameters @@ -410,26 +423,29 @@ func main() { } ``` + +
ParameterTypeDescription
balanceSubaccountBalanceBalance details
+ -|Parameter|Type|Description| -|----|----|----| -|balance|SubaccountBalance|SubaccountBalance object| +
**SubaccountBalance** -|Parameter|Type|Description| -|----|----|----| -|denom|String|Coin denom on the chain| -|deposit|SubaccountDeposit|SubaccountDeposit object| -|subaccount_id|String|ID of the subaccount| -|account_address|String|The Injective Chain address that owns the subaccount| + + + + +
ParameterTypeDescription
subaccount_idStringSubaccount ID
account_addressStringInjective address of the account the subaccount belongs to
denomStringToken denom
depositSubaccountDepositDeposit details
+ + +
**SubaccountDeposit** -|Parameter|Type|Description| -|----|----|----| -|available_balance|String|The available balance for a denom (taking active orders into account)| -|total_balance|String|The total balance for a denom (balance if all active orders were cancelled)| + + +
ParameterTypeDescription
total_balanceStringTotal balance
available_balanceStringAvailable balance
+ ## SubaccountBalancesList @@ -499,12 +515,10 @@ func main() { ``` - -|Parameter|Type|Description|Required| -|----|----|----|----| -|subaccount_id|String|ID of subaccount to get balance info from|Yes| -|denoms|String Array|Filter balances by denoms. If not set, the balances of all the denoms for the subaccount are provided|No| - + + +
ParameterTypeDescriptionRequired
subaccount_idStringID of the subaccount to get the balances fromYes
denomsStringFilter balances by denoms. If not set, the balances of all the denoms for the subaccount are providedNo
+ ### Response Parameters @@ -569,25 +583,30 @@ func main() { } ``` -|Parameter|Type|Description| -|----|----|----| -|balances|SubaccountBalance Array|Array of SubaccountBalance objects| + +
ParameterTypeDescription
balancesSubaccountBalance ArrayList of subaccount balances
+ + +
**SubaccountBalance** -|Parameter|Type|Description| -|----|----|----| -|account_address|String|The Injective Chain address, owner of subaccount| -|denom|String|Coin denom on the chain| -|deposit|SubaccountDeposit|SubaccountDeposit object| -|subaccount_id|String|ID of subaccount associated with returned balances| + + + + +
ParameterTypeDescription
subaccount_idStringSubaccount ID
account_addressStringInjective address of the account the subaccount belongs to
denomStringToken denom
depositSubaccountDepositDeposit details
+ + +
**SubaccountDeposit** -|Parameter|Type|Description| -|----|----|----| -|available_balance|String|The available balance for a denom| -|total_balance|String|The total balance for a denom| + + +
ParameterTypeDescription
total_balanceStringTotal balance
available_balanceStringAvailable balance
+ + ## SubaccountOrderSummary @@ -668,12 +687,11 @@ func main() { ``` -|Parameter|Type|Description|Required| -|----|----|----|----| -|subaccount_id|String|ID of the subaccount we want to get the summary from|Yes| -|market_id|String|Limit the order summary to a specific market|No| -|order_direction|String|Filter by the direction of the orders. Valid options: "buy", "sell"|No| - + + + +
ParameterTypeDescriptionRequired
subaccount_idStringID of the subaccount to get the summary fromYes
market_idStringLimit the order summary to a specific marketNo
order_directionStringFilter by the direction of the orders. Valid options: buy, sellNo
+ ### Response Parameters @@ -691,11 +709,10 @@ spot orders: 1 derivative orders: 7 ``` -|Parameter|Type|Description| -|----|----|----| -|derivative_orders_total|Integer|Total count of subaccount's active derivative orders in a given market and direction| -|spot_orders_total|Integer|Total count of subaccount's active spot orders in a given market and direction| - + + +
ParameterTypeDescription
spot_orders_totalIntegerTotal count of subaccount's spot orders in given market and direction
derivative_orders_totalIntegerTotal count of subaccount's derivative orders in given market and direction
+ ## StreamSubaccountBalance @@ -771,7 +788,7 @@ import ( ) func main() { - //network := common.LoadNetwork("mainnet", "k8s") + // network := common.LoadNetwork("mainnet", "k8s") network := common.LoadNetwork("testnet", "lb") exchangeClient, err := exchangeclient.NewExchangeClient(network) if err != nil { @@ -803,13 +820,10 @@ func main() { ``` -| Parameter | Type | Description | Required | -| ------------------ | ------------ | ----------------------------------------------------------------------------------------------------- | -------- | -| subaccount_id | String | Filter by subaccount ID | Yes | -| denoms | String Array | Filter balances by denoms. If not set, the balances of all the denoms for the subaccount are provided | No | -| callback | Function | Function receiving one parameter (a stream event JSON dictionary) to process each new event | Yes | -| on_end_callback | Function | Function with the logic to execute when the stream connection is interrupted | No | -| on_status_callback | Function | Function receiving one parameter (the exception) with the logic to execute when an exception happens | No | + + +
ParameterTypeDescriptionRequired
subaccount_idStringID of the subaccount to get the balances fromYes
denomsString ArrayFilter balances by denoms. If not set, the balances of all the denoms for the subaccount are providedNo
+ ### Response Parameters @@ -868,26 +882,30 @@ func main() { } ``` -|Parameter|Type|Description| -|----|----|----| -|balance|SubaccountBalance|SubaccountBalance object| -|timestamp|Integer|Operation timestamp in UNIX millis| + + +
ParameterTypeDescription
balanceSubaccountBalanceSubaccount balance
timestampIntegerOperation timestamp in Unix milliseconds
+ + +
**SubaccountBalance** -|Parameter|Type|Description| -|----|----|----| -|denom|String|Coin denom on the chain| -|deposit|SubaccountDeposit|SubaccountDeposit object| -|subaccount_id|String|ID of the subaccount to get balance from| -|account_address|String|The Injective Chain address that owns the subaccount| + + + + +
ParameterTypeDescription
subaccount_idStringSubaccount ID
account_addressStringInjective address of the account the subaccount belongs to
denomStringToken denom
depositSubaccountDepositDeposit details
+ + +
**SubaccountDeposit** -|Parameter|Type|Description| -|----|----|----| -|available_balance|String|The available balance for a denom (taking active orders into account)| -|total_balance|String|The total balance for a denom (balance if all active orders were cancelled)| + + +
ParameterTypeDescription
total_balanceStringTotal balance
available_balanceStringAvailable balance
+ ## OrderStates @@ -973,10 +991,10 @@ func main() { ``` -|Parameter|Type|Description|Required| -|----|----|----|----| -|spot_order_hashes|String Array|Array with the order hashes you want to fetch in spot markets|No| -|derivative_order_hashes|String Array|Array with the order hashes you want to fetch in derivative markets|No| + + +
ParameterTypeDescriptionRequired
spot_order_hashesString ArrayArray with the order hashes you want to fetch in spot marketsNo
derivative_order_hashesString ArrayArray with the order hashes you want to fetch in derivative marketsNo
+ ### Response Parameters @@ -1048,40 +1066,29 @@ func main() { } ``` -|Parameter|Type|Description| -|----|----|----| -|spot_order_states|OrderStateRecord Array|Array of OrderStateRecord objects| -|derivative_order_states|OrderStateRecord Array|Array of OrderStateRecord objects| - -**SpotOrderStates** - -|Parameter|Type|Description| -|----|----|----| -|order_hash|String|Hash of the order| -|subaccount_id|String|The subaccount ID that posted the order| -|market_id|String|The market ID of the order| -|order_type|String|The order type. Should be one of: ["buy", "sell", "stop_buy", "stop_sell", "take_buy", "take_sell", "buy_po", "sell_po"]. If execution_type (market or limit) is needed, use the OrdersHistory request in Spot/DerivativeExchangeRPC instead| -|order_side|String|The order side. Should be one of: ["buy", "sell"]| -|state|String|The order state. Should be one of: ["booked", "partial_filled", "filled", "canceled"]| -|quantity_filled|String|The quantity that has been filled for the order| -|quantity_remaining|String|The quantity that hasn't been filled for the order| -|created_at|String|The UNIX timestamp of the order when it was first created| -|updated_at|String|The UNIX timestamp of the order when it was last updated| - -**DerivativeOrderStates** - -|Parameter|Type|Description| -|----|----|----| -|order_hash|String|Hash of the order| -|subaccount_id|String|The subaccount ID that posted the order| -|market_id|String|The market ID of the order| -|order_type|String|The order type. Should be one of: ["buy", "sell", "stop_buy", "stop_sell", "take_buy", "take_sell", "buy_po", "sell_po"]. If execution_type (market or limit) is needed, use the OrdersHistory request in Spot/DerivativeExchangeRPC instead| -|order_side|String|The order side. Should be one of: ["buy", "sell"]| -|state|String|The order state. Should be one of: ["booked", "partial_filled", "filled", "canceled"]| -|quantity_filled|String|The quantity that has been filled for the order| -|quantity_remaining|String|The quantity that hasn't been filled for the order| -|created_at|String|The UNIX timestamp of the order when it was first created| -|updated_at|String|The UNIX timestamp of the order when it was last updated| + + +
ParameterTypeDescription
spot_order_statesOrderStateRecord ArrayList of the spot order state records
derivative_order_statesOrderStateRecord ArrayList of the derivative order state records
+ + +
+ +**OrderStateRecord** + + + + + + + + + + + + + +
ParameterTypeDescription
order_hashStringHash of the order
subaccount_idStringThe subaccountId that this order belongs to
market_idStringThe Market ID of the order
order_typeStringThe type of the order
order_sideStringThe side of the order
stateStringThe order state. Should be one of: booked, partial_filled, filled, canceled
quantity_filledStringThe filled quantity of the order
quantity_remainingStringThe unfilled quantity of the order
created_atIntegerOrder committed timestamp in UNIX milliseconds
updated_atIntegerOrder updated timestamp in UNIX milliseconds
priceStringOrder price
marginStringMargin for derivative order
+ ## Portfolio @@ -1150,9 +1157,9 @@ func main() { ``` -|Parameter|Type|Description|Required| -|----|----|----|----| -|account_address|String|The Injective Chain address|Yes| + +
ParameterTypeDescriptionRequired
account_addressStringThe Injective addressYes
+ ### Response Parameters @@ -1262,22 +1269,33 @@ func main() { } ``` -|Parameter|Type|Description| -|----|----|----| -|portfolio_value|String|The total value (in USD) of your portfolio including bank balance, subaccounts' balance, unrealized profit & loss as well as margin in open positions| -|available_balance|String|The total available balance (in USD) in all subaccounts| -|locked_balance|String|The amount of margin in open orders and positions (in USD)| -|unrealized_pnl|String|The approximate unrealized profit and loss across all positions (based on mark prices, in USD)| -|subaccounts|SubaccountPortfolio Array|List of all subaccounts' portfolios| + +
ParameterTypeDescription
portfolioAccountPortfolioPortfolio details
+ + +
+ +**AccountPortfolio** + + + + + + +
ParameterTypeDescription
portfolio_valueStringThe account's portfolio value in USD
available_balanceStringThe account's available balance value in USD
locked_balanceStringThe account's locked balance value in USD
unrealized_pnlStringThe account's total unrealized PnL value in USD
subaccountsSubaccountPortfolio ArrayList of all subaccounts' portfolio
+ + +
**SubaccountPortfolio** -|Parameter|Type|Description| -|----|----|----| -|subaccount_id|String|The ID of this subaccount| -|available_balance|String|The subaccount's available balance (in USD)| -|locked_balance|String|The subaccount's locked balance (in USD)| -|unrealized_pnl|String|The Subaccount's total unrealized PnL value (in USD)| + + + + +
ParameterTypeDescription
subaccount_idStringThe subaccount ID
available_balanceStringThe subaccount's available balance value in USD
locked_balanceStringThe subaccount's locked balance value in USD
unrealized_pnlStringThe subaccount's total unrealized PnL value in USD
+ + ## Rewards @@ -1354,10 +1372,10 @@ func main() { ``` -|Parameter|Type|Description|Required| -|----|----|----|----| -|account_address|String|The Injective Chain address to fetch rewards amount for|No| -|epoch|Integer|The rewards distribution epoch number. Use -1 for the latest epoch|No| + + +
ParameterTypeDescriptionRequired
epochIntegerThe distribution epoch sequence number. -1 for latestNo
account_addressStringAccount address for the rewards distributionNo
+ ### Response Parameters @@ -1397,21 +1415,25 @@ func main() { } ``` -|Parameter|Type|Description| -|----|----|----| -|rewards|Reward Array|List of trading rewards| + +
ParameterTypeDescription
rewardsReward ArrayThe trading rewards distributed
+ + +
**Reward** -|Parameter|Type|Description| -|----|----|----| -|account_address|String|The Injective Chain address| -|rewards|Coin Array|List of rewards by denom and amount| -|distributed_at|Integer|Timestamp of the transfer in UNIX millis| + + + +
ParameterTypeDescription
account_addressStringAccount Injective address
rewardsCoin ArrayReward coins distributed
distributed_atIntegerRewards distribution timestamp in UNIX milliseconds
+ + +
**Coin** -|Parameter|Type|Description| -|----|----|----| -|denom|String|Denom of the reward| -|amount|String|Amount of denom in reward| + + +
ParameterTypeDescription
denomStringToken denom
amountStringToken amount
+ diff --git a/source/includes/_auction.md b/source/includes/_auction.md index c7534548..8f48b964 100644 --- a/source/includes/_auction.md +++ b/source/includes/_auction.md @@ -102,6 +102,8 @@ import ( "os" "time" + "cosmossdk.io/math" + "github.com/InjectiveLabs/sdk-go/client" "github.com/InjectiveLabs/sdk-go/client/common" @@ -156,7 +158,7 @@ func main() { round := uint64(9355) bidAmount := sdktypes.Coin{ - Denom: "inj", Amount: sdktypes.NewInt(1000000000000000000), // 1 INJ + Denom: "inj", Amount: math.NewInt(1000000000000000000), // 1 INJ } msg := &auctiontypes.MsgBid{ @@ -165,7 +167,7 @@ func main() { BidAmount: bidAmount, } - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg err = chainClient.QueueBroadcastMsg(msg) if err != nil { @@ -186,11 +188,20 @@ func main() { ``` -|Parameter|Type|Description|Required| -|----|----|----|----| -|sender|String|The Injective Chain address|Yes| -|round|String|The auction round|Yes| -|bid_amount|String|The bid amount in INJ|Yes| + + + +
ParameterTypeDescriptionRequired
senderStringThe sender Injective addressYes
bid_amountCoinBid amount in INJ tokensYes
roundIntegerThe current auction roundYes
+ + +
+ +**Coin** + + + +
ParameterTypeDescriptionRequired
denomStringThe token denomYes
amountStringThe amount of tokensYes
+ ### Response Parameters > Response Example: @@ -210,3 +221,74 @@ DEBU[0002] nonce incremented to 3509 fn=func1 src="client/ch DEBU[0002] gas wanted: 152112 fn=func1 src="client/chain/chain.go:624" gas fee: 0.000076056 INJ ``` + + +
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
+ diff --git a/source/includes/_auctionsrpc.md b/source/includes/_auctionsrpc.md index 20c70b1a..84340803 100644 --- a/source/includes/_auctionsrpc.md +++ b/source/includes/_auctionsrpc.md @@ -69,9 +69,9 @@ func main() { ``` -| Parameter | Type | Description | Required | -| --------- | ------- | --------------------------------------- | -------- | -| round | Integer | The auction round number. -1 for latest | Yes | + +
ParameterTypeDescriptionRequired
roundIntegerThe auction round number, -1 for latestYes
+ ### Response Parameters @@ -141,37 +141,42 @@ func main() { } ``` -|Parameter|Type|Description| -|----|----|----| -|auction|Auction|Information about the auction| -|bids|Bid Array|Bids submitted in the auction| + + +
ParameterTypeDescription
auctionAuctionAuction details
bidsBid ArrayAuction's bids
+ + +
**Auction** -|Parameter|Type|Description| -|----|----|----| -|winner|String|The Injective Chain address with the highest bid| -|basket|Coin Array|Coins in the basket| -|winning_bid_amount|String|Amount of the highest bid (in inj)| -|round|Integer|The auction round number| -|end_timestamp|Integer|The auction's ending timestamp in UNIX millis| -|updated_at|Integer|The timestamp of the last update in UNIX millis| + + + + + + +
ParameterTypeDescription
winnerStringAccount Injective address
basketCoin ArrayCoins in the basket
winning_bid_amountStringAmount of the highest bid (in INJ)
roundIntegerThe auction round number
end_timestampIntegerAuction end timestamp in UNIX milliseconds
updated_atIntegerThe timestamp of the last update in UNIX milliseconds
+ + +
**Bid** -|Parameter|Type|Description| -|----|----|----| -|bidder|String|The Injective Chain address of the bidder| -|amount|String|The bid amount (in inj)| -|timestamp|Integer|The timestamp at which the bid was submitted| + + + +
ParameterTypeDescription
bidderStringBidder account Injective address
amountStringThe bid amount
timestampIntegerBid timestamp in UNIX millis
+ +
**Coin** -|Parameter|Type|Description| -|----|----|----| -|denom|String|Denom of the coin| -|amount|String|Quantity of the coin| + + +
ParameterTypeDescription
denomStringToken denom
amountStringToken amount
+ ## Auctions @@ -238,6 +243,8 @@ func main() { ``` +No parameters + ### Response Parameters > Response Example: @@ -350,27 +357,29 @@ func main() { } ``` -|Parameter|Type|Description| -|----|----|----| -|auctions|Auction Array|List of historical auctions| + +
ParameterTypeDescription
auctionsAuction ArrayList of auctions
+ -**Auction** +
-|Parameter|Type|Description| -|----|----|----| -|winner|String|The Injective Chain address with the highest bid| -|basket|Coin Array|Coins in the basket| -|winning_bid_amount|String|Amount of the highest bid (in inj)| -|round|Integer|The auction round number| -|end_timestamp|Integer|The auction's ending timestamp in UNIX millis| -|updated_at|Integer|The timestamp of the last update in UNIX millis| + + + + + + +
ParameterTypeDescription
winnerStringAccount Injective address
basketCoin ArrayCoins in the basket
winning_bid_amountStringAmount of the highest bid (in INJ)
roundIntegerThe auction round number
end_timestampIntegerAuction end timestamp in UNIX milliseconds
updated_atIntegerThe timestamp of the last update in UNIX milliseconds
+ + +
**Coin** -|Parameter|Type|Description| -|----|----|----| -|denom|String|Denom of the coin| -|amount|String|Quantity of the coin| + + +
ParameterTypeDescription
denomStringToken denom
amountStringToken amount
+ ## StreamBids @@ -474,11 +483,7 @@ func main() { ``` -| Parameter | Type | Description | Required | -| ------------------ | -------- | ---------------------------------------------------------------------------------------------------- | -------- | -| callback | Function | Function receiving one parameter (a stream event JSON dictionary) to process each new event | Yes | -| on_end_callback | Function | Function with the logic to execute when the stream connection is interrupted | No | -| on_status_callback | Function | Function receiving one parameter (the exception) with the logic to execute when an exception happens | No | +No parameters ### Response Parameters @@ -513,9 +518,9 @@ func main() { } ``` -|Parameter|Type|Description| -|----|----|----| -|bidder|String|The Injective Chain address of the bidder| -|bid_amount|String|The bid amount (in inj)| -|round|Integer|The auction round number| -|timestamp|Integer|The timestamp at which the bid was submitted in UNIX millis| + + + + +
ParameterTypeDescription
bidderStringThe bidder Injective address
bid_amountStringThe bid amount (in INJ)
roundIntegerThe auction round number
timestampIntegerBid timestamp in UNIX milliseconds
+ diff --git a/source/includes/_authz.md b/source/includes/_authz.md index 40d75849..b0da503e 100644 --- a/source/includes/_authz.md +++ b/source/includes/_authz.md @@ -179,9 +179,9 @@ func main() { grantee := "inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r" expireIn := time.Now().AddDate(1, 0, 0) // years months days - //GENERIC AUTHZ - //msgtype := "/injective.exchange.v1beta1.MsgCreateSpotLimitOrder" - //msg := chainClient.BuildGenericAuthz(granter, grantee, msgtype, expireIn) + // GENERIC AUTHZ + // msgtype := "/injective.exchange.v1beta1.MsgCreateSpotLimitOrder" + // msg := chainClient.BuildGenericAuthz(granter, grantee, msgtype, expireIn) // TYPED AUTHZ msg := chainClient.BuildExchangeAuthz( @@ -193,7 +193,7 @@ func main() { expireIn, ) - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg err = chainClient.QueueBroadcastMsg(msg) if err != nil { @@ -264,6 +264,77 @@ DEBU[0003] gas wanted: 117873 fn=func1 src="client/ch gas fee: 0.0000589365 INJ ``` + +
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
+ + ## MsgExec @@ -513,7 +584,7 @@ func main() { Msgs: []*codectypes.Any{msg0Any}, } - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg err = chainClient.QueueBroadcastMsg(msg) if err != nil { @@ -562,6 +633,77 @@ DEBU[0004] gas wanted: 133972 fn=func1 src="client/ch gas fee: 0.000066986 INJ ``` + +
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
+ + ## MsgRevoke @@ -729,7 +871,7 @@ func main() { MsgTypeUrl: msgType, } - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg err = chainClient.QueueBroadcastMsg(msg) if err != nil { @@ -774,6 +916,77 @@ DEBU[0003] gas wanted: 103153 fn=func1 src="client/ch gas fee: 0.0000515765 INJ ``` + +
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
+ + ## Grants diff --git a/source/includes/_bank.md b/source/includes/_bank.md index ff452aad..2e98d45f 100644 --- a/source/includes/_bank.md +++ b/source/includes/_bank.md @@ -107,6 +107,8 @@ import ( "os" "time" + "cosmossdk.io/math" + "github.com/InjectiveLabs/sdk-go/client" "github.com/InjectiveLabs/sdk-go/client/common" @@ -164,11 +166,11 @@ func main() { FromAddress: senderAddress.String(), ToAddress: "inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r", Amount: []sdktypes.Coin{{ - Denom: "inj", Amount: sdktypes.NewInt(1000000000000000000)}, // 1 INJ + Denom: "inj", Amount: math.NewInt(1000000000000000000)}, // 1 INJ }, } - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg err = chainClient.QueueBroadcastMsg(msg) if err != nil { @@ -216,6 +218,77 @@ DEBU[0004] gas wanted: 119871 fn=func1 src="client/ch gas fee: 0.0000599355 INJ ``` + +
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
+ + ## MsgMultiSend @@ -234,6 +307,8 @@ import ( "os" "time" + "cosmossdk.io/math" + "github.com/InjectiveLabs/sdk-go/client" "github.com/InjectiveLabs/sdk-go/client/common" @@ -295,13 +370,13 @@ func main() { { Address: senderAddress.String(), Coins: []sdktypes.Coin{{ - Denom: "inj", Amount: sdktypes.NewInt(1000000000000000000)}, // 1 INJ + Denom: "inj", Amount: math.NewInt(1000000000000000000)}, // 1 INJ }, }, { Address: senderAddress.String(), Coins: []sdktypes.Coin{{ - Denom: "peggy0x87aB3B4C8661e07D6372361211B96ed4Dc36B1B5", Amount: sdktypes.NewInt(1000000)}, // 1 USDT + Denom: "peggy0x87aB3B4C8661e07D6372361211B96ed4Dc36B1B5", Amount: math.NewInt(1000000)}, // 1 USDT }, }, }, @@ -309,19 +384,19 @@ func main() { { Address: "inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r", Coins: []sdktypes.Coin{{ - Denom: "inj", Amount: sdktypes.NewInt(1000000000000000000)}, // 1 INJ + Denom: "inj", Amount: math.NewInt(1000000000000000000)}, // 1 INJ }, }, { Address: "inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r", Coins: []sdktypes.Coin{{ - Denom: "peggy0x87aB3B4C8661e07D6372361211B96ed4Dc36B1B5", Amount: sdktypes.NewInt(1000000)}, // 1 USDT + Denom: "peggy0x87aB3B4C8661e07D6372361211B96ed4Dc36B1B5", Amount: math.NewInt(1000000)}, // 1 USDT }, }, }, } - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg err = chainClient.QueueBroadcastMsg(msg) if err != nil { diff --git a/source/includes/_binaryoptions.md b/source/includes/_binaryoptions.md index 09a50208..32977d66 100644 --- a/source/includes/_binaryoptions.md +++ b/source/includes/_binaryoptions.md @@ -133,6 +133,7 @@ func main() {
+ **BinaryOptionsMarket** @@ -152,10 +153,13 @@ func main() { statusMarketStatusStatus of the market min_price_tick_sizeDecimalMinimum tick size that the price required for orders in the market min_quantity_tick_sizeDecimalMinimum tick size of the quantity required for orders in the market -settlement_priceDecimalThe market's settlement price +settlement_priceDecimalThe market's settlement price +min_notionalDecimalMinimum notional (in quote asset) required for orders in the market +admin_permissionsIntegerLevel of admin permissions (the permission number is a result of adding up all individual permissions numbers)
+ **OracleType** @@ -173,78 +177,17 @@ func main() { 11Provider +
-## MsgInstantBinaryOptionsMarketLaunch - -**IP rate limit group:** `chain` - -### Request Parameters -> Request Example: - - - -```py -import asyncio -import os - -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) - 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()) - - # prepare tx msg - message = composer.msg_instant_binary_options_market_launch( - sender=address.to_acc_bech32(), - ticker="UFC-KHABIB-TKO-05/30/2023", - oracle_symbol="UFC-KHABIB-TKO-05/30/2023", - oracle_provider="UFC", - oracle_type="Provider", - oracle_scale_factor=6, - maker_fee_rate=0.0005, # 0.05% - taker_fee_rate=0.0010, # 0.10% - expiration_timestamp=1680730982, - settlement_timestamp=1690730982, - admin=address.to_acc_bech32(), - quote_denom="peggy0xdAC17F958D2ee523a2206206994597C13D831ec7", - min_price_tick_size=0.01, - min_quantity_tick_size=0.01, - ) - - # broadcast the transaction - result = await message_broadcaster.broadcast([message]) - print("---Transaction Response---") - print(result) - +**AdminPermission** -if __name__ == "__main__": - asyncio.get_event_loop().run_until_complete(main()) -``` + + + + + + +
CodeName
1Ticker Permission
2Min Price Tick Size Permission
4Min Quantity Tick Size Permission
8Min Notional Permission
16Initial Margin Ratio Permission
32Maintenance Margin Ratio Permission
@@ -258,12 +201,12 @@ import ( "fmt" "os" + "cosmossdk.io/math" + exchangetypes "github.com/InjectiveLabs/sdk-go/chain/exchange/types" oracletypes "github.com/InjectiveLabs/sdk-go/chain/oracle/types" exchangeclient "github.com/InjectiveLabs/sdk-go/client/exchange" - "github.com/cosmos/cosmos-sdk/types" - "github.com/InjectiveLabs/sdk-go/client" chainclient "github.com/InjectiveLabs/sdk-go/client/chain" "github.com/InjectiveLabs/sdk-go/client/common" @@ -324,10 +267,10 @@ func main() { } quoteToken := marketsAssistant.AllTokens()["USDC"] - minPriceTickSize := types.MustNewDecFromStr("0.01") - minQuantityTickSize := types.MustNewDecFromStr("0.001") + minPriceTickSize := math.LegacyMustNewDecFromStr("0.01") + minQuantityTickSize := math.LegacyMustNewDecFromStr("0.001") - chainMinPriceTickSize := minPriceTickSize.Mul(types.NewDecFromIntWithPrec(types.NewInt(1), int64(quoteToken.Decimals))) + chainMinPriceTickSize := minPriceTickSize.Mul(math.LegacyNewDecFromIntWithPrec(math.NewInt(1), int64(quoteToken.Decimals))) chainMinQuantityTickSize := minQuantityTickSize msg := &exchangetypes.MsgInstantBinaryOptionsMarketLaunch{ @@ -337,8 +280,8 @@ func main() { OracleProvider: "UFC", OracleType: oracletypes.OracleType_Provider, OracleScaleFactor: 6, - MakerFeeRate: types.MustNewDecFromStr("0.0005"), - TakerFeeRate: types.MustNewDecFromStr("0.0010"), + MakerFeeRate: math.LegacyMustNewDecFromStr("0.0005"), + TakerFeeRate: math.LegacyMustNewDecFromStr("0.0010"), ExpirationTimestamp: 1680730982, SettlementTimestamp: 1690730982, Admin: senderAddress.String(), @@ -347,7 +290,7 @@ func main() { MinQuantityTickSize: chainMinQuantityTickSize, } - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg response, err := chainClient.AsyncBroadcastMsg(msg) if err != nil { @@ -374,10 +317,12 @@ func main() { adminStringThe market's admin addressYes quote_denomStringQuote tocken denomYes min_price_tick_sizeDecimalDefines the minimum tick size of the order's priceYes -min_quantity_tick_sizeDecimalDefines the minimum tick size of the order's quantityYes +min_quantity_tick_sizeDecimalDefines the minimum tick size of the order's quantityYes +min_notionalDecimalDefines the minimum notional (in quote asset) required for orders in the marketYes
+ **OracleType** @@ -407,6 +352,7 @@ func main() {
+ **TxResponse** @@ -426,6 +372,7 @@ func main() {
+ **ABCIMessageLog** @@ -435,6 +382,7 @@ func main() {
+ **Event** @@ -443,6 +391,7 @@ func main() {
+ **StringEvent** @@ -451,6 +400,7 @@ func main() {
+ **EventAttribute** @@ -460,6 +410,7 @@ func main() {
+ **Attribute** @@ -591,6 +542,7 @@ if __name__ == "__main__":
+ **DerivativeOrder** @@ -602,6 +554,7 @@ if __name__ == "__main__":
+ **OrderInfo** @@ -613,6 +566,7 @@ if __name__ == "__main__":
+ **OrderType** @@ -653,6 +607,7 @@ gas fee: 0.0000606245 INJ
+ **TxResponse** @@ -672,6 +627,7 @@ gas fee: 0.0000606245 INJ
+ **ABCIMessageLog** @@ -681,6 +637,7 @@ gas fee: 0.0000606245 INJ
+ **Event** @@ -689,6 +646,7 @@ gas fee: 0.0000606245 INJ
+ **StringEvent** @@ -697,6 +655,7 @@ gas fee: 0.0000606245 INJ
+ **EventAttribute** @@ -706,6 +665,7 @@ gas fee: 0.0000606245 INJ
+ **Attribute** @@ -832,6 +792,7 @@ if __name__ == "__main__":
+ **DerivativeOrder** @@ -843,6 +804,7 @@ if __name__ == "__main__":
+ **OrderInfo** @@ -854,6 +816,7 @@ if __name__ == "__main__":
+ **OrderType** @@ -894,6 +857,7 @@ gas fee: 0.0000539515 INJ
+ **TxResponse** @@ -913,6 +877,7 @@ gas fee: 0.0000539515 INJ
+ **ABCIMessageLog** @@ -922,6 +887,7 @@ gas fee: 0.0000539515 INJ
+ **Event** @@ -930,6 +896,7 @@ gas fee: 0.0000539515 INJ
+ **StringEvent** @@ -938,6 +905,7 @@ gas fee: 0.0000539515 INJ
+ **EventAttribute** @@ -947,6 +915,7 @@ gas fee: 0.0000539515 INJ
+ **Attribute** @@ -1066,6 +1035,7 @@ if __name__ == "__main__":
+ **OrderMask** @@ -1100,6 +1070,7 @@ gas fee: 0.0000556515 INJ
+ **TxResponse** @@ -1119,6 +1090,7 @@ gas fee: 0.0000556515 INJ
+ **ABCIMessageLog** @@ -1128,6 +1100,7 @@ gas fee: 0.0000556515 INJ
+ **Event** @@ -1136,6 +1109,7 @@ gas fee: 0.0000556515 INJ
+ **StringEvent** @@ -1144,6 +1118,7 @@ gas fee: 0.0000556515 INJ
+ **EventAttribute** @@ -1153,6 +1128,7 @@ gas fee: 0.0000556515 INJ
+ **Attribute** @@ -1281,6 +1257,7 @@ if __name__ == "__main__":
+ **MarketStatus** @@ -1312,6 +1289,7 @@ gas fee: 0.0000556515 INJ
+ **TxResponse** @@ -1331,6 +1309,7 @@ gas fee: 0.0000556515 INJ
+ **ABCIMessageLog** @@ -1340,6 +1319,7 @@ gas fee: 0.0000556515 INJ
+ **Event** @@ -1348,6 +1328,7 @@ gas fee: 0.0000556515 INJ
+ **StringEvent** @@ -1356,6 +1337,7 @@ gas fee: 0.0000556515 INJ
+ **EventAttribute** @@ -1365,6 +1347,7 @@ gas fee: 0.0000556515 INJ
+ **Attribute** @@ -1711,7 +1694,7 @@ func main() { fmt.Println("simulated derivative order hashes", MsgBatchUpdateOrdersResponse.DerivativeOrderHashes) - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg err = chainClient.QueueBroadcastMsg(msg) if err != nil { @@ -1748,6 +1731,7 @@ func main() {
+ **OrderData** @@ -1759,6 +1743,7 @@ func main() {
+ **SpotOrder** @@ -1769,6 +1754,7 @@ func main() {
+ **DerivativeOrder** @@ -1780,6 +1766,7 @@ func main() {
+ **OrderMask** @@ -1794,6 +1781,7 @@ func main() {
+ **OrderInfo** @@ -1805,6 +1793,7 @@ func main() {
+ **OrderType** @@ -1858,6 +1847,7 @@ gas fee: 0.000329546 INJ
+ **TxResponse** @@ -1877,6 +1867,7 @@ gas fee: 0.000329546 INJ
+ **ABCIMessageLog** @@ -1886,6 +1877,7 @@ gas fee: 0.000329546 INJ
+ **Event** @@ -1894,6 +1886,7 @@ gas fee: 0.000329546 INJ
+ **StringEvent** @@ -1902,6 +1895,7 @@ gas fee: 0.000329546 INJ
+ **EventAttribute** @@ -1911,6 +1905,7 @@ gas fee: 0.000329546 INJ
+ **Attribute** diff --git a/source/includes/_chainexchange.md b/source/includes/_chainexchange.md index 02a2c26f..d8439dc3 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,12 +1630,14 @@ func main() {
+ **SubaccountOrder** -
ParameterTypeDescription
priceDecimalOrder price
quantityDecimalThe amount of the order quantity remaining fillable
is_reduce_onlyBooleanTrue if the order is a reduce only order
+is_reduce_onlyBooleanTrue if the order is a reduce only order +cidStringThe client order ID provided by the creator @@ -1940,6 +1957,7 @@ func main() {
+ **SubaccountOrderbookMetadataWithMarket** @@ -1949,6 +1967,7 @@ func main() {
+ **SubaccountOrderbookMetadata** @@ -2403,6 +2422,7 @@ No parameters
+ **TradingRewardCampaignInfo** @@ -2413,6 +2433,7 @@ No parameters
+ **CampaignRewardPool** @@ -2421,6 +2442,7 @@ No parameters
+ **TradingRewardCampaignBoostInfo** @@ -2431,6 +2453,7 @@ No parameters
+ **PointsMultiplier** @@ -2588,6 +2611,7 @@ func main() {
+ **FeeDiscountTierInfo** @@ -2598,6 +2622,7 @@ func main() {
+ **FeeDiscountTierTTL** @@ -2796,6 +2821,7 @@ No parameters
+ **FeeDiscountSchedule** @@ -2807,6 +2833,7 @@ No parameters
+ **FeeDiscountTierInfo** @@ -3061,6 +3088,7 @@ func main() {
+ **BalanceMismatch** @@ -3213,6 +3241,7 @@ No parameters
+ **BalanceWithMarginHold** @@ -3385,6 +3414,7 @@ No parameters
+ **TierStatistic** @@ -3804,6 +3834,7 @@ func main() {
+ **TradeRecords** @@ -3812,6 +3843,7 @@ func main() {
+ **TradeRecord** @@ -4232,6 +4264,7 @@ func main() {
+ **TradeHistoryOptions** @@ -4280,6 +4313,7 @@ func main() {
+ **MetadataStatistics** @@ -4295,6 +4329,7 @@ func main() {
+ **TradeRecord** @@ -4590,7 +4625,7 @@ func main() { Sender: senderAddress.String(), } - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg err = chainClient.QueueBroadcastMsg(msg) if err != nil { @@ -4626,6 +4661,7 @@ func main() {
+ **TxResponse** @@ -4645,6 +4681,7 @@ func main() {
+ **ABCIMessageLog** @@ -4654,6 +4691,7 @@ func main() {
+ **Event** @@ -4662,6 +4700,7 @@ func main() {
+ **StringEvent** @@ -4670,6 +4709,7 @@ func main() {
+ **EventAttribute** @@ -4679,6 +4719,7 @@ func main() {
+ **Attribute** diff --git a/source/includes/_changelog.md b/source/includes/_changelog.md index 95b9934d..752120e2 100644 --- a/source/includes/_changelog.md +++ b/source/includes/_changelog.md @@ -1,5 +1,21 @@ # Change Log +## 2024-07-30 +- Updated requests and responses messages with parameters added in chain upgrade to v1.13 +- Updated the API documentation to include all queries and messages for the `tendermint` module +- Updated the API documentation to include all queries and messages for the `IBC transfer` module +- Updated the API documentation to include all queries and messages for the `IBC core channel` module +- Updated the API documentation to include all queries and messages for the `IBC core client` module +- Updated the API documentation to include all queries and messages for the `IBC core connection` module +- Updated the API documentation to include all queries and messages for the `permissions` module +- Python SDK v1.6.0 + - 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 + - Added support for all queries from the `IBC core connection` module + - Added support for all queries from the `permissions` 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..bd0f7da9 100644 --- a/source/includes/_derivatives.md +++ b/source/includes/_derivatives.md @@ -186,7 +186,7 @@ import ( "encoding/json" "fmt" - cosmostypes "github.com/cosmos/cosmos-sdk/types" + "cosmossdk.io/math" "os" @@ -243,7 +243,7 @@ func main() { marketId := "0x0611780ba69656949525013d947713300f56c37b6175e02f26bffa495c3208fe" limit := uint64(2) - limitCumulativeNotional := cosmostypes.Dec{} + limitCumulativeNotional := math.LegacyDec{} res, err := chainClient.FetchChainDerivativeOrderbook(ctx, marketId, limit, limitCumulativeNotional) if err != nil { @@ -297,6 +297,7 @@ func main() {
+ **Level** @@ -455,6 +456,7 @@ func main() {
+ **TrimmedDerivativeLimitOrder** @@ -463,7 +465,8 @@ func main() { marginDecimalOrder margin fillableDecimalThe remaining fillable amount of the order is_buyBooleanTrue if the order is a buy order -order_hashStringThe order hash +order_hashStringThe order hash +cidStringThe client order ID provided by the creator @@ -614,6 +617,7 @@ func main() {
+ **TrimmedDerivativeLimitOrder** @@ -622,7 +626,8 @@ func main() { marginDecimalOrder margin fillableDecimalThe remaining fillable amount of the order is_buyBooleanTrue if the order is a buy order -order_hashStringThe order hash +order_hashStringThe order hash +cidStringThe client order ID provided by the creator @@ -779,6 +784,7 @@ func main() {
+ **TrimmedDerivativeLimitOrder** @@ -787,7 +793,8 @@ func main() { marginDecimalOrder margin fillableDecimalThe remaining fillable amount of the order is_buyBooleanTrue if the order is a buy order -order_hashStringThe order hash +order_hashStringThe order hash +cidStringThe client order ID provided by the creator @@ -941,6 +948,7 @@ func main() {
+ **TrimmedDerivativeLimitOrder** @@ -949,7 +957,8 @@ func main() { marginDecimalOrder margin fillableDecimalThe remaining fillable amount of the order is_buyBooleanTrue if the order is a buy order -order_hashStringThe order hash +order_hashStringThe order hash +cidStringThe client order ID provided by the creator @@ -1125,6 +1134,7 @@ func main() {
+ **FullDerivativeMarket** @@ -1135,6 +1145,7 @@ func main() {
+ **DerivativeMarket** @@ -1153,10 +1164,14 @@ func main() { is_perpetualBooleanTrue if the market is a perpetual market. False if the market is an expiry futures market statusMarketStatusStatus of the market min_price_tick_sizeDecimalMinimum tick size that the price required for orders in the market -min_quantity_tick_sizeDecimalMinimum tick size of the quantity required for orders in the market +min_quantity_tick_sizeDecimalMinimum tick size of the quantity required for orders in the market +min_notionalDecimalMinimum notional (in quote asset) required for orders in the market +adminStringCurrent market admin's address +admin_permissionsIntegerLevel of admin permissions (the permission number is a result of adding up all individual permissions numbers)
+ **OracleType** @@ -1175,6 +1190,7 @@ func main() {
+ **MarketStatus** @@ -1186,6 +1202,7 @@ func main() {
+ **PerpetualMarketState** @@ -1194,6 +1211,7 @@ func main() {
+ **PerpetualMarketInfo** @@ -1205,6 +1223,7 @@ func main() {
+ **PerpetualMarketFunding** @@ -1214,6 +1233,7 @@ func main() {
+ **ExpiryFuturesMarketInfo** @@ -1224,41 +1244,17 @@ func main() { settlement_priceDecimalThe settlement price +
-## DerivativeMarket - -Retrieves a derivative market by market ID - -**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: - # select network: local, testnet, mainnet - network = Network.testnet() - - # initialize grpc client - client = AsyncClient(network) - - derivative_market = await client.fetch_chain_derivative_market( - market_id="0x17ef48032cb24375ba7c2e39f384e56433bcab20cbee9a7357e4cba2eb00abe6", - ) - print(derivative_market) - +**AdminPermission** -if __name__ == "__main__": - asyncio.get_event_loop().run_until_complete(main()) -``` + + + + + + +
CodeName
1Ticker Permission
2Min Price Tick Size Permission
4Min Quantity Tick Size Permission
8Min Notional Permission
16Initial Margin Ratio Permission
32Maintenance Margin Ratio Permission
@@ -1390,6 +1386,7 @@ func main() {
+ **FullDerivativeMarket** @@ -1400,6 +1397,7 @@ func main() {
+ **DerivativeMarket** @@ -1418,10 +1416,14 @@ func main() { is_perpetualBooleanTrue if the market is a perpetual market. False if the market is an expiry futures market statusMarketStatusStatus of the market min_price_tick_sizeDecimalMinimum tick size that the price required for orders in the market -min_quantity_tick_sizeDecimalMinimum tick size of the quantity required for orders in the market +min_quantity_tick_sizeDecimalMinimum tick size of the quantity required for orders in the market +min_notionalDecimalMinimum notional (in quote asset) required for orders in the market +adminStringCurrent market admin's address +admin_permissionsIntegerLevel of admin permissions (the permission number is a result of adding up all individual permissions numbers)
+ **OracleType** @@ -1440,6 +1442,7 @@ func main() {
+ **MarketStatus** @@ -1451,6 +1454,7 @@ func main() {
+ **PerpetualMarketState** @@ -1459,6 +1463,7 @@ func main() {
+ **PerpetualMarketInfo** @@ -1470,6 +1475,7 @@ func main() {
+ **PerpetualMarketFunding** @@ -1479,6 +1485,7 @@ func main() {
+ **ExpiryFuturesMarketInfo** @@ -1489,41 +1496,17 @@ func main() { settlement_priceDecimalThe settlement price +
-## DerivativeMarketAddress - -Retrieves a derivative market's corresponding address for fees that contribute to the market's insurance fund - -**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: - # select network: local, testnet, mainnet - network = Network.testnet() - - # initialize grpc client - client = AsyncClient(network) - - address = await client.fetch_derivative_market_address( - market_id="0x17ef48032cb24375ba7c2e39f384e56433bcab20cbee9a7357e4cba2eb00abe6", - ) - print(address) - +**AdminPermission** -if __name__ == "__main__": - asyncio.get_event_loop().run_until_complete(main()) -``` + + + + + + +
CodeName
1Ticker Permission
2Min Price Tick Size Permission
4Min Quantity Tick Size Permission
8Min Notional Permission
16Initial Margin Ratio Permission
32Maintenance Margin Ratio Permission
@@ -1771,6 +1754,7 @@ No parameters
+ **DerivativePosition** @@ -1780,6 +1764,7 @@ No parameters
+ **Position** @@ -1993,6 +1978,7 @@ func main() {
+ **DerivativePosition** @@ -2002,6 +1988,7 @@ func main() {
+ **Position** @@ -2168,6 +2155,7 @@ func main() {
+ **Position** @@ -2333,6 +2321,7 @@ func main() {
+ **EffectivePosition** @@ -2480,6 +2469,7 @@ func main() {
+ **PerpetualMarketInfo** @@ -2620,6 +2610,7 @@ func main() {
+ **ExpiryFuturesMarketInfo** @@ -2766,6 +2757,7 @@ func main() {
+ **PerpetualMarketFunding** @@ -2925,6 +2917,7 @@ func main() {
+ **TrimmedDerivativeConditionalOrder** @@ -2934,7 +2927,8 @@ func main() { trigger_priceOracleTypePrice to trigger the order is_buyBooleanTrue if the order is a buy order. False otherwise. is_limitBooleanTrue if the order is a limit order. False otherwise. -order_hashStringThe order hash +order_hashStringThe order hash +cidStringThe client order ID provided by the creator @@ -2999,6 +2993,7 @@ async def main() -> None: maintenance_margin_ratio=Decimal("0.095"), min_price_tick_size=Decimal("0.001"), min_quantity_tick_size=Decimal("0.01"), + min_notional=Decimal("1"), ) # broadcast the transaction @@ -3023,12 +3018,12 @@ import ( "fmt" "os" + "cosmossdk.io/math" + exchangetypes "github.com/InjectiveLabs/sdk-go/chain/exchange/types" oracletypes "github.com/InjectiveLabs/sdk-go/chain/oracle/types" exchangeclient "github.com/InjectiveLabs/sdk-go/client/exchange" - "github.com/cosmos/cosmos-sdk/types" - "github.com/InjectiveLabs/sdk-go/client" chainclient "github.com/InjectiveLabs/sdk-go/client/chain" "github.com/InjectiveLabs/sdk-go/client/common" @@ -3089,10 +3084,10 @@ func main() { } quoteToken := marketsAssistant.AllTokens()["USDC"] - minPriceTickSize := types.MustNewDecFromStr("0.01") - minQuantityTickSize := types.MustNewDecFromStr("0.001") + minPriceTickSize := math.LegacyMustNewDecFromStr("0.01") + minQuantityTickSize := math.LegacyMustNewDecFromStr("0.001") - chainMinPriceTickSize := minPriceTickSize.Mul(types.NewDecFromIntWithPrec(types.NewInt(1), int64(quoteToken.Decimals))) + chainMinPriceTickSize := minPriceTickSize.Mul(math.LegacyNewDecFromIntWithPrec(math.NewInt(1), int64(quoteToken.Decimals))) chainMinQuantityTickSize := minQuantityTickSize msg := &exchangetypes.MsgInstantPerpetualMarketLaunch{ @@ -3103,15 +3098,15 @@ func main() { OracleQuote: "USDC", OracleScaleFactor: 6, OracleType: oracletypes.OracleType_Band, - MakerFeeRate: types.MustNewDecFromStr("-0.0001"), - TakerFeeRate: types.MustNewDecFromStr("0.001"), - InitialMarginRatio: types.MustNewDecFromStr("0.33"), - MaintenanceMarginRatio: types.MustNewDecFromStr("0.095"), + MakerFeeRate: math.LegacyMustNewDecFromStr("-0.0001"), + TakerFeeRate: math.LegacyMustNewDecFromStr("0.001"), + InitialMarginRatio: math.LegacyMustNewDecFromStr("0.33"), + MaintenanceMarginRatio: math.LegacyMustNewDecFromStr("0.095"), MinPriceTickSize: chainMinPriceTickSize, MinQuantityTickSize: chainMinQuantityTickSize, } - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg response, err := chainClient.AsyncBroadcastMsg(msg) if err != nil { @@ -3137,10 +3132,12 @@ func main() { initial_margin_ratioDecimalDefines the initial margin ratio for the perpetual marketYes maintenance_margin_ratioDecimalDefines the maintenance margin ratio for the perpetual marketYes min_price_tick_sizeDecimalDefines the minimum tick size of the order's priceYes -min_quantity_tick_sizeDecimalDefines the minimum tick size of the order's quantityYes +min_quantity_tick_sizeDecimalDefines the minimum tick size of the order's quantityYes +min_notionalDecimalDefines the minimum notional (in quote asset) required for orders in the marketYes
+ **OracleType** @@ -3170,6 +3167,7 @@ func main() {
+ **TxResponse** @@ -3189,6 +3187,7 @@ func main() {
+ **ABCIMessageLog** @@ -3198,6 +3197,7 @@ func main() {
+ **Event** @@ -3206,6 +3206,7 @@ func main() {
+ **StringEvent** @@ -3214,6 +3215,7 @@ func main() {
+ **EventAttribute** @@ -3223,6 +3225,7 @@ func main() {
+ **Attribute** @@ -3293,6 +3296,7 @@ async def main() -> None: maintenance_margin_ratio=Decimal("0.095"), min_price_tick_size=Decimal("0.001"), min_quantity_tick_size=Decimal("0.01"), + min_notional=Decimal("1"), ) # broadcast the transaction @@ -3317,12 +3321,12 @@ import ( "fmt" "os" + "cosmossdk.io/math" + exchangetypes "github.com/InjectiveLabs/sdk-go/chain/exchange/types" oracletypes "github.com/InjectiveLabs/sdk-go/chain/oracle/types" exchangeclient "github.com/InjectiveLabs/sdk-go/client/exchange" - "github.com/cosmos/cosmos-sdk/types" - "github.com/InjectiveLabs/sdk-go/client" chainclient "github.com/InjectiveLabs/sdk-go/client/chain" "github.com/InjectiveLabs/sdk-go/client/common" @@ -3383,10 +3387,10 @@ func main() { } quoteToken := marketsAssistant.AllTokens()["USDC"] - minPriceTickSize := types.MustNewDecFromStr("0.01") - minQuantityTickSize := types.MustNewDecFromStr("0.001") + minPriceTickSize := math.LegacyMustNewDecFromStr("0.01") + minQuantityTickSize := math.LegacyMustNewDecFromStr("0.001") - chainMinPriceTickSize := minPriceTickSize.Mul(types.NewDecFromIntWithPrec(types.NewInt(1), int64(quoteToken.Decimals))) + chainMinPriceTickSize := minPriceTickSize.Mul(math.LegacyNewDecFromIntWithPrec(math.NewInt(1), int64(quoteToken.Decimals))) chainMinQuantityTickSize := minQuantityTickSize msg := &exchangetypes.MsgInstantExpiryFuturesMarketLaunch{ @@ -3398,15 +3402,15 @@ func main() { OracleScaleFactor: 6, OracleType: oracletypes.OracleType_Band, Expiry: 2000000000, - MakerFeeRate: types.MustNewDecFromStr("-0.0001"), - TakerFeeRate: types.MustNewDecFromStr("0.001"), - InitialMarginRatio: types.MustNewDecFromStr("0.33"), - MaintenanceMarginRatio: types.MustNewDecFromStr("0.095"), + MakerFeeRate: math.LegacyMustNewDecFromStr("-0.0001"), + TakerFeeRate: math.LegacyMustNewDecFromStr("0.001"), + InitialMarginRatio: math.LegacyMustNewDecFromStr("0.33"), + MaintenanceMarginRatio: math.LegacyMustNewDecFromStr("0.095"), MinPriceTickSize: chainMinPriceTickSize, MinQuantityTickSize: chainMinQuantityTickSize, } - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg response, err := chainClient.AsyncBroadcastMsg(msg) if err != nil { @@ -3433,10 +3437,12 @@ func main() { initial_margin_ratioDecimalDefines the initial margin ratio for the perpetual marketYes maintenance_margin_ratioDecimalDefines the maintenance margin ratio for the perpetual marketYes min_price_tick_sizeDecimalDefines the minimum tick size of the order's priceYes -min_quantity_tick_sizeDecimalDefines the minimum tick size of the order's quantityYes +min_quantity_tick_sizeDecimalDefines the minimum tick size of the order's quantityYes +min_notionalDecimalDefines the minimum notional (in quote asset) required for orders in the marketYes
+ **OracleType** @@ -3466,6 +3472,7 @@ func main() {
+ **TxResponse** @@ -3485,6 +3492,7 @@ func main() {
+ **ABCIMessageLog** @@ -3494,6 +3502,7 @@ func main() {
+ **Event** @@ -3502,6 +3511,7 @@ func main() {
+ **StringEvent** @@ -3510,6 +3520,7 @@ func main() {
+ **EventAttribute** @@ -3519,6 +3530,7 @@ func main() {
+ **Attribute** @@ -3759,7 +3771,7 @@ func main() { fmt.Println("simulated order hash", msgCreateDerivativeLimitOrderResponse.OrderHash) - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg err = chainClient.QueueBroadcastMsg(msg) if err != nil { @@ -3786,6 +3798,7 @@ func main() {
+ **DerivativeOrder** @@ -3797,6 +3810,7 @@ func main() {
+ **OrderInfo** @@ -3808,6 +3822,7 @@ func main() {
+ **OrderType** @@ -3853,6 +3868,7 @@ gas fee: 0.0000857195 INJ
+ **TxResponse** @@ -3872,6 +3888,7 @@ gas fee: 0.0000857195 INJ
+ **ABCIMessageLog** @@ -3881,6 +3898,7 @@ gas fee: 0.0000857195 INJ
+ **Event** @@ -3889,6 +3907,7 @@ gas fee: 0.0000857195 INJ
+ **StringEvent** @@ -3897,6 +3916,7 @@ gas fee: 0.0000857195 INJ
+ **EventAttribute** @@ -3906,6 +3926,7 @@ gas fee: 0.0000857195 INJ
+ **Attribute** @@ -4147,7 +4168,7 @@ func main() { fmt.Println("simulated order hash", msgCreateDerivativeMarketOrderResponse.OrderHash) - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg err = chainClient.QueueBroadcastMsg(msg) if err != nil { @@ -4175,6 +4196,7 @@ func main() {
+ **DerivativeOrder** @@ -4186,6 +4208,7 @@ func main() {
+ **OrderInfo** @@ -4197,6 +4220,7 @@ func main() {
+ **OrderType** @@ -4242,6 +4266,7 @@ gas fee: 0.000069981 INJ
+ **TxResponse** @@ -4261,6 +4286,7 @@ gas fee: 0.000069981 INJ
+ **ABCIMessageLog** @@ -4270,6 +4296,7 @@ gas fee: 0.000069981 INJ
+ **Event** @@ -4278,6 +4305,7 @@ gas fee: 0.000069981 INJ
+ **StringEvent** @@ -4286,6 +4314,7 @@ gas fee: 0.000069981 INJ
+ **EventAttribute** @@ -4295,6 +4324,7 @@ gas fee: 0.000069981 INJ
+ **Attribute** @@ -4470,7 +4500,7 @@ func main() { OrderHash: "0x8cf97e586c0d84cd7864ccc8916b886557120d84fc97a21ae193b67882835ec5", } - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg err = chainClient.QueueBroadcastMsg(msg) if err != nil { @@ -4501,6 +4531,7 @@ func main() {
+ **OrderMask** @@ -4543,6 +4574,7 @@ gas fee: 0.0000706865 INJ
+ **TxResponse** @@ -4562,6 +4594,7 @@ gas fee: 0.0000706865 INJ
+ **ABCIMessageLog** @@ -4571,6 +4604,7 @@ gas fee: 0.0000706865 INJ
+ **Event** @@ -4579,6 +4613,7 @@ gas fee: 0.0000706865 INJ
+ **StringEvent** @@ -4587,6 +4622,7 @@ gas fee: 0.0000706865 INJ
+ **EventAttribute** @@ -4596,6 +4632,7 @@ gas fee: 0.0000706865 INJ
+ **Attribute** @@ -4942,7 +4979,7 @@ func main() { fmt.Println("simulated derivative order hashes", MsgBatchUpdateOrdersResponse.DerivativeOrderHashes) - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg err = chainClient.QueueBroadcastMsg(msg) if err != nil { @@ -4979,6 +5016,7 @@ func main() {
+ **OrderData** @@ -4990,6 +5028,7 @@ func main() {
+ **SpotOrder** @@ -5000,6 +5039,7 @@ func main() {
+ **DerivativeOrder** @@ -5011,6 +5051,7 @@ func main() {
+ **OrderMask** @@ -5025,6 +5066,7 @@ func main() {
+ **OrderInfo** @@ -5036,6 +5078,7 @@ func main() {
+ **OrderType** @@ -5089,6 +5132,7 @@ gas fee: 0.000329546 INJ
+ **TxResponse** @@ -5108,6 +5152,7 @@ gas fee: 0.000329546 INJ
+ **ABCIMessageLog** @@ -5117,6 +5162,7 @@ gas fee: 0.000329546 INJ
+ **Event** @@ -5125,6 +5171,7 @@ gas fee: 0.000329546 INJ
+ **StringEvent** @@ -5133,6 +5180,7 @@ gas fee: 0.000329546 INJ
+ **EventAttribute** @@ -5142,6 +5190,7 @@ gas fee: 0.000329546 INJ
+ **Attribute** @@ -5382,7 +5431,7 @@ func main() { Order: order, } - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg response, err := chainClient.AsyncBroadcastMsg(msg) if err != nil { @@ -5403,6 +5452,7 @@ func main() {
+ **DerivativeOrder** @@ -5414,6 +5464,7 @@ func main() {
+ **OrderInfo** @@ -5425,6 +5476,7 @@ func main() {
+ **OrderType** @@ -5455,6 +5507,7 @@ func main() {
+ **TxResponse** @@ -5474,6 +5527,7 @@ func main() {
+ **ABCIMessageLog** @@ -5483,6 +5537,7 @@ func main() {
+ **Event** @@ -5491,6 +5546,7 @@ func main() {
+ **StringEvent** @@ -5499,6 +5555,7 @@ func main() {
+ **EventAttribute** @@ -5508,6 +5565,7 @@ func main() {
+ **Attribute** @@ -5628,6 +5686,8 @@ import ( "os" "time" + "cosmossdk.io/math" + "github.com/InjectiveLabs/sdk-go/client" "github.com/InjectiveLabs/sdk-go/client/common" @@ -5635,7 +5695,6 @@ import ( exchangetypes "github.com/InjectiveLabs/sdk-go/chain/exchange/types" chainclient "github.com/InjectiveLabs/sdk-go/client/chain" rpchttp "github.com/cometbft/cometbft/rpc/client/http" - cosmtypes "github.com/cosmos/cosmos-sdk/types" ) func main() { @@ -5686,10 +5745,10 @@ func main() { MarketId: "0x4ca0f92fc28be0c9761326016b5a1a2177dd6375558365116b5bdda9abc229ce", SourceSubaccountId: "0xaf79152ac5df276d9a8e1e2e22822f9713474902000000000000000000000000", DestinationSubaccountId: "0xaf79152ac5df276d9a8e1e2e22822f9713474902000000000000000000000000", - Amount: cosmtypes.MustNewDecFromStr("100000000"), //100 USDT + Amount: math.LegacyMustNewDecFromStr("100000000"), //100 USDT } - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg err = chainClient.QueueBroadcastMsg(msg) if err != nil { @@ -5743,6 +5802,7 @@ gas fee: 0.000066807 INJ
+ **TxResponse** @@ -5762,6 +5822,7 @@ gas fee: 0.000066807 INJ
+ **ABCIMessageLog** @@ -5771,6 +5832,7 @@ gas fee: 0.000066807 INJ
+ **Event** @@ -5779,6 +5841,7 @@ gas fee: 0.000066807 INJ
+ **StringEvent** @@ -5787,6 +5850,7 @@ gas fee: 0.000066807 INJ
+ **EventAttribute** @@ -5796,6 +5860,7 @@ gas fee: 0.000066807 INJ
+ **Attribute** @@ -6209,7 +6274,7 @@ func main() { fmt.Println("computed spot order hashes: ", orderHashes.Spot) fmt.Println("computed derivative order hashes: ", orderHashes.Derivative) - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg err = chainClient.QueueBroadcastMsg(msg, msg1) if err != nil { diff --git a/source/includes/_derivativesrpc.md b/source/includes/_derivativesrpc.md index 008cde71..00c0c937 100644 --- a/source/includes/_derivativesrpc.md +++ b/source/includes/_derivativesrpc.md @@ -49,7 +49,7 @@ import ( ) func main() { - //network := common.LoadNetwork("mainnet", "k8s") + // network := common.LoadNetwork("mainnet", "k8s") network := common.LoadNetwork("testnet", "lb") exchangeClient, err := exchangeclient.NewExchangeClient(network) if err != nil { @@ -115,7 +115,8 @@ func main() { "cumulativeFunding":"-156010.283874921534910863", "cumulativePrice":"566.477789213654772072", "lastTimestamp":"1701906508" - } + }, + "min_notional":"1000000" } } ``` @@ -157,7 +158,8 @@ func main() { "cumulative_funding": "7246105747.050586213851272386", "cumulative_price": "31.114148427047982579", "last_timestamp": 1652793510 - } + }, + "min_notional": "1000000" } } ``` @@ -190,6 +192,7 @@ func main() { | maintenance_margin_ratio | String | The maintenance margin ratio of the derivative market | | market_id | String | The market ID | | quoteTokenMeta | TokenMeta | Token metadata for quote asset, only for Ethereum-based assets | +| min_notional | String | Defines the minimum required notional for an order to be accepted | **ExpiryFuturesMarketInfo** @@ -279,7 +282,7 @@ import ( ) func main() { - //network := common.LoadNetwork("mainnet", "k8s") + // network := common.LoadNetwork("mainnet", "k8s") network := common.LoadNetwork("mainnet", "lb") exchangeClient, err := exchangeclient.NewExchangeClient(network) if err != nil { @@ -353,7 +356,8 @@ func main() { "cumulativeFunding": "56890491.178246679699729639", "cumulativePrice": "7.082760891515203314", "lastTimestamp": 1654245985 - } + }, + "min_notional": "1000000", }, { "marketId": "0x00030df39180df04a873cb4aadc50d4135640af5c858ab637dbd4d31b147478c", @@ -383,7 +387,8 @@ func main() { "expiryFuturesMarketInfo": { "expirationTimestamp": 1684600043, "settlementPrice": "0" - } + }, + "min_notional": "0" } ] ``` @@ -426,7 +431,8 @@ func main() { "cumulative_funding": "48248742.484852568471323698", "cumulative_price": "5.691379282523162906", "last_timestamp": 1652775374 - } + }, + "min_notional": "1000000" }, { "market_id": "0xfb5f14852bd01af901291dd2aa65e997b3a831f957124a7fe7aa40d218ff71ae", @@ -463,7 +469,8 @@ func main() { "cumulative_funding": "1099659.417190990913058692", "cumulative_price": "-4.427475055338306767", "last_timestamp": 1652775322 - } + }, + "min_notional": "0", } ] } @@ -497,6 +504,7 @@ func main() { | maintenance_margin_ratio | String | The maintenance margin ratio of the derivative market | | market_id | String | The market ID | | quoteTokenMeta | TokenMeta | Token metadata for quote asset, only for Ethereum-based assets | +| min_notional | String | Defines the minimum required notional for an order to be accepted | **ExpiryFuturesMarketInfo** @@ -607,7 +615,7 @@ import ( ) func main() { - //network := common.LoadNetwork("mainnet", "k8s") + // network := common.LoadNetwork("mainnet", "k8s") network := common.LoadNetwork("testnet", "lb") exchangeClient, err := exchangeclient.NewExchangeClient(network) if err != nil { @@ -686,7 +694,8 @@ func main() { "cumulativeFunding": "8239865636.851083559033030036", "cumulativePrice": "7.15770685160786651", "lastTimestamp": 1654246073 - } + }, + "min_notional": "1000000" }, "operationType": "update", "timestamp": 1654246076000 @@ -730,7 +739,8 @@ func main() { "cumulative_funding": "7356035675.459202347630388315", "cumulative_price": "3.723976370878870887", "last_timestamp": 1653038971 - } + }, + "min_notional": "0" }, "operation_type": "update", "timestamp": 1653038974000 @@ -767,6 +777,7 @@ func main() { | maintenance_margin_ratio | String | The maintenance margin ratio of the derivative market | | market_id | String | The market ID | | quoteTokenMeta | TokenMeta | Token metadata for quote asset, only for Ethereum-based assets | +| min_notional | String | Defines the minimum required notional for an order to be accepted | **ExpiryFuturesMarketInfo** @@ -2190,7 +2201,7 @@ import ( ) func main() { - //network := common.LoadNetwork("mainnet", "k8s") + // network := common.LoadNetwork("mainnet", "k8s") network := common.LoadNetwork("testnet", "lb") exchangeClient, err := exchangeclient.NewExchangeClient(network) if err != nil { @@ -3031,7 +3042,7 @@ import ( ) func main() { - //network := common.LoadNetwork("mainnet", "k8s") + // network := common.LoadNetwork("mainnet", "k8s") network := common.LoadNetwork("testnet", "lb") exchangeClient, err := exchangeclient.NewExchangeClient(network) if err != nil { @@ -3889,7 +3900,7 @@ import ( ) func main() { - //network := common.LoadNetwork("mainnet", "k8s") + // network := common.LoadNetwork("mainnet", "k8s") network := common.LoadNetwork("testnet", "lb") exchangeClient, err := exchangeclient.NewExchangeClient(network) if err != nil { @@ -4111,7 +4122,7 @@ import ( ) func main() { - //network := common.LoadNetwork("mainnet", "k8s") + // network := common.LoadNetwork("mainnet", "k8s") network := common.LoadNetwork("testnet", "lb") exchangeClient, err := exchangeclient.NewExchangeClient(network) if err != nil { @@ -4330,7 +4341,7 @@ import ( ) func main() { - //network := common.LoadNetwork("mainnet", "k8s") + // network := common.LoadNetwork("mainnet", "k8s") network := common.LoadNetwork("testnet", "lb") exchangeClient, err := exchangeclient.NewExchangeClient(network) if err != nil { @@ -4502,7 +4513,7 @@ import ( ) func main() { - //network := common.LoadNetwork("mainnet", "k8s") + // network := common.LoadNetwork("mainnet", "k8s") network := common.LoadNetwork("testnet", "lb") exchangeClient, err := exchangeclient.NewExchangeClient(network) if err != nil { @@ -4671,7 +4682,8 @@ if __name__ == "__main__": "serviceProviderFee": "0.4", "minPriceTickSize": "0.000000000000001", "minQuantityTickSize": "1000000000000000", - "settlementPrice": "1" + "settlementPrice": "1", + "min_notional": "0" } } ``` @@ -4705,6 +4717,7 @@ if __name__ == "__main__": | min_price_tick_size | String | Defines the minimum required tick size for the order's price | | min_quantity_tick_size | String | Defines the minimum required tick size for the order's quantity | | settlement_price | String | Defines the settlement price of the market | +| min_notional | String | Defines the minimum required notional for an order to be accepted | **TokenMeta** @@ -4788,7 +4801,8 @@ if __name__ == "__main__": "serviceProviderFee":"0.4", "minPriceTickSize":"0.000000000000001", "minQuantityTickSize":"1000000000000000", - "settlementPrice":"1" + "settlementPrice":"1", + "min_notional":"0", } ], "paging":{ @@ -4830,6 +4844,7 @@ if __name__ == "__main__": | min_price_tick_size | String | Defines the minimum required tick size for the order's price | | min_quantity_tick_size | String | Defines the minimum required tick size for the order's quantity | | settlement_price | String | Defines the settlement price of the market | +| min_notional | String | Defines the minimum required notional for an order to be accepted | **TokenMeta** diff --git a/source/includes/_ibccorechannel.md b/source/includes/_ibccorechannel.md new file mode 100644 index 00000000..079ccfa5 --- /dev/null +++ b/source/includes/_ibccorechannel.md @@ -0,0 +1,2550 @@ +# - 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
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
upgrade_sequenceIntegerIndicates the latest upgrade attempt performed by this channel. The value of 0 indicates the channel has never been upgraded
+ + +
+ +**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
upgrade_sequenceIntegerIndicates the latest upgrade attempt performed by this channel. The value of 0 indicates the channel has never been upgraded
+ + +
+ +**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
upgrade_sequenceIntegerIndicates the latest upgrade attempt performed by this channel. The value of 0 indicates the channel has never been upgraded
+ + +
+ +**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
upgrade_sequenceIntegerIndicates the latest upgrade attempt performed by this channel. The value of 0 indicates the channel has never been upgraded
+ + +
+ +**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/_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/_ibccoreconnection.md b/source/includes/_ibccoreconnection.md new file mode 100644 index 00000000..1846e72b --- /dev/null +++ b/source/includes/_ibccoreconnection.md @@ -0,0 +1,1210 @@ +# - IBC Core Connection + +Includes all the messages and queries associated to connections from the IBC core connection module + +## Connection + +Queries an IBC 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.core.network import Network + + +async def main() -> None: + network = Network.testnet() + client = AsyncClient(network) + + connection_id = "connection-0" + + connection = await client.fetch_ibc_connection(connection_id=connection_id) + print(connection) + + +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) + } + + connectionId := "connection-0" + ctx := context.Background() + + res, err := chainClient.FetchIBCConnection(ctx, connectionId) + if err != nil { + fmt.Println(err) + } + + str, _ := json.MarshalIndent(res, "", " ") + fmt.Print(string(str)) + +} +``` + + + +
ParameterTypeDescriptionRequired
connection_idStringConnection unique identifierYes
+ + +### Response Parameters +> Response Example: + +``` json +{ + "connection":{ + "clientId":"07-tendermint-0", + "versions":[ + { + "identifier":"1", + "features":[ + "ORDER_ORDERED", + "ORDER_UNORDERED" + ] + } + ], + "state":"STATE_OPEN", + "counterparty":{ + "clientId":"07-tendermint-904", + "connectionId":"connection-877", + "prefix":{ + "keyPrefix":"aWJj" + } + }, + "delayPeriod":"0" + }, + "proofHeight":{ + "revisionNumber":"888", + "revisionHeight":"27778433" + }, + "proof":"" +} +``` + + + + +
ParameterTypeDescription
connectionConnectionEndConnection associated with the request identifier
proofByte ArrayMerkle proof of existence
proof_heightHeightHeight at which the proof was retrieved
+ + +
+ +**ConnectionEnd** + + + + + + +
ParameterTypeDescription
client_idStringClient associated with this connection
versionsVersion StringChannel identifier
stateStateCurrent state of the connection end
counterpartyCounterpartyCounterparty chain associated with this connection
delay_periodIntegerDelay period that must pass before a consensus state can be used for packet-verification NOTE: delay period logic is only implemented by some clients
+ + +
+ +**Version** + + + +
ParameterTypeDescription
identifierStringUnique version identifier
featuresString ArrayList of features compatible with the specified identifier
+ + +
+ +**State** + + + + + +
CodeName
0STATE_UNINITIALIZED_UNSPECIFIED
1STATE_INIT
2STATE_TRYOPEN
3STATE_OPEN
+ + +
+ +**Counterparty** + + + + +
ParameterTypeDescription
client_idStringIdentifies the client on the counterparty chain associated with a given connection
connection_idStringIdentifies the connection end on the counterparty chain associated with a given connection
prefixMarketPrefixCommitment merkle prefix of the counterparty chain
+ + +
+ +**MerklePrefix** + + +
ParameterTypeDescription
key_prefixByte ArrayMerkle path prefixed to the key
+ + +
+ +**Height** + + + +
ParameterTypeDescription
revision_numberIntegerThe revision that the client is currently on
revision_heightIntegerThe height within the given revision
+ + + +## Connections + +Queries all the IBC connections 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) + + connections = await client.fetch_ibc_connections(pagination=pagination) + print(connections) + + +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.FetchIBCConnections(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 +{ + "connections":[ + { + "id":"connection-10", + "clientId":"07-tendermint-12", + "versions":[ + { + "identifier":"1", + "features":[ + "ORDER_ORDERED", + "ORDER_UNORDERED" + ] + } + ], + "state":"STATE_OPEN", + "counterparty":{ + "clientId":"07-tendermint-103", + "connectionId":"connection-93", + "prefix":{ + "keyPrefix":"aWJj" + } + }, + "delayPeriod":"0" + }, + { + "id":"connection-100", + "clientId":"07-tendermint-126", + "versions":[ + { + "identifier":"1", + "features":[ + "ORDER_ORDERED", + "ORDER_UNORDERED" + ] + } + ], + "state":"STATE_OPEN", + "counterparty":{ + "clientId":"07-tendermint-168", + "connectionId":"connection-118", + "prefix":{ + "keyPrefix":"aWJj" + } + }, + "delayPeriod":"0" + }, + { + "id":"connection-101", + "clientId":"07-tendermint-127", + "versions":[ + { + "identifier":"1", + "features":[ + "ORDER_ORDERED", + "ORDER_UNORDERED" + ] + } + ], + "state":"STATE_OPEN", + "counterparty":{ + "clientId":"07-tendermint-3", + "connectionId":"connection-5", + "prefix":{ + "keyPrefix":"aWJj" + } + }, + "delayPeriod":"0" + }, + { + "id":"connection-102", + "clientId":"07-tendermint-128", + "versions":[ + { + "identifier":"1", + "features":[ + "ORDER_ORDERED", + "ORDER_UNORDERED" + ] + } + ], + "state":"STATE_OPEN", + "counterparty":{ + "clientId":"07-tendermint-633", + "connectionId":"connection-574", + "prefix":{ + "keyPrefix":"aWJj" + } + }, + "delayPeriod":"0" + } + ], + "pagination":{ + "nextKey":"L2Nvbm5lY3Rpb24tMTAz", + "total":"0" + }, + "height":{ + "revisionNumber":"888", + "revisionHeight":"27779944" + } +} +``` + + + + +
ParameterTypeDescription
connectionsIdentifiedConnection ArrayConnection associated with the request identifier
paginationPageResponsePagination information in the response
heightHeightQuery block height
+ + +
+ +**IdentifiedConnection** + + + + + + + +
ParameterTypeDescription
idStringConnection identifier
client_idStringClient associated with this connection
versionsVersion StringIBC version which can be utilised to determine encodings or protocols for channels or packets utilising this connection
stateStateCurrent state of the connection end
counterpartyCounterpartyCounterparty chain associated with this connection
delay_periodIntegerDelay period associated with this connection
+ + +
+ +**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
+ + +
+ +**Version** + + + +
ParameterTypeDescription
identifierStringUnique version identifier
featuresString ArrayList of features compatible with the specified identifier
+ + +
+ +**State** + + + + + +
CodeName
0STATE_UNINITIALIZED_UNSPECIFIED
1STATE_INIT
2STATE_TRYOPEN
3STATE_OPEN
+ + +
+ +**Counterparty** + + + + +
ParameterTypeDescription
client_idStringIdentifies the client on the counterparty chain associated with a given connection
connection_idStringIdentifies the connection end on the counterparty chain associated with a given connection
prefixMarketPrefixCommitment merkle prefix of the counterparty chain
+ + +
+ +**MerklePrefix** + + +
ParameterTypeDescription
key_prefixByte ArrayMerkle path prefixed to the key
+ + + +## ClientConnections + +Queries the connection paths associated with a client 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) + + client_id = "07-tendermint-0" + + connections = await client.fetch_ibc_client_connections(client_id=client_id) + print(connections) + + +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.FetchIBCClientConnections(ctx, clientId) + if err != nil { + fmt.Println(err) + } + + str, _ := json.MarshalIndent(res, "", " ") + fmt.Print(string(str)) + +} +``` + + + +
ParameterTypeDescriptionRequired
client_idStringClient identifier associated with a connectionYes
+ + +### Response Parameters +> Response Example: + +``` json +{ + "connectionPaths":[ + "connection-0" + ], + "proofHeight":{ + "revisionNumber":"888", + "revisionHeight":"27783349" + }, + "proof":"" +} +``` + + + + +
ParameterTypeDescription
connection_pathsString ArrayAll the connection paths associated with a client
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
+ + + +## ConnectionClientState + +Queries the client state associated with the connection + +**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) + + connection_id = "connection-0" + + state = await client.fetch_ibc_connection_client_state(connection_id=connection_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) + } + + connectionId := "connection-0" + ctx := context.Background() + + res, err := chainClient.FetchIBCConnectionClientState(ctx, connectionId) + if err != nil { + fmt.Println(err) + } + + fmt.Print(res) + +} +``` + + + +
ParameterTypeDescriptionRequired
connection_idStringConnection identifierYes
+ + +### Response Parameters +> Response Example: + +``` json +{ + "identifiedClientState":{ + "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 + } + }, + "proofHeight":{ + "revisionNumber":"888", + "revisionHeight":"27783852" + }, + "proof":"" +} +``` + + + + +
ParameterTypeDescription
identified_client_stateIdentifiedClientStateClient state associated with the channel
proofByte ArrayMerkle proof of existence
proof_heightHeightHeight at which the proof was retrieved
+ + +
+ +**IdentifiedClientState** + + + +
ParameterTypeDescription
client_idStringClient identifier
client_stateAnyClient state
+ + +
+ +**Height** + + + +
ParameterTypeDescription
revision_numberIntegerThe revision that the client is currently on
revision_heightIntegerThe height within the given revision
+ + + +## ConnectionConsensusState + +Queries the consensus state associated with the connection + +**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) + + connection_id = "connection-0" + revision_number = 0 + revision_height = 7379538 + + state = await client.fetch_ibc_connection_consensus_state( + connection_id=connection_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) + } + + connectionId := "connection-0" + revisionNumber := uint64(0) + revisionHeight := uint64(7379538) + + ctx := context.Background() + + res, err := chainClient.FetchIBCConnectionConsensusState(ctx, connectionId, revisionNumber, revisionHeight) + if err != nil { + fmt.Println(err) + } + + fmt.Print(res) + +} +``` + + + + + +
ParameterTypeDescriptionRequired
connection_idStringConnection 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":"2022-07-04T10:34:53.874345276Z", + "root":{ + "hash":"viI6JuzZ/kOAh6jIeecglN7Xt+mGQT/PpvAGqGLcVmM=" + }, + "nextValidatorsHash":"olPEfP4dzPCC07Oyg/3+6U5/uumw/HmELk2MwpMogSg=" + }, + "clientId":"07-tendermint-0", + "proofHeight":{ + "revisionNumber":"888", + "revisionHeight":"27784841" + }, + "proof":"" +} +``` + + + + + +
ParameterTypeDescription
consensus_stateAnyConsensus state associated with the channel
client_idStringClient identifier 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
+ + + +## ConnectionParams + +Queries all parameters of the ibc connection 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_connection_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.FetchIBCConnectionParams(ctx) + if err != nil { + fmt.Println(err) + } + + str, _ := json.MarshalIndent(res, "", " ") + fmt.Print(string(str)) + +} +``` + + +No parameters + +### Response Parameters +> Response Example: + +``` json +{ + "params":{ + "maxExpectedTimePerBlock":"30000000000" + } +} +``` + + +
ParameterTypeDescription
paramsParamsModule's parameters
+ + +
+ +**Params** + + +
ParameterTypeDescription
max_expected_time_per_blockIntegerMaximum expected time per block (in nanoseconds), used to enforce block delay. This parameter should reflect the largest amount of time that the chain might reasonably take to produce the next block under normal operating conditions. A safe choice is 3-5x the expected time per block
+ \ No newline at end of file diff --git a/source/includes/_ibctransfer.md b/source/includes/_ibctransfer.md new file mode 100644 index 00000000..e5dfbb37 --- /dev/null +++ b/source/includes/_ibctransfer.md @@ -0,0 +1,1021 @@ +# - IBC Transfer + +Includes all the messages and queries associated to transfers from the IBC transfer 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/v8/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" + + "cosmossdk.io/math" + + "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/v8/modules/apps/transfer/types" + ibccoretypes "github.com/cosmos/ibc-go/v8/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: math.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/includes/_insurance.md b/source/includes/_insurance.md index 169bdf60..1f9442e4 100644 --- a/source/includes/_insurance.md +++ b/source/includes/_insurance.md @@ -123,6 +123,77 @@ gas wanted: 151648 gas fee: 0.000075824 INJ ``` + +
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
+ + ## MsgUnderwrite @@ -236,6 +307,77 @@ gas wanted: 142042 gas fee: 0.000071021 INJ ``` + +
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
+ + ## MsgRequestRedemption @@ -348,4 +490,75 @@ raw_log: "[]" gas wanted: 110689 gas fee: 0.0000553445 INJ -``` \ No newline at end of file +``` + + +
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
+ diff --git a/source/includes/_insurancerpc.md b/source/includes/_insurancerpc.md index 402cd64a..ee0cda1b 100644 --- a/source/includes/_insurancerpc.md +++ b/source/includes/_insurancerpc.md @@ -49,7 +49,7 @@ import ( ) func main() { - //network := common.LoadNetwork("mainnet", "k8s") + // network := common.LoadNetwork("mainnet", "k8s") network := common.LoadNetwork("testnet", "lb") exchangeClient, err := exchangeclient.NewExchangeClient(network) if err != nil { @@ -210,7 +210,7 @@ import ( ) func main() { - //network := common.LoadNetwork("mainnet", "k8s") + // network := common.LoadNetwork("mainnet", "k8s") network := common.LoadNetwork("testnet", "lb") exchangeClient, err := exchangeclient.NewExchangeClient(network) if err != nil { diff --git a/source/includes/_metarpc.md b/source/includes/_metarpc.md index daccdd6f..ac03e197 100644 --- a/source/includes/_metarpc.md +++ b/source/includes/_metarpc.md @@ -48,7 +48,7 @@ import ( ) func main() { - //network := common.LoadNetwork("mainnet", "k8s") + // network := common.LoadNetwork("mainnet", "k8s") network := common.LoadNetwork("testnet", "lb") exchangeClient, err := exchangeclient.NewExchangeClient(network) if err != nil { @@ -127,7 +127,7 @@ import ( ) func main() { - //network := common.LoadNetwork("mainnet", "k8s") + // network := common.LoadNetwork("mainnet", "k8s") network := common.LoadNetwork("testnet", "lb") exchangeClient, err := exchangeclient.NewExchangeClient(network) if err != nil { @@ -240,7 +240,7 @@ import ( ) func main() { - //network := common.LoadNetwork("mainnet", "k8s") + // network := common.LoadNetwork("mainnet", "k8s") network := common.LoadNetwork("testnet", "lb") exchangeClient, err := exchangeclient.NewExchangeClient(network) if err != nil { @@ -388,7 +388,7 @@ import ( ) func main() { - //network := common.LoadNetwork("mainnet", "k8s") + // network := common.LoadNetwork("mainnet", "k8s") network := common.LoadNetwork("testnet", "lb") exchangeClient, err := exchangeclient.NewExchangeClient(network) if err != nil { @@ -407,7 +407,7 @@ func main() { case <-ctx.Done(): return default: - res, err := (*stream).Recv() + res, err := stream.Recv() if err != nil { fmt.Println(err) return diff --git a/source/includes/_oracle.md b/source/includes/_oracle.md index 0aa48131..05ecb8aa 100644 --- a/source/includes/_oracle.md +++ b/source/includes/_oracle.md @@ -105,15 +105,14 @@ package main import ( "fmt" "os" - "time" + "cosmossdk.io/math" "github.com/InjectiveLabs/sdk-go/client" "github.com/InjectiveLabs/sdk-go/client/common" oracletypes "github.com/InjectiveLabs/sdk-go/chain/oracle/types" chainclient "github.com/InjectiveLabs/sdk-go/client/chain" rpchttp "github.com/cometbft/cometbft/rpc/client/http" - cosmtypes "github.com/cosmos/cosmos-sdk/types" ) func main() { @@ -159,7 +158,7 @@ func main() { panic(err) } - price := []cosmtypes.Dec{cosmtypes.MustNewDecFromStr("100")} + price := []math.LegacyDec{math.LegacyMustNewDecFromStr("100")} base := []string{"BAYC"} quote := []string{"WETH"} @@ -170,23 +169,14 @@ func main() { Quote: quote, } - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg - err = chainClient.QueueBroadcastMsg(msg) + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + result, err := chainClient.SyncBroadcastMsg(msg) if err != nil { - fmt.Println(err) - } - - time.Sleep(time.Second * 5) - - gasFee, err := chainClient.GetGasFee() - - if err != nil { - fmt.Println(err) - return + panic(err) } - fmt.Println("gas fee:", gasFee, "INJ") + fmt.Printf("Broadcast result: %s\n", result) } ``` @@ -217,6 +207,77 @@ DEBU[0002] gas wanted: 113647 fn=func1 src="client/ch gas fee: 0.0000568235 INJ ``` + +
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
+ + ## MsgRelayProviderPrices @@ -341,3 +402,74 @@ gas fee: 0.0000863755 INJ ```go ``` + + +
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
+ diff --git a/source/includes/_permissions.md b/source/includes/_permissions.md new file mode 100644 index 00000000..daa1e95a --- /dev/null +++ b/source/includes/_permissions.md @@ -0,0 +1,2210 @@ +# - Permissions + +Permissions module provides an extra layer of configuration for all actions related to tokens: mint, transfer and burn. + +## AllNamespaces + +Defines a gRPC query method that returns the permissions module's created namespaces + +**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) + + namespaces = await client.fetch_all_permissions_namespaces() + print(namespaces) + + +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("devnet", "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.FetchAllNamespaces(ctx) + if err != nil { + fmt.Println(err) + } + + str, _ := json.MarshalIndent(res, "", " ") + fmt.Print(string(str)) + +} +``` + + +No parameters + + +### Response Parameters +> Response Example: + +``` json + +``` + + +
ParameterTypeDescription
namespacesNamespace ArrayList of namespaces
+ + +
+ +**Namespace** + + + + + + + + +
ParameterTypeDescription
denomStringToken denom
wasm_hookStringAddress of the wasm contract that will provide the real destination address
mints_pausedBoolMint action status
sends_pausedBoolSend action status
burns_pausedBoolBurn action status
role_permissionsRole ArrayList of roles
address_rolesAddressRoles ArrayList of Injective addresses and their associated role
+ + +
+ +**Role** + + + +
ParameterTypeDescription
roleStringRole name
permissionsIntegerInteger representing the bitwhise combination of all actions assigned to the role
+ + +
+ +**PermissionAction** + + + +
ParameterTypeDescription
roleStringRole name
permissionsIntegerInteger representing the bitwhise combination of all actions assigned to the role
+ + +
+ +**AddressRoles** + + + +
ParameterTypeDescription
addressStringInjective address
rolesString ArrayList of roles assigned to the address
+ + + +## NamespaceByDenom + +Defines a gRPC query method that returns the permissions module's namespace associated with a denom + +**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) + + denom = "inj" + namespace = await client.fetch_permissions_namespace_by_denom(denom=denom, include_roles=True) + print(namespace) + + +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("devnet", "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", + "f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3", // 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) + } + + namespaceDenom := "factory/inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r/inj_test" + + ctx := context.Background() + + res, err := chainClient.FetchNamespaceByDenom(ctx, namespaceDenom, true) + if err != nil { + fmt.Println(err) + } + + str, _ := json.MarshalIndent(res, "", " ") + fmt.Print(string(str)) +} +``` + + + + +
ParameterTypeDescriptionRequired
denomStringThe token denomYes
include_rolesBoolOption to request the roles in the responseNo
+ + + +### Response Parameters +> Response Example: + +``` json + +``` + + +
ParameterTypeDescription
namespaceNamespaceThe namespace information (if found)
+ + +
+ +**Namespace** + + + + + + + + +
ParameterTypeDescription
denomStringToken denom
wasm_hookStringAddress of the wasm contract that will provide the real destination address
mints_pausedBoolMint action status
sends_pausedBoolSend action status
burns_pausedBoolBurn action status
role_permissionsRole ArrayList of roles
address_rolesAddressRoles ArrayList of Injective addresses and their associated role
+ + +
+ +**Role** + + + +
ParameterTypeDescription
roleStringRole name
permissionsIntegerInteger representing the bitwhise combination of all actions assigned to the role
+ + +
+ +**PermissionAction** + + + +
ParameterTypeDescription
roleStringRole name
permissionsIntegerInteger representing the bitwhise combination of all actions assigned to the role
+ + +
+ +**AddressRoles** + + + +
ParameterTypeDescription
addressStringInjective address
rolesString ArrayList of roles assigned to the address
+ + + +## AddressRoles + +Defines a gRPC query method that returns a namespace's roles associated with the provided address + +**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) + + denom = "inj" + address = "inj1knhahceyp57j5x7xh69p7utegnnnfgxavmahjr" + roles = await client.fetch_permissions_address_roles(denom=denom, address=address) + print(roles) + + +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("devnet", "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", + "f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3", // 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) + } + + namespaceDenom := "factory/inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r/inj_test" + address := senderAddress.String() + + ctx := context.Background() + + res, err := chainClient.FetchAddressRoles(ctx, namespaceDenom, address) + if err != nil { + fmt.Println(err) + } + + str, _ := json.MarshalIndent(res, "", " ") + fmt.Print(string(str)) +} +``` + + + + +
ParameterTypeDescriptionRequired
denomStringThe token denomYes
addressStringThe Injective address to query the roles forYes
+ + + +### Response Parameters +> Response Example: + +``` json + +``` + + +
ParameterTypeDescription
rolesString ArrayList of role names
+ + + +## AddressesByRole + +Defines a query method that returns a namespace's roles associated with the provided address + +**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) + + denom = "inj" + role = "roleName" + addresses = await client.fetch_permissions_addresses_by_role(denom=denom, role=role) + print(addresses) + + +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("devnet", "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", + "f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3", // 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) + } + + namespaceDenom := "factory/inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r/inj_test" + role := "blacklisted" + + ctx := context.Background() + + res, err := chainClient.FetchAddressesByRole(ctx, namespaceDenom, role) + if err != nil { + fmt.Println(err) + } + + str, _ := json.MarshalIndent(res, "", " ") + fmt.Print(string(str)) +} +``` + + + + +
ParameterTypeDescriptionRequired
denomStringThe token denomYes
roleStringThe role name to query the addresses forYes
+ + + +### Response Parameters +> Response Example: + +``` json + +``` + + +
ParameterTypeDescription
addressesString ArrayList of Injective addresses
+ + + +## VouchersForAddress + +Defines a query method that returns a map of vouchers that are held by permissions module for this address, keyed by the originator address + +**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) + + address = "inj1knhahceyp57j5x7xh69p7utegnnnfgxavmahjr" + addresses = await client.fetch_permissions_vouchers_for_address(address=address) + print(addresses) + + +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("devnet", "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", + "f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3", // 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) + } + + address := senderAddress.String() + + ctx := context.Background() + + res, err := chainClient.FetchVouchersForAddress(ctx, address) + if err != nil { + fmt.Println(err) + } + + str, _ := json.MarshalIndent(res, "", " ") + fmt.Print(string(str)) +} +``` + + + +
ParameterTypeDescriptionRequired
addressStringThe Injective address to query forYes
+ + + +### Response Parameters +> Response Example: + +``` json + +``` + + +
ParameterTypeDescription
vouchersCoin ArrayList of available vouchers for the address
+ + +
+ +**Coin** + + + +
ParameterTypeDescriptionRequired
denomStringThe token denomYes
amountStringThe amount of tokensYes
+ + + +## CreateNamespace + +Message to create a new namespace + +**IP rate limit group:** `chain` + + +### Request Parameters +> Request Example: + + + +```py +import asyncio +import os + +import dotenv + +from pyinjective.composer import Composer as ProtoMsgComposer +from pyinjective.core.broadcaster import MsgBroadcasterWithPk +from pyinjective.core.network import Network +from pyinjective.wallet import PrivateKey + + +async def main() -> None: + dotenv.load_dotenv() + private_key_in_hexa = os.getenv("INJECTIVE_PRIVATE_KEY") + + # select network: local, testnet, mainnet + network = Network.devnet() + composer = ProtoMsgComposer(network=network.string()) + + message_broadcaster = MsgBroadcasterWithPk.new_using_simulation( + network=network, + private_key=private_key_in_hexa, + ) + + priv_key = PrivateKey.from_hex(private_key_in_hexa) + pub_key = priv_key.to_public_key() + address = pub_key.to_address() + + blocked_address = "inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r" + denom = "factory/inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r/inj_test" + role1 = composer.permissions_role( + role=composer.DEFAULT_PERMISSIONS_EVERYONE_ROLE, + permissions=composer.MINT_ACTION_PERMISSION + | composer.RECEIVE_ACTION_PERMISSION + | composer.BURN_ACTION_PERMISSION, + ) + role2 = composer.permissions_role(role="blacklisted", permissions=composer.UNDEFINED_ACTION_PERMISSION) + address_role1 = composer.permissions_address_roles(address=blocked_address, roles=["blacklisted"]) + + message = composer.msg_create_namespace( + sender=address.to_acc_bech32(), + denom=denom, + wasm_hook="", + mints_paused=False, + sends_paused=False, + burns_paused=False, + role_permissions=[role1, role2], + address_roles=[address_role1], + ) + + # 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" + + permissionstypes "github.com/InjectiveLabs/sdk-go/chain/permissions/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" +) + +func main() { + network := common.LoadNetwork("devnet", "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", + "f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3", // 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) + } + + blockedAddress := "inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r" + namespace := permissionstypes.Namespace{ + Denom: "factory/inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r/inj_test", + RolePermissions: []*permissionstypes.Role{ + { + Role: permissionstypes.EVERYONE, + Permissions: uint32(permissionstypes.Action_MINT | permissionstypes.Action_RECEIVE | permissionstypes.Action_BURN), + }, + { + Role: "blacklisted", + Permissions: 0, + }, + }, + AddressRoles: []*permissionstypes.AddressRoles{ + { + Address: blockedAddress, + Roles: []string{"blacklisted"}, + }, + }, + } + + msg := &permissionstypes.MsgCreateNamespace{ + Sender: senderAddress.String(), + Namespace: namespace, + } + + //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + response, err := chainClient.SyncBroadcastMsg(msg) + + if err != nil { + panic(err) + } + + str, _ := json.MarshalIndent(response, "", " ") + fmt.Print(string(str)) +} +``` + + + + +
ParameterTypeDescriptionRequired
senderStringThe sender's Injective addressYes
namespaceNamespaceThe namespace informationYes
+ + +
+ +**Namespace** + + + + + + + + +
ParameterTypeDescription
denomStringToken denom
wasm_hookStringAddress of the wasm contract that will provide the real destination address
mints_pausedBoolMint action status
sends_pausedBoolSend action status
burns_pausedBoolBurn action status
role_permissionsRole ArrayList of roles
address_rolesAddressRoles ArrayList of Injective addresses and their associated role
+ + +
+ +**Role** + + + +
ParameterTypeDescription
roleStringRole name
permissionsIntegerInteger representing the bitwhise combination of all actions assigned to the role
+ + +
+ +**PermissionAction** + + + +
ParameterTypeDescription
roleStringRole name
permissionsIntegerInteger representing the bitwhise combination of all actions assigned to the role
+ + +
+ +**AddressRoles** + + + +
ParameterTypeDescription
addressStringInjective address
rolesString ArrayList of roles assigned to the address
+ + +### 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
+ + + +## DeleteNamespace + +Message to delete a namespace + +**IP rate limit group:** `chain` + + +### Request Parameters +> Request Example: + + + +```py +import asyncio +import os + +import dotenv + +from pyinjective.composer import Composer as ProtoMsgComposer +from pyinjective.core.broadcaster import MsgBroadcasterWithPk +from pyinjective.core.network import Network +from pyinjective.wallet import PrivateKey + + +async def main() -> None: + dotenv.load_dotenv() + private_key_in_hexa = os.getenv("INJECTIVE_PRIVATE_KEY") + + # select network: local, testnet, mainnet + network = Network.devnet() + composer = ProtoMsgComposer(network=network.string()) + + message_broadcaster = MsgBroadcasterWithPk.new_using_simulation( + network=network, + private_key=private_key_in_hexa, + ) + + priv_key = PrivateKey.from_hex(private_key_in_hexa) + pub_key = priv_key.to_public_key() + address = pub_key.to_address() + + denom = "factory/inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r/inj_test" + message = composer.msg_delete_namespace( + sender=address.to_acc_bech32(), + namespace_denom=denom, + ) + + # 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" + + permissionstypes "github.com/InjectiveLabs/sdk-go/chain/permissions/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" +) + +func main() { + network := common.LoadNetwork("devnet", "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", + "f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3", // 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) + } + + namespaceDenom := "factory/inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r/inj_test" + + msg := &permissionstypes.MsgDeleteNamespace{ + Sender: senderAddress.String(), + NamespaceDenom: namespaceDenom, + } + + //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + response, err := chainClient.SyncBroadcastMsg(msg) + + if err != nil { + panic(err) + } + + str, _ := json.MarshalIndent(response, "", " ") + fmt.Print(string(str)) +} +``` + + + + +
ParameterTypeDescriptionRequired
senderStringThe sender's Injective addressYes
namespace_denomStringThe token denom of the namespace to deleteYes
+ + +### 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
+ + + +## UpdateNamespace + +Message to update a namespace configuration + +**IP rate limit group:** `chain` + + +### Request Parameters +> Request Example: + + + +```py +import asyncio +import os + +import dotenv + +from pyinjective.composer import Composer as ProtoMsgComposer +from pyinjective.core.broadcaster import MsgBroadcasterWithPk +from pyinjective.core.network import Network +from pyinjective.wallet import PrivateKey + + +async def main() -> None: + dotenv.load_dotenv() + private_key_in_hexa = os.getenv("INJECTIVE_PRIVATE_KEY") + + # select network: local, testnet, mainnet + network = Network.devnet() + composer = ProtoMsgComposer(network=network.string()) + + message_broadcaster = MsgBroadcasterWithPk.new_using_simulation( + network=network, + private_key=private_key_in_hexa, + ) + + priv_key = PrivateKey.from_hex(private_key_in_hexa) + pub_key = priv_key.to_public_key() + address = pub_key.to_address() + + denom = "factory/inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r/inj_test" + + message = composer.msg_update_namespace( + sender=address.to_acc_bech32(), + namespace_denom=denom, + wasm_hook="inj19ld6swyldyujcn72j7ugnu9twafhs9wxlyye5m", + mints_paused=True, + sends_paused=True, + burns_paused=True, + ) + + # 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" + + permissionstypes "github.com/InjectiveLabs/sdk-go/chain/permissions/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" +) + +func main() { + network := common.LoadNetwork("devnet", "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", + "f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3", // 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) + } + + namespaceDenom := "factory/inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r/inj_test" + + msg := &permissionstypes.MsgUpdateNamespace{ + Sender: senderAddress.String(), + NamespaceDenom: namespaceDenom, + WasmHook: &permissionstypes.MsgUpdateNamespace_MsgSetWasmHook{NewValue: "inj19ld6swyldyujcn72j7ugnu9twafhs9wxlyye5m"}, + SendsPaused: &permissionstypes.MsgUpdateNamespace_MsgSetSendsPaused{NewValue: true}, + MintsPaused: &permissionstypes.MsgUpdateNamespace_MsgSetMintsPaused{NewValue: true}, + BurnsPaused: &permissionstypes.MsgUpdateNamespace_MsgSetBurnsPaused{NewValue: true}, + } + + //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + response, err := chainClient.SyncBroadcastMsg(msg) + + if err != nil { + panic(err) + } + + str, _ := json.MarshalIndent(response, "", " ") + fmt.Print(string(str)) +} +``` + + + + + + + + +
ParameterTypeDescriptionRequired
senderStringThe sender's Injective addressYes
namespace_denomStringThe token denom of the namespace to updateYes
wasm_hookStringAddress of the wasm contract that will provide the real destination addressYes
mints_pausedBoolMint action statusYes
sends_pausedBoolSend action statusYes
burns_pausedBoolBurn action statusYes
+ + +### 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
+ + + +## UpdateNamespaceRoles + +Message to update a namespace roles + +**IP rate limit group:** `chain` + + +### Request Parameters +> Request Example: + + + +```py +import asyncio +import os + +import dotenv + +from pyinjective.composer import Composer as ProtoMsgComposer +from pyinjective.core.broadcaster import MsgBroadcasterWithPk +from pyinjective.core.network import Network +from pyinjective.wallet import PrivateKey + + +async def main() -> None: + dotenv.load_dotenv() + private_key_in_hexa = os.getenv("INJECTIVE_PRIVATE_KEY") + + # select network: local, testnet, mainnet + network = Network.devnet() + composer = ProtoMsgComposer(network=network.string()) + + message_broadcaster = MsgBroadcasterWithPk.new_using_simulation( + network=network, + private_key=private_key_in_hexa, + ) + + priv_key = PrivateKey.from_hex(private_key_in_hexa) + pub_key = priv_key.to_public_key() + address = pub_key.to_address() + + blocked_address = "inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r" + denom = "factory/inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r/inj_test" + role1 = composer.permissions_role( + role=composer.DEFAULT_PERMISSIONS_EVERYONE_ROLE, + permissions=composer.RECEIVE_ACTION_PERMISSION, + ) + role2 = composer.permissions_role(role="blacklisted", permissions=composer.UNDEFINED_ACTION_PERMISSION) + address_role1 = composer.permissions_address_roles(address=blocked_address, roles=["blacklisted"]) + + message = composer.msg_update_namespace_roles( + sender=address.to_acc_bech32(), + namespace_denom=denom, + role_permissions=[role1, role2], + address_roles=[address_role1], + ) + + # 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" + + permissionstypes "github.com/InjectiveLabs/sdk-go/chain/permissions/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" +) + +func main() { + network := common.LoadNetwork("devnet", "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", + "f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3", // 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) + } + + namespaceDenom := "factory/inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r/inj_test" + blockedAddress := "inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r" + + msg := &permissionstypes.MsgUpdateNamespaceRoles{ + Sender: senderAddress.String(), + NamespaceDenom: namespaceDenom, + RolePermissions: []*permissionstypes.Role{ + { + Role: permissionstypes.EVERYONE, + Permissions: uint32(permissionstypes.Action_RECEIVE), + }, + { + Role: "blacklisted", + Permissions: 0, + }, + }, + AddressRoles: []*permissionstypes.AddressRoles{ + { + Address: blockedAddress, + Roles: []string{"blacklisted"}, + }, + }, + } + + //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + response, err := chainClient.SyncBroadcastMsg(msg) + + if err != nil { + panic(err) + } + + str, _ := json.MarshalIndent(response, "", " ") + fmt.Print(string(str)) +} +``` + + + + + + +
ParameterTypeDescriptionRequired
senderStringThe sender's Injective addressYes
namespace_denomStringThe token denom of the namespace to updateYes
role_permissionsRole ArrayList of rolesYes
address_rolesAddressRoles ArrayList of Injective addresses and their associated roleYes
+ + +
+ +**Role** + + + +
ParameterTypeDescription
roleStringRole name
permissionsIntegerInteger representing the bitwhise combination of all actions assigned to the role
+ + +
+ +**PermissionAction** + + + +
ParameterTypeDescription
roleStringRole name
permissionsIntegerInteger representing the bitwhise combination of all actions assigned to the role
+ + +
+ +**AddressRoles** + + + +
ParameterTypeDescription
addressStringInjective address
rolesString ArrayList of roles assigned to the address
+ + +### 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
+ + + +## RevokeNamespaceRoles + +Message to revoke roles from addresses + +**IP rate limit group:** `chain` + + +### Request Parameters +> Request Example: + + + +```py +import asyncio +import os + +import dotenv + +from pyinjective.composer import Composer as ProtoMsgComposer +from pyinjective.core.broadcaster import MsgBroadcasterWithPk +from pyinjective.core.network import Network +from pyinjective.wallet import PrivateKey + + +async def main() -> None: + dotenv.load_dotenv() + private_key_in_hexa = os.getenv("INJECTIVE_PRIVATE_KEY") + + # select network: local, testnet, mainnet + network = Network.devnet() + composer = ProtoMsgComposer(network=network.string()) + + message_broadcaster = MsgBroadcasterWithPk.new_using_simulation( + network=network, + private_key=private_key_in_hexa, + ) + + priv_key = PrivateKey.from_hex(private_key_in_hexa) + pub_key = priv_key.to_public_key() + address = pub_key.to_address() + + blocked_address = "inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r" + denom = "factory/inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r/inj_test" + address_role1 = composer.permissions_address_roles(address=blocked_address, roles=["blacklisted"]) + + message = composer.msg_revoke_namespace_roles( + sender=address.to_acc_bech32(), + namespace_denom=denom, + address_roles_to_revoke=[address_role1], + ) + + # 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" + + permissionstypes "github.com/InjectiveLabs/sdk-go/chain/permissions/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" +) + +func main() { + network := common.LoadNetwork("devnet", "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", + "f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3", // 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) + } + + namespaceDenom := "factory/inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r/inj_test" + blockedAddress := "inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r" + + msg := &permissionstypes.MsgRevokeNamespaceRoles{ + Sender: senderAddress.String(), + NamespaceDenom: namespaceDenom, + AddressRolesToRevoke: []*permissionstypes.AddressRoles{ + { + Address: blockedAddress, + Roles: []string{"blacklisted"}, + }, + }, + } + + //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + response, err := chainClient.SyncBroadcastMsg(msg) + + if err != nil { + panic(err) + } + + str, _ := json.MarshalIndent(response, "", " ") + fmt.Print(string(str)) +} +``` + + + + + +
ParameterTypeDescriptionRequired
senderStringThe sender's Injective addressYes
namespace_denomStringThe token denom of the namespace to updateYes
address_roles_to_revokeAddressRoles ArrayList of Injective addresses and their associated roleYes
+ + +
+ +**AddressRoles** + + + +
ParameterTypeDescription
addressStringInjective address
rolesString ArrayList of roles assigned to the address
+ + +### 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
+ + + +## ClaimVoucher + +Message to claim existing vouchers for a particular address + +**IP rate limit group:** `chain` + + +### Request Parameters +> Request Example: + + + +```py +import asyncio +import os + +import dotenv + +from pyinjective.composer import Composer as ProtoMsgComposer +from pyinjective.core.broadcaster import MsgBroadcasterWithPk +from pyinjective.core.network import Network +from pyinjective.wallet import PrivateKey + + +async def main() -> None: + dotenv.load_dotenv() + private_key_in_hexa = os.getenv("INJECTIVE_PRIVATE_KEY") + + # select network: local, testnet, mainnet + network = Network.devnet() + composer = ProtoMsgComposer(network=network.string()) + + message_broadcaster = MsgBroadcasterWithPk.new_using_simulation( + network=network, + private_key=private_key_in_hexa, + ) + + priv_key = PrivateKey.from_hex(private_key_in_hexa) + pub_key = priv_key.to_public_key() + address = pub_key.to_address() + + denom = "factory/inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r/inj_test" + + message = composer.msg_claim_voucher( + sender=address.to_acc_bech32(), + denom=denom, + ) + + # 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" + + permissionstypes "github.com/InjectiveLabs/sdk-go/chain/permissions/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" +) + +func main() { + network := common.LoadNetwork("devnet", "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", + "f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3", // 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) + } + + denom := "factory/inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r/inj_test" + + msg := &permissionstypes.MsgClaimVoucher{ + Sender: senderAddress.String(), + Denom: denom, + } + + //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + response, err := chainClient.SyncBroadcastMsg(msg) + + if err != nil { + panic(err) + } + + str, _ := json.MarshalIndent(response, "", " ") + fmt.Print(string(str)) +} +``` + + + + +
ParameterTypeDescriptionRequired
senderStringThe sender's Injective addressYes
denomStringThe token denom of the voucher to claimYes
+ + +### 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
+ diff --git a/source/includes/_spot.md b/source/includes/_spot.md index b29130b6..f669117e 100644 --- a/source/includes/_spot.md +++ b/source/includes/_spot.md @@ -149,6 +149,7 @@ func main() {
+ **SpotMarket** @@ -161,10 +162,14 @@ func main() { market_idStringThe market ID statusMarketStatusStatus of the market min_price_tick_sizeDecimalMinimum tick size that the price required for orders in the market -min_quantity_tick_sizeDecimalMinimum tick size of the quantity required for orders in the market +min_quantity_tick_sizeDecimalMinimum tick size of the quantity required for orders in the market +min_notionalDecimalMinimum notional (in quote asset) required for orders in the market +adminStringCurrent market admin's address +admin_permissionsIntegerLevel of admin permissions (the permission number is a result of adding up all individual permissions numbers)
+ **MarketStatus** @@ -175,41 +180,17 @@ func main() { 4Expired +
-## SpotMarket - -Retrieves a spot market by ticker - -**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: - # select network: local, testnet, mainnet - network = Network.testnet() - - # initialize grpc client - client = AsyncClient(network) - - spot_market = await client.fetch_chain_spot_market( - market_id="0x0611780ba69656949525013d947713300f56c37b6175e02f26bffa495c3208fe", - ) - print(spot_market) - +**AdminPermission** -if __name__ == "__main__": - asyncio.get_event_loop().run_until_complete(main()) -``` + + + + + + +
CodeName
1Ticker Permission
2Min Price Tick Size Permission
4Min Quantity Tick Size Permission
8Min Notional Permission
16Initial Margin Ratio Permission
32Maintenance Margin Ratio Permission
@@ -318,6 +299,7 @@ func main() {
+ **SpotMarket** @@ -330,10 +312,14 @@ func main() { market_idStringThe market ID statusMarketStatusStatus of the market min_price_tick_sizeDecimalMinimum tick size that the price required for orders in the market -min_quantity_tick_sizeDecimalMinimum tick size of the quantity required for orders in the market +min_quantity_tick_sizeDecimalMinimum tick size of the quantity required for orders in the market +min_notionalDecimalMinimum notional (in quote asset) required for orders in the market +adminStringCurrent market admin's address +admin_permissionsIntegerLevel of admin permissions (the permission number is a result of adding up all individual permissions numbers)
+ **MarketStatus** @@ -344,43 +330,17 @@ func main() { 4Expired +
-## FullSpotMarkets - -Retrieves a list of spot markets with extra information - -**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: - # select network: local, testnet, mainnet - network = Network.testnet() - - # initialize grpc client - client = AsyncClient(network) - - spot_markets = await client.fetch_chain_full_spot_markets( - status="Active", - market_ids=["0x0611780ba69656949525013d947713300f56c37b6175e02f26bffa495c3208fe"], - with_mid_price_and_tob=True, - ) - print(spot_markets) - +**AdminPermission** -if __name__ == "__main__": - asyncio.get_event_loop().run_until_complete(main()) -``` + + + + + + +
CodeName
1Ticker Permission
2Min Price Tick Size Permission
4Min Quantity Tick Size Permission
8Min Notional Permission
16Initial Margin Ratio Permission
32Maintenance Margin Ratio Permission
@@ -502,6 +462,7 @@ func main() {
+ **FullSpotMarket** @@ -510,6 +471,7 @@ func main() {
+ **SpotMarket** @@ -522,10 +484,14 @@ func main() { market_idStringThe market ID statusMarketStatusStatus of the market min_price_tick_sizeDecimalMinimum tick size that the price required for orders in the market -min_quantity_tick_sizeDecimalMinimum tick size of the quantity required for orders in the market +min_quantity_tick_sizeDecimalMinimum tick size of the quantity required for orders in the market +min_notionalDecimalMinimum notional (in quote asset) required for orders in the market +adminStringCurrent market admin's address +admin_permissionsIntegerLevel of admin permissions (the permission number is a result of adding up all individual permissions numbers)
+ **MarketStatus** @@ -537,6 +503,7 @@ func main() {
+ **MidPriceAndTOB** @@ -545,42 +512,17 @@ func main() { best_sell_priceDecimalMarket's best sell price +
-## FullSpotMarket - -Retrieves a spot market with extra information - -**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: - # select network: local, testnet, mainnet - network = Network.testnet() - - # initialize grpc client - client = AsyncClient(network) - - spot_market = await client.fetch_chain_full_spot_market( - market_id="0x0611780ba69656949525013d947713300f56c37b6175e02f26bffa495c3208fe", - with_mid_price_and_tob=True, - ) - print(spot_market) - +**AdminPermission** -if __name__ == "__main__": - asyncio.get_event_loop().run_until_complete(main()) -``` + + + + + + +
CodeName
1Ticker Permission
2Min Price Tick Size Permission
4Min Quantity Tick Size Permission
8Min Notional Permission
16Initial Margin Ratio Permission
32Maintenance Margin Ratio Permission
@@ -698,6 +640,7 @@ func main() {
+ **FullSpotMarket** @@ -706,6 +649,7 @@ func main() {
+ **SpotMarket** @@ -718,10 +662,14 @@ func main() { market_idStringThe market ID statusMarketStatusStatus of the market min_price_tick_sizeDecimalMinimum tick size that the price required for orders in the market -min_quantity_tick_sizeDecimalMinimum tick size of the quantity required for orders in the market +min_quantity_tick_sizeDecimalMinimum tick size of the quantity required for orders in the market +min_notionalDecimalMinimum notional (in quote asset) required for orders in the market +adminStringCurrent market admin's address +admin_permissionsIntegerLevel of admin permissions (the permission number is a result of adding up all individual permissions numbers)
+ **MarketStatus** @@ -733,6 +681,7 @@ func main() {
+ **MidPriceAndTOB** @@ -741,46 +690,17 @@ func main() { best_sell_priceDecimalMarket's best sell price +
-## SpotOrderbook - -Retrieves a spot market's orderbook - -**IP rate limit group:** `chain` - -### Request Parameters -> Request Example: - - - -```py -import asyncio - -from pyinjective.async_client import AsyncClient -from pyinjective.client.model.pagination import PaginationOption -from pyinjective.core.network import Network - - -async def main() -> None: - # select network: local, testnet, mainnet - network = Network.testnet() - - # initialize grpc client - client = AsyncClient(network) - - pagination = PaginationOption(limit=2) - - orderbook = await client.fetch_chain_spot_orderbook( - market_id="0x0611780ba69656949525013d947713300f56c37b6175e02f26bffa495c3208fe", - order_side="Buy", - pagination=pagination, - ) - print(orderbook) - +**AdminPermission** -if __name__ == "__main__": - asyncio.get_event_loop().run_until_complete(main()) -``` + + + + + + +
CodeName
1Ticker Permission
2Min Price Tick Size Permission
4Min Quantity Tick Size Permission
8Min Notional Permission
16Initial Margin Ratio Permission
32Maintenance Margin Ratio Permission
@@ -793,11 +713,12 @@ import ( "encoding/json" "fmt" - "github.com/InjectiveLabs/sdk-go/chain/exchange/types" - cosmostypes "github.com/cosmos/cosmos-sdk/types" + "cosmossdk.io/math" "os" + "github.com/InjectiveLabs/sdk-go/chain/exchange/types" + "github.com/InjectiveLabs/sdk-go/client" chainclient "github.com/InjectiveLabs/sdk-go/client/chain" "github.com/InjectiveLabs/sdk-go/client/common" @@ -852,8 +773,8 @@ func main() { marketId := "0x0611780ba69656949525013d947713300f56c37b6175e02f26bffa495c3208fe" limit := uint64(2) orderSide := types.OrderSide_Buy - limitCumulativeNotional := cosmostypes.Dec{} - limitCumulativeQuantity := cosmostypes.Dec{} + limitCumulativeNotional := math.LegacyDec{} + limitCumulativeQuantity := math.LegacyDec{} res, err := chainClient.FetchChainSpotOrderbook(ctx, marketId, limit, orderSide, limitCumulativeNotional, limitCumulativeQuantity) if err != nil { @@ -876,6 +797,7 @@ func main() {
+ **OrderSide** @@ -911,6 +833,7 @@ func main() {
+ **Level** @@ -1096,6 +1019,7 @@ func main() {
+ **TrimmedSpotLimitOrder** @@ -1103,7 +1027,8 @@ func main() { quantityDecimalOrder quantity fillableDecimalThe remaining fillable amount of the order is_buyBooleanTrue if the order is a buy order -order_hashStringThe order hash +order_hashStringThe order hash +cidStringThe client order ID provided by the creator @@ -1302,6 +1227,7 @@ func main() {
+ **TrimmedSpotLimitOrder** @@ -1309,7 +1235,8 @@ func main() { quantityDecimalOrder quantity fillableDecimalThe remaining fillable amount of the order is_buyBooleanTrue if the order is a buy order -order_hashStringThe order hash +order_hashStringThe order hash +cidStringThe client order ID provided by the creator @@ -1472,6 +1399,7 @@ func main() {
+ **TrimmedSpotLimitOrder** @@ -1479,7 +1407,8 @@ func main() { quantityDecimalOrder quantity fillableDecimalThe remaining fillable amount of the order is_buyBooleanTrue if the order is a buy order -order_hashStringThe order hash +order_hashStringThe order hash +cidStringThe client order ID provided by the creator @@ -1633,6 +1562,7 @@ func main() {
+ **TrimmedSpotLimitOrder** @@ -1640,7 +1570,8 @@ func main() { quantityDecimalOrder quantity fillableDecimalThe remaining fillable amount of the order is_buyBooleanTrue if the order is a buy order -order_hashStringThe order hash +order_hashStringThe order hash +cidStringThe client order ID provided by the creator @@ -1832,6 +1763,7 @@ async def main() -> None: quote_denom="USDC", min_price_tick_size=Decimal("0.001"), min_quantity_tick_size=Decimal("0.01"), + min_notional=Decimal("1"), ) # broadcast the transaction @@ -1856,11 +1788,11 @@ import ( "fmt" "os" + "cosmossdk.io/math" + exchangetypes "github.com/InjectiveLabs/sdk-go/chain/exchange/types" exchangeclient "github.com/InjectiveLabs/sdk-go/client/exchange" - "github.com/cosmos/cosmos-sdk/types" - "github.com/InjectiveLabs/sdk-go/client" chainclient "github.com/InjectiveLabs/sdk-go/client/chain" "github.com/InjectiveLabs/sdk-go/client/common" @@ -1922,13 +1854,13 @@ func main() { baseToken := marketsAssistant.AllTokens()["INJ"] quoteToken := marketsAssistant.AllTokens()["USDC"] - minPriceTickSize := types.MustNewDecFromStr("0.01") - minQuantityTickSize := types.MustNewDecFromStr("0.001") + minPriceTickSize := math.LegacyMustNewDecFromStr("0.01") + minQuantityTickSize := math.LegacyMustNewDecFromStr("0.001") - chainMinPriceTickSize := minPriceTickSize.Mul(types.NewDecFromIntWithPrec(types.NewInt(1), int64(quoteToken.Decimals))) - chainMinPriceTickSize = chainMinPriceTickSize.Quo(types.NewDecFromIntWithPrec(types.NewInt(1), int64(baseToken.Decimals))) + chainMinPriceTickSize := minPriceTickSize.Mul(math.LegacyNewDecFromIntWithPrec(math.NewInt(1), int64(quoteToken.Decimals))) + chainMinPriceTickSize = chainMinPriceTickSize.Quo(math.LegacyNewDecFromIntWithPrec(math.NewInt(1), int64(baseToken.Decimals))) - chainMinQuantityTickSize := minQuantityTickSize.Mul(types.NewDecFromIntWithPrec(types.NewInt(1), int64(baseToken.Decimals))) + chainMinQuantityTickSize := minQuantityTickSize.Mul(math.LegacyNewDecFromIntWithPrec(math.NewInt(1), int64(baseToken.Decimals))) msg := &exchangetypes.MsgInstantSpotMarketLaunch{ Sender: senderAddress.String(), @@ -1939,7 +1871,7 @@ func main() { MinQuantityTickSize: chainMinQuantityTickSize, } - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg response, err := chainClient.AsyncBroadcastMsg(msg) if err != nil { @@ -1958,7 +1890,8 @@ func main() { base_denomStringBase tocken denomYes quote_denomStringQuote tocken denomYes min_price_tick_sizeDecimalDefines the minimum tick size of the order's priceYes -min_quantity_tick_sizeDecimalDefines the minimum tick size of the order's quantityYes +min_quantity_tick_sizeDecimalDefines the minimum tick size of the order's quantityYes +min_notionalDecimalDefines the minimum notional (in quote asset) required for orders in the marketYes ### Response Parameters @@ -1973,6 +1906,7 @@ func main() {
+ **TxResponse** @@ -1992,6 +1926,7 @@ func main() {
+ **ABCIMessageLog** @@ -2001,6 +1936,7 @@ func main() {
+ **Event** @@ -2009,6 +1945,7 @@ func main() {
+ **StringEvent** @@ -2017,6 +1954,7 @@ func main() {
+ **EventAttribute** @@ -2026,6 +1964,7 @@ func main() {
+ **Attribute** @@ -2265,7 +2204,7 @@ func main() { fmt.Println("simulated order hash: ", msgCreateSpotLimitOrderResponse.OrderHash) - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg err = chainClient.QueueBroadcastMsg(msg) if err != nil { @@ -2293,6 +2232,7 @@ func main() {
+ **SpotOrder** @@ -2303,6 +2243,7 @@ func main() {
+ **OrderInfo** @@ -2314,6 +2255,7 @@ func main() {
+ **OrderType** @@ -2359,6 +2301,7 @@ gas fee: 0.000064956 INJ
+ **TxResponse** @@ -2378,6 +2321,7 @@ gas fee: 0.000064956 INJ
+ **ABCIMessageLog** @@ -2387,6 +2331,7 @@ gas fee: 0.000064956 INJ
+ **Event** @@ -2395,6 +2340,7 @@ gas fee: 0.000064956 INJ
+ **StringEvent** @@ -2403,6 +2349,7 @@ gas fee: 0.000064956 INJ
+ **EventAttribute** @@ -2412,6 +2359,7 @@ gas fee: 0.000064956 INJ
+ **Attribute** @@ -2648,7 +2596,7 @@ func main() { fmt.Println("simulated order hash", msgCreateSpotMarketOrderResponse.OrderHash) - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg err = chainClient.QueueBroadcastMsg(msg) if err != nil { @@ -2676,6 +2624,7 @@ func main() {
+ **SpotOrder** @@ -2686,6 +2635,7 @@ func main() {
+ **OrderInfo** @@ -2697,6 +2647,7 @@ func main() {
+ **OrderType** @@ -2742,6 +2693,7 @@ gas fee: 0.000065298 INJ
+ **TxResponse** @@ -2761,6 +2713,7 @@ gas fee: 0.000065298 INJ
+ **ABCIMessageLog** @@ -2770,6 +2723,7 @@ gas fee: 0.000065298 INJ
+ **Event** @@ -2778,6 +2732,7 @@ gas fee: 0.000065298 INJ
+ **StringEvent** @@ -2786,6 +2741,7 @@ gas fee: 0.000065298 INJ
+ **EventAttribute** @@ -2795,6 +2751,7 @@ gas fee: 0.000065298 INJ
+ **Attribute** @@ -2969,7 +2926,7 @@ func main() { OrderHash: "0xc1dd07efb7cf3a90c3d09da958fa22d96a5787eba3dbec56b63902c482accbd4", } - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg err = chainClient.QueueBroadcastMsg(msg) if err != nil { @@ -3022,6 +2979,7 @@ gas fee: 0.0000636815 INJ
+ **TxResponse** @@ -3041,6 +2999,7 @@ gas fee: 0.0000636815 INJ
+ **ABCIMessageLog** @@ -3050,6 +3009,7 @@ gas fee: 0.0000636815 INJ
+ **Event** @@ -3058,6 +3018,7 @@ gas fee: 0.0000636815 INJ
+ **StringEvent** @@ -3066,6 +3027,7 @@ gas fee: 0.0000636815 INJ
+ **EventAttribute** @@ -3075,6 +3037,7 @@ gas fee: 0.0000636815 INJ
+ **Attribute** @@ -3421,7 +3384,7 @@ func main() { fmt.Println("simulated derivative order hashes", MsgBatchUpdateOrdersResponse.DerivativeOrderHashes) - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg err = chainClient.QueueBroadcastMsg(msg) if err != nil { @@ -3458,6 +3421,7 @@ func main() {
+ **OrderData** @@ -3469,6 +3433,7 @@ func main() {
+ **SpotOrder** @@ -3479,6 +3444,7 @@ func main() {
+ **DerivativeOrder** @@ -3490,6 +3456,7 @@ func main() {
+ **OrderMask** @@ -3504,6 +3471,7 @@ func main() {
+ **OrderInfo** @@ -3515,6 +3483,7 @@ func main() {
+ **OrderType** @@ -3568,6 +3537,7 @@ gas fee: 0.000329546 INJ
+ **TxResponse** @@ -3587,6 +3557,7 @@ gas fee: 0.000329546 INJ
+ **ABCIMessageLog** @@ -3596,6 +3567,7 @@ gas fee: 0.000329546 INJ
+ **Event** @@ -3604,6 +3576,7 @@ gas fee: 0.000329546 INJ
+ **StringEvent** @@ -3612,6 +3585,7 @@ gas fee: 0.000329546 INJ
+ **EventAttribute** @@ -3621,6 +3595,7 @@ gas fee: 0.000329546 INJ
+ **Attribute** @@ -4034,7 +4009,7 @@ func main() { fmt.Println("computed spot order hashes: ", orderHashes.Spot) fmt.Println("computed derivative order hashes: ", orderHashes.Derivative) - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg err = chainClient.QueueBroadcastMsg(msg, msg1) if err != nil { diff --git a/source/includes/_spotrpc.md b/source/includes/_spotrpc.md index 77908c3a..871b1376 100644 --- a/source/includes/_spotrpc.md +++ b/source/includes/_spotrpc.md @@ -49,7 +49,7 @@ import ( ) func main() { - //network := common.LoadNetwork("mainnet", "k8s") + // network := common.LoadNetwork("mainnet", "k8s") network := common.LoadNetwork("testnet", "lb") exchangeClient, err := exchangeclient.NewExchangeClient(network) if err != nil { @@ -105,7 +105,8 @@ func main() { "takerFeeRate":"0.001", "serviceProviderFee":"0.4", "minPriceTickSize":"0.000000000000001", - "minQuantityTickSize":"1000000000000000" + "minQuantityTickSize":"1000000000000000", + "minNotional": "1000000" } } ``` @@ -130,7 +131,8 @@ func main() { "taker_fee_rate": "0.002", "service_provider_fee": "0.4", "min_price_tick_size": "0.000000000000001", - "min_quantity_tick_size": "1000000000000000" + "min_quantity_tick_size": "1000000000000000", + "min_notional": "1000000" } } ``` @@ -155,6 +157,7 @@ func main() { | quote_denom | String | Coin denom of the quote asset | | taker_fee_rate | String | Defines the fee percentage takers pay (in the quote asset) when trading | | ticker | String | A name of the pair in format AAA/BBB, where AAA is base asset, BBB is quote asset | +| min_notional | String | Defines the minimum required notional for an order to be accepted | **TokenMeta** @@ -220,7 +223,7 @@ import ( ) func main() { - //network := common.LoadNetwork("mainnet", "k8s") + // network := common.LoadNetwork("mainnet", "k8s") network := common.LoadNetwork("testnet", "lb") exchangeClient, err := exchangeclient.NewExchangeClient(network) if err != nil { @@ -287,7 +290,8 @@ func main() { "takerFeeRate":"0.001", "serviceProviderFee":"0.4", "minPriceTickSize":"0.000000000000001", - "minQuantityTickSize":"1000000000000000" + "minQuantityTickSize":"1000000000000000", + "minNotional":"1000000" } ] } @@ -334,7 +338,8 @@ func main() { "taker_fee_rate": "0.002", "service_provider_fee": "0.4", "min_price_tick_size": "0.000000000000001", - "min_quantity_tick_size": "1000000000000000" + "min_quantity_tick_size": "1000000000000000", + "min_notional": "1000000" } ] } @@ -360,6 +365,7 @@ func main() { | quote_denom | String | Coin denom of the quote asset | | taker_fee_rate | String | Defines the fee percentage takers pay (in the quote asset) when trading | | ticker | String | A name of the pair in format AAA/BBB, where AAA is base asset, BBB is quote asset | +| min_notional | String | Defines the minimum required notional for an order to be accepted | **TokenMeta** @@ -445,7 +451,7 @@ import ( ) func main() { - //network := common.LoadNetwork("mainnet", "k8s") + // network := common.LoadNetwork("mainnet", "k8s") network := common.LoadNetwork("testnet", "lb") exchangeClient, err := exchangeclient.NewExchangeClient(network) if err != nil { @@ -512,7 +518,8 @@ func main() { "takerFeeRate":"0.002", "serviceProviderRate":"0.4", "minPriceTickSize":"0.000000000000001", - "minQuantityTickSize":"1000000000000000" + "minQuantityTickSize":"1000000000000000", + "minNotional":"0" }, "operationType":"update", "timestamp":1632535055790 @@ -547,7 +554,8 @@ func main() { "taker_fee_rate": "0.002", "service_provider_fee": "0.4", "min_price_tick_size": "0.000000000000001", - "min_quantity_tick_size": "1000000000000000" + "min_quantity_tick_size": "1000000000000000", + "min_notional": "0", }, "operation_type": "update", "timestamp": 1632535055790 @@ -576,6 +584,7 @@ func main() { | quote_denom | String | Coin denom of the quote asset | | taker_fee_rate | String | Defines the fee percentage takers pay (in the quote asset) when trading | | ticker | String | A name of the pair in format AAA/BBB, where AAA is base asset, BBB is quote asset | +| min_notional | String | Defines the minimum required notional for an order to be accepted | **TokenMeta** @@ -1855,7 +1864,7 @@ import ( ) func main() { - //network := common.LoadNetwork("mainnet", "k8s") + // network := common.LoadNetwork("mainnet", "k8s") network := common.LoadNetwork("testnet", "lb") exchangeClient, err := exchangeclient.NewExchangeClient(network) if err != nil { @@ -2351,7 +2360,7 @@ type MapOrderbook struct { func main() { network := common.LoadNetwork("devnet-1", "") - exchangeClient, err := exchangeclient.NewExchangeClient(network.ExchangeGrpcEndpoint) + exchangeClient, err := exchangeclient.NewExchangeClient(network) if err != nil { fmt.Println(err) panic(err) @@ -2653,7 +2662,7 @@ import ( ) func main() { - //network := common.LoadNetwork("mainnet", "k8s") + // network := common.LoadNetwork("mainnet", "k8s") network := common.LoadNetwork("testnet", "lb") exchangeClient, err := exchangeclient.NewExchangeClient(network) if err != nil { @@ -2882,7 +2891,7 @@ import ( ) func main() { - //network := common.LoadNetwork("mainnet", "k8s") + // network := common.LoadNetwork("mainnet", "k8s") network := common.LoadNetwork("testnet", "lb") exchangeClient, err := exchangeclient.NewExchangeClient(network) if err != nil { diff --git a/source/includes/_staking.md b/source/includes/_staking.md index 5190abc1..eec491a7 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** @@ -1454,7 +1466,7 @@ func main() { WithdrawAddress: withdrawAddress, } - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg response, err := chainClient.AsyncBroadcastMsg(msg) if err != nil { @@ -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** @@ -1672,7 +1690,7 @@ func main() { msg.DelegatorAddress = senderAddress.String() msg.ValidatorAddress = "injvaloper14gy4acwjm96wd20awm9ar6j54lev5p7espy9ug" - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg err = chainClient.QueueBroadcastMsg(msg) if err != nil { @@ -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** @@ -1910,7 +1934,7 @@ func main() { ValidatorAddress: validatorAddress, } - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg response, err := chainClient.AsyncBroadcastMsg(msg) if err != nil { @@ -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** @@ -2072,6 +2102,8 @@ import ( "fmt" "os" + "cosmossdk.io/math" + "github.com/cosmos/cosmos-sdk/types" distriutiontypes "github.com/cosmos/cosmos-sdk/x/distribution/types" @@ -2124,14 +2156,14 @@ func main() { panic(err) } - amount := types.NewCoin("inj", types.NewInt(1)) + amount := types.NewCoin("inj", math.NewInt(1)) msg := &distriutiontypes.MsgFundCommunityPool{ Amount: []types.Coin{amount}, Depositor: senderAddress.String(), } - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg response, err := chainClient.AsyncBroadcastMsg(msg) if err != nil { @@ -2150,6 +2182,7 @@ func main() {
+ **Coin** @@ -2169,6 +2202,7 @@ func main() {
+ **TxResponse** @@ -2188,6 +2222,7 @@ func main() {
+ **ABCIMessageLog** @@ -2197,6 +2232,7 @@ func main() {
+ **Event** @@ -2205,6 +2241,7 @@ func main() {
+ **StringEvent** @@ -2213,6 +2250,7 @@ func main() {
+ **EventAttribute** @@ -2222,6 +2260,7 @@ func main() {
+ **Attribute** @@ -2337,6 +2376,8 @@ import ( "os" "time" + "cosmossdk.io/math" + "github.com/InjectiveLabs/sdk-go/client" "github.com/InjectiveLabs/sdk-go/client/common" @@ -2393,10 +2434,10 @@ func main() { msg.DelegatorAddress = senderAddress.String() msg.ValidatorAddress = "injvaloper14gy4acwjm96wd20awm9ar6j54lev5p7espy9ug" msg.Amount = sdktypes.Coin{ - Denom: "inj", Amount: sdktypes.NewInt(1000000000000000000), // 1 INJ + Denom: "inj", Amount: math.NewInt(1000000000000000000), // 1 INJ } - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg err = chainClient.QueueBroadcastMsg(msg) if err != nil { @@ -2424,6 +2465,7 @@ func main() {
+ **Coin** @@ -2455,6 +2497,7 @@ gas fee: 0.000103923 INJ
+ **TxResponse** @@ -2474,6 +2517,7 @@ gas fee: 0.000103923 INJ
+ **ABCIMessageLog** @@ -2483,6 +2527,7 @@ gas fee: 0.000103923 INJ
+ **Event** @@ -2491,6 +2536,7 @@ gas fee: 0.000103923 INJ
+ **StringEvent** @@ -2499,6 +2545,7 @@ gas fee: 0.000103923 INJ
+ **EventAttribute** @@ -2508,6 +2555,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..b8bbb6ac --- /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
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.
+ + +
+ +**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
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.
+ + +
+ +**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/includes/_tokenfactory.md b/source/includes/_tokenfactory.md index 71c8fad5..40c40f89 100644 --- a/source/includes/_tokenfactory.md +++ b/source/includes/_tokenfactory.md @@ -112,11 +112,10 @@ func main() { ``` - -| Parameter | Type | Description | Required | -| --------- | ------ | ---------------------------- | -------- | -| creator | String | Address of the token creator | Yes | -| sub_denom | String | Token subdenom | No | + + +
ParameterTypeDescriptionRequired
creatorStringThe denom creator addressYes
sub_denomStringThe token subdenomNo
+ ### Response Parameters @@ -135,16 +134,17 @@ func main() { ``` -| Parameter | Type | Description | -| ------------------ | ---------------------- | --------------------- | -| authority_metadata | DenomAuthorityMetadata | Authority metadata | + +
ParameterTypeDescription
authority_metadataDenomAuthorityMetadataThe denom authority information
+ -**DenomAuthorityMetadata** +
-| Parameter | Type | Description | -| --------- | ------ | --------------- | -| admin | String | Admin's address | +**DenomAuthorityMetadata** + +
ParameterTypeDescription
adminStringThe denom admin
+ ## DenomsFromCreator @@ -254,11 +254,9 @@ func main() { ``` - -| Parameter | Type | Description | Required | -| --------- | ------ | ---------------------------- | -------- | -| creator | String | Address of the token creator | Yes | - + +
ParameterTypeDescriptionRequired
creatorStringThe denom creator addressYes
+ ### Response Parameters > Response Example: @@ -354,9 +352,9 @@ func main() { ``` -| Parameter | Type | Description | -| --------- | ------------ | -------------------- | -| denoms | String Array | List of token denoms | + +
ParameterTypeDescription
denomsString ArrayList of denoms
+ ## TokenfactoryModuleState @@ -464,10 +462,7 @@ func main() { ``` - -| Parameter | Type | Description | Required | -| --------- | ---- | ----------- | -------- | -| - | - | - | - | +No parameters ### Response Parameters > Response Example: @@ -555,44 +550,54 @@ func main() { ``` -| Parameter | Type | Description | -| --------- | ------------ | ------------ | -| state | GenesisState | Module state | + +
ParameterTypeDescription
stateGenesisStateThe state details
+ + +
**GenesisState** -| Parameter | Type | Description | -| -------------- | ------------------ | ----------------- | -| params | Params | Module parameters | -| factory_denoms | GenesisDenom Array | Factory tokens | + + +
ParameterTypeDescription
paramsParamsModule parameters
factory_denomsGenesisDenom ArrayModule parameters
+ + +
**Params** -| Parameter | Type | Description | -| ------------------- | ---------- | ----------- | -| denoms_creation_fee | Coin Array | Coins | + +
ParameterTypeDescription
denoms_creation_feeCoin ArrayFee required to create a denom
+ + +
**Coin** -| Parameter | Type | Description | -| --------- | ------ | ------------ | -| denom | String | Token denom | -| amount | String | Token amount | + + +
ParameterTypeDescriptionRequired
denomStringThe token denomYes
amountStringThe amount of tokensYes
+ + +
**GenesisDenom** -| Parameter | Type | Description | -| ------------------ | ---------------------- | ------------------ | -| denom | String | Token denom | -| authority_metadata | DenomAuthorityMetadata | Authority metadata | -| name | String | Token name | -| symbol | String | Token symbol | + + + + +
ParameterTypeDescription
denomStringToken denom
authority_metadataDenomAuthorityMetadataToken authority metadata
nameStringToken name
symbolStringToken symbol
+ + +
**DenomAuthorityMetadata** -| Parameter | Type | Description | -| --------- | ------ | --------------- | -| admin | String | Admin's address | + +
ParameterTypeDescription
adminStringThe denom admin
+ ## CreateDenom @@ -637,7 +642,11 @@ async def main() -> None: address = pub_key.to_address() message = composer.msg_create_denom( - sender=address.to_acc_bech32(), subdenom="inj_test", name="Injective Test Token", symbol="INJTEST" + sender=address.to_acc_bech32(), + subdenom="inj_test", + name="Injective Test Token", + symbol="INJTEST", + decimals=18, ) # broadcast the transaction @@ -715,8 +724,9 @@ func main() { message.Subdenom = "inj_test" message.Name = "Injective Test Token" message.Symbol = "INJTEST" + message.Decimals = 18 - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg response, err := chainClient.AsyncBroadcastMsg(message) if err != nil { @@ -729,12 +739,13 @@ func main() { ``` - -| Parameter | Type | Description | Required | -| --------- | ------ | ------------------ | -------- | -| subdenom | String | New token subdenom | Yes | -| name | String | New token name | Yes | -| symbol | String | New token symbol | Yes | + + + + + +
ParameterTypeDescriptionRequired
senderStringSender Injective addressYes
subdenomStringNew token subdenomYes
nameStringNew token nameYes
symbolStringNew token symbolYes
decimalsIntegerNumber of decimals use to represent token amount on chainYes
+ ### Response Parameters > Response Example: @@ -745,6 +756,77 @@ func main() { ``` go ``` + +
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
+ + ## MsgMint @@ -815,6 +897,8 @@ import ( "fmt" "os" + "cosmossdk.io/math" + tokenfactorytypes "github.com/InjectiveLabs/sdk-go/chain/tokenfactory/types" "github.com/InjectiveLabs/sdk-go/client" chainclient "github.com/InjectiveLabs/sdk-go/client/chain" @@ -869,10 +953,10 @@ func main() { message.Sender = senderAddress.String() message.Amount = sdktypes.Coin{ Denom: "factory/inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r/inj_test", - Amount: sdktypes.NewInt(1000000000), + Amount: math.NewInt(1000000000), } - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg response, err := chainClient.AsyncBroadcastMsg(message) if err != nil { @@ -885,18 +969,19 @@ func main() { ``` + + +
ParameterTypeDescriptionRequired
senderStringSender Injective addressYes
amountCoinAmount to mintYes
+ -| Parameter | Type | Description | Required | -| --------- | ------ | ---------------- | -------- | -| sender | String | Sender address | Yes | -| amount | Coin | Amount to mint | Yes | +
**Coin** -| Parameter | Type | Description | -| --------- | ------ | ------------ | -| denom | String | Token denom | -| amount | String | Token amount | + + +
ParameterTypeDescriptionRequired
denomStringThe token denomYes
amountStringThe amount of tokensYes
+ ### Response Parameters > Response Example: @@ -907,6 +992,77 @@ func main() { ``` go ``` + +
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
+ + ## MsgBurn @@ -977,6 +1133,8 @@ import ( "fmt" "os" + "cosmossdk.io/math" + tokenfactorytypes "github.com/InjectiveLabs/sdk-go/chain/tokenfactory/types" "github.com/InjectiveLabs/sdk-go/client" chainclient "github.com/InjectiveLabs/sdk-go/client/chain" @@ -1031,10 +1189,10 @@ func main() { message.Sender = senderAddress.String() message.Amount = sdktypes.Coin{ Denom: "factory/inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r/inj_test", - Amount: sdktypes.NewInt(100), + Amount: math.NewInt(100), } - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg response, err := chainClient.AsyncBroadcastMsg(message) if err != nil { @@ -1047,18 +1205,19 @@ func main() { ``` + + +
ParameterTypeDescriptionRequired
senderStringSender Injective addressYes
amountCoinAmount to burnYes
+ -| Parameter | Type | Description | Required | -| --------- | ------ | ---------------- | -------- | -| sender | String | Sender address | Yes | -| amount | Coin | Amount to burn | Yes | +
**Coin** -| Parameter | Type | Description | -| --------- | ------ | ------------ | -| denom | String | Token denom | -| amount | String | Token amount | + + +
ParameterTypeDescriptionRequired
denomStringThe token denomYes
amountStringThe amount of tokensYes
+ ### Response Parameters > Response Example: @@ -1069,6 +1228,77 @@ func main() { ``` go ``` + +
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
+ + ## MsgSetDenomMetadata @@ -1228,13 +1458,14 @@ func main() { Symbol: "INJTEST", URI: "http://injective-test.com/icon.jpg", URIHash: "", + Decimals: tokenDecimals, } message := new(tokenfactorytypes.MsgSetDenomMetadata) message.Sender = senderAddress.String() message.Metadata = metadata - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg response, err := chainClient.AsyncBroadcastMsg(message) if err != nil { @@ -1247,32 +1478,36 @@ func main() { ``` + + +
ParameterTypeDescriptionRequired
senderStringSender Injective addressYes
metadataMetadataToken metadataYes
+ -| Parameter | Type | Description | Required | -| --------- | -------- | -------------- | -------- | -| sender | String | Sender address | Yes | -| metadata | Metadata | Token metadata | Yes | +
**Metadata** -| Parameter | Type | Description | -| ----------- | --------------- | --------------------------------------------------------------------- | -| description | String | Token description | -| denom_units | DenomUnit Array | Token units | -| base | String | Token denom | -| display | String | Suggested denom that should be displayed in clients | -| name | String | Token name | -| symbol | String | Token symbol | -| uri | String | URI to a document that contains additional information. Can be empty. | -| uri_hash | String | SHA256 hash of the document pointed by URI. Can be empty. | + + + + + + + + + +
ParameterTypeDescription
descriptionStringToken description
denom_unitsDenomUnit ArrayAll token units
baseStringThe base token denom
displayStringSuggested denom that should be displayed in clients
nameStringToken name
symbolStringToken symbol
uriStringURI to a document (on or off-chain) that contains additional information. Optional
uri_hashStringURIHash is a sha256 hash of a document pointed by URI. It's used to verify that the document didn't change. Optional
decimalsIntegerNumber of decimals use to represent token amount on chain
+ + +
**DenomUnit** -| Parameter | Type | Description | -| --------- | ------------ | ------------------------------------------------------------------------------------------------------------ | -| denom | String | Name of the denom unit | -| exponent | Int | Exponent (power of 10) that one must raise the base_denom to when translating the denom unit to chain format | -| aliases | String Array | List of aliases for the denom | + + + +
ParameterTypeDescription
denomStringName of the denom unit
exponentIntegerExponent represents power of 10 exponent that one must raise the base_denom to in order to equal the given DenomUnit's denom 1 denom = 10^exponent base_denom (e.g. with a base_denom of uatom, one can create a DenomUnit of 'atom' with exponent = 6, thus: 1 atom = 10^6 uatom)
aliasesString ArrayList of aliases for the denom
+ ### Response Parameters @@ -1284,6 +1519,77 @@ func main() { ``` go ``` + +
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
+ + ## MsgChangeAdmin @@ -1408,7 +1714,7 @@ func main() { // This is the zero address to remove admin permissions message.NewAdmin = "inj1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqe2hm49" - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg response, err := chainClient.AsyncBroadcastMsg(message) if err != nil { @@ -1421,11 +1727,11 @@ func main() { ``` -| Parameter | Type | Description | Required | -| ---------- | ------ | ----------------- | -------- | -| sender | String | Sender address | Yes | -| denom | String | Token denom | Yes | -| new_admint | String | New admin address | Yes | + + + +
ParameterTypeDescriptionRequired
senderStringSender Injective addressYes
denomStringToken denomYes
new_adminStringNew admin Injective addressYes
+ ### Response Parameters > Response Example: @@ -1435,3 +1741,73 @@ func main() { ``` go ``` + +
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
+ diff --git a/source/includes/_wasm.md b/source/includes/_wasm.md index 91855481..8639ba0e 100644 --- a/source/includes/_wasm.md +++ b/source/includes/_wasm.md @@ -1835,6 +1835,78 @@ gas wanted: 217930 gas fee: 0.000108965 INJ ``` + +
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
+ + + ## MsgExecuteContract (second example) This example shows how to interact with a contract to execute the `guardian_set_info` functionality using the `post_message` method in the contract. The parameter sent to the `post_message` function has to be encoded in Base64 format. @@ -1945,3 +2017,74 @@ raw_log: "[]" gas wanted: 139666 gas fee: 0.000069833 INJ ``` + + +
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
+ diff --git a/source/includes/_wasmx.md b/source/includes/_wasmx.md index 7c7a2676..02257ff0 100644 --- a/source/includes/_wasmx.md +++ b/source/includes/_wasmx.md @@ -187,7 +187,7 @@ func main() { Funds: funds, } - //AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg + // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg response, err := chainClient.AsyncBroadcastMsg(&message) if err != nil { @@ -215,3 +215,74 @@ func main() { ``` go ``` + + +
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
+ diff --git a/source/index.html.md b/source/index.html.md index 76cd85f0..f8ff6f6d 100644 --- a/source/index.html.md +++ b/source/index.html.md @@ -36,9 +36,15 @@ includes: - derivatives - spot - binaryoptions + - ibccorechannel + - ibccoreclient + - ibccoreconnection + - ibctransfer - insurance - oracle + - permissions - staking + - tendermint - tokenfactory - wasm - wasmx @@ -46,7 +52,6 @@ includes: - healthapi - glossary - faq - # - chronosrpc - errors search: true diff --git a/source/json_tables/chain/auction/msgBid.json b/source/json_tables/chain/auction/msgBid.json new file mode 100644 index 00000000..d89783e8 --- /dev/null +++ b/source/json_tables/chain/auction/msgBid.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "sender", "Type": "String", "Description": "The sender Injective address", "Required": "Yes"}, + {"Parameter": "bid_amount", "Type": "Coin", "Description": "Bid amount in INJ tokens", "Required": "Yes"}, + {"Parameter": "round", "Type": "Integer", "Description": "The current auction round", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/chain/authInfo.json b/source/json_tables/chain/authInfo.json new file mode 100644 index 00000000..b5577500 --- /dev/null +++ b/source/json_tables/chain/authInfo.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "signer_infos", "Type": "SignerInfo Array", "Description": "Defines the signing modes for the required signers. The number and order of elements must match the required signers from TxBody's messages. The first element is the primary signer and the one which pays the fee"}, + {"Parameter": "fee", "Type": "Fee", "Description": "Fee is the fee and gas limit for the transaction. The first signer is the primary signer and the one which pays the fee. The fee can be calculated based on the cost of evaluating the body and doing signature verification of the signers. This can be estimated via simulation"}, + {"Parameter": "tip", "Type": "Tip", "Description": "Tip is the optional tip used for transactions fees paid in another denom (this field is ignored if the chain didn't enable tips, i.e. didn't add the `TipDecorator` in its posthandler)"} +] \ No newline at end of file diff --git a/source/json_tables/chain/bank/denomUnit.json b/source/json_tables/chain/bank/denomUnit.json new file mode 100644 index 00000000..fc4e6ce3 --- /dev/null +++ b/source/json_tables/chain/bank/denomUnit.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "denom", "Type": "String", "Description": "Name of the denom unit"}, + {"Parameter": "exponent", "Type": "Integer", "Description": "Exponent represents power of 10 exponent that one must raise the base_denom to in order to equal the given DenomUnit's denom 1 denom = 10^exponent base_denom (e.g. with a base_denom of uatom, one can create a DenomUnit of 'atom' with exponent = 6, thus: 1 atom = 10^6 uatom)"}, + {"Parameter": "aliases", "Type": "String Array", "Description": "List of aliases for the denom"} +] \ No newline at end of file diff --git a/source/json_tables/chain/bank/metadata.json b/source/json_tables/chain/bank/metadata.json new file mode 100644 index 00000000..ec41e249 --- /dev/null +++ b/source/json_tables/chain/bank/metadata.json @@ -0,0 +1,11 @@ +[ + {"Parameter": "description", "Type": "String", "Description": "Token description"}, + {"Parameter": "denom_units", "Type": "DenomUnit Array", "Description": "All token units"}, + {"Parameter": "base", "Type": "String", "Description": "The base token denom"}, + {"Parameter": "display", "Type": "String", "Description": "Suggested denom that should be displayed in clients"}, + {"Parameter": "name", "Type": "String", "Description": "Token name"}, + {"Parameter": "symbol", "Type": "String", "Description": "Token symbol"}, + {"Parameter": "uri", "Type": "String", "Description": "URI to a document (on or off-chain) that contains additional information. Optional"}, + {"Parameter": "uri_hash", "Type": "String", "Description": "URIHash is a sha256 hash of a document pointed by URI. It's used to verify that the document didn't change. Optional"}, + {"Parameter": "decimals", "Type": "Integer", "Description": "Number of decimals use to represent token amount on chain"} +] \ No newline at end of file diff --git a/source/json_tables/chain/exchange/adminPermission.json b/source/json_tables/chain/exchange/adminPermission.json new file mode 100644 index 00000000..8d05d3e9 --- /dev/null +++ b/source/json_tables/chain/exchange/adminPermission.json @@ -0,0 +1,8 @@ +[ + {"Code": "1", "Name": "Ticker Permission"}, + {"Code": "2", "Name": "Min Price Tick Size Permission"}, + {"Code": "4", "Name": "Min Quantity Tick Size Permission"}, + {"Code": "8", "Name": "Min Notional Permission"}, + {"Code": "16", "Name": "Initial Margin Ratio Permission"}, + {"Code": "32", "Name": "Maintenance Margin Ratio Permission"} +] \ No newline at end of file diff --git a/source/json_tables/chain/exchange/binaryOptionsMarket.json b/source/json_tables/chain/exchange/binaryOptionsMarket.json index 91d3bab7..869cc28f 100644 --- a/source/json_tables/chain/exchange/binaryOptionsMarket.json +++ b/source/json_tables/chain/exchange/binaryOptionsMarket.json @@ -15,5 +15,7 @@ {"Parameter": "status", "Type": "MarketStatus", "Description": "Status of the market"}, {"Parameter": "min_price_tick_size", "Type": "Decimal", "Description": "Minimum tick size that the price required for orders in the market"}, {"Parameter": "min_quantity_tick_size", "Type": "Decimal", "Description": "Minimum tick size of the quantity required for orders in the market"}, - {"Parameter": "settlement_price", "Type": "Decimal", "Description": "The market's settlement price"} + {"Parameter": "settlement_price", "Type": "Decimal", "Description": "The market's settlement price"}, + {"Parameter": "min_notional", "Type": "Decimal", "Description": "Minimum notional (in quote asset) required for orders in the market"}, + {"Parameter": "admin_permissions", "Type": "Integer", "Description": "Level of admin permissions (the permission number is a result of adding up all individual permissions numbers)"} ] \ No newline at end of file diff --git a/source/json_tables/chain/exchange/derivativeMarket.json b/source/json_tables/chain/exchange/derivativeMarket.json index 00ceca21..f93b9671 100644 --- a/source/json_tables/chain/exchange/derivativeMarket.json +++ b/source/json_tables/chain/exchange/derivativeMarket.json @@ -14,5 +14,8 @@ {"Parameter": "is_perpetual", "Type": "Boolean", "Description": "True if the market is a perpetual market. False if the market is an expiry futures market"}, {"Parameter": "status", "Type": "MarketStatus", "Description": "Status of the market"}, {"Parameter": "min_price_tick_size", "Type": "Decimal", "Description": "Minimum tick size that the price required for orders in the market"}, - {"Parameter": "min_quantity_tick_size", "Type": "Decimal", "Description": "Minimum tick size of the quantity required for orders in the market"} + {"Parameter": "min_quantity_tick_size", "Type": "Decimal", "Description": "Minimum tick size of the quantity required for orders in the market"}, + {"Parameter": "min_notional", "Type": "Decimal", "Description": "Minimum notional (in quote asset) required for orders in the market"}, + {"Parameter": "admin", "Type": "String", "Description": "Current market admin's address"}, + {"Parameter": "admin_permissions", "Type": "Integer", "Description": "Level of admin permissions (the permission number is a result of adding up all individual permissions numbers)"} ] \ No newline at end of file diff --git a/source/json_tables/chain/exchange/msgInstantBinaryOptionsMarketLaunch.json b/source/json_tables/chain/exchange/msgInstantBinaryOptionsMarketLaunch.json index 319ba1c7..cebb88d3 100644 --- a/source/json_tables/chain/exchange/msgInstantBinaryOptionsMarketLaunch.json +++ b/source/json_tables/chain/exchange/msgInstantBinaryOptionsMarketLaunch.json @@ -12,5 +12,6 @@ {"Parameter": "admin", "Type": "String", "Description": "The market's admin address", "Required": "Yes"}, {"Parameter": "quote_denom", "Type": "String", "Description": "Quote tocken denom", "Required": "Yes"}, {"Parameter": "min_price_tick_size", "Type": "Decimal", "Description": "Defines the minimum tick size of the order's price", "Required": "Yes"}, - {"Parameter": "min_quantity_tick_size", "Type": "Decimal", "Description": "Defines the minimum tick size of the order's quantity", "Required": "Yes"} + {"Parameter": "min_quantity_tick_size", "Type": "Decimal", "Description": "Defines the minimum tick size of the order's quantity", "Required": "Yes"}, + {"Parameter": "min_notional", "Type": "Decimal", "Description": "Defines the minimum notional (in quote asset) required for orders in the market", "Required": "Yes"} ] \ No newline at end of file diff --git a/source/json_tables/chain/exchange/msgInstantExpiryFuturesMarketLaunch.json b/source/json_tables/chain/exchange/msgInstantExpiryFuturesMarketLaunch.json index f1ed758e..2d8b8b09 100644 --- a/source/json_tables/chain/exchange/msgInstantExpiryFuturesMarketLaunch.json +++ b/source/json_tables/chain/exchange/msgInstantExpiryFuturesMarketLaunch.json @@ -12,6 +12,6 @@ {"Parameter": "initial_margin_ratio", "Type": "Decimal", "Description": "Defines the initial margin ratio for the perpetual market", "Required": "Yes"}, {"Parameter": "maintenance_margin_ratio", "Type": "Decimal", "Description": "Defines the maintenance margin ratio for the perpetual market", "Required": "Yes"}, {"Parameter": "min_price_tick_size", "Type": "Decimal", "Description": "Defines the minimum tick size of the order's price", "Required": "Yes"}, - {"Parameter": "min_quantity_tick_size", "Type": "Decimal", "Description": "Defines the minimum tick size of the order's quantity", "Required": "Yes"} - + {"Parameter": "min_quantity_tick_size", "Type": "Decimal", "Description": "Defines the minimum tick size of the order's quantity", "Required": "Yes"}, + {"Parameter": "min_notional", "Type": "Decimal", "Description": "Defines the minimum notional (in quote asset) required for orders in the market", "Required": "Yes"} ] \ No newline at end of file diff --git a/source/json_tables/chain/exchange/msgInstantPerpetualMarketLaunch.json b/source/json_tables/chain/exchange/msgInstantPerpetualMarketLaunch.json index 68727a4e..daf4e305 100644 --- a/source/json_tables/chain/exchange/msgInstantPerpetualMarketLaunch.json +++ b/source/json_tables/chain/exchange/msgInstantPerpetualMarketLaunch.json @@ -11,6 +11,6 @@ {"Parameter": "initial_margin_ratio", "Type": "Decimal", "Description": "Defines the initial margin ratio for the perpetual market", "Required": "Yes"}, {"Parameter": "maintenance_margin_ratio", "Type": "Decimal", "Description": "Defines the maintenance margin ratio for the perpetual market", "Required": "Yes"}, {"Parameter": "min_price_tick_size", "Type": "Decimal", "Description": "Defines the minimum tick size of the order's price", "Required": "Yes"}, - {"Parameter": "min_quantity_tick_size", "Type": "Decimal", "Description": "Defines the minimum tick size of the order's quantity", "Required": "Yes"} - + {"Parameter": "min_quantity_tick_size", "Type": "Decimal", "Description": "Defines the minimum tick size of the order's quantity", "Required": "Yes"}, + {"Parameter": "min_notional", "Type": "Decimal", "Description": "Defines the minimum notional (in quote asset) required for orders in the market", "Required": "Yes"} ] \ No newline at end of file diff --git a/source/json_tables/chain/exchange/msgInstantSpotMarketLaunch.json b/source/json_tables/chain/exchange/msgInstantSpotMarketLaunch.json index 0a622df5..c2a14109 100644 --- a/source/json_tables/chain/exchange/msgInstantSpotMarketLaunch.json +++ b/source/json_tables/chain/exchange/msgInstantSpotMarketLaunch.json @@ -4,6 +4,6 @@ {"Parameter": "base_denom", "Type": "String", "Description": "Base tocken denom", "Required": "Yes"}, {"Parameter": "quote_denom", "Type": "String", "Description": "Quote tocken denom", "Required": "Yes"}, {"Parameter": "min_price_tick_size", "Type": "Decimal", "Description": "Defines the minimum tick size of the order's price", "Required": "Yes"}, - {"Parameter": "min_quantity_tick_size", "Type": "Decimal", "Description": "Defines the minimum tick size of the order's quantity", "Required": "Yes"} - + {"Parameter": "min_quantity_tick_size", "Type": "Decimal", "Description": "Defines the minimum tick size of the order's quantity", "Required": "Yes"}, + {"Parameter": "min_notional", "Type": "Decimal", "Description": "Defines the minimum notional (in quote asset) required for orders in the market", "Required": "Yes"} ] \ No newline at end of file diff --git a/source/json_tables/chain/exchange/spotMarket.json b/source/json_tables/chain/exchange/spotMarket.json index 9239a873..86cd9695 100644 --- a/source/json_tables/chain/exchange/spotMarket.json +++ b/source/json_tables/chain/exchange/spotMarket.json @@ -8,5 +8,8 @@ {"Parameter": "market_id", "Type": "String", "Description": "The market ID"}, {"Parameter": "status", "Type": "MarketStatus", "Description": "Status of the market"}, {"Parameter": "min_price_tick_size", "Type": "Decimal", "Description": "Minimum tick size that the price required for orders in the market"}, - {"Parameter": "min_quantity_tick_size", "Type": "Decimal", "Description": "Minimum tick size of the quantity required for orders in the market"} + {"Parameter": "min_quantity_tick_size", "Type": "Decimal", "Description": "Minimum tick size of the quantity required for orders in the market"}, + {"Parameter": "min_notional", "Type": "Decimal", "Description": "Minimum notional (in quote asset) required for orders in the market"}, + {"Parameter": "admin", "Type": "String", "Description": "Current market admin's address"}, + {"Parameter": "admin_permissions", "Type": "Integer", "Description": "Level of admin permissions (the permission number is a result of adding up all individual permissions numbers)"} ] \ No newline at end of file diff --git a/source/json_tables/chain/exchange/subaccountOrder.json b/source/json_tables/chain/exchange/subaccountOrder.json index 4d4410b2..4b795a28 100644 --- a/source/json_tables/chain/exchange/subaccountOrder.json +++ b/source/json_tables/chain/exchange/subaccountOrder.json @@ -1,5 +1,6 @@ [ {"Parameter": "price", "Type": "Decimal", "Description": "Order price"}, {"Parameter": "quantity", "Type": "Decimal", "Description": "The amount of the order quantity remaining fillable"}, - {"Parameter": "is_reduce_only", "Type": "Boolean", "Description": "True if the order is a reduce only order"} + {"Parameter": "is_reduce_only", "Type": "Boolean", "Description": "True if the order is a reduce only order"}, + {"Parameter": "cid", "Type": "String", "Description": "The client order ID provided by the creator"} ] \ No newline at end of file diff --git a/source/json_tables/chain/exchange/trimmedDerivativeConditionalOrder.json b/source/json_tables/chain/exchange/trimmedDerivativeConditionalOrder.json index 69a39dd0..13c9393f 100644 --- a/source/json_tables/chain/exchange/trimmedDerivativeConditionalOrder.json +++ b/source/json_tables/chain/exchange/trimmedDerivativeConditionalOrder.json @@ -5,5 +5,6 @@ {"Parameter": "trigger_price", "Type": "OracleType", "Description": "Price to trigger the order"}, {"Parameter": "is_buy", "Type": "Boolean", "Description": "True if the order is a buy order. False otherwise."}, {"Parameter": "is_limit", "Type": "Boolean", "Description": "True if the order is a limit order. False otherwise."}, - {"Parameter": "order_hash", "Type": "String", "Description": "The order hash"} + {"Parameter": "order_hash", "Type": "String", "Description": "The order hash"}, + {"Parameter": "cid", "Type": "String", "Description": "The client order ID provided by the creator"} ] \ No newline at end of file diff --git a/source/json_tables/chain/exchange/trimmedDerivativeLimitOrder.json b/source/json_tables/chain/exchange/trimmedDerivativeLimitOrder.json index cd829093..5554b5d8 100644 --- a/source/json_tables/chain/exchange/trimmedDerivativeLimitOrder.json +++ b/source/json_tables/chain/exchange/trimmedDerivativeLimitOrder.json @@ -4,5 +4,6 @@ {"Parameter": "margin", "Type": "Decimal", "Description": "Order margin"}, {"Parameter": "fillable", "Type": "Decimal", "Description": "The remaining fillable amount of the order"}, {"Parameter": "is_buy", "Type": "Boolean", "Description": "True if the order is a buy order"}, - {"Parameter": "order_hash", "Type": "String", "Description": "The order hash"} + {"Parameter": "order_hash", "Type": "String", "Description": "The order hash"}, + {"Parameter": "cid", "Type": "String", "Description": "The client order ID provided by the creator"} ] \ No newline at end of file diff --git a/source/json_tables/chain/exchange/trimmedSpotLimitOrder.json b/source/json_tables/chain/exchange/trimmedSpotLimitOrder.json index b7ffa731..63f4e12b 100644 --- a/source/json_tables/chain/exchange/trimmedSpotLimitOrder.json +++ b/source/json_tables/chain/exchange/trimmedSpotLimitOrder.json @@ -3,5 +3,6 @@ {"Parameter": "quantity", "Type": "Decimal", "Description": "Order quantity"}, {"Parameter": "fillable", "Type": "Decimal", "Description": "The remaining fillable amount of the order"}, {"Parameter": "is_buy", "Type": "Boolean", "Description": "True if the order is a buy order"}, - {"Parameter": "order_hash", "Type": "String", "Description": "The order hash"} + {"Parameter": "order_hash", "Type": "String", "Description": "The order hash"}, + {"Parameter": "cid", "Type": "String", "Description": "The client order ID provided by the creator"} ] \ No newline at end of file diff --git a/source/json_tables/chain/fee.json b/source/json_tables/chain/fee.json new file mode 100644 index 00000000..a6001f89 --- /dev/null +++ b/source/json_tables/chain/fee.json @@ -0,0 +1,6 @@ +[ + {"Parameter": "amount", "Type": "Coin Array", "Description": "Amount of coins to be paid as a fee"}, + {"Parameter": "gas_limit", "Type": "Integer", "Description": "Maximum gas that can be used in transaction processing before an out of gas error occurs"}, + {"Parameter": "payer", "Type": "String", "Description": "If unset, the first signer is responsible for paying the fees. If set, the specified account must pay the fees. The payer must be a tx signer (and thus have signed this field in AuthInfo). Setting this field does *not* change the ordering of required signers for the transaction"}, + {"Parameter": "granter", "Type": "String", "Description": "If set, the fee payer (either the first signer or the value of the payer field) requests that a fee grant be used to pay fees instead of the fee payer's own balance. If an appropriate fee grant does not exist or the chain does not support fee grants, this will fail"} +] \ No newline at end of file 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..3302a2c8 --- /dev/null +++ b/source/json_tables/chain/ibc/core/channel/channel.json @@ -0,0 +1,8 @@ +[ + {"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": "upgrade_sequence", "Type": "Integer", "Description": "Indicates the latest upgrade attempt performed by this channel. The value of 0 indicates the channel has never been upgraded"} +] \ 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..07830c14 --- /dev/null +++ b/source/json_tables/chain/ibc/core/channel/identifiedChannel.json @@ -0,0 +1,10 @@ +[ + {"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"}, + {"Parameter": "upgrade_sequence", "Type": "Integer", "Description": "Indicates the latest upgrade attempt performed by this channel. The value of 0 indicates the channel has never been upgraded"} +] \ 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/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 diff --git a/source/json_tables/chain/ibc/core/connection/connectionEnd.json b/source/json_tables/chain/ibc/core/connection/connectionEnd.json new file mode 100644 index 00000000..5bc39a50 --- /dev/null +++ b/source/json_tables/chain/ibc/core/connection/connectionEnd.json @@ -0,0 +1,7 @@ +[ + {"Parameter": "client_id", "Type": "String", "Description": "Client associated with this connection"}, + {"Parameter": "versions", "Type": "Version String", "Description": "Channel identifier"}, + {"Parameter": "state", "Type": "State", "Description": "Current state of the connection end"}, + {"Parameter": "counterparty", "Type": "Counterparty", "Description": "Counterparty chain associated with this connection"}, + {"Parameter": "delay_period", "Type": "Integer", "Description": "Delay period that must pass before a consensus state can be used for packet-verification NOTE: delay period logic is only implemented by some clients"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/connection/counterparty.json b/source/json_tables/chain/ibc/core/connection/counterparty.json new file mode 100644 index 00000000..9d723d69 --- /dev/null +++ b/source/json_tables/chain/ibc/core/connection/counterparty.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "client_id", "Type": "String", "Description": "Identifies the client on the counterparty chain associated with a given connection"}, + {"Parameter": "connection_id", "Type": "String", "Description": "Identifies the connection end on the counterparty chain associated with a given connection"}, + {"Parameter": "prefix", "Type": "MarketPrefix", "Description": "Commitment merkle prefix of the counterparty chain"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/connection/identifiedConnection.json b/source/json_tables/chain/ibc/core/connection/identifiedConnection.json new file mode 100644 index 00000000..d78ec642 --- /dev/null +++ b/source/json_tables/chain/ibc/core/connection/identifiedConnection.json @@ -0,0 +1,8 @@ +[ + {"Parameter": "id", "Type": "String", "Description": "Connection identifier"}, + {"Parameter": "client_id", "Type": "String", "Description": "Client associated with this connection"}, + {"Parameter": "versions", "Type": "Version String", "Description": "IBC version which can be utilised to determine encodings or protocols for channels or packets utilising this connection"}, + {"Parameter": "state", "Type": "State", "Description": "Current state of the connection end"}, + {"Parameter": "counterparty", "Type": "Counterparty", "Description": "Counterparty chain associated with this connection"}, + {"Parameter": "delay_period", "Type": "Integer", "Description": "Delay period associated with this connection"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/connection/params.json b/source/json_tables/chain/ibc/core/connection/params.json new file mode 100644 index 00000000..1f4f0a82 --- /dev/null +++ b/source/json_tables/chain/ibc/core/connection/params.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "max_expected_time_per_block", "Type": "Integer", "Description": "Maximum expected time per block (in nanoseconds), used to enforce block delay. This parameter should reflect the largest amount of time that the chain might reasonably take to produce the next block under normal operating conditions. A safe choice is 3-5x the expected time per block"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/connection/queryClientConnectionsRequest.json b/source/json_tables/chain/ibc/core/connection/queryClientConnectionsRequest.json new file mode 100644 index 00000000..a57b0d25 --- /dev/null +++ b/source/json_tables/chain/ibc/core/connection/queryClientConnectionsRequest.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "client_id", "Type": "String", "Description": "Client identifier associated with a connection", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/connection/queryClientConnectionsResponse.json b/source/json_tables/chain/ibc/core/connection/queryClientConnectionsResponse.json new file mode 100644 index 00000000..3706bffb --- /dev/null +++ b/source/json_tables/chain/ibc/core/connection/queryClientConnectionsResponse.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "connection_paths", "Type": "String Array", "Description": "All the connection paths associated with a client"}, + {"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/connection/queryConnectionClientStateRequest.json b/source/json_tables/chain/ibc/core/connection/queryConnectionClientStateRequest.json new file mode 100644 index 00000000..607bb7a4 --- /dev/null +++ b/source/json_tables/chain/ibc/core/connection/queryConnectionClientStateRequest.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "connection_id", "Type": "String", "Description": "Connection identifier", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/connection/queryConnectionClientStateResponse.json b/source/json_tables/chain/ibc/core/connection/queryConnectionClientStateResponse.json new file mode 100644 index 00000000..84cfd56f --- /dev/null +++ b/source/json_tables/chain/ibc/core/connection/queryConnectionClientStateResponse.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "identified_client_state", "Type": "IdentifiedClientState", "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/connection/queryConnectionConsensusStateRequest.json b/source/json_tables/chain/ibc/core/connection/queryConnectionConsensusStateRequest.json new file mode 100644 index 00000000..dae3ecd6 --- /dev/null +++ b/source/json_tables/chain/ibc/core/connection/queryConnectionConsensusStateRequest.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "connection_id", "Type": "String", "Description": "Connection 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/connection/queryConnectionConsensusStateResponse.json b/source/json_tables/chain/ibc/core/connection/queryConnectionConsensusStateResponse.json new file mode 100644 index 00000000..906bb992 --- /dev/null +++ b/source/json_tables/chain/ibc/core/connection/queryConnectionConsensusStateResponse.json @@ -0,0 +1,6 @@ +[ + {"Parameter": "consensus_state", "Type": "Any", "Description": "Consensus state associated with the channel"}, + {"Parameter": "client_id", "Type": "String", "Description": "Client identifier 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/connection/queryConnectionParamsResponse.json b/source/json_tables/chain/ibc/core/connection/queryConnectionParamsResponse.json new file mode 100644 index 00000000..2271813c --- /dev/null +++ b/source/json_tables/chain/ibc/core/connection/queryConnectionParamsResponse.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/connection/queryConnectionRequest.json b/source/json_tables/chain/ibc/core/connection/queryConnectionRequest.json new file mode 100644 index 00000000..7955649f --- /dev/null +++ b/source/json_tables/chain/ibc/core/connection/queryConnectionRequest.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "connection_id", "Type": "String", "Description": "Connection unique identifier", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/connection/queryConnectionResponse.json b/source/json_tables/chain/ibc/core/connection/queryConnectionResponse.json new file mode 100644 index 00000000..ca2ed149 --- /dev/null +++ b/source/json_tables/chain/ibc/core/connection/queryConnectionResponse.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "connection", "Type": "ConnectionEnd", "Description": "Connection 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/connection/queryConnectionsRequest.json b/source/json_tables/chain/ibc/core/connection/queryConnectionsRequest.json new file mode 100644 index 00000000..9da294d1 --- /dev/null +++ b/source/json_tables/chain/ibc/core/connection/queryConnectionsRequest.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/connection/queryConnectionsResponse.json b/source/json_tables/chain/ibc/core/connection/queryConnectionsResponse.json new file mode 100644 index 00000000..c0ddbb07 --- /dev/null +++ b/source/json_tables/chain/ibc/core/connection/queryConnectionsResponse.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "connections", "Type": "IdentifiedConnection Array", "Description": "Connection associated with the request identifier"}, + {"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/connection/state.json b/source/json_tables/chain/ibc/core/connection/state.json new file mode 100644 index 00000000..e9130dde --- /dev/null +++ b/source/json_tables/chain/ibc/core/connection/state.json @@ -0,0 +1,6 @@ +[ + {"Code": "0", "Name": "STATE_UNINITIALIZED_UNSPECIFIED"}, + {"Code": "1", "Name": "STATE_INIT"}, + {"Code": "2", "Name": "STATE_TRYOPEN"}, + {"Code": "3", "Name": "STATE_OPEN"} +] \ No newline at end of file diff --git a/source/json_tables/chain/ibc/core/connection/version.json b/source/json_tables/chain/ibc/core/connection/version.json new file mode 100644 index 00000000..e0564e4d --- /dev/null +++ b/source/json_tables/chain/ibc/core/connection/version.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "identifier", "Type": "String", "Description": "Unique version identifier"}, + {"Parameter": "features", "Type": "String Array", "Description": "List of features compatible with the specified identifier"} +] \ No newline at end of file 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/core/merklePrefix.json b/source/json_tables/chain/ibc/core/merklePrefix.json new file mode 100644 index 00000000..04744293 --- /dev/null +++ b/source/json_tables/chain/ibc/core/merklePrefix.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "key_prefix", "Type": "Byte Array", "Description": "Merkle path prefixed to the key"} +] \ 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 diff --git a/source/json_tables/chain/modeInfo.json b/source/json_tables/chain/modeInfo.json new file mode 100644 index 00000000..72784fe7 --- /dev/null +++ b/source/json_tables/chain/modeInfo.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "sum", "Type": "Signing mode", "Description": "Types that are valid to be assigned to Sum: *ModeInfo_Single_, *ModeInfo_Multi_"} +] \ No newline at end of file diff --git a/source/json_tables/chain/peggy/msgSendToEth.json b/source/json_tables/chain/peggy/msgSendToEth.json new file mode 100644 index 00000000..a6c70fe1 --- /dev/null +++ b/source/json_tables/chain/peggy/msgSendToEth.json @@ -0,0 +1,6 @@ +[ + {"Parameter": "sender", "Type": "String", "Description": "The sender's address", "Required": "Yes"}, + {"Parameter": "eth_dest", "Type": "String", "Description": "Destination Ethereum address", "Required": "Yes"}, + {"Parameter": "amount", "Type": "Coin", "Description": "The coin to send across the bridge (note the restriction that this is a single coin, not a set of coins)", "Required": "Yes"}, + {"Parameter": "bridge_fee", "Type": "Coin", "Description": "The fee paid for the bridge, distinct from the fee paid to the chain to actually send this message in the first place. So a successful send has two layers of fees for the user", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/chain/peggy/sendToInjective.json b/source/json_tables/chain/peggy/sendToInjective.json new file mode 100644 index 00000000..755c88ea --- /dev/null +++ b/source/json_tables/chain/peggy/sendToInjective.json @@ -0,0 +1,12 @@ +[ + {"Parameter": "ethereum_endpoint", "Type": "String", "Description": "The ethereum endpoint, you can get one from providers like Infura and Alchemy", "Required": "Yes"}, + {"Parameter": "private_key", "Type": "String", "Description": "Private key of the account to be used to sign the transaction", "Required": "Yes"}, + {"Parameter": "token_contract", "Type": "String", "Description": "The token contract, you can find the contract for the token you want to transfer on etherscan", "Required": "Yes"}, + {"Parameter": "receiver", "Type": "String", "Description": "The Injective Chain address to receive the funds", "Required": "Yes"}, + {"Parameter": "amount", "Type": "Float", "Description": "The amount to transfer", "Required": "Yes"}, + {"Parameter": "maxFeePerGas", "Type": "Integer", "Description": "The maxFeePerGas in Gwei", "Required": "Yes"}, + {"Parameter": "maxPriorityFeePerGas", "Type": "Integer", "Description": "The maxPriorityFeePerGas in Gwei", "Required": "Yes"}, + {"Parameter": "peggo_abi", "Type": "String", "Description": "Peggo contract ABI|", "Required": "Yes"}, + {"Parameter": "data", "Type": "String", "Description": "The body of the message to send to Injective chain to do the deposit", "Required": "Yes"}, + {"Parameter": "decimals", "Type": "Integer", "Description": "Number of decimals in Injective chain of the token being transferred (default: 18)", "Required": "No"} +] \ No newline at end of file diff --git a/source/json_tables/chain/permissions/addressRoles.json b/source/json_tables/chain/permissions/addressRoles.json new file mode 100644 index 00000000..d679269b --- /dev/null +++ b/source/json_tables/chain/permissions/addressRoles.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "address", "Type": "String", "Description": "Injective address"}, + {"Parameter": "roles", "Type": "String Array", "Description": "List of roles assigned to the address"} +] \ No newline at end of file diff --git a/source/json_tables/chain/permissions/msgClaimVoucher.json b/source/json_tables/chain/permissions/msgClaimVoucher.json new file mode 100644 index 00000000..edf844a9 --- /dev/null +++ b/source/json_tables/chain/permissions/msgClaimVoucher.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "sender", "Type": "String", "Description": "The sender's Injective address", "Required": "Yes"}, + {"Parameter": "denom", "Type": "String", "Description": "The token denom of the voucher to claim", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/chain/permissions/msgCreateNamespace.json b/source/json_tables/chain/permissions/msgCreateNamespace.json new file mode 100644 index 00000000..9950b070 --- /dev/null +++ b/source/json_tables/chain/permissions/msgCreateNamespace.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "sender", "Type": "String", "Description": "The sender's Injective address", "Required": "Yes"}, + {"Parameter": "namespace", "Type": "Namespace", "Description": "The namespace information", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/chain/permissions/msgDeleteNamespace.json b/source/json_tables/chain/permissions/msgDeleteNamespace.json new file mode 100644 index 00000000..ddf18e38 --- /dev/null +++ b/source/json_tables/chain/permissions/msgDeleteNamespace.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "sender", "Type": "String", "Description": "The sender's Injective address", "Required": "Yes"}, + {"Parameter": "namespace_denom", "Type": "String", "Description": "The token denom of the namespace to delete", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/chain/permissions/msgRevokeNamespaceRoles.json b/source/json_tables/chain/permissions/msgRevokeNamespaceRoles.json new file mode 100644 index 00000000..593254d6 --- /dev/null +++ b/source/json_tables/chain/permissions/msgRevokeNamespaceRoles.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "sender", "Type": "String", "Description": "The sender's Injective address", "Required": "Yes"}, + {"Parameter": "namespace_denom", "Type": "String", "Description": "The token denom of the namespace to update", "Required": "Yes"}, + {"Parameter": "address_roles_to_revoke", "Type": "AddressRoles Array", "Description": "List of Injective addresses and their associated role", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/chain/permissions/msgUpdateNamespace.json b/source/json_tables/chain/permissions/msgUpdateNamespace.json new file mode 100644 index 00000000..76ad1703 --- /dev/null +++ b/source/json_tables/chain/permissions/msgUpdateNamespace.json @@ -0,0 +1,8 @@ +[ + {"Parameter": "sender", "Type": "String", "Description": "The sender's Injective address", "Required": "Yes"}, + {"Parameter": "namespace_denom", "Type": "String", "Description": "The token denom of the namespace to update", "Required": "Yes"}, + {"Parameter": "wasm_hook", "Type": "String", "Description": "Address of the wasm contract that will provide the real destination address", "Required": "Yes"}, + {"Parameter": "mints_paused", "Type": "Bool", "Description": "Mint action status", "Required": "Yes"}, + {"Parameter": "sends_paused", "Type": "Bool", "Description": "Send action status", "Required": "Yes"}, + {"Parameter": "burns_paused", "Type": "Bool", "Description": "Burn action status", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/chain/permissions/msgUpdateNamespaceRoles.json b/source/json_tables/chain/permissions/msgUpdateNamespaceRoles.json new file mode 100644 index 00000000..544b7258 --- /dev/null +++ b/source/json_tables/chain/permissions/msgUpdateNamespaceRoles.json @@ -0,0 +1,6 @@ +[ + {"Parameter": "sender", "Type": "String", "Description": "The sender's Injective address", "Required": "Yes"}, + {"Parameter": "namespace_denom", "Type": "String", "Description": "The token denom of the namespace to update", "Required": "Yes"}, + {"Parameter": "role_permissions", "Type": "Role Array", "Description": "List of roles", "Required": "Yes"}, + {"Parameter": "address_roles", "Type": "AddressRoles Array", "Description": "List of Injective addresses and their associated role", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/chain/permissions/namespace.json b/source/json_tables/chain/permissions/namespace.json new file mode 100644 index 00000000..c8449de0 --- /dev/null +++ b/source/json_tables/chain/permissions/namespace.json @@ -0,0 +1,9 @@ +[ + {"Parameter": "denom", "Type": "String", "Description": "Token denom"}, + {"Parameter": "wasm_hook", "Type": "String", "Description": "Address of the wasm contract that will provide the real destination address"}, + {"Parameter": "mints_paused", "Type": "Bool", "Description": "Mint action status"}, + {"Parameter": "sends_paused", "Type": "Bool", "Description": "Send action status"}, + {"Parameter": "burns_paused", "Type": "Bool", "Description": "Burn action status"}, + {"Parameter": "role_permissions", "Type": "Role Array", "Description": "List of roles"}, + {"Parameter": "address_roles", "Type": "AddressRoles Array", "Description": "List of Injective addresses and their associated role"} +] \ No newline at end of file diff --git a/source/json_tables/chain/permissions/permissionAction.json b/source/json_tables/chain/permissions/permissionAction.json new file mode 100644 index 00000000..41e9a101 --- /dev/null +++ b/source/json_tables/chain/permissions/permissionAction.json @@ -0,0 +1,6 @@ +[ + {"Code": "0", "Name": "UNSPECIFIED"}, + {"Code": "1", "Name": "MINT"}, + {"Code": "2", "Name": "RECEIVE"}, + {"Code": "4", "Name": "BURN"} +] \ No newline at end of file diff --git a/source/json_tables/chain/permissions/queryAddressRolesRequest.json b/source/json_tables/chain/permissions/queryAddressRolesRequest.json new file mode 100644 index 00000000..87e48583 --- /dev/null +++ b/source/json_tables/chain/permissions/queryAddressRolesRequest.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "denom", "Type": "String", "Description": "The token denom", "Required": "Yes"}, + {"Parameter": "address", "Type": "String", "Description": "The Injective address to query the roles for", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/chain/permissions/queryAddressRolesResponse.json b/source/json_tables/chain/permissions/queryAddressRolesResponse.json new file mode 100644 index 00000000..fafa0a79 --- /dev/null +++ b/source/json_tables/chain/permissions/queryAddressRolesResponse.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "roles", "Type": "String Array", "Description": "List of role names"} +] \ No newline at end of file diff --git a/source/json_tables/chain/permissions/queryAddressesByRoleRequest.json b/source/json_tables/chain/permissions/queryAddressesByRoleRequest.json new file mode 100644 index 00000000..7a55ef1d --- /dev/null +++ b/source/json_tables/chain/permissions/queryAddressesByRoleRequest.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "denom", "Type": "String", "Description": "The token denom", "Required": "Yes"}, + {"Parameter": "role", "Type": "String", "Description": "The role name to query the addresses for", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/chain/permissions/queryAddressesByRoleResponse.json b/source/json_tables/chain/permissions/queryAddressesByRoleResponse.json new file mode 100644 index 00000000..92a13833 --- /dev/null +++ b/source/json_tables/chain/permissions/queryAddressesByRoleResponse.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "addresses", "Type": "String Array", "Description": "List of Injective addresses"} +] \ No newline at end of file diff --git a/source/json_tables/chain/permissions/queryAllNamespacesResponse.json b/source/json_tables/chain/permissions/queryAllNamespacesResponse.json new file mode 100644 index 00000000..c65644f1 --- /dev/null +++ b/source/json_tables/chain/permissions/queryAllNamespacesResponse.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "namespaces", "Type": "Namespace Array", "Description": "List of namespaces"} +] \ No newline at end of file diff --git a/source/json_tables/chain/permissions/queryNamespaceByDenomRequest.json b/source/json_tables/chain/permissions/queryNamespaceByDenomRequest.json new file mode 100644 index 00000000..59e8e7e5 --- /dev/null +++ b/source/json_tables/chain/permissions/queryNamespaceByDenomRequest.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "denom", "Type": "String", "Description": "The token denom", "Required": "Yes"}, + {"Parameter": "include_roles", "Type": "Bool", "Description": "Option to request the roles in the response", "Required": "No"} +] \ No newline at end of file diff --git a/source/json_tables/chain/permissions/queryNamespaceByDenomResponse.json b/source/json_tables/chain/permissions/queryNamespaceByDenomResponse.json new file mode 100644 index 00000000..786bfc3d --- /dev/null +++ b/source/json_tables/chain/permissions/queryNamespaceByDenomResponse.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "namespace", "Type": "Namespace", "Description": "The namespace information (if found)"} +] \ No newline at end of file diff --git a/source/json_tables/chain/permissions/queryVouchersForAddressRequest.json b/source/json_tables/chain/permissions/queryVouchersForAddressRequest.json new file mode 100644 index 00000000..114e5eeb --- /dev/null +++ b/source/json_tables/chain/permissions/queryVouchersForAddressRequest.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "address", "Type": "String", "Description": "The Injective address to query for", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/chain/permissions/queryVouchersForAddressResponse.json b/source/json_tables/chain/permissions/queryVouchersForAddressResponse.json new file mode 100644 index 00000000..80dccf64 --- /dev/null +++ b/source/json_tables/chain/permissions/queryVouchersForAddressResponse.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "vouchers", "Type": "Coin Array", "Description": "List of available vouchers for the address"} +] \ No newline at end of file diff --git a/source/json_tables/chain/permissions/role.json b/source/json_tables/chain/permissions/role.json new file mode 100644 index 00000000..5ad7d97b --- /dev/null +++ b/source/json_tables/chain/permissions/role.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "role", "Type": "String", "Description": "Role name"}, + {"Parameter": "permissions", "Type": "Integer", "Description": "Integer representing the bitwhise combination of all actions assigned to the role"} +] \ No newline at end of file diff --git a/source/json_tables/chain/signerInfo.json b/source/json_tables/chain/signerInfo.json new file mode 100644 index 00000000..be0ef17d --- /dev/null +++ b/source/json_tables/chain/signerInfo.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "public_key", "Type": "Any", "Description": "Public key of the signer. It is optional for accounts that already exist in state. If unset, the verifier can use the required signer address for this position and lookup the public key"}, + {"Parameter": "mode_info", "Type": "ModeInfo", "Description": "Describes the signing mode of the signer and is a nested structure to support nested multisig pubkey's"}, + {"Parameter": "sequence", "Type": "Integer", "Description": "The sequence of the account, which describes the number of committed transactions signed by a given address. It is used to prevent replay attacks"} +] \ No newline at end of file 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..94b278fd --- /dev/null +++ b/source/json_tables/chain/tendermint/data.json @@ -0,0 +1,3 @@ +[ + {"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 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 diff --git a/source/json_tables/chain/tip.json b/source/json_tables/chain/tip.json new file mode 100644 index 00000000..01423b07 --- /dev/null +++ b/source/json_tables/chain/tip.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "amount", "Type": "Coin Array", "Description": "Amount of coins to be paid as a tip"}, + {"Parameter": "tipper", "Type": "String", "Description": "Address of the account paying for the tip"} +] \ No newline at end of file diff --git a/source/json_tables/chain/tokenfactory/denomAuthorityMetadata.json b/source/json_tables/chain/tokenfactory/denomAuthorityMetadata.json new file mode 100644 index 00000000..37907670 --- /dev/null +++ b/source/json_tables/chain/tokenfactory/denomAuthorityMetadata.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "admin", "Type": "String", "Description": "The denom admin"} +] \ No newline at end of file diff --git a/source/json_tables/chain/tokenfactory/genesisDenom.json b/source/json_tables/chain/tokenfactory/genesisDenom.json new file mode 100644 index 00000000..0614bdaf --- /dev/null +++ b/source/json_tables/chain/tokenfactory/genesisDenom.json @@ -0,0 +1,6 @@ +[ + {"Parameter": "denom", "Type": "String", "Description": "Token denom"}, + {"Parameter": "authority_metadata", "Type": "DenomAuthorityMetadata", "Description": "Token authority metadata"}, + {"Parameter": "name", "Type": "String", "Description": "Token name"}, + {"Parameter": "symbol", "Type": "String", "Description": "Token symbol"} +] \ No newline at end of file diff --git a/source/json_tables/chain/tokenfactory/genesisState.json b/source/json_tables/chain/tokenfactory/genesisState.json new file mode 100644 index 00000000..d265e98a --- /dev/null +++ b/source/json_tables/chain/tokenfactory/genesisState.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "params", "Type": "Params", "Description": "Module parameters"}, + {"Parameter": "factory_denoms", "Type": "GenesisDenom Array", "Description": "Module parameters"} +] \ No newline at end of file diff --git a/source/json_tables/chain/tokenfactory/msgBurn.json b/source/json_tables/chain/tokenfactory/msgBurn.json new file mode 100644 index 00000000..b08cbe04 --- /dev/null +++ b/source/json_tables/chain/tokenfactory/msgBurn.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "sender", "Type": "String", "Description": "Sender Injective address", "Required": "Yes"}, + {"Parameter": "amount", "Type": "Coin", "Description": "Amount to burn", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/chain/tokenfactory/msgChangeAdmin.json b/source/json_tables/chain/tokenfactory/msgChangeAdmin.json new file mode 100644 index 00000000..84f65cc7 --- /dev/null +++ b/source/json_tables/chain/tokenfactory/msgChangeAdmin.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "sender", "Type": "String", "Description": "Sender Injective address", "Required": "Yes"}, + {"Parameter": "denom", "Type": "String", "Description": "Token denom", "Required": "Yes"}, + {"Parameter": "new_admin", "Type": "String", "Description": "New admin Injective address", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/chain/tokenfactory/msgCreateDenom.json b/source/json_tables/chain/tokenfactory/msgCreateDenom.json new file mode 100644 index 00000000..6aec8bc9 --- /dev/null +++ b/source/json_tables/chain/tokenfactory/msgCreateDenom.json @@ -0,0 +1,7 @@ +[ + {"Parameter": "sender", "Type": "String", "Description": "Sender Injective address", "Required": "Yes"}, + {"Parameter": "subdenom", "Type": "String", "Description": "New token subdenom", "Required": "Yes"}, + {"Parameter": "name", "Type": "String", "Description": "New token name", "Required": "Yes"}, + {"Parameter": "symbol", "Type": "String", "Description": "New token symbol", "Required": "Yes"}, + {"Parameter": "decimals", "Type": "Integer", "Description": "Number of decimals use to represent token amount on chain", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/chain/tokenfactory/msgMint.json b/source/json_tables/chain/tokenfactory/msgMint.json new file mode 100644 index 00000000..18d3e9ef --- /dev/null +++ b/source/json_tables/chain/tokenfactory/msgMint.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "sender", "Type": "String", "Description": "Sender Injective address", "Required": "Yes"}, + {"Parameter": "amount", "Type": "Coin", "Description": "Amount to mint", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/chain/tokenfactory/msgSetDenomMetadata.json b/source/json_tables/chain/tokenfactory/msgSetDenomMetadata.json new file mode 100644 index 00000000..2c3e0d65 --- /dev/null +++ b/source/json_tables/chain/tokenfactory/msgSetDenomMetadata.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "sender", "Type": "String", "Description": "Sender Injective address", "Required": "Yes"}, + {"Parameter": "metadata", "Type": "Metadata", "Description": "Token metadata", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/chain/tokenfactory/params.json b/source/json_tables/chain/tokenfactory/params.json new file mode 100644 index 00000000..ec67ba36 --- /dev/null +++ b/source/json_tables/chain/tokenfactory/params.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "denoms_creation_fee", "Type": "Coin Array", "Description": "Fee required to create a denom"} +] \ No newline at end of file diff --git a/source/json_tables/chain/tokenfactory/queryDenomAuthorityMetadataRequest.json b/source/json_tables/chain/tokenfactory/queryDenomAuthorityMetadataRequest.json new file mode 100644 index 00000000..b2e985ad --- /dev/null +++ b/source/json_tables/chain/tokenfactory/queryDenomAuthorityMetadataRequest.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "creator", "Type": "String", "Description": "The denom creator address", "Required": "Yes"}, + {"Parameter": "sub_denom", "Type": "String", "Description": "The token subdenom", "Required": "No"} +] \ No newline at end of file diff --git a/source/json_tables/chain/tokenfactory/queryDenomAuthorityMetadataResponse.json b/source/json_tables/chain/tokenfactory/queryDenomAuthorityMetadataResponse.json new file mode 100644 index 00000000..2d78532b --- /dev/null +++ b/source/json_tables/chain/tokenfactory/queryDenomAuthorityMetadataResponse.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "authority_metadata", "Type": "DenomAuthorityMetadata", "Description": "The denom authority information"} +] \ No newline at end of file diff --git a/source/json_tables/chain/tokenfactory/queryDenomsFromCreatorRequest.json b/source/json_tables/chain/tokenfactory/queryDenomsFromCreatorRequest.json new file mode 100644 index 00000000..96161934 --- /dev/null +++ b/source/json_tables/chain/tokenfactory/queryDenomsFromCreatorRequest.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "creator", "Type": "String", "Description": "The denom creator address", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/chain/tokenfactory/queryDenomsFromCreatorResponse.json b/source/json_tables/chain/tokenfactory/queryDenomsFromCreatorResponse.json new file mode 100644 index 00000000..7bcf7f75 --- /dev/null +++ b/source/json_tables/chain/tokenfactory/queryDenomsFromCreatorResponse.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "denoms", "Type": "String Array", "Description": "List of denoms"} +] \ No newline at end of file diff --git a/source/json_tables/chain/tokenfactory/queryModuleStateResponse.json b/source/json_tables/chain/tokenfactory/queryModuleStateResponse.json new file mode 100644 index 00000000..1f06a4da --- /dev/null +++ b/source/json_tables/chain/tokenfactory/queryModuleStateResponse.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "state", "Type": "GenesisState", "Description": "The state details"} +] \ No newline at end of file diff --git a/source/json_tables/chain/tx.json b/source/json_tables/chain/tx.json new file mode 100644 index 00000000..d5e53ae9 --- /dev/null +++ b/source/json_tables/chain/tx.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "body", "Type": "TxBody", "Description": "Body is the processable content of the transaction"}, + {"Parameter": "auth_info", "Type": "AuthInfo", "Description": "Authorization related content of the transaction (specifically signers, signer modes and fee)"}, + {"Parameter": "signatures", "Type": "Bytes Array Array", "Description": "List of signatures that matches the length and order of AuthInfo's signer_infos to allow connecting signature meta information like public key and signing mode by position"} +] \ No newline at end of file diff --git a/source/json_tables/chain/tx/getTxRequest.json b/source/json_tables/chain/tx/getTxRequest.json new file mode 100644 index 00000000..f85ef1ac --- /dev/null +++ b/source/json_tables/chain/tx/getTxRequest.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "hash", "Type": "String", "Description": "The TX hash to query, encoded as a hex string", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/chain/tx/getTxResponse.json b/source/json_tables/chain/tx/getTxResponse.json new file mode 100644 index 00000000..fea9fa89 --- /dev/null +++ b/source/json_tables/chain/tx/getTxResponse.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "tx", "Type": "Tx", "Description": "Transaction details"}, + {"Parameter": "tx_resposne", "Type": "TxResponse", "Description": "Transaction details"} +] \ No newline at end of file diff --git a/source/json_tables/chain/txBody.json b/source/json_tables/chain/txBody.json new file mode 100644 index 00000000..5622a8e5 --- /dev/null +++ b/source/json_tables/chain/txBody.json @@ -0,0 +1,7 @@ +[ + {"Parameter": "messages", "Type": "Any Array", "Description": "List of messages to be executed. The required signers of those messages define the number and order of elements in AuthInfo's signer_infos and Tx's signatures. Each required signer address is added to the list only the first time it occurs. By convention, the first required signer (usually from the first message) is referred to as the primary signer and pays the fee for the whole transaction"}, + {"Parameter": "memo", "Type": "String", "Description": "Memo is any arbitrary note/comment to be added to the transaction"}, + {"Parameter": "timeout_height", "Type": "Integer", "Description": "The block height after which this transaction will not be processed by the chain"}, + {"Parameter": "extension_options", "Type": "Any Array", "Description": "These are arbitrary options that can be added by chains when the default options are not sufficient. If any of these are present and can't be handled, the transaction will be rejected"}, + {"Parameter": "non_critical_extension_options", "Type": "Any Array", "Description": "These are arbitrary options that can be added by chains when the default options are not sufficient. If any of these are present and can't be handled, they will be ignored"} +] \ No newline at end of file diff --git a/source/json_tables/indexer/accounts/accountPortfolio.json b/source/json_tables/indexer/accounts/accountPortfolio.json new file mode 100644 index 00000000..f05d7e09 --- /dev/null +++ b/source/json_tables/indexer/accounts/accountPortfolio.json @@ -0,0 +1,7 @@ +[ + {"Parameter": "portfolio_value", "Type": "String", "Description": "The account's portfolio value in USD"}, + {"Parameter": "available_balance", "Type": "String", "Description": "The account's available balance value in USD"}, + {"Parameter": "locked_balance", "Type": "String", "Description": "The account's locked balance value in USD"}, + {"Parameter": "unrealized_pnl", "Type": "String", "Description": "The account's total unrealized PnL value in USD"}, + {"Parameter": "subaccounts", "Type": "SubaccountPortfolio Array", "Description": "List of all subaccounts' portfolio"} +] \ No newline at end of file diff --git a/source/json_tables/indexer/accounts/coin.json b/source/json_tables/indexer/accounts/coin.json new file mode 100644 index 00000000..c3c1b092 --- /dev/null +++ b/source/json_tables/indexer/accounts/coin.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "denom", "Type": "String", "Description": "Token denom"}, + {"Parameter": "amount", "Type": "String", "Description": "Token amount"} +] \ No newline at end of file diff --git a/source/json_tables/indexer/accounts/cosmosCoin.json b/source/json_tables/indexer/accounts/cosmosCoin.json new file mode 100644 index 00000000..c3c1b092 --- /dev/null +++ b/source/json_tables/indexer/accounts/cosmosCoin.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "denom", "Type": "String", "Description": "Token denom"}, + {"Parameter": "amount", "Type": "String", "Description": "Token amount"} +] \ No newline at end of file diff --git a/source/json_tables/indexer/accounts/orderStateRecord.json b/source/json_tables/indexer/accounts/orderStateRecord.json new file mode 100644 index 00000000..2d2fc376 --- /dev/null +++ b/source/json_tables/indexer/accounts/orderStateRecord.json @@ -0,0 +1,14 @@ +[ + {"Parameter": "order_hash", "Type": "String", "Description": "Hash of the order"}, + {"Parameter": "subaccount_id", "Type": "String", "Description": "The subaccountId that this order belongs to"}, + {"Parameter": "market_id", "Type": "String", "Description": "The Market ID of the order"}, + {"Parameter": "order_type", "Type": "String", "Description": "The type of the order"}, + {"Parameter": "order_side", "Type": "String", "Description": "The side of the order"}, + {"Parameter": "state", "Type": "String", "Description": "The order state. Should be one of: booked, partial_filled, filled, canceled"}, + {"Parameter": "quantity_filled", "Type": "String", "Description": "The filled quantity of the order"}, + {"Parameter": "quantity_remaining", "Type": "String", "Description": "The unfilled quantity of the order"}, + {"Parameter": "created_at", "Type": "Integer", "Description": "Order committed timestamp in UNIX milliseconds"}, + {"Parameter": "updated_at", "Type": "Integer", "Description": "Order updated timestamp in UNIX milliseconds"}, + {"Parameter": "price", "Type": "String", "Description": "Order price"}, + {"Parameter": "margin", "Type": "String", "Description": "Margin for derivative order"} +] \ No newline at end of file diff --git a/source/json_tables/indexer/accounts/orderStatesRequest.json b/source/json_tables/indexer/accounts/orderStatesRequest.json new file mode 100644 index 00000000..d731c601 --- /dev/null +++ b/source/json_tables/indexer/accounts/orderStatesRequest.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "spot_order_hashes", "Type": "String Array", "Description": "Array with the order hashes you want to fetch in spot markets", "Required": "No"}, + {"Parameter": "derivative_order_hashes", "Type": "String Array", "Description": "Array with the order hashes you want to fetch in derivative markets", "Required": "No"} +] \ No newline at end of file diff --git a/source/json_tables/indexer/accounts/orderStatesResponse.json b/source/json_tables/indexer/accounts/orderStatesResponse.json new file mode 100644 index 00000000..f361707e --- /dev/null +++ b/source/json_tables/indexer/accounts/orderStatesResponse.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "spot_order_states", "Type": "OrderStateRecord Array", "Description": "List of the spot order state records"}, + {"Parameter": "derivative_order_states", "Type": "OrderStateRecord Array", "Description": "List of the derivative order state records"} +] \ No newline at end of file diff --git a/source/json_tables/indexer/accounts/paging.json b/source/json_tables/indexer/accounts/paging.json new file mode 100644 index 00000000..77184c5b --- /dev/null +++ b/source/json_tables/indexer/accounts/paging.json @@ -0,0 +1,7 @@ +[ + {"Parameter": "total", "Type": "Integer", "Description": "Total number of available records"}, + {"Parameter": "from", "Type": "Integer", "Description": "Record index start"}, + {"Parameter": "to", "Type": "Integer", "Description": "Record index end"}, + {"Parameter": "count_by_subaccount", "Type": "Integer", "Description": "Count entries by subaccount"}, + {"Parameter": "next", "Type": "String Array", "Description": "List of tokens to navigate to the next pages"} +] \ No newline at end of file diff --git a/source/json_tables/indexer/accounts/portfolioRequest.json b/source/json_tables/indexer/accounts/portfolioRequest.json new file mode 100644 index 00000000..451946df --- /dev/null +++ b/source/json_tables/indexer/accounts/portfolioRequest.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "account_address", "Type": "String", "Description": "The Injective address", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/indexer/accounts/portfolioResponse.json b/source/json_tables/indexer/accounts/portfolioResponse.json new file mode 100644 index 00000000..a7a791b7 --- /dev/null +++ b/source/json_tables/indexer/accounts/portfolioResponse.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "portfolio", "Type": "AccountPortfolio", "Description": "Portfolio details"} +] \ No newline at end of file diff --git a/source/json_tables/indexer/accounts/reward.json b/source/json_tables/indexer/accounts/reward.json new file mode 100644 index 00000000..e5dfb436 --- /dev/null +++ b/source/json_tables/indexer/accounts/reward.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "account_address", "Type": "String", "Description": "Account Injective address"}, + {"Parameter": "rewards", "Type": "Coin Array", "Description": "Reward coins distributed"}, + {"Parameter": "distributed_at", "Type": "Integer", "Description": "Rewards distribution timestamp in UNIX milliseconds"} +] \ No newline at end of file diff --git a/source/json_tables/indexer/accounts/rewardsRequest.json b/source/json_tables/indexer/accounts/rewardsRequest.json new file mode 100644 index 00000000..dd9497ab --- /dev/null +++ b/source/json_tables/indexer/accounts/rewardsRequest.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "epoch", "Type": "Integer", "Description": "The distribution epoch sequence number. -1 for latest", "Required": "No"}, + {"Parameter": "account_address", "Type": "String", "Description": "Account address for the rewards distribution", "Required": "No"} +] \ No newline at end of file diff --git a/source/json_tables/indexer/accounts/rewardsResponse.json b/source/json_tables/indexer/accounts/rewardsResponse.json new file mode 100644 index 00000000..da9efa90 --- /dev/null +++ b/source/json_tables/indexer/accounts/rewardsResponse.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "rewards", "Type": "Reward Array", "Description": "The trading rewards distributed"} +] \ No newline at end of file diff --git a/source/json_tables/indexer/accounts/streamSubaccountBalanceRequest.json b/source/json_tables/indexer/accounts/streamSubaccountBalanceRequest.json new file mode 100644 index 00000000..7b9f3c6e --- /dev/null +++ b/source/json_tables/indexer/accounts/streamSubaccountBalanceRequest.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "subaccount_id", "Type": "String", "Description": "ID of the subaccount to get the balances from", "Required": "Yes"}, + {"Parameter": "denoms", "Type": "String Array", "Description": "Filter balances by denoms. If not set, the balances of all the denoms for the subaccount are provided", "Required": "No"} +] \ No newline at end of file diff --git a/source/json_tables/indexer/accounts/streamSubaccountBalanceResponse.json b/source/json_tables/indexer/accounts/streamSubaccountBalanceResponse.json new file mode 100644 index 00000000..3411d421 --- /dev/null +++ b/source/json_tables/indexer/accounts/streamSubaccountBalanceResponse.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "balance", "Type": "SubaccountBalance", "Description": "Subaccount balance"}, + {"Parameter": "timestamp", "Type": "Integer", "Description": "Operation timestamp in Unix milliseconds"} +] \ No newline at end of file diff --git a/source/json_tables/indexer/accounts/subaccountBalance.json b/source/json_tables/indexer/accounts/subaccountBalance.json new file mode 100644 index 00000000..d64a9a83 --- /dev/null +++ b/source/json_tables/indexer/accounts/subaccountBalance.json @@ -0,0 +1,6 @@ +[ + {"Parameter": "subaccount_id", "Type": "String", "Description": "Subaccount ID"}, + {"Parameter": "account_address", "Type": "String", "Description": "Injective address of the account the subaccount belongs to"}, + {"Parameter": "denom", "Type": "String", "Description": "Token denom"}, + {"Parameter": "deposit", "Type": "SubaccountDeposit", "Description": "Deposit details"} +] \ No newline at end of file diff --git a/source/json_tables/indexer/accounts/subaccountBalanceEndpointRequest.json b/source/json_tables/indexer/accounts/subaccountBalanceEndpointRequest.json new file mode 100644 index 00000000..9c190d72 --- /dev/null +++ b/source/json_tables/indexer/accounts/subaccountBalanceEndpointRequest.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "subaccount_id", "Type": "String", "Description": "ID of the subaccount to get the balances from", "Required": "Yes"}, + {"Parameter": "denom", "Type": "String", "Description": "Filter by token denom", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/indexer/accounts/subaccountBalanceEndpointResponse.json b/source/json_tables/indexer/accounts/subaccountBalanceEndpointResponse.json new file mode 100644 index 00000000..c7ed4da7 --- /dev/null +++ b/source/json_tables/indexer/accounts/subaccountBalanceEndpointResponse.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "balance", "Type": "SubaccountBalance", "Description": "Balance details"} +] \ No newline at end of file diff --git a/source/json_tables/indexer/accounts/subaccountBalanceTransfer.json b/source/json_tables/indexer/accounts/subaccountBalanceTransfer.json new file mode 100644 index 00000000..d9458923 --- /dev/null +++ b/source/json_tables/indexer/accounts/subaccountBalanceTransfer.json @@ -0,0 +1,9 @@ +[ + {"Parameter": "transfer_type", "Type": "String", "Description": "Type of subaccount balance transfer"}, + {"Parameter": "src_subaccount_id", "Type": "String", "Description": "Subaccount ID of the sending side"}, + {"Parameter": "src_account_address", "Type": "String", "Description": "Account address of the sending side"}, + {"Parameter": "dst_subaccount_id", "Type": "String", "Description": "Subaccount ID of the receiving side"}, + {"Parameter": "dst_account_address", "Type": "String", "Description": "Account address of the receiving side"}, + {"Parameter": "amount", "Type": "CosmosCoin", "Description": "Transfer amount"}, + {"Parameter": "executed_at", "Type": "Integer", "Description": "Transfer timestamp (in milliseconds)"} +] \ No newline at end of file diff --git a/source/json_tables/indexer/accounts/subaccountBalancesListRequest.json b/source/json_tables/indexer/accounts/subaccountBalancesListRequest.json new file mode 100644 index 00000000..314b7cf0 --- /dev/null +++ b/source/json_tables/indexer/accounts/subaccountBalancesListRequest.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "subaccount_id", "Type": "String", "Description": "ID of the subaccount to get the balances from", "Required": "Yes"}, + {"Parameter": "denoms", "Type": "String", "Description": "Filter balances by denoms. If not set, the balances of all the denoms for the subaccount are provided", "Required": "No"} +] \ No newline at end of file diff --git a/source/json_tables/indexer/accounts/subaccountBalancesListResponse.json b/source/json_tables/indexer/accounts/subaccountBalancesListResponse.json new file mode 100644 index 00000000..72670880 --- /dev/null +++ b/source/json_tables/indexer/accounts/subaccountBalancesListResponse.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "balances", "Type": "SubaccountBalance Array", "Description": "List of subaccount balances"} +] \ No newline at end of file diff --git a/source/json_tables/indexer/accounts/subaccountDeposit.json b/source/json_tables/indexer/accounts/subaccountDeposit.json new file mode 100644 index 00000000..ffd2949a --- /dev/null +++ b/source/json_tables/indexer/accounts/subaccountDeposit.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "total_balance", "Type": "String", "Description": "Total balance"}, + {"Parameter": "available_balance", "Type": "String", "Description": "Available balance"} +] \ No newline at end of file diff --git a/source/json_tables/indexer/accounts/subaccountHistoryRequest.json b/source/json_tables/indexer/accounts/subaccountHistoryRequest.json new file mode 100644 index 00000000..257727d9 --- /dev/null +++ b/source/json_tables/indexer/accounts/subaccountHistoryRequest.json @@ -0,0 +1,8 @@ +[ + {"Parameter": "subaccount_id", "Type": "String", "Description": "ID of the subaccount to get the history from", "Required": "Yes"}, + {"Parameter": "denom", "Type": "String", "Description": "Filter by token denom", "Required": "No"}, + {"Parameter": "transfer_types", "Type": "String Array", "Description": "Filter by transfer types. Valid options: internal, external, withdraw, deposit", "Required": "No"}, + {"Parameter": "skip", "Type": "Integer", "Description": "Skip the first N items from the result", "Required": "No"}, + {"Parameter": "limit", "Type": "Integer", "Description": "Maximum number of items to be returned", "Required": "No"}, + {"Parameter": "end_time", "Type": "Integer", "Description": "Upper bound (inclusive) of account transfer history executed_at unix timestamp", "Required": "No"} +] \ No newline at end of file diff --git a/source/json_tables/indexer/accounts/subaccountHistoryResponse.json b/source/json_tables/indexer/accounts/subaccountHistoryResponse.json new file mode 100644 index 00000000..5bf086d3 --- /dev/null +++ b/source/json_tables/indexer/accounts/subaccountHistoryResponse.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "transfers", "Type": "SubaccountBalanceTransfer Array", "Description": "Transfers list"}, + {"Parameter": "paging", "Type": "Paging", "Description": "Pagination details"} +] \ No newline at end of file diff --git a/source/json_tables/indexer/accounts/subaccountOrderSummaryRequest.json b/source/json_tables/indexer/accounts/subaccountOrderSummaryRequest.json new file mode 100644 index 00000000..671a6983 --- /dev/null +++ b/source/json_tables/indexer/accounts/subaccountOrderSummaryRequest.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "subaccount_id", "Type": "String", "Description": "ID of the subaccount to get the summary from", "Required": "Yes"}, + {"Parameter": "market_id", "Type": "String", "Description": "Limit the order summary to a specific market", "Required": "No"}, + {"Parameter": "order_direction", "Type": "String", "Description": "Filter by the direction of the orders. Valid options: buy, sell", "Required": "No"} +] \ No newline at end of file diff --git a/source/json_tables/indexer/accounts/subaccountOrderSummaryResponse.json b/source/json_tables/indexer/accounts/subaccountOrderSummaryResponse.json new file mode 100644 index 00000000..5a84c7f0 --- /dev/null +++ b/source/json_tables/indexer/accounts/subaccountOrderSummaryResponse.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "spot_orders_total", "Type": "Integer", "Description": "Total count of subaccount's spot orders in given market and direction"}, + {"Parameter": "derivative_orders_total", "Type": "Integer", "Description": "Total count of subaccount's derivative orders in given market and direction"} +] \ No newline at end of file diff --git a/source/json_tables/indexer/accounts/subaccountPortfolio.json b/source/json_tables/indexer/accounts/subaccountPortfolio.json new file mode 100644 index 00000000..d6b14e64 --- /dev/null +++ b/source/json_tables/indexer/accounts/subaccountPortfolio.json @@ -0,0 +1,6 @@ +[ + {"Parameter": "subaccount_id", "Type": "String", "Description": "The subaccount ID"}, + {"Parameter": "available_balance", "Type": "String", "Description": "The subaccount's available balance value in USD"}, + {"Parameter": "locked_balance", "Type": "String", "Description": "The subaccount's locked balance value in USD"}, + {"Parameter": "unrealized_pnl", "Type": "String", "Description": "The subaccount's total unrealized PnL value in USD"} +] \ No newline at end of file diff --git a/source/json_tables/indexer/accounts/subaccountsListRequest.json b/source/json_tables/indexer/accounts/subaccountsListRequest.json new file mode 100644 index 00000000..42c7d999 --- /dev/null +++ b/source/json_tables/indexer/accounts/subaccountsListRequest.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "account_address", "Type": "String", "Description": "Injective address of the account to query for subaccounts", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/indexer/accounts/subaccountsListResponse.json b/source/json_tables/indexer/accounts/subaccountsListResponse.json new file mode 100644 index 00000000..751e7ce6 --- /dev/null +++ b/source/json_tables/indexer/accounts/subaccountsListResponse.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "subaccounts", "Type": "String Array", "Description": "Subaccounts list"} +] \ No newline at end of file diff --git a/source/json_tables/indexer/auction/auction.json b/source/json_tables/indexer/auction/auction.json new file mode 100644 index 00000000..85b66c25 --- /dev/null +++ b/source/json_tables/indexer/auction/auction.json @@ -0,0 +1,8 @@ +[ + {"Parameter": "winner", "Type": "String", "Description": "Account Injective address"}, + {"Parameter": "basket", "Type": "Coin Array", "Description": "Coins in the basket"}, + {"Parameter": "winning_bid_amount", "Type": "String", "Description": "Amount of the highest bid (in INJ)"}, + {"Parameter": "round", "Type": "Integer", "Description": "The auction round number"}, + {"Parameter": "end_timestamp", "Type": "Integer", "Description": "Auction end timestamp in UNIX milliseconds"}, + {"Parameter": "updated_at", "Type": "Integer", "Description": "The timestamp of the last update in UNIX milliseconds"} +] \ No newline at end of file diff --git a/source/json_tables/indexer/auction/auctionEndpointRequest.json b/source/json_tables/indexer/auction/auctionEndpointRequest.json new file mode 100644 index 00000000..87daf76e --- /dev/null +++ b/source/json_tables/indexer/auction/auctionEndpointRequest.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "round", "Type": "Integer", "Description": "The auction round number, -1 for latest", "Required": "Yes"} +] \ No newline at end of file diff --git a/source/json_tables/indexer/auction/auctionEndpointResponse.json b/source/json_tables/indexer/auction/auctionEndpointResponse.json new file mode 100644 index 00000000..30291f40 --- /dev/null +++ b/source/json_tables/indexer/auction/auctionEndpointResponse.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "auction", "Type": "Auction", "Description": "Auction details"}, + {"Parameter": "bids", "Type": "Bid Array", "Description": "Auction's bids"} +] \ No newline at end of file diff --git a/source/json_tables/indexer/auction/auctionsResponse.json b/source/json_tables/indexer/auction/auctionsResponse.json new file mode 100644 index 00000000..10438b80 --- /dev/null +++ b/source/json_tables/indexer/auction/auctionsResponse.json @@ -0,0 +1,3 @@ +[ + {"Parameter": "auctions", "Type": "Auction Array", "Description": "List of auctions"} +] \ No newline at end of file diff --git a/source/json_tables/indexer/auction/bid.json b/source/json_tables/indexer/auction/bid.json new file mode 100644 index 00000000..66ed371b --- /dev/null +++ b/source/json_tables/indexer/auction/bid.json @@ -0,0 +1,5 @@ +[ + {"Parameter": "bidder", "Type": "String", "Description": "Bidder account Injective address"}, + {"Parameter": "amount", "Type": "String", "Description": "The bid amount"}, + {"Parameter": "timestamp", "Type": "Integer", "Description": "Bid timestamp in UNIX millis"} +] \ No newline at end of file diff --git a/source/json_tables/indexer/auction/coin.json b/source/json_tables/indexer/auction/coin.json new file mode 100644 index 00000000..c3c1b092 --- /dev/null +++ b/source/json_tables/indexer/auction/coin.json @@ -0,0 +1,4 @@ +[ + {"Parameter": "denom", "Type": "String", "Description": "Token denom"}, + {"Parameter": "amount", "Type": "String", "Description": "Token amount"} +] \ No newline at end of file diff --git a/source/json_tables/indexer/auction/streamBidsResponse.json b/source/json_tables/indexer/auction/streamBidsResponse.json new file mode 100644 index 00000000..a40dee80 --- /dev/null +++ b/source/json_tables/indexer/auction/streamBidsResponse.json @@ -0,0 +1,6 @@ +[ + {"Parameter": "bidder", "Type": "String", "Description": "The bidder Injective address"}, + {"Parameter": "bid_amount", "Type": "String", "Description": "The bid amount (in INJ)"}, + {"Parameter": "round", "Type": "Integer", "Description": "The auction round number"}, + {"Parameter": "timestamp", "Type": "Integer", "Description": "Bid timestamp in UNIX milliseconds"} +] \ No newline at end of file