{"id":13641227,"url":"https://github.com/0xxCodemonkey/SecretNET","last_synced_at":"2025-04-20T07:32:37.178Z","repository":{"id":60105608,"uuid":"513495862","full_name":"0xxCodemonkey/SecretNET","owner":"0xxCodemonkey","description":"Secret.NET (port of the secret.js Client) is a .NET Client to interact with the Secret Network blockchain (L1 / Cosmos based), the first privacy smart contract blockchain that processes and stores data on-chain in encrypted form (SGX).  See also https://scrt.network/ https://github.com/scrtlabs/secret.js ","archived":false,"fork":false,"pushed_at":"2024-07-23T08:58:35.000Z","size":8986,"stargazers_count":9,"open_issues_count":0,"forks_count":3,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-11-06T23:09:02.975Z","etag":null,"topics":["blockchain","cosmos-sdk","crypto","cryptocurrency","ibc","maui","privacy","secret-network","web3"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/0xxCodemonkey.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2022-07-13T11:33:23.000Z","updated_at":"2024-08-10T22:16:33.000Z","dependencies_parsed_at":"2023-02-17T03:15:57.155Z","dependency_job_id":"d8f471c5-2790-4b34-83f9-fef5ceaec4d5","html_url":"https://github.com/0xxCodemonkey/SecretNET","commit_stats":{"total_commits":84,"total_committers":2,"mean_commits":42.0,"dds":0.5,"last_synced_commit":"73ce21a798131e3872021c816a06fec8e47153be"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xxCodemonkey%2FSecretNET","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xxCodemonkey%2FSecretNET/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xxCodemonkey%2FSecretNET/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xxCodemonkey%2FSecretNET/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/0xxCodemonkey","download_url":"https://codeload.github.com/0xxCodemonkey/SecretNET/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223822149,"owners_count":17208819,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blockchain","cosmos-sdk","crypto","cryptocurrency","ibc","maui","privacy","secret-network","web3"],"created_at":"2024-08-02T01:01:18.954Z","updated_at":"2024-11-09T11:30:57.454Z","avatar_url":"https://github.com/0xxCodemonkey.png","language":"C#","funding_links":[],"categories":["Blockchains"],"sub_categories":["Library OSes and SDKs"],"readme":"\n\u003c!--  ![Nuget](https://img.shields.io/nuget/v/SecretNET?label=stable) ![GitHub](https://img.shields.io/github/license/0xxCodemonkey/SecretNET) ![GitHub Workflow Status](https://img.shields.io/github/workflow/status/0xxCodemonkey/SecretNET/Publish%20Packages?label=checks) --\u003e\n![Nuget](https://img.shields.io/nuget/dt/SecretNET?color=%239100ff) [![NuGet version (SecretNET)](https://img.shields.io/nuget/v/SecretNET.svg?style=flat-square)](https://www.nuget.org/packages/SecretNET/)\n\n*Status: (Project is in active development)*\n\u003cbr/\u003e\u003cbr/\u003e\n\n# Secret.NET Core Library\n**Secret.NET** (port of the [secret.js](https://github.com/scrtlabs/secret.js) Client) is a .NET Client to interact with the [Secret Network blockchain](https://scrt.network/) (L1 / Cosmos based), **the first privacy smart contract blockchain** that processes and stores data on-chain in encrypted form (SGX). \n\nThis allows [unique use cases](https://docs.scrt.network/secret-network-documentation/secret-network-overview/use-cases) like **Secret NFTs where you can store public and private data** e.g., encryption keys, passwords or other secrets. \n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./resources/Secret.NET_banner.png\" type=\"image/png\" width=\"100%\" /\u003e\n\u003c/p\u003e\n\n# Key Features\n- Written in .NET 6 including MAUI Support.\n- Can be used in MAUI Apps on Android, iOS, Windows and Mac.\n- Provides simple abstractions over core data structures.\n- Supports every possible message and transaction type.\n- Exposes every possible query type.\n- Handles input/output encryption/decryption for Secret Contracts.\n- The SDK has a wallet built in and does not currently require / support external wallets.\n- Custom APIs / clients for specific smart contracts can be easily created (see packages for tokens / SNIP20 or NFT / SNIP721).\n\n:information_source: This library is still in beta (as [secret.js](https://github.com/scrtlabs/secret.js)), APIs may break. Beta testers are welcome!\n\n## Additional packages\nIn addition to the Secret.NET Core Library, the following complementary packages are available:\n- [**Full Token client**](https://github.com/0xxCodemonkey/SecretNET.Token), providing all methods of the [SNIP-20 reference implementation](https://github.com/scrtlabs/snip20-reference-impl).\n- [**Full NFT client**](https://github.com/0xxCodemonkey/SecretNET.NFT), providing all methods of the [SNIP-721 reference implementation](https://github.com/baedrik/snip721-reference-impl).\n- **UI Package** (coming soon), which contains typical MAUI controls such as Confirm Transaction, Wallet Setup, Scan Keplr QR, etc. \n\n## Full API-documentation\nYou can find the **full API-documentation** here =\u003e [https://0xxcodemonkey.github.io/SecretNET](https://0xxcodemonkey.github.io/SecretNET/html/T-SecretNET.SecretNetworkClient.htm)\n\nMore [code samples](https://docs.scrt.network/secret-network-documentation/development/tools-and-libraries/secret-net/snippets) can also be found on the official [Secret Network Developer documentation](https://docs.scrt.network/secret-network-documentation/).\n\nYou can also ask questions in the official [Secret Network Discord](https://discord.gg/secret-network-360051864110235648) in the channel **#secret-net**.\n\n## Informations about .NET MAUI: \n- [What is .NET MAUI?](https://learn.microsoft.com/en-us/dotnet/maui/what-is-maui)\n- [Learn how to use .NET MAUI to build apps that run on mobile devices and on the desktop using C# and Visual Studio.](https://learn.microsoft.com/en-us/training/paths/build-apps-with-dotnet-maui/)\n- [Resources to Get Started with .NET MAUI](https://devblogs.microsoft.com/dotnet/learn-dotnet-maui/)\n\n# Table of Contents\n- [Key Features](#key-features)\n  - [Additional packages](#additional-packages)\n  - [Full API-documentation](#full-api-documentation)\n- [General information](#general-information)\n- [Installation](#installation)\n  - [Additional packages](#additional-packages)\n- [Usage Examples](#usage-examples)\n\t- [Sending Queries](#sending-queries)\n\t- [Broadcasting Transactions](#broadcasting-transactions)\n- [API](#api)\n  - [Creating / Initializing the Wallet](#creating--initializing-the-wallet)\n  \t- [Importing account from mnemonic phrase](#importing-account-from-mnemonic-phrase)\n\t- [Importing private key](#importing-private-key)\n\t- [Use previously saved wallet](#use-previously-saved-wallet)\n\t- Import via Keplr QR (coming soon...)\n\t- [Generating a new account](#generating-a-new-account)\n\t- [Attaching the wallet to the SecretNetworkClient (required for signing transactions)](#attaching-the-wallet-to-the-secretnetworkclient-required-for-signing-transactions)\n  - [SecretNetworkClient](#secretnetworkclient)\n\t- [Queries](#querier-secretclientquery)\n\t- [Transactions](#transactions)\n  - [Overview of all query and transaction methods](#overview-of-all-query-and-transaction-methods)\n  \t- [All query methods](#all-query-methods)\n  \t- [All transaction methods](#all-transaction-methods)\n\n# General information\nThe rough structure of the Secret.NET client, from the user's perspective, is divided into the following areas:\n- **Queries** (accessible via ```Query``` property), to get informations from the blockchain or an smart contract.\n- **Transactions** (accessible via ```Tx``` property), to interact activly with the blockchain e.g. sending funds or calling smart contract methods.\n- **Permits** (accessible via ```Permit``` property) for requesting protected informations in a query, without the need for a separate transaction.\n\n**Queries** cost no fees, are executed \"immediately\" and do not require a wallet.\n\n**Transactions** are broadcast to the blockchain in encrypted form and have to be processed. Therefore, they cost fees and the messages must be signed by the sender and a wallet is required for signing the transactions.\n\nAll transactions can also be simulated via ``Tx.Simulate`` to determine the estimated fees.\n\n**Permits** can be signed with the ```Permit.Sign``` method.\n\n**All types and methods are documented and eases programming:**\n\n![](resources/VS_IntelliSense.png)\n\n# Installation\nThe Secret.NET Core Libray can be easily installed via Nuget: \n\n``` nuget.exe ``` -CLI:\n``` bash \nnuget install SecretNET\n```\n[NuGet-Paket-Manager-Console](https://docs.microsoft.com/de-de/nuget/consume-packages/install-use-packages-powershell):\n```  bash\nInstall-Package SecretNET\n```\n\n## Additional packages\nnuget.exe-CLI:\n```  bash\nnuget install SecretNET.Token\nnuget install SecretNET.NFT\nnuget install SecretNET.UI (coming soon)\n```\n\nNuGet-Paket-Manager-Console:\n```  bash\nInstall-Package SecretNET.Token\nInstall-Package SecretNET.NFT\nInstall-Package SecretNET.UI (coming soon)\n```\n# Usage Examples\nNote: Public gRPC-web endpoints can be found in [API-Registry](https://docs.scrt.network/secret-network-documentation/development/queries-and-connecting-to-the-network/connecting-to-the-network) for both mainnet and testnet.\n\nFor a lot more usage examples refer to the tests.\n\n## Sending Queries\n```csharp\nusing SecretNET;\n\n// grpcWebUrl =\u003e TODO get from https://github.com/scrtlabs/api-registry\n// chainId e.g. \"secret-4\" or \"pulsar-2\"\nvar secretClient = new SecretNetworkClient(grpcWebUrl, chainId, wallet: null); // no wallet needed for queries\n\nvar response = await secretClient.Query.Bank.Balance(\"secret1ap26qrlp8mcq2pg6r47w43l0y8zkqm8a450s03\");\nConsole.WriteLine(\"Balance: \" + (float.Parse(response.Amount) / 1000000f)); // denom: \"uscrt\"\n\n// simple counter contract\nvar contractAddress = \"secret12j8e6aeyy9ff7drfks3knxva0pxj847fle8zsf\"; // pulsar-2\nvar contractCodeHash = \"3d528d0d9889d5887abd3e497243ed6e5a4da008091e20ee420eca39874209ad\";\n\nvar getCountQueryMsg = new { get_count = new { } };\n\nvar queryContractResult = await secretClient.Query.Compute.QueryContract\u003cobject\u003e(\n\t\t\t\tcontractAddress: contractAddress, \n\t\t\t\tqueryMsg: getCountQueryMsg, \n\t\t\t\tcodeHash: contractCodeHash); // optional but way faster\n\nConsole.WriteLine(queryContractResult.Response); // JSON string\n```\n## Broadcasting Transactions\n```csharp\nusing SecretNET;\n\nvar myWallet = await SecretNET.Wallet.Create(\"detect unique diary skate horse hockey gain naive approve rabbit act lift\");\n\n// grpcWebUrl =\u003e TODO get from https://github.com/scrtlabs/api-registry\n// chainId e.g. \"secret-4\" or \"pulsar-2\"\nvar secretClient = new SecretNetworkClient(grpcWebUrl, chainId, wallet: myWallet); // wallet needed for transactions\n\n// You can set a TransactionApprovalCallback to approve a transaction before submitting it:\n// secretClient.TransactionApprovalCallback =\u003e Func\u003cTransactionApprovalData, Task\u003cUserApprovalDecision\u003e\u003e\n\n// simple counter contract\nvar contractAddress = \"secret12j8e6aeyy9ff7drfks3knxva0pxj847fle8zsf\"; // pulsar-2\nvar contractCodeHash = \"3d528d0d9889d5887abd3e497243ed6e5a4da008091e20ee420eca39874209ad\";\n\nvar msgExecuteContract = new SecretNET.Tx.MsgExecuteContract(\n\t\t\t\tcontractAddress: contractAddress, \n\t\t\t\tmsg: new { increment = new { } }, \n\t\t\t\tcodeHash: contractCodeHash); // optional but way faster\n\nvar txOptionsExecute = new TxOptions()\n{\n    GasLimit = 300_000,\n    GasPriceInFeeDenom = 0.26F\n};\n\nvar executeContractResult = await secretClient.Tx.Compute.ExecuteContract\u003cstring\u003e(\n\t\t\t\tmsg: msgExecuteContract, \n\t\t\t\ttxOptions: txOptionsExecute);\n```\n\nYou can find **more examples** in the [ready to run example CLI project](https://github.com/0xxCodemonkey/SecretNET/blob/main/examples/SecretNET.Examples/Program.cs) or in the [tests](https://github.com/0xxCodemonkey/SecretNET/blob/main/test).\n\n:information_source: **SecretNET unfortunately cannot be connected to localsecret (Docker) yet**, as the docker image currently does not provide an encrypted connection on gRPC-web port 9091.\u003c/br\u003e\nAs far as I know, .NET cannot be connected to an unencrypted port via gRPC-web unless it offers HTTP/2 exclusively, which is not the case with localsecret (it also runs HTTP 1.1 on port 9091). See [here](https://learn.microsoft.com/en-us/aspnet/core/grpc/troubleshoot?view=aspnetcore-6.0#call-insecure-grpc-services-with-net-core-client) and [here](https://learn.microsoft.com/en-us/aspnet/core/grpc/aspnetcore?view=aspnetcore-6.0\u0026tabs=visual-studio#protocol-negotiation).\n\n# API\n## Creating / Initializing the wallet\nWhen initializing a wallet, you must pass an ```IPrivateKeyStorage``` provider where the private key and mnemonic phrase will be stored (**default = MauiSecureStorage**). \nThe following providers are available out of the box:\n\n- **MauiSecureStorage**\nUtilized the [Microsoft.Maui.Storage.SecureStorage](https://docs.microsoft.com/en-us/dotnet/maui/platform-integration/storage/secure-storage) to securely save data (can only be used in MAUI apps).\n- **AesEncryptedFileStorage**\nAesEncryptedFileStorage encryptes data to the local file system (not recommended in MAUI Apps since password is stored in memory).\n- **InMemoryOnlyStorage**\nStores the data ONLY (unencrypted!) in memory.\n\nThe .NET MAUI SecureStorage uses the OS capabilities as follows to store the data securely:\n\n| Plattform | Info |\n| ------------- | -------------  |\n| Android | Data is encrypted with the Android EncryptedSharedPreference Class, and the secure storage value is encrypted with AES-256 GCM. |\n| iOS / macOS | The iOS Keychain is used to store values securely. | \n| Windows | DataProtectionProvider is used to encrypt values securely on Windows devices. | \n\n:warning: **Never store the private key or mnemonic phrase permanent in a variable (or somewhere else than in a secure storage) or output them in a log!**\n**Only store them in a secure storage like the default implementation.**\n\n### Importing account from mnemonic phrase\nSimply use the mnemonic phrase in the ```Wallet.Create``` method (and use the wallet in the constructor of the SecretNetworkClient:) like this\n\n```  csharp\nvar walletFromMnemonic = await SecretNET.Wallet.Create(\"detect unique diary skate horse hockey gain naive approve rabbit act lift\");\n```\n### Importing private key\nSimply use the private key in the ```Wallet.Create``` method (and use the wallet in the constructor of the SecretNetworkClient) like this:\n```  csharp\nvar walletFromSeed = await SecretNET.Wallet.Create(** byte[] private key **);\n```\n\n### Use previously saved wallet\n\n```csharp\nvar secureLocalStorageProvider = new MauiSecureStorage();\nvar securewalletOptions = new SecretNET.Common.CreateWalletOptions(secureLocalStorageProvider);\n\nWallet secureWallet = null;\nif (await secureLocalStorageProvider.HasPrivateKey())\n{\n    var storedMnemonic = await secureLocalStorageProvider.GetFirstMnemonic();\n    secureWallet = await SecretNET.Wallet.Create(storedMnemonic, options: securewalletOptions);\n}\n```\n\n### Import via Keplr QR\n- coming soon...\n### Generating a new account\nTo generate a complete new random wallet just use the ```Wallet.Create``` method without a parameter (default wordlist is english), or specify another Wordlist (also supported: chinese_simplified, chinese_traditional, japanese, spanish, french, portuguese_brazil and czech).\n```  csharp\nvar newRandomWallet = await SecretNET.Wallet.Create(Wordlist.English);\n```\n### Attaching the wallet to the SecretNetworkClient (required for signing transactions)\nIn the constructor:\n```  csharp\nvar secretNetworkClient = new SecretNetworkClient(\"https://pulsar-2.api.trivium.network:9091\", \"pulsar-2\", wallet);\n```\nLater via prop:\n```  csharp\nsecretNetworkClient.Wallet = walletFromMnemonic;\n```\n## SecretNetworkClient\n[**Full API »**](https://0xxcodemonkey.github.io/SecretNET/html/T-SecretNET.SecretNetworkClient.htm)\n\n### Querier (`secretClient.Query`)\nThe querier can only send queries and get chain information. Access to all query types can be done via ```SecretNetworkClient.Query```.\n\nYou can find a full list of all query methods below under ['All query methods'](#all-query-methods) or in the [**Full API »**](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Query.Queries.htm)\n\n#### `secretClient.Query.GetTx(string hash, bool tryToDecrypt = true)`\nReturns a transaction with a txhash. `hash` is a 64 character upper-case hex string.\n\nIf set the parameter `tryToDecrypt` to true (default = false) the client tries to decrypt the tx data which works only if the tx was created with the same ```CreateClientOptions.EncryptionSeed``` (default EncryptionSeed is derived from a signed message (Keplr style)).\n\n#### `secretClient.Query.TxsQuery(string query, bool tryToDecrypt = false)`\nReturns all transactions that match a query.\n\nIf set the parameter `tryToDecrypt` to true (default = false) the client tries to decrypt the tx data which works only if the tx was created with the same ```CreateClientOptions.EncryptionSeed``` (default EncryptionSeed is derived from a signed message (Keplr style)).\n\nTo tell which events you want, you need to provide a query. query is a string, which has a form: `condition AND condition ...` (no OR at the moment). Condition has a form: `key operation operand`. key is a string with a restricted set of possible symbols (`\\t`, `\\n`, `\\r`, `\\`, `(`, `)`, `\"`, `'`, `=`, `\u003e`, `\u003c` are not allowed). Operation can be `=`, `\u003c`, `\u003c=`, `\u003e`, `\u003e=`, `CONTAINS` AND `EXISTS`. Operand can be a string (escaped with single quotes), number, date or time.\n\nExamples:\n\n- `tx.hash = 'XYZ'` # single transaction\n- `tx.height = 5` # all txs of the fifth block\n- `create_validator.validator = 'ABC'` # tx where validator ABC was created\n\nTendermint provides a few predefined keys: `tx.hash` and `tx.height`. You can provide additional event keys that were emitted during the transaction. All events are indexed by a composite key of the form `{eventType}.{evenAttrKey}`. Multiple event types with duplicate keys are allowed and are meant to categorize unique and distinct events.\n\nTo create a query for txs where AddrA transferred funds: `transfer.sender = 'AddrA'`\n\nSee `txsQuery` under https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Query.Queries.htm\n\n#### Get SCRT Balance\n\n```csharp\nvar response = await secretClient.Query.Bank.Balance(\"secret1ap26qrlp8mcq2pg6r47w43l0y8zkqm8a450s03\");\nConsole.WriteLine(\"Balance: \" + (float.Parse(response.Amount) / 1000000f)); // denom: \"uscrt\"\n```\n\n#### Query smart contract (permissionless method)\n\n```csharp\n// grpcWebUrl =\u003e TODO get from https://github.com/scrtlabs/api-registry\n// chainId e.g. \"secret-4\" or \"pulsar-2\"\nvar secretClient = new SecretNetworkClient(grpcWebUrl, chainId, wallet: null);\n\n// simple counter contract\nvar contractAddress = \"secret12j8e6aeyy9ff7drfks3knxva0pxj847fle8zsf\"; // pulsar-2\nvar contractCodeHash = \"3d528d0d9889d5887abd3e497243ed6e5a4da008091e20ee420eca39874209ad\";\n\nvar getCountQueryMsg = new { get_count = new { } };\n\nvar queryContractResult = await secretClient.Query.Compute.QueryContract\u003cstring\u003e(\n\t\t\t\tcontractAddress: contractAddress, \n\t\t\t\tqueryMsg: getCountQueryMsg, \n\t\t\t\tcodeHash: contractCodeHash); // optional but way faster\n\nConsole.WriteLine(queryContractResult.Response); // JSON string\n```\n\nOr even easier for a **SNIP20 Contract** via [**SecretNET.Token**](#additional-packages) Add-On:\n\n```csharp\nvar snip20Client =  new SecretNET.Token.Snip20Client(secretClient);\n\nvar sSCRT_Address = \"secret1k0jntykt7e4g3y88ltc60czgjuqdy4c9e8fzek\"; // secret-4\nvar sScrt_CodeHash = \"af74387e276be8874f07bec3a87023ee49b0e7ebe08178c49d0a49c3c98ed60e\";\n\nvar tokenInfoResult = (await snip20Client.Query.GetTokenInfo(\n\t\t\t\t\tcontractAddress: sSCRT_Address, \n\t\t\t\t\tcodeHash:  sScrt_CodeHash // optional but way faster\n          )).Response.Result;\n\nConsole.WriteLine($\"TokenName: {tokenInfoResult.Name}, Symbol: {tokenInfoResult.Symbol}\");\n```\n\nYou can find **more examples** in the [ready to run example CLI project](https://github.com/0xxCodemonkey/SecretNET/blob/main/examples/SecretNET.Examples/Program.cs).\n\n## Transactions\nOn a signer Secret.NET client, `SecretNetworkClient.Tx` is used to broadcast transactions. Every function under `SecretNetworkClient.Tx` can receive an optional `TxOptions`.\n\nYou can find a full list of all transaction methods below under ['All transaction methods'](#all-transaction-methods) or in the [**Full API »**]([https://0xxcodemonkey.github.io/SecretNET/html/T-SecretNET.SecretNetworkClient.htm](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Tx.TxClient.htm))\n\n### Broadcasting transactions\nUsed to send a complex transactions, which contains a list of messages. The messages are executed in sequence, and the transaction succeeds if all messages succeed.\nSee code example in simulate.\n\n### Simulate transactions\nUsed to simulate a complex transactions, which contains a list of messages, without broadcasting it to the chain. Can be used to get a gas estimation or to see the output without actually committing a transaction on-chain.\n\nThe input should be exactly how you'd use it in `SecretNetworkClient.Tx.Broadcast()`, except that you don't have to pass in `gasLimit`, `gasPriceInFeeDenom` \u0026 `feeDenom`.\n\nNotes:\n\n- :warning: On mainnet it's recommended to not simulate every transaction as this can burden your node provider. Instead, use this while testing to determine the gas limit for each of your app's transactions, then in production use hard-coded values.\n- Gas estimation is known to be a bit off, so you might need to adjust it a bit before broadcasting.\n\n```csharp\nvar sendToAlice = new Cosmos.Bank.V1Beta1.MsgSend()\n{\n    FromAddress = wallet.Address,\n    ToAddress = subaccountWallet.Address\n};\nsendToAlice.Amount.Add(new Cosmos.Base.V1Beta1.Coin() { Amount = \"1\", Denom = \"uscrt\" });\n\nvar sendToEve = new Cosmos.Bank.V1Beta1.MsgSend()\n{\n    FromAddress = wallet.Address,\n    ToAddress = subaccountWallet.Address // use the same address for simplicity\n};\nsendToEve.Amount.Add(new Cosmos.Base.V1Beta1.Coin() { Amount = \"1\", Denom = \"uscrt\" });\n\nvar messages = new[] { sendToAlice, sendToEve };\n\nvar simulate = await secretClient.Tx.Simulate(messages);\n\nvar tx = await secretClient.Tx.Broadcast(messages, new TxOptions\n{\n    // Adjust gasLimit up by 10% to account for gas estimation error\n    GasLimit = (int)Math.Ceiling(simulate.GasInfo.GasUsed * 1.1),\n});\n```\n\n### Sending SCRT\n\n```csharp\nvar sendResponse = await secretClient.Tx.Bank.Send(\n\t\t\t\ttoAddress: alice, \n\t\t\t\tamount: 1000000, \n\t\t\t\tdenom: null,\t// default \"uscrt\"\n\t\t\t\tnew TxOptions{ GasLimit = 20000,}\n\t\t\t\t);\n\t\t\t\t\nvar success = sendResponse.Code == 0;\n```\n\n### Uploading a smart contract\nWith you can upload a compiled contract to Secret Network.\n\nInput: MsgStoreCodeParams\n\n```csharp\n// https://github.com/0xxCodemonkey/SecretNET/blob/main/resources/mysimplecounter.wasm.gz\nbyte[] wasmByteCode = File.ReadAllBytes(@\"Resources\\mysimplecounter.wasm.gz\");\n\n// MsgStoreCode\nvar msgStoreCodeCounter = new MsgStoreCode(wasmByteCode,\n                        source: \"https://github.com/scrtlabs/secret-template\", // Source is a valid absolute HTTPS URI to the contract's source code, optional\n                        builder: \"enigmampc/secret-contract-optimizer:latest\"  // Builder is a valid docker image name with tag, optional\n                        );\n\nvar storeCodeResponse = await secretClient.Tx.Compute.StoreCode(msgStoreCodeCounter, txOptions: txOptionsUpload);\n\nConsole.WriteLine(\"Init Contract with CodeId \" + storeCodeResponse.Response.CodeId);\n\n```\n### Instantiate a contract from code id\n\n```csharp\nvar codeId = storeCodeResponse.Response.CodeId; // see above\nvar codeHash = await secretClient.Query.Compute.GetCodeHashByCodeId(codeId); // get codeHash (optional)\n\nvar msgInitContract = new MsgInstantiateContract(\n                            codeId: codeId, \n                            label: $\"MySimpleCouter {codeId}\", \n                            initMsg: new { count = 100 }, \n                            codeHash: codeHash\t// optional but way faster\n\t\t\t    );\n\nvar initContractResponse = await secretClient.Tx.Compute.InstantiateContract(msgInitContract, txOptions: txOptionsUpload);\nlogSecretTx(\"InstantiateContract\", initContractResponse);\n\nconst contractAddress = initContractResponse.Response.Address);\n\n```\n\n### Calling a smart contract\nExecute a function on a contract\n\n```csharp\nvar msgExecuteContract = new MsgExecuteContract(\n\t\t\t\tcontractAddress: contractAddress, \n\t\t\t\tmsg: executeMsg, \n\t\t\t\tcodeHash: contractCodeHash,\n\t\t\t\tsender: null, \t\t// optional =\u003e set to the wallet address\n\t\t\t\tsentFunds: null \t// optional\n\t\t\t\t);\n\n// Where T can be an object to JSON-deserialize or just type string\nvar tx = await secretClient.Tx.Compute.ExecuteContract\u003cT\u003e(msgExecuteContract, new TxOptions\n{\n    // Adjust gasLimit to you got from a simulate tx\n    GasLimit = 150000,\n});\n\n```\n\nYou can find more examples in the [ready to run example CLI project](https://github.com/0xxCodemonkey/SecretNET/blob/main/examples/SecretNET.Examples/Program.cs).\n\n# Overview of all query and transaction methods\n\n## All query methods\n- secretClient.Query.Auth\n- secretClient.Query.Authz\n- secretClient.Query.Bank\n- secretClient.Query.Compute\n- secretClient.Query.Distribution\n- secretClient.Query.Evidence\n- secretClient.Query.Feegrant\n- secretClient.Query.Gov\n- secretClient.Query.IbcChannel\n- secretClient.Query.IbcClient\n- secretClient.Query.IbcConnection\n- secretClient.Query.IbcTransfer\n- secretClient.Query.Mint\n- secretClient.Query.Params\n- secretClient.Query.Registration\n- secretClient.Query.Slashing\n- secretClient.Query.Staking\n- secretClient.Query.Tendermint\n- secretClient.Query.Upgrade\n\nSee all details in the [**Full API »**](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Query.Queries.htm)\n\n### [secretClient.Query](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Query.Queries.htm)\n- `GetTx(string hash, bool tryToDecrypt = true)` =\u003e Returns a transaction with a txhash. `hash` is a 64 character upper-case hex string. (see [above](#secretclientquerygettxstring-hash-bool-trytodecrypt--true))\n- `TxsQuery(string query, bool tryToDecrypt = false)` =\u003e Returns all transactions that match a query.  (see [above](#secretclientquerytxsquerystring-query-bool-trytodecrypt--false))\n- `GetTxsEvent(GetTxsEventRequest request, bool tryToDecrypt = false)` =\u003e Returns all transactions that matches the specified events (`GetTxsEventRequest.Events`).\n\n### [secretClient.Query.Auth](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Query.AuthQueryClient.htm)\n- `Account(string address)` =\u003e Returns account details based on address.\n- `Accounts()` =\u003e Returns all existing accounts on the blockchain.\n\n### [secretClient.Query.Authz](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Query.AuthzQueryClient.htm)\n- `GranteeGrants(QueryGranteeGrantsRequest request)` =\u003e GranteeGrants returns a list of `GrantAuthorization` by grantee. Since: cosmos-sdk 0.45.2.\n- `GranterGrants(QueryGranterGrantsRequest request)` =\u003e GranterGrants returns list of `GrantAuthorization`, granted by granter. Since: cosmos-sdk 0.45.2.\n- `Grants(QueryGrantsRequest request)` =\u003e Returns list of `Authorization`, granted to the grantee by the granter.\n\n### [secretClient.Query.Bank](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Query.BankQueryClient.htm)\n- `Balance(QueryBalanceRequest request)` / `Balance(string address, string denom)` =\u003e Balance queries the balance of **a single** coin for a single account.\n- `Balance(QueryAllBalancesRequest request)` =\u003e AllBalances queries the balance of **all coins** for a single account.\n- `DenomMetadata(QueryDenomMetadataRequest request)` =\u003e DenomsMetadata queries the client metadata of **a given coin** denomination.\n- `DenomsMetadata(QueryDenomsMetadataRequest request)` =\u003e DenomsMetadata queries the client metadata **for all registered** coin denominations.\n- `Params(QueryParamsRequest request)` =\u003e Params queries the parameters of x/bank module.\n- `SpendableBalances(QuerySpendableBalancesRequest request)` =\u003e SpendableBalances queries the spenable balance of all coins for a single.\n- `SupplyOf(QuerySupplyOfRequest request)` =\u003e SupplyOf queries the supply of a single coin.\n- `TotalSupply(QueryTotalSupplyRequest request)` =\u003e TotalSupply queries the total supply of all coins.\n\n### [secretClient.Query.Compute](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Query.ComputeQueryClient.htm)\n- `Code(ulong codeId, Metadata metadata)` =\u003e Get WASM bytecode and metadata for a code id.\n- `Codes(Metadata metadata)` =\u003e Query all codes on chain.\n- `ContractInfo(string contractAddress, Metadata metadata)` =\u003e Get metadata of a Secret Contract.\n- `ContractsByCode(ulong codeId, Metadata metadata)` =\u003e Get all contracts that were instantiated from a code id.\n- `GetCodeHash(string contractAddress, Metadata metadata)` =\u003e Get the codeHash of a Secret Contract.\n- `GetCodeHashByCodeId(ulong codeId, Metadata metadata)` =\u003e Get the codeHash from a code id.\n- `QueryContract\u003cR\u003e(string contractAddress, Object queryMsg, string codeHash, Metadata metadata)` =\u003e Query a Secret Contract and cast the response as `R`. (see above)\n\n### [secretClient.Query.Distribution](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Query.DistributionQueryClient.htm)\n- `Balance(QueryParamsRequest request)` =\u003e CommunityPool queries the community pool coins.\n- `CommunityPool(QueryCommunityPoolRequest request)` =\u003e Query all codes on chain.\n- `DelegationRewards(QueryDelegationRewardsRequest request)` =\u003e DelegationRewards queries the total rewards accrued by a delegation.\n- `DelegationTotalRewards(QueryDelegationTotalRewardsRequest request)` =\u003e DelegationTotalRewards queries the total rewards accrued by a each.\n- `DelegatorValidators(QueryDelegatorValidatorsRequest request)` =\u003e DelegatorValidators queries the validators of a delegator.\n- `DelegatorWithdrawAddress(QueryDelegatorWithdrawAddressRequest request)` =\u003e DelegatorWithdrawAddress queries withdraw address of a delegator.\n- `FoundationTax(QueryFoundationTaxRequest request)` =\u003e FoundationTax queries.\n- `ValidatorCommission(QueryValidatorCommissionRequest request)` =\u003e ValidatorCommission queries accumulated commission for a validator.\n- `ValidatorOutstandingRewards(QueryValidatorCommissionRequest request)` =\u003e ValidatorOutstandingRewards queries rewards of a validator address.\n- `ValidatorSlashes(QueryValidatorCommissionRequest request)` =\u003e ValidatorSlashes queries slash events of a validator.\n\n### [secretClient.Query.Evidence](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Query.EvidenceQueryClient.htm)\n- `AllEvidence(QueryAllEvidenceRequest request)` =\u003e AllEvidence queries all evidence.\n- `FoundationTax(QueryEvidenceRequest request)` =\u003e Evidence queries evidence based on evidence hash.\n\n### [secretClient.Query.Feegrant](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Query.FeegrantQueryClient.htm)\n- `Allowance(QueryAllowanceRequest request)` =\u003e Allowance returns fee granted to the grantee by the granter.\n- `Allowances(QueryAllowancesRequest request)` =\u003e Allowances returns all the grants for address.\n\n### [secretClient.Query.Gov](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Query.GovQueryClient.htm)\n- `Deposit(QueryDepositRequest request)` =\u003e Deposit queries single deposit information based proposalID, depositAddr.\n- `Deposits(QueryDepositsRequest request)` =\u003e Deposits queries all deposits of a single proposal.\n- `Params(QueryParamsRequest request)` =\u003e Params queries all parameters of the gov module.\n- `Proposal(QueryProposalRequest request)` =\u003e Proposal queries proposal details based on ProposalID.\n- `Proposals(QueryProposalsRequest request)` =\u003e Proposals queries all proposals based on given status.\n- `TallyResult(QueryTallyResultRequest request)` =\u003e TallyResult queries the tally of a proposal vote.\n- `Vote(QueryVoteRequest request)` =\u003e Vote queries voted information based on proposalID, voterAddr.\n- `Votes(QueryVotesRequest request)` =\u003e Votes queries votes of a given proposal.\n\n### [secretClient.Query.IbcChannel](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Query.IbcChannelQueryClient.htm)\n- `Channel(QueryChannelRequest request)` =\u003e Channel queries an IBC Channel.\n- `Channels(QueryChannelsRequest request)` =\u003e Channels queries all the IBC channels of a chain.\n- `ChannelClientState(QueryChannelClientStateRequest request)` =\u003e ChannelClientState queries for the client state for the channel associated with the provided channel identifiers.\n- `ChannelConsensusState(QueryChannelConsensusStateRequest request)` =\u003e ChannelConsensusState queries for the consensus state for the channel associated with the provided channel identifiers.\n- `ConnectionChannels(QueryConnectionChannelsRequest request)` =\u003e ConnectionChannels queries all the channels associated with a connection end.\n- `NextSequenceReceive(QueryNextSequenceReceiveRequest request)` =\u003e NextSequenceReceive returns the next receive sequence for a given channel.\n- `PacketAcknowledgement(QueryPacketAcknowledgementRequest request)` =\u003e PacketAcknowledgement queries a stored packet acknowledgement hash.\n- `PacketAcknowledgements(QueryPacketAcknowledgementsRequest request)` =\u003e PacketAcknowledgements returns all the packet acknowledgements associated with a channel.\n- `PacketCommitment(QueryPacketCommitmentRequest request)` =\u003e PacketCommitment queries a stored packet commitment hash.\n- `PacketCommitments(QueryPacketCommitmentsRequest request)` =\u003e PacketCommitments returns all the packet commitments hashes associated with a channel.\n- `PacketReceipt(QueryPacketReceiptRequest request)` =\u003e PacketReceipt queries if a given packet sequence has been received on the queried chain.\n- `UnreceivedAcks(QueryUnreceivedAcksRequest request)` =\u003e UnreceivedAcks returns all the unreceived IBC acknowledgements associated with a channel and sequences.\n- `UnreceivedPackets(QueryUnreceivedPacketsRequest request)` =\u003e UnreceivedPackets returns all the unreceived IBC packets associated with a channel and sequences.\n\n### [secretClient.Query.IbcClient](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Query.IbcClientQueryClient.htm)\n- `ClientParams(QueryClientParamsRequest request)` =\u003e ClientParams queries all parameters of the ibc client.\n- `ClientState(QueryClientStateRequest request)` =\u003e ClientState queries an IBC light client.\n- `ClientStates(QueryClientStatesRequest request)` =\u003e ClientStates queries all the IBC light clients of a chain.\n- `ClientStatus(QueryClientStatusRequest request)` =\u003e Status queries the status of an IBC client.\n- `ConsensusState(QueryConsensusStateRequest request)` =\u003e ConsensusState queries a consensus state associated with a client state at a given height.\n- `ConsensusStates(QueryTallyResultRequest request)` =\u003e ConsensusStates queries all the consensus state associated with a given client.\n- `UpgradedClientState(QueryUpgradedClientStateRequest request)` =\u003e UpgradedClientState queries an Upgraded IBC light client.\n- `UpgradedConsensusState(QueryUpgradedConsensusStateRequest request)` =\u003e UpgradedConsensusState queries an Upgraded IBC consensus state.\n\n### [secretClient.Query.IbcConnection](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Query.IbcConnectionQueryClient.htm)\n- `ClientConnections(QueryClientConnectionsRequest request)` =\u003e ClientConnections queries the connection paths associated with a client state.\n- `Connection(QueryConnectionRequest request)` =\u003e Connection queries an IBC connection end.\n- `Connections(QueryConnectionsRequest request)` =\u003e Connections queries all the IBC connections of a chain.\n- `ConnectionClientState(QueryConnectionClientStateRequest request)` =\u003e ConnectionClientState queries the client state associated with the connection.\n- `ConnectionConsensusState(QueryConnectionConsensusStateRequest request)` =\u003e ConnectionConsensusState queries the consensus state associated with the connection.\n\n### [secretClient.Query.IbcTransfer](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Query.IbcTransferQueryClient.htm)\n- `DenomHash(QueryDenomHashRequest request)` =\u003e DenomHash queries a denomination hash information.\n- `DenomTrace(QueryDenomTraceRequest request)` =\u003e DenomTrace queries a denomination trace information.\n- `DenomTraces(QueryDenomTracesRequest request)` =\u003e DenomTraces queries all denomination traces.\n- `Params(QueryParamsRequest request)` =\u003e Params queries all parameters of the ibc-transfer module.\n\n### [secretClient.Query.Mint](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Query.MintQueryClient.htm)\n- `AnnualProvisions(QueryAnnualProvisionsRequest request)` =\u003e AnnualProvisions current minting annual provisions value.\n- `Inflation(QueryInflationRequest request)` =\u003e Inflation returns the current minting inflation value.\n- `Params(QueryParamsRequest request)` =\u003e Params returns the total set of minting parameters.\n\n### [secretClient.Query.Params](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Query.ParamsQueryClient.htm)\n- `Params(QueryParamsRequest request)` =\u003e Params queries a specific parameter of a module, given its subspace and key.\n\n### [secretClient.Query.Registration](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Query.RegistrationQueryClient.htm)\n- `EncryptedSeed(QueryEncryptedSeedRequest request)` =\u003e Encrypteds the seed.\n- `RegistrationKey()` =\u003e Returns the key used for registration.\n- `TxKey()` =\u003e Returns the key used for transactions.\n\n### [secretClient.Query.Slashing](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Query.SlashingQueryClient.htm)\n- `Params(QueryParamsRequest request)` =\u003e Params queries the parameters of slashing module.\n- `SigningInfo(QuerySigningInfoRequest request)` =\u003e SigningInfo queries the signing info of given cons address.\n- `SigningInfos(QuerySigningInfosRequest request)` =\u003e SigningInfos queries signing info of all validators.\n\n### [secretClient.Query.Staking](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Query.StakingQueryClient.htm)\n- `Delegation(QueryDelegationRequest request)` =\u003e Delegation queries delegate info for given validator delegator pair.\n- `DelegatorDelegations(QueryDelegatorDelegationsRequest request)` =\u003e DelegatorDelegations queries all delegations of a given delegator address.\n- `DelegatorValidator(QueryDelegatorValidatorRequest request)` =\u003e DelegatorValidator queries validator info for given delegator validator pair.\n- `DelegatorsValidators(QueryDelegatorValidatorsRequest request)` =\u003e DelegatorValidators queries all validators info for given delegator address.\n- `DelegatorUnbondingDelegations(QueryDelegatorUnbondingDelegationsRequest request)` =\u003e DelegatorUnbondingDelegations queries all unbonding delegations of a given delegator address.\n- `HistoricalInfo(QueryHistoricalInfoRequest request)` =\u003e HistoricalInfo queries the historical info for given height.\n- `Params(QueryParamsRequest request)` =\u003e Parameters queries the staking parameters.\n- `Pool(QueryPoolRequest request)` =\u003e Pool queries the pool info.\n- `Redelegations(QueryRedelegationsRequest request)` =\u003e Redelegations queries redelegations of given address.\n- `UnbondingDelegation(QueryUnbondingDelegationRequest request)` =\u003e UnbondingDelegation queries unbonding info for given validator delegator pair.\n- `Validator(QueryValidatorRequest request)` =\u003e Validator queries validator info for given validator address.\n- `Validators(QueryValidatorsRequest request)` =\u003e Validators queries all validators that match the given status.\n- `ValidatorDelegations(QueryValidatorDelegationsRequest request)` =\u003e ValidatorDelegations queries delegate info for given validator.\n- `ValidatorUnbondingDelegations(QueryValidatorUnbondingDelegationsRequest request)` =\u003e ValidatorUnbondingDelegations queries unbonding delegations of a validator.\n\n### [secretClient.Query.Tendermint](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Query.TendermintQueryClient.htm)\n- `GetBlockByHeight(GetBlockByHeightRequest request)` =\u003e GetBlockByHeight queries block for given height.\n- `GetLatestBlock(GetLatestBlockRequest request)` =\u003e GetLatestBlock returns the latest block.\n- `GetLatestValidatorSet(GetLatestValidatorSetRequest request)` =\u003e GetLatestValidatorSet queries latest validator-set.\n- `GetNodeInfo(GetNodeInfoRequest request)` =\u003e GetNodeInfo queries the current node info.\n- `GetSyncing(GetSyncingRequest request)` =\u003e GetSyncing queries node syncing.\n- `GetValidatorSetByHeight(GetValidatorSetByHeightRequest request)` =\u003e GetValidatorSetByHeight queries validator-set at a given height.\n\n### [secretClient.Query.Upgrade](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Query.UpgradeQueryClient.htm)\n- `AppliedPlan(QueryAppliedPlanRequest request)` =\u003e AppliedPlan queries a previously applied upgrade plan by its name.\n- `CurrentPlan(QueryCurrentPlanRequest request)` =\u003e CurrentPlan queries the current upgrade plan.\n- `ModuleVersions(QueryModuleVersionsRequest request)` =\u003e ModuleVersions queries the list of module versions from state. Since: cosmos-sdk 0.43.\n\n## All transaction methods\n- secretClient.Tx.Authz\n- secretClient.Tx.Bank\n- secretClient.Tx.Compute\n- secretClient.Tx.Crisis\n- secretClient.Tx.Distribution\n- secretClient.Tx.Evidence\n- secretClient.Tx.Feegrant\n- secretClient.Tx.Gov\n- secretClient.Tx.IbcChannel\n- secretClient.Tx.IbcClient\n- secretClient.Tx.IbcConnection\n- secretClient.Tx.IbcTransfer\n- secretClient.Tx.Slashing\n- secretClient.Tx.Staking\n- secretClient.Tx.Vesting\n\nSee all details in the [**Full API »**](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Tx.TxClient.htm)\n\n### [secretClient.Tx](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Tx.TxClient.htm)\n- `Simulate(IMessage message, TxOptions txOptions = null)` =\u003e Used to simulate a complex transactions, which contains a list of messages, without broadcasting it to the chain. (has several overloads).\n- `Broadcast(IMessage message, TxOptions txOptions = null)` =\u003e Used to send a complex transactions, which contains a list of messages. The messages are executed in sequence, and the transaction succeeds if all messages succeed. (has several overloads).\n- `Broadcast\u003cT\u003e(IMessage message, TxOptions txOptions = null)` =\u003e Like Broadcast but tries to convert the first message result to T. (has several overloads).\n\n### [secretClient.Tx.Authz](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Tx.AuthzTx.htm)\n- `Exec(MsgExec msg, TxOptions txOptions = null)` =\u003e Exec attempts to execute the provided messages using authorizations granted to the grantee. Each message should have only one signer corresponding to the granter of the authorization. \n- `Grant(MsgExec msg, TxOptions txOptions = null)` =\u003e Grant is a request type for Grant method. It declares authorization to the grantee on behalf of the granter with the provided expiration time. \n- `Revoke(MsgRevoke msg, TxOptions txOptions = null)` =\u003e Revoke revokes any authorization with the provided sdk.Msg type on the granter's account with that has been granted to the grantee. \n\n### [secretClient.Tx.Bank](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Tx.BankTx.htm)\n- `Send(string toAddress, int amount, string denom, TxOptions txOptions = null)` =\u003e Sends SCRT to the specified to address.\n- `Send(MsgSend msg, TxOptions txOptions = null)` =\u003e MsgSend represents a message to send coins from one account to another. \n- `MultiSend(MsgMultiSend msg, TxOptions txOptions = null)` =\u003e MsgMultiSend represents an arbitrary multi-in, multi-out send message.\n- \n### [secretClient.Tx.Compute](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Tx.ComputeTx.htm)\n- `ExecuteContract(MsgExecuteContract msg, TxOptions txOptions = null)` =\u003e Execute a function on a contract. (see also [above](#calling-a-smart-contract))\n- `ExecuteContract\u003cT\u003e(MsgExecuteContract msg, TxOptions txOptions = null)` =\u003e Execute a function on a contract and tries to convert the response to T.\n- `InstantiateContract(MsgInstantiateContract msg, TxOptions txOptions = null)` =\u003e Instantiate a contract from code id. (see also [above](#instantiate-a-contract-from-code-id))\n- `StoreCode(MsgStoreCode msg, TxOptions txOptions = null)` =\u003e Upload a compiled contract to Secret Network. (see also [above](#uploading-a-smart-contract))\n\n### [secretClient.Tx.Crisis](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Tx.CrisisTx.htm)\n- `VerifyInvariant(MsgVerifyInvariant msg, TxOptions txOptions = null)` =\u003e MsgVerifyInvariant represents a message to verify a particular invariance. \n\n### [secretClient.Tx.Distribution](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Tx.DistributionTx.htm)\n- `FundCommunityPool(MsgFundCommunityPool msg, TxOptions txOptions = null)` =\u003e MsgFundCommunityPool allows an account to directly fund the community pool. \n- `SetWithdrawAddress(MsgSetWithdrawAddress msg, TxOptions txOptions = null)` =\u003e MsgSetWithdrawAddress sets the withdraw address for a delegator (or validator self-delegation). \n- `WithdrawDelegatorReward(MsgWithdrawDelegatorReward msg, TxOptions txOptions = null)` =\u003e MsgWithdrawDelegatorReward represents delegation withdrawal to a delegator from a single validator. \n- `WithdrawValidatorCommission(MsgExec msg, TxOptions txOptions = null)` =\u003e MsgWithdrawValidatorCommission withdraws the full commission to the validator address. \n\n### [secretClient.Tx.Evidence](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Tx.EvidenceTx.htm)\n- `SubmitEvidence(MsgSubmitEvidence msg, TxOptions txOptions = null)` =\u003e MsgSubmitEvidence represents a message that supports submitting arbitrary Evidence of misbehavior such as equivocation or counterfactual signing. \n\n### [secretClient.Tx.Feegrant](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Tx.FeegrantTx.htm)\n- `GrantAllowance(MsgGrantAllowance msg, TxOptions txOptions = null)` =\u003e MsgGrantAllowance adds permission for Grantee to spend up to Allowance of fees from the account of Granter. \n- `RevokeAllowance(MsgRevokeAllowance msg, TxOptions txOptions = null)` =\u003e MsgRevokeAllowance removes any existing Allowance from Granter to Grantee. \n\n### [secretClient.Tx.Gov](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Tx.GovTx.htm)\n- `Deposit(MsgDeposit msg, TxOptions txOptions = null)` =\u003e MsgDeposit defines a message to submit a deposit to an existing proposal. \n- `SubmitProposal(MsgSubmitProposal msg, TxOptions txOptions = null)` =\u003e MsgSubmitProposal defines an sdk.Msg type that supports submitting arbitrary proposal Content. \n- `Vote(MsgVote msg, TxOptions txOptions = null)` =\u003e MsgVote defines a message to cast a vote. \n- `VoteWeighted(MsgVoteWeighted msg, TxOptions txOptions = null)` =\u003e MsgVoteWeighted defines a message to cast a vote, with an option to split the vote. \n\n### [secretClient.Tx.IbcChannel](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Tx.IbcChannelTx.htm)\n- `Acknowledgement(MsgAcknowledgement msg, TxOptions txOptions = null)` =\u003e \n- `ChannelCloseConfirm(MsgChannelCloseConfirm msg, TxOptions txOptions = null)` =\u003e \n- `ChannelCloseInit(MsgChannelCloseInit msg, TxOptions txOptions = null)` =\u003e \n- `ChannelOpenAck(MsgChannelOpenAck msg, TxOptions txOptions = null)` =\u003e \n- `ChannelOpenConfirm(MsgChannelOpenConfirm msg, TxOptions txOptions = null)` =\u003e \n- `ChannelOpenInit(MsgChannelOpenInit msg, TxOptions txOptions = null)` =\u003e \n- `ChannelOpenTry(MsgChannelOpenTry msg, TxOptions txOptions = null)` =\u003e \n- `RecvPacket(MsgRecvPacket msg, TxOptions txOptions = null)` =\u003e \n- `Timeout(MsgTimeout msg, TxOptions txOptions = null)` =\u003e \n- `TimeoutOnClose(MsgTimeoutOnClose msg, TxOptions txOptions = null)` =\u003e \n\n### [secretClient.Tx.IbcClient](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Tx.IbcClientTx.htm)\n- `CreateClient(MsgCreateClient msg, TxOptions txOptions = null)` =\u003e \n- `SubmitMisbehaviour(MsgSubmitMisbehaviour msg, TxOptions txOptions = null)` =\u003e \n- `UpdateClient(MsgUpdateClient msg, TxOptions txOptions = null)` =\u003e \n- `UpgradeClient(MsgUpgradeClient msg, TxOptions txOptions = null)` =\u003e \n\n### [secretClient.Tx.IbcConnection](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Tx.IbcConnectionTx.htm)\n- `ConnectionOpenAck(MsgConnectionOpenAck msg, TxOptions txOptions = null)` =\u003e \n- `ConnectionOpenConfirm(MsgConnectionOpenConfirm msg, TxOptions txOptions = null)` =\u003e \n- `ConnectionOpenInit(MsgConnectionOpenInit msg, TxOptions txOptions = null)` =\u003e \n- `ConnectionOpenTry(MsgConnectionOpenTry msg, TxOptions txOptions = null)` =\u003e \n\n### [secretClient.Tx.IbcTransfer](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Tx.IbcTransferTx.htm)\n- `Transfer(MsgTransfer msg, TxOptions txOptions = null)` =\u003e MsgTransfer defines a msg to transfer fungible tokens (i.e Coins) between ICS20 enabled chains. See ICS Spec here: https://github.com/cosmos/ics/tree/master/spec/ics-020-fungible-token-transfer#data-structures \n\n### [secretClient.Tx.Slashing](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Tx.SlashingTx.htm)\n- `Unjail(MsgUnjail msg, TxOptions txOptions = null)` =\u003e MsgUnjail defines a message to release a validator from jail. \n\n### [secretClient.Tx.Staking](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Tx.StakingTx.htm)\n- `BeginRedelegate(MsgBeginRedelegate msg, TxOptions txOptions = null)` =\u003e MsgBeginRedelegate defines an SDK message for performing a redelegation of coins from a delegator and source validator to a destination validator. \n- `CreateValidator(MsgCreateValidator msg, TxOptions txOptions = null)` =\u003e MsgCreateValidator defines an SDK message for creating a new validator. \n- `Delegate(MsgDelegate msg, TxOptions txOptions = null)` =\u003e MsgDelegate defines an SDK message for performing a delegation of coins from a delegator to a validator. \n- `EditValidator(MsgEditValidator msg, TxOptions txOptions = null)` =\u003e MsgEditValidator defines an SDK message for editing an existing validator. \n- `Undelegate(MsgUndelegate msg, TxOptions txOptions = null)` =\u003e MsgUndelegate defines an SDK message for performing an undelegation from a delegate and a validator \n\n### [secretClient.Tx.Vesting](https://0xxcodemonkey.github.io/SecretNET/html/AllMembers.T-SecretNET.Tx.VestingTx.htm)\n- `CreateVestingAccount(MsgCreateVestingAccount msg, TxOptions txOptions = null)` =\u003e MsgCreateVestingAccount defines a message that enables creating a vesting account. \n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F0xxCodemonkey%2FSecretNET","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F0xxCodemonkey%2FSecretNET","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F0xxCodemonkey%2FSecretNET/lists"}