```
const main = async () => {
// Change network to mainnet
const provider = new ethers.providers.AlchemyProvider("goerli", ALCHEMY_API_KEY);
const signer = new ethers.Wallet(PRIV_KEY_2, provider);
// Initialise the SDK
const sdk = new StakehouseSDK(signer);
// Amount of dETH needed to deposit
let dETHDepositAmount = "AMOUNT_OF_DETH_IN_WEI";
const dETH = (await sdk.contractInstance).dETHContract();
// Allow rage quit assistant to transfer dETH from user's wallet
const allowanceTx = await dETH.approve(
rageQuitAssistantAddress,
dETHDepositAmount
);
console.log("allowanceTx: ", allowanceTx);
// Deposit dETH into the rage quit assistant
const depositDETHTx = await sdk.wizard.depositDETHInRageQuitAssistant(
rageQuitAssistantAddress,
dETHDepositAmount
);
console.log("depositDETHTx: ", depositDETHTx);
// Fetch latest finalised report of the validator
const finalisedReport = await sdk.balanceReport.getFinalisedEpochReport(
BEACON_NODE_URL,
blsPublicKey
);
console.log("finalisedReport: ", finalisedReport);
// Verify the finalised epoch report
const authenticatedReport = await sdk.balanceReport.authenticateReport(
BEACON_NODE_URL,
finalisedReport
);
console.log("finalisedReport: ", finalisedReport);
// This is the amount of ETH needed to top up for the validator to exit.
// This will not be 0 in case the validator was leaking.
const ethValue = await sdk.utils.currentSlashedAmountOfSLOTForKnot(blsPublicKey);
// Rage quit the validator
// This will transfer ETH from user's wallet if ethValue is non-zero
const rageQuitTx = await sdk.wizard.rageQuit(
liquidStakingManagerAddress,
blsPublicKey,
authenticatedReport,
ethValue
);
console.log("rageQuitTx: ", rageQuitTx);
}
main();
```