SDK functions on DYDX Cosmos protocol

We require the wallet compressed pubkey in transaction crafting methods. This pubkey is different from your wallet address, you wallet address is actually derived from the pubkey. To retrieve the pubkey, you can use our sdk as follow:

const vault = {
    provider: 'fireblocks',
    fireblocksApiKey: 'YOUR_FIREBLOCKS_API_KEY',
const pubkey = await k.fireblocks.getPubkey(vault, 'DYDX_DYDX');


Craft a delegation transaction to the validator address provided.

It also links your stake to the kiln account id provided.

The amount to stake is in DYDX.

const tx = await k.dydx.craftStakeTx('account_id', 'wallet_pubkey', 'validator_address',  1);

Withdraw rewards

Craft a withdraw rewards transaction. Your available rewards are then transferred to your wallet instantaneously.

const tx = await k.dydx.craftWithdrawRewardsTx('wallet_pubkey', 'validator_address');


Craft an undelegate transaction. Your stake then enters a 30 days unbonding period.

The amount to undelegate is optional and in DYDX. If no amount is specified, your whole staked balance will be unstaked.

const tx = await k.dydx.craftUnstakeTx('wallet_pubkey', 'validator_address', 1);


Craft a redelegate transaction from a validator to a new validator. This allows you to skip the 30 days unbonding period.

The amount to redelegate is optional and in DYDX. If no amount is specified, your whole staked balance will be redelegated.

const tx = await k.dydx.craftRedelegateTx(


Sign a transaction by specifying the integration and the crafted transaction.

Here is an example showing how to sign a transaction with a fireblocks vault.

Checkout the setup fireblocks documentation to setup your vault.

import { Integration } from "@kilnfi/sdk/lib/types/integrations";
const fs = require('fs');

const apiSecret = fs.readFileSync(__dirname + '/fireblocks_secret.key', 'utf8');

const vault: Integration = {
      provider: 'fireblocks',
      fireblocksApiKey: 'YOUR_API_USER_KEY', // your fireblocks API user key
      fireblocksSecretKey: apiSecret, // your fireblocks private key (generated with your CSR file and your API user)
      vaultId: 7 // your fireblocks vault id

const txSigned = await k.dydx.sign(vault, tx);


Broadcast a signed transaction.

const txHash = await k.dydx.broadcast(txSigned);

Get transaction status

Get the transaction status of a broadcasted transaction by providing its transaction hash.

const status = await k.dydx.getTxStatus('tx_hash');

Decode transaction

Decode a serialized transaction previously crafted. You can use this to get more information about a transaction prior to broadcast it such as the gas fees used, the function parameters etc.

const decodedTx = await k.dydx.decodeTx('tx_serialized');

Last updated