import { DirectSecp256k1HdWallet } from "@cosmjs/proto-signing";
// Replace with your wallet's mnemonic phrase
const walletPhrase = "...";
const API_KEY = "test_pk_1234567890abcdef";
async function main() {
// Create wallet using mnemonic phrase
const wallet = await DirectSecp256k1HdWallet.fromMnemonic(walletPhrase);
const [account] = await wallet.getAccounts();
// 1. Query Validators
const validatorsResponse = await fetch(
"https://api.staking.io/api/cosmos/validators",
{
headers: {
Authorization: API_KEY,
},
}
);
const validators = await validatorsResponse.json();
console.log("Available Validators:", validators);
// 2. Prepare Delegation Transaction
const requestBody = {
transaction: {
data: {
chainId: "cosmos-hub-4",
mode: "delegate",
sender: account.address,
amount: "1000000", // 1 ATOM (in uatom)
validatorAddress: validators.validators[0].address, // Using first validator
fees: "0",
gas: "0",
memo: "",
format: "proto",
params: {
pubKey: account.pubkey,
},
},
},
};
// 3. Encode Transaction
const responseEncode = await fetch(
"https://api.staking.io/api/cosmos/transaction/encode",
{
method: "POST",
headers: {
Authorization: API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify(requestBody),
}
);
const encodedData = await responseEncode.json();
console.log("Encoded Transaction:", encodedData);
// 4. Sign Transaction
const signature = await wallet.signDirect(
account.address,
encodedData.transaction.data
);
// 5. Broadcast Transaction
const broadcastBody = {
transaction: {
data: encodedData.transaction.data,
encoded: encodedData.transaction.encoded,
signature: signature,
},
};
const responseBroadcast = await fetch(
"https://api.staking.io/api/cosmos/transaction/broadcast",
{
method: "POST",
headers: {
Authorization: API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify(broadcastBody),
}
);
const result = await responseBroadcast.json();
console.log("Staking Result:", result);
}
main();