diff --git a/docs/developer-docs/docs/build-an-app/build-a-custom-smart-contract.md b/docs/developer-docs/docs/build-an-app/build-a-custom-smart-contract.md index ca0039db2..bef478c4c 100644 --- a/docs/developer-docs/docs/build-an-app/build-a-custom-smart-contract.md +++ b/docs/developer-docs/docs/build-an-app/build-a-custom-smart-contract.md @@ -1,13 +1,221 @@ --- -sidebar_position: 5 +sidebar_position: 2 --- # Build a custom smart contract -*Coming soon* +## Overview - \ No newline at end of file +Before you start, complete the following prerequisites: + +- Install Rust by running the following: + + ```bash + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh + ``` + +- Set up the CosmWasm development environment: + + - [CosmWasm](https://book.cosmwasm.com/setting-up-env.html): The CosmWasm binary and its dependencies. + + - [cargo-generate](https://cargo-generate.github.io/cargo-generate/installation.html): A tool to help you get up and running quickly with a new Rust project by leveraging a pre-existing git repository as a template. + + - [wasm-opt](https://docs.rs/wasm-opt/latest/wasm_opt/index.html): A tool for optimizing the compiled WebAssembly (Wasm) code. + + To install these tools, run the following commands: + + ```bash + rustup target add wasm32-unknown-unknown + cargo install cargo-generate --features vendored-openssl + brew install binaryen + ``` + +- [Run a local chain](test/run-a-local-chain) and make sure you have `wardend` correctly installed. You can stop the chain for now if you wish. + + The next steps require your local account name, or key name, which is referenced as `my-key-name` in the provided command-line examples. You can check the list of available keys by executing this command (while the node is running): + + ```bash + wardend keys list + ``` + :::tip + In development genesis files, you'll typically find an account named shulgin that is preconfigured and ready for use. + ::: + +## 1. Create a new CosmWasm project + +Create a new CosmWasm project by running the following: + +```bash +cargo generate --git https://github.com/CosmWasm/cw-template.git --name hello-world +cd hello-world +``` + +## 2. Modify the contract code + +1. Open `src/contract.rs` and replace its contents with this code: + + ```rust + use cosmwasm_std::{ + entry_point, to_binary, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult, + }; + use cw2::set_contract_version; + + use crate::error::ContractError; + use crate::msg::{ExecuteMsg, InstantiateMsg, QueryMsg}; + + const CONTRACT_NAME: &str = "crates.io:hello-world"; + const CONTRACT_VERSION: &str = env!("CARGO_PKG_VERSION"); + + #[entry_point] + pub fn instantiate( + deps: DepsMut, + _env: Env, + info: MessageInfo, + _msg: InstantiateMsg, + ) -> Result { + set_contract_version(deps.storage, CONTRACT_NAME, CONTRACT_VERSION)?; + Ok(Response::new().add_attribute("method", "instantiate") + .add_attribute("owner", info.sender)) + } + + #[entry_point] + pub fn execute( + _deps: DepsMut, + _env: Env, + info: MessageInfo, + msg: ExecuteMsg, + ) -> Result { + match msg { + ExecuteMsg::SayHello {} => Ok(Response::new() + .add_attribute("method", "say_hello") + .add_attribute("sender", info.sender)), + } + } + + #[entry_point] + pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { + match msg { + QueryMsg::GetGreeting {} => to_binary(&"Hello, World!"), + } + } + ``` + +2. Open `src/msg.rs` and replace its contents with this code: + + ```rust + use cosmwasm_schema::{cw_serde, QueryResponses}; + + #[cw_serde] + pub struct InstantiateMsg {} + + #[cw_serde] + pub enum ExecuteMsg { + SayHello {}, + } + + #[cw_serde] + #[derive(QueryResponses)] + pub enum QueryMsg { + #[returns(String)] + GetGreeting {}, + } + ``` + +## 4. Compile the contract + +To compile the contract, run the following: + +```bash +cargo wasm +``` + +The contract should be compiled without any errors. + +## 5. Optimize the compiled Wasm code + +Now you need to optimize your compiled Wasm code: + +```bash +wasm-opt -Os -o target/wasm32-unknown-unknown/release/hello_world.wasm / +target/wasm32-unknown-unknown/release/hello_world.wasm +``` + +## 6. Run the chain + +If your local chain isn't running, start it: + +```bash +wardend start +``` + +## 7. Store the contract on-chain + +To store your contract on the Warden chain, run the command below. Replace `my-key-name` with your key name (typically `shulgin`). + + ```bash + wardend tx wasm store target/wasm32-unknown-unknown/release/hello_world.wasm / + --from my-key-name --gas auto --gas-adjustment 1.3 --gas-prices 0.1uward -y + ``` + + The transaction should be successful without any errors. + +## 8. Get the code ID + +Get the code ID, which identifies your Wasm code: + +```bash +wardend query wasm list-code +``` + +Note down `code_id` from the output. + +## 9. Instantiate the contract + +You can instantiate the contract by using the command below. + +Before you proceed, should replace replace `1` with the actual code ID you retrieved in previous step and replace `my-key-name` with your key name. Also note that you can either define an admin or pass `--no-admin` to make it immutable, like in this example. + +```bash +wardend tx wasm instantiate 1 '{}' --from my-key-name / +--label "Hello World" --gas auto --gas-adjustment 1.3 / +--gas-prices 0.1uward --no-admin -y +``` + +## 10. Get the contract address + +To get the contract address, run the following command. Replace `1` with the actual code ID: + +```bash +wardend query wasm list-contract-by-code 1 +``` + +Note down the contract address. + +## 11. Execute the contract + +Use the command below to exectute your contract. Replace `my-contract-address` with your contract address and `my-key-name` with your key name. + +```bash +wardend tx wasm execute my-contract-address '{"say_hello":{}}' / +--from my-key-name --gas auto --gas-adjustment 1.3 --gas-prices 0.1uward -y +``` + +## Result + +Now your contract is ready! + +You can query it with the following command. Replace `my-contract-address` with your contract address. + +```bash +wardend query wasm contract-state smart my-contract-address '{"get_greeting":{}}' +``` + +In the output, you should see `data: Hello, World!` + +If you encounter any issues, please reach out to us via [Discord](https://discord.com/invite/warden) or [Twitter](https://twitter.com/wardenprotocol). + +Happy Coding! 🚀 \ No newline at end of file diff --git a/docs/developer-docs/docs/build-an-app/build-the-frontend/_category_.json b/docs/developer-docs/docs/build-an-app/build-the-frontend/_category_.json deleted file mode 100644 index 07df568e0..000000000 --- a/docs/developer-docs/docs/build-an-app/build-the-frontend/_category_.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "position": 8, - "label": "Build the frontend", - "collapsible": true, - "collapsed": true, - "link": { - "type": "generated-index", - "title": "Build the frontend" - }, - "customProps": {} -} \ No newline at end of file diff --git a/docs/developer-docs/docs/build-an-app/build-the-frontend/quick-start.md b/docs/developer-docs/docs/build-an-app/build-the-frontend/quick-start.md deleted file mode 100644 index 550591b31..000000000 --- a/docs/developer-docs/docs/build-an-app/build-the-frontend/quick-start.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Quick start - -*Coming soon* \ No newline at end of file diff --git a/docs/developer-docs/docs/build-an-app/build-the-frontend/wardenjs-functions.md b/docs/developer-docs/docs/build-an-app/build-the-frontend/wardenjs-functions.md deleted file mode 100644 index 6c630c8e7..000000000 --- a/docs/developer-docs/docs/build-an-app/build-the-frontend/wardenjs-functions.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -sidebar_position: 3 ---- - -# WardenJS functions - -*Coming soon* - - \ No newline at end of file diff --git a/docs/developer-docs/docs/build-an-app/build-the-frontend/wardenui-components.md b/docs/developer-docs/docs/build-an-app/build-the-frontend/wardenui-components.md deleted file mode 100644 index 357a69cf9..000000000 --- a/docs/developer-docs/docs/build-an-app/build-the-frontend/wardenui-components.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -sidebar_position: 2 ---- - -# WardenUI components - -*Coming soon* - - \ No newline at end of file diff --git a/docs/developer-docs/docs/build-an-app/build-with-wardenjs.md b/docs/developer-docs/docs/build-an-app/build-with-wardenjs.md index 70d870126..42bdf5b67 100644 --- a/docs/developer-docs/docs/build-an-app/build-with-wardenjs.md +++ b/docs/developer-docs/docs/build-an-app/build-with-wardenjs.md @@ -1,16 +1,9 @@ --- -sidebar_position: 4 +sidebar_position: 3 --- # Build with WardenJS -*Coming soon* +**WardenJS** is a tool helping you to build the frontend part of your application. It makes it easy to compose and broadcast messages, with all of the proto and amino encoding handled for you. - \ No newline at end of file +You can find basic WardenJS documentation here: [WardenJS](https://www.npmjs.com/package/@wardenprotocol/wardenjs) \ No newline at end of file diff --git a/docs/developer-docs/docs/build-an-app/examples-of-oapps.md b/docs/developer-docs/docs/build-an-app/examples-of-oapps.md index 4e748ae8e..fd435b19c 100644 --- a/docs/developer-docs/docs/build-an-app/examples-of-oapps.md +++ b/docs/developer-docs/docs/build-an-app/examples-of-oapps.md @@ -1,5 +1,5 @@ --- -sidebar_position: 2 +sidebar_position: 4 --- # Examples of OApps diff --git a/docs/developer-docs/docs/build-an-app/introduction.md b/docs/developer-docs/docs/build-an-app/introduction.md index 48e40b230..ef80736a0 100644 --- a/docs/developer-docs/docs/build-an-app/introduction.md +++ b/docs/developer-docs/docs/build-an-app/introduction.md @@ -8,22 +8,18 @@ sidebar_position: 1 **Omnichain Applications** (**OApps**) are a powerful evolution of traditional smart contracts. They allow signing transactions at any chain, while traditional smart contract applications only target users of a single chain. -An example of an OApp is [SpaceWard](https://help.wardenprotocol.org) – our application functioning as the front-end interface for Warden. For a full list of available OApps, see [Examples of OApps](examples-of-oapps). +An example of an OApp is [SpaceWard](https://help.wardenprotocol.org) – our application functioning as the front-end interface for Warden. -This section explains how to build the backend and frontend of an OApp. Here you'll also find guides for running a [node](/learn/glossary#warden-protocol-node) and a [Keychain](/learn/glossary#keychain) in the test mode. +## Section overview -## Get started +- [Build a custom smart contract](build-a-custom-smart-contract) +Get started with OApps and build a basic **Omnichain Contract**, which is the main part of any Omnichain Application. -The main part of any Omnichain Application is an **Omnichain Contract**: a smart contract that allows signing transactions and messages at any destination chain. For this reason, OApp development starts with building a custom Omnichain Contract with [CosmWasm](https://cosmwasm.com). +- [Build with WardenJS](build-with-wardenjs) +Here you'll find information on WardenJS – a tool used for building the frontend part of your application. Stay tuned in for more frontend guides. -To learn more, check our list of CosmWasm resources in the [Useful links](useful-links) section. +- [Useful links](useful-links) +To learn more about building smart contracts, check our list of CosmWasm resources and developer guides. -*Please note that this section is under construction. More information is coming soon.* - - \ No newline at end of file +- [Examples of OApps](examples-of-oapps) +Here you can find a full list of available OApps. \ No newline at end of file diff --git a/docs/developer-docs/docs/build-an-app/quick-start.md b/docs/developer-docs/docs/build-an-app/quick-start.md deleted file mode 100644 index 44215ce87..000000000 --- a/docs/developer-docs/docs/build-an-app/quick-start.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Quick start - -*This section is under construction.* - -*To get started, you can check our list of CosmWasm resources in the [Useful links](useful-links) section.* - - \ No newline at end of file diff --git a/docs/developer-docs/docs/build-an-app/smart-contract-api-reference.md b/docs/developer-docs/docs/build-an-app/smart-contract-api-reference.md deleted file mode 100644 index c14f7da71..000000000 --- a/docs/developer-docs/docs/build-an-app/smart-contract-api-reference.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -sidebar_position: 6 ---- - -# Smart contract API reference - -*Coming soon* - - \ No newline at end of file diff --git a/docs/developer-docs/docs/build-an-app/useful-links.md b/docs/developer-docs/docs/build-an-app/useful-links.md index 22aa55be3..fb4227dd4 100644 --- a/docs/developer-docs/docs/build-an-app/useful-links.md +++ b/docs/developer-docs/docs/build-an-app/useful-links.md @@ -1,5 +1,5 @@ --- -sidebar_position: 7 +sidebar_position: 3 --- # Useful links diff --git a/docs/developer-docs/docusaurus.config.ts b/docs/developer-docs/docusaurus.config.ts index 87adf687f..212027650 100644 --- a/docs/developer-docs/docusaurus.config.ts +++ b/docs/developer-docs/docusaurus.config.ts @@ -81,7 +81,7 @@ const config: Config = { { type: "docSidebar", sidebarId: "buildApp", - label: "Build an App", + label: "Build an app", position: "left", }, { @@ -102,33 +102,6 @@ const config: Config = { label: "Tokens", position: "left", }, - { - type: "dropdown", - label: "Tools", - position: "left", - items: [ - { - type: "doc", - label: "Smart contract API", - docId: "build-an-app/smart-contract-api-reference", - }, - { - type: "doc", - label: "WardenJS", - docId: "build-an-app/build-the-frontend/wardenjs-functions", - }, - { - type: "doc", - label: "Keychain SDK", - docId: "build-a-keychain/sdk/keychain-sdk", - }, - { - type: "doc", - label: "Node API", - docId: "operate-a-node/node-api-reference", - }, - ], - }, { href: "https://discord.com/invite/warden", label: "Discord",