Backstop
Backstop is a feature introduced to the protected staking pool (SavETH Vault contract of LSD) which allows an LSD to isolate and boost yield for the KNOT (validator) which has been reassigned to open index after a user withdraws dETH. The KNOT remains mostly owned by the LSD index. Treat this as a booster as well as yield slippage protection.
An active LSD savETH for a KNOT can exist in it native index owned by its LSD savETHpool or in the open index with partial ownership. When a protected staking LP holder burns their holdings to redeem dETH - it always release the dETH from its mapped KNOT, subsequently it moves the savETH for all affected KNOT's reassign to the open index (if the KNOT is already in the open index, then it stays there). A KNOT that is present in the open index still earns yield, but ideally less than what it would earn in the LSD owned index (if all the KNOTs in the LSD index are performing their duties correctly).
Backstop allows users to deposit dETH and bring any KNOT present in the open index back to the LSD owned index. The user will in return get all the LP shares which were burnt. Once the KNOT is isolated back into the LSD owned index, it starts earning higher yield as do the other LP holders - everyone benefits, and users are incentivized to curate a piece of savETH that consistently earns higher yield as part of a better managed savETH portfolio.
To use the backstop feature, one can use the LSD Wizard SDK.
Installing and initializing the LSD Wizard SDK is already discussed in this tutorial. Feel free to go through it in case you are not familiar with the SDK.
To proceed with backstop, you first need to fetch the amount of dETH that needs to be deposited to isolate the KNOT back into the LSD owned index. For this, call the function getdETHRequiredToIsolateWithdrawnKnot
function from the savETHPool
sub-class of the SDK as shown below:
const requiredDETH = await wizard.savETHPool.getdETHRequiredToIsolateWithdrawnKnot(BLS_PUBLIC_KEY);
BLS_PUBLIC_KEY
: BLS Public Key of the KNOT to be isolated
Before depositing dETH to the protected staking pool, the user needs to approve the pool to transfer dETH from their wallet to the pool. To approve the pool, call the approveProtectedStakingPoolToTransferDETH
function of the savETHPool
subclass as shown below:
const approvePool = await wizard.savETHPool.approveProtectedStakingPoolToTransferDETH(requiredDETH);
requiredDETH
: amount of dETH to be transferred from the user’s address to the pool
Now that you know the dETH amount to be deposited and you have approve the pool to transfer dETH, call the function depositDETHForStaking
function of the savETHPool
subclass to isolate the KNOT. The function can be called as shown below:
const tx = await wizard.savETHPool.depositDETHForStaking(BLS_PUBLIC_KEY, requiredDETH);
BLS_PUBLIC_KEY
: BLS Public Key of the KNOT to be isolated
requiredDETH
: dETH required to isolate the KNOT