Had an interesting experience this weekend and thought I would document it for my own reference, but also for anyone who may be interesting in doing something similar. It relates to claiming Degen from a Safe address.
It all started with a Twitter DM from Fade (huge thanks!), who was notifying people who had unclaimed Degen tokens from airdrop 1 which will end on May 1, 2024. To their credit, the message included no links, only facts and suggestions I could verify myself. They pointed out they saw the claim for my Safe account, which was only deployed on Ethereum mainnet. Given the amount being non-trivial, I decided I needed to look into the matter further.
I remembered checking my wallet for airdrop 1 eligibility earlier, but did not see anything claimable. It turns out the reason for this was because the address that had been linked to my FID was my Safe address, which was different from where I usually conduct transactions.
I go back to the Degen website and this time I notice the claims list in the API page. I search for myself and indeed see 1.5M Degen sitting unclaimed. Shoot.
So now I had to;
Redeploy my safe on Base so that it will have the same address as the claim
Claim the 1.5M Degen
Send it out of the Safe to my main address for Farcaster
Step 1. Redeploying the Safe
I search the Safe documentation for any instructions and found this article that explained exactly what I wanted to do. This video was also helpful in going through the steps of deploying the Safe on Base, but I was faced with a crossroads: the proxy factory contract indicated in the Safe github was not the same as the one I used when deploying on Ethereum. If I follow the steps and use this address, wouldn't I end up with a different Safe address on Base?
I search Basescan for the address of the Ethereum proxy factory contract and find that it is there on Base as well. I decide to use this contract address and not the one in the Safe github. Once the transaction is executed I see the Safe has been deployed on Base, with the same address
Step 2. Practice token extraction with CLI
I take a shot at claiming from degen.tips, but no luck. The Safe interface is not working for me. The initial article did mention this may happen, so I download the command line interface (CLI) and start to figure things out.
Now that I have a safe on Base, the next step is to make sure I can move tokens in and out. The Safe CLI github has great documentation so I am able to load my Safe and prepare for transacting. I am unable to use the update_to_l2 operation so I decide to go ahead and test moving Degen tokens which I have sent from my other wallet.
With the first test, I learn that values need to be in wei: 18 zeros added. Okay.
With the second test, I send out all Degen back.
Now confident that the tokens will not get stuck in the Safe, I check to see how I can claim without using the Safe web UI.
Step 3. Claim tokens via Etherscan
I've minted NFTs via Etherscan before, so the setup looks familiar. I don't know what to input in the index and merkleProof though.
Here's where ChatGPT comes in. I describe how I am trying to claim tokens but don't know where to find the merkleProof. It has to be somewhere on the claim website because it is automatically pulled when I connect my wallet. Where should I look?
ChatGPT suggests to look at the source code of the website, network interactions specifically. Lo and behold, there is the link to the claim information.
I connect my wallet to Etherscan and input all information (making sure I add 18 decimals to the claim amount). I have the most trouble figuring out how to input the merkleProof. It turns out it is in array format (begin with [ and end with ]), each element (starting with 0x) separated with a comma and no quotation marks. I finally press the claim button, but then told I do not have permission. I check the address I used and notice it is not an owners of my Safe. I switch over to one of the Safe owners and the transaction goes through. 1.5M degen claimed.
I execute the send transaction back to my main Farcaster wallet, and the mission is accomplished.
Thoughts and Reflections
I thought through the implications of this before I set out:
Is there any risk to my Safe vault? -> No, because I will only use it on Ethereum mainnet. The number of signers required is different as well.
Is there a problem to not migrate the Safe to an l2 version? -> No, because the address on Base was effectively one-time use, for extraction of this particular claim. If I do eventually need a Safe on Base, I will create a different one.
What is the risk to interacting with the Claim contract? -> Manageable, as I verified the token contract and saw the other claims go through on Etherscan.
Not bad for a weekend project