Javascript & Smart Contracts
This guide describes interacting with Osmosis Smart contracts via JavaScript runtimes such as Node.js and the browser.
Prerequisites
- npm and node.js
- localosmosis - (Not needed when connecting to mainnet)
- Keplr browser not used on the guide yet
Start a new project
npm init -y
Install cosmwasm
npm i cosmwasm
Open the package.json file in a code editor and add
"type": "module",.
{
// ...
"type": "module",
// ...
}
Create a new index.ts file
touch index.ts
The class CosmWasmClient is exported from the CosmJS package @cosmjs/cosmwasm-stargate. Learn more in the official docs.
import { CosmWasmClient } from "cosmwasm";
// This is your rpc endpoint
const rpcEndpoint = "http://localhost:26657/";
async function main() {
const client = await CosmWasmClient.connect(rpcEndpoint);
console.log(client);
}
main();
:: tip You can also connect to the mainnet by replacing rpcEndpoint to https://rpc.osmosis.zone/ ::
Run it
npm index.js
You should see something like:
Other methods
As documented on the official docs.
async function moreExamples() {
const client = await CosmWasmClient.connect(rpcEndpoint);
const chainId = await client.getChainId()
const getHeight = await client.getHeight()
const getAccount = await client.getAccount("osmo1phaxpevm5wecex2jyaqty2a4v02qj7qmlmzk5a")
const getSequence = await client.getSequence("osmo1phaxpevm5wecex2jyaqty2a4v02qj7qmlmzk5a")
const getBlock = await client.getBlock(1)
const getBalance = await client.getBalance("osmo1phaxpevm5wecex2jyaqty2a4v02qj7qmlmzk5a","uosmo")
console.log(chainId);
console.log(client);
console.log(getHeight);
console.log(getAccount);
console.log(getSequence);
console.log(getBlock);
console.log(getBalance);
}
moreExamples();
Transactions
Method | Description | Params |
---|---|---|
.getTx() | id: string | |
.searchTx() | query: SearchTxQuery, filter: SearchTxFilter = {} | |
.txsQuery() | query: string |
Codes
Method | Description | Params |
---|---|---|
.getCodes() | none | |
.getCodeDetails() | codeId: number |
Smart Contracts
Method | Description | Params |
---|---|---|
.getContracts() | cideId: number | |
.getContract() | address: string | |
.queryContractRaw() | address: string, key: Uint8Array | |
.queryContractSmart() | address: string, queryMsg: Record<string, unknown> |
Querying Smart Contracts
Before we query smart contracts in localOsmosis we must deploy one by following this guide.
Once you have deployed the smart contract you can get the <CONTRACT-ID>
by running:
osmosisd query wasm list-code
In this particular example there are 7 contracts available. The latest one is 7.
You can now get the contract address by running
osmosisd query wasm list-contract-by-code <CONTRACT-ID>
That's the contract address osmo1zlmaky7753d2fneyhduwz0rn3u9ns8rse3tudhze8rc2g54w9ysq725p3a
for code contract id 7.
Get contract
import { CosmWasmClient } from "cosmwasm";
// This is your rpc endpoint
const rpcEndpoint = "http://localhost:26657/";
async function queryContract() {
const client = await CosmWasmClient.connect(rpcEndpoint);
const getContract = await client.getContract("osmo1zlmaky7753d2fneyhduwz0rn3u9ns8rse3tudhze8rc2g54w9ysq725p3a")
console.log(getContract);
}
queryContract();
Run the code
node index.js
The output should look like this:
Get the count from the contract
The contract we are interacting with has a few simple functions. 'get_count', 'increment' and 'reset'. These two functions can be called by using the queryContractSmart
method.
Please note there is a complete guide on how to upload the example contract on localOsmosis here.
async function getCount() {
const client = await CosmWasmClient.connect(rpcEndpoint);
const getCount = await client.queryContractSmart("osmo1zlmaky7753d2fneyhduwz0rn3u9ns8rse3tudhze8rc2g54w9ysq725p3a",{ "get_count": {}})
console.log(getCount);
}
getCount();