Skip to main content

Staking Transactions

Register Stake Address

Same as Transaction, with MeshTxBuilder you have to register a stake address before delegate to stakepools. Here's the 2 APIs you need:

txBuilder
.registerStakeCertificate(rewardAddress)
.delegateStakeCertificate(rewardAddress, poolIdHash)

Since we need to provide the deserilized hash of pool id, we can use the following util to get it:

const poolIdHash = deserializePoolId(
"pool107k26e3wrqxwghju2py40ngngx2qcu48ppeg7lk0cm35jl2aenx",
);

Register Stake Address

Register a stake address before delegate to stakepools.

Pool ID pool107k26e3wrqxwghju2py40ngngx2qcu48ppeg7lk0cm35jl2aenx

const utxos = await wallet.getUtxos();
const address = await wallet.getChangeAddress();
const addresses = await wallet.getRewardAddresses();
const rewardAddress = addresses[0]!;
const poolIdHash = deserializePoolId("pool107k26e3wrqxwghju2py40ngngx2qcu48ppeg7lk0cm35jl2aenx");

if (rewardAddress === undefined) {
throw "No address found";
}

const txBuilder = new MeshTxBuilder({
fetcher: provider, // get a provider https://meshjs.dev/providers
verbose: true,
});

const unsignedTx = await txBuilder
.registerStakeCertificate(rewardAddress)
.delegateStakeCertificate(rewardAddress, poolIdHash)
.selectUtxosFrom(utxos)
.changeAddress(address)
.complete();

const signedTx = await wallet.signTx(unsignedTx);
const txHash = await wallet.submitTx(signedTx);

Delegate Stake

Delegation with MeshTxBuilder is exactly the same as first delegate, but without registering stake key, so only one API is needed:

txBuilder
.delegateStakeCertificate(rewardAddress, poolIdHash)
const utxos = await wallet.getUtxos();
const address = await wallet.getChangeAddress();
const addresses = await wallet.getRewardAddresses();
const rewardAddress = addresses[0]!;
const poolIdHash = deserializePoolId("pool107k26e3wrqxwghju2py40ngngx2qcu48ppeg7lk0cm35jl2aenx");

if (rewardAddress === undefined) {
throw "No address found";
}

const txBuilder = new MeshTxBuilder({
fetcher: provider, // get a provider https://meshjs.dev/providers
verbose: true,
});

const unsignedTx = await txBuilder
.delegateStakeCertificate(rewardAddress, poolIdHash)
.selectUtxosFrom(utxos)
.changeAddress(address)
.complete();

const signedTx = await wallet.signTx(unsignedTx);
const txHash = await wallet.submitTx(signedTx);

Check out the Mesh website to see the full list of APIs.