The official TypeScript SDK for the Nibiru blockchain
The NibiJS (@nibiruchain/nibijs
) package makes it possible to interact with Nibiru from a Node.js or browser environment. nibijs
provides simple abstractions for core data structures, serialization, key management, API requests, and the submission of transactions.
The nibijs
source code can be found in the "packages" directory. The types and classes generated from Nibiru's .proto
files are inside a separate npm
package called @nibiruchain/protojs
.
To learn more about Nibiru, see docs.nibiru.fi
@nibiruchain/nibijs is available on the npm registry.
npm install @nibiruchain/nibijs # or yarn add
The entrypoint for nibijs
is the Sdk
object, which is meant to mimic the root of a command line interface. It can be used for both queries and transactions.
import { newRandomWallet, WalletHD } from "@nibiruchain/nibijs"
const wallet = await newRandomWallet()
const [{ address }] = await wallet.getAccounts()
// Save the mnemonic somewhere to re-use the account
console.log("mnemonic: ", wallet.mnemonic)
console.log("address: ", address)
import {
IncentivizedTestnet,
NibiruQueryClient,
NibiruSigningClient,
} from "@nibiruchain/nibijs"
const TEST_CHAIN = IncentivizedTestnet(2)
const queryClient = await NibiruQueryClient.connect(TEST_CHAIN.endptTm)
const perpParamsResp = await queryClient.nibiruExtensions.perp.params()
console.log("perpParams: %o", perpParamsResp)
const allMarkets = await queryClient.nibiruExtensions.perp.markets({
pair: "ueth:unusd",
})
console.log("allMarkets: %o", allMarkets)
const blockHeight = 1
const block = await queryClient.getBlock(blockHeight)
import {
Coin,
NibiruSigningClient,
newCoins,
newSignerFromMnemonic,
} from "@nibiruchain/nibijs"
const signer = await newSignerFromMnemonic(mnemonic!)
const signingClient = await NibiruSigningClient.connectWithSigner(
TEST_CHAIN.endptTm,
signer,
)
const [{ address: fromAddr }] = await signer.getAccounts()
const tokens: Coin[] = newCoins(5, "unibi")
const toAddr: string = "..." // bech32 address of the receiving party
const txResp = await signingClient.sendTokens(fromAddr, toAddr, tokens, "auto")
import { IncentivizedTestnet, NibiruSigningClient, newCoin } from "@nibiruchain/nibijs"
import { Msg, TxMessage } from "@nibiruchain/nibijs/dist/msg"
const signer = await newSignerFromMnemonic(mnemonic!)
signer.getAccounts()
const signingClient = await NibiruSigningClient.connectWithSigner(
TEST_CHAIN.endptTm,
signer,
)
const [{ address: fromAddr }] = await signer.getAccounts()
const pair = "ubtc:unusd"
const msgs: TxMessage[] = [
Msg.perp.openPosition({
tokenPair: pair,
baseAssetAmountLimit: 0,
leverage: 1,
quoteAssetAmount: 10,
sender: fromAddr,
goLong: true,
}),
Msg.perp.addMargin({
sender: fromAddr,
tokenPair: pair,
margin: newCoin("20", "unusd"),
}),
Msg.perp.removeMargin({
tokenPair: pair,
sender: fromAddr,
margin: newCoin("5", "unusd"),
}),
// final margin value of 10 (open) + 20 (add) - 5 (remove) = 25
]
const txResp = await signingClient.signAndBroadcast(fromAddr, msgs, "auto")
Directories of @nibiruchain/nibijs |
Purpose/Utility |
---|---|
common |
home to several commonly needed types, constants and configurations such as Network. |
msg |
Implements functions for creating messages (Msg s). These are objects that trigger state-transitions and get wrapped into transactions. |
query |
For querying state via the consensus engine of a full-node and the application blockchain interface (ABCI). |
tx |
For signing and to submitting transactions given a set of Msg objects. |
wallet |
A simple wrapper around the Keplr wallet. This module will grow as support is added for other wallets (like MetaMask). |
@nibiruchain/protojs
provides types generated from the protocol buffers of the Cosmos-SDK, Tendermint Core, and Nibiru Chain. For most use cases, it won't be necessary to interact with this layer.
-
First install yarn.
npm install -g yarn
-
Then, install package dependencies. At the root of the repository, run
yarn
-
Lastly, compile the code in each package.
yarn build
See HACKING.md for the full development guide. It includes instructions on:
- Running tests
- Generating code for the @nibiruchain/protojs package
- Generating documentation in HTML or Markdown from the comments of @nibiruchain/nibijs
This software is licensed under the MIT license. See LICENSE for full disclosure.
© 2023 Nibi, Inc.