DYDX

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',
    fireblocksSecretKey: YOUR_FIREBLOCKS_SECRET_KEY_FILE,
    vaultId: YOUR_FIREBLOCKS_VAULT_ID,
};
  
const pubkey = await k.fireblocks.getPubkey(vault, 'DYDX_DYDX');

Stake

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');

Unstake

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);

Redelegate

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(
      'account_id',
      'wallet_pubkey',
      'validator_source_address',
      'validator_destination_address',
      1
);

Sign

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

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