Minting with a restricted ticker
Overview
Restricted LSD network tickers were obtained through the brand auctions. The associated NFT is found here: https://etherscan.io/token/0x4ea67aebb61f7ff6e15e237c8b79d29c41f750fd
Deploying an LSD network with a restricted ticker requires possession of the brand auction NFT during the deployment of the LSD network to meet the eligibility criteria.
Once the LSD network is deployed, the brand NFT from auction needs to be burned to get the real brand NFT that can be managed.
The first node operator minting the first validator knot in the house will need to burn the auction NFT in order to mint derivatives and fully bootstrap the LSD network by creating a Stakehouse.
An LSD network can leverage the Multicall feature of SAFE wallet to 1) burn the auction NFT in the smart wallet of the node runner and 2) mint derivatives. If anything fails, the whole operation reverts which will ensure that the burning of the auction NFT is only used for the intended purpose of minting derivatives and nothing else.
Basic flow
- Curate LSD network, Node Runner, Smart wallet and ticker data points
- Prepare the transfer & burn transaction
- Prepare the mint derivative transaction
- Batch all transactions together in SAFE UI using transaction builder
- Simulate the single bundled transaction
- Execute the transaction
Step 1: Curating data points
Let's take for example the BLOCK
LSD network and query some information on the LSD subgraph.
An interactive endpoint can be found here: https://api.thegraph.com/subgraphs/name/stakehouse-dev/lsd
Lets run the following query:
query {
liquidStakingNetworks(where: {
ticker: "BLOCK"
}) {
liquidStakingManager
numberOfStakedValidators
numberOfKnotsThatHaveMintedDerivatives
}
nodeRunners(where: {
id: "0x23312540395b9959f92412c4cdbadf0915b1f09a"
}) {
id
smartWallets {
id
liquidStakingNetwork {
ticker
}
}
}
}
Resulting in the following:
{
"data": {
"liquidStakingNetworks": [
{
"liquidStakingManager": "0xf8bfe8faecdf6327609a6d3c4f1a5177450dd447",
"numberOfStakedValidators": "1",
"numberOfKnotsThatHaveMintedDerivatives": "0"
}
],
"nodeRunners": [
{
"id": "0x23312540395b9959f92412c4cdbadf0915b1f09a",
"smartWallets": [
{
"id": "0x19d3e7f3ab1dc31fa2bd94aae594c0f7d6207868",
"liquidStakingNetwork": {
"ticker": "BLOCK"
}
}
]
}
]
}
}
The id
field from the smart wallet entity gives us the smart contract address of the node runner smart wallet. We know that the node runner is part of the BLOCK LSD waiting to mint derivatives.
Step 2: Using SAFE transaction builder
Step 2.a: Creating the transfer and burn transaction
The first transaction in thr transaction is a simple one - transfer the auction NFT to the smart wallet of thr node runner to allow burn to take place. Because we are using multi call the SAFE will not permanently give up the NFT until derivatives are minted and if derivatives are not minted, then the whole transaction will revert.
In the case of BLOCK
LSD network, the BLOCK
auction claim NFT is part of the liquidity council SAFE:
https://etherscan.io/address/0x2469fd78c379AC4629037E1B29c2e05eDD9FcA21
Creating the transfer
Select 'Transaction Builder'
Populate the transaction:
- Address of the contract you are interacting with is the auction NFT mentioned at the top of the document
- We're doing a transfer so need to use the
transferFrom
operation - The
from
address is the Liquidity council safe whereBLOCK
NFT is located - The
to
address is the smart wallet of node runner minting derivatives - The
tokenId
needs to be determined from the auction contract by converting the ticker to token ID
Make sure to add this transaction. It will then be queued waiting for our second transaction.
Note: the ABI was autofilled above. Don't worry about sourcing that.
Step 2.b: Mint derivatives
The mint derivatives transaction needs to be added to the transaction builder. The most straightforward way of doing this is to take advantage if the LSD dapp. If you are using this guide, its because when you tried to mint derivatives on the LSD dapp, it reverted with the error Only claim token owner
. When it does that, the error details are shown in the dapp developer console. it will show the error, the from execution address, target contract address and it will also have the data hex that was trying to be sent to the smart contract. That data and the to address can be injected into thr transaction builder to mint derivatives as tbe second transaction after the transfer one mentioned above. The chain of these two transactions being executed atomically with Multicall will allow the mint derivatives to take place.
Note: whilst anyone can mint derivatives in LSD protocol, the calldata being copied into the SAFE transaction builder has a 125 Ethereum block expiry due to containing a balance report for the validator having its derivatives minted. if the SAFE bundle is not executed fast enough, a new one will have to be created following these steps.
Creating the transaction
This is what the transaction should look like. Notice the Custom Data
is selected top right.
Data can be obtained from the console as mentioned before
Step 3: Simulate and execute
If the SAFE bundle was created successfully then the UI transaction simulator will succeed and you should be able to go to the tenderly dashboard to see for that simulation derivative minting taking place.