- To see how delegation works on mainnet
- Because I think delegation is one of my favorite aspects of Nouns Build forks where one holder of a token does not mean one person behind it.
My challenge today was: How do I generate the right inputs on a function that is being renderer through other internal functions…so I can use my delegation power to write this proposal through Etherscan?
I worked on it and figured it out…and remembered to record!
- this will be slowed down with a voice over in the next days…
Outline
- Finding the Governor contract for Nouns Build DAOs
- Read/Write Etherscan functions
- Is This a Proxy? - Zora Docs
- Building draft proposals through https://testnet.nouns.build/ proposal UI
- Using input data from draft props to find function inputs and correct formatting for Etherscan
- Submitting transactions on Goerli testnet explorer and seeing if the transaction showed up on the Nouns Build portal
- Using the input data from successful transactions to build the real transaction I want to submit on main-net
Finding the Governor contract for Nouns Build DAOs
Simple way:
→ Click treasury etherscan link on DAO page → read as proxy → owner is the governor contract
Finding all of the contracts in one place
-
Navigate to the DAO auction page and scroll down to find the contract address, click on it, and click “View on Etherscan”.
-
You are looking for the first transaction from when the DAO was deployed. In this example, it’s the only transaction on the page but sometimes you’ll need to go to the very last page where it says “Contract Creation.”
- Nouns Builder is a protocol deployed where in just a few clicks you can have 5 contracts that work in tandem to facilitate onchain governance. Etherscan is a blockchain explorer and one of the easiest ways to find the contract addresses to Nouns Build DAOs.
-
Open the transaction by clicking on the transaction hash number, it will redirect you to a page where you’ll see the full transaction information.
-
Find where it says “Logs”. You know it’s the right transaction when you see 33 logs.
-
Scroll all the way down to the bottom and you’ll see the message that lists all of the contracts deployed for the specific DAO entity you are looking for.
-
Now click Governor.
- Governor is where all voting and proposals related actions execute.
Read/Write Etherscan functions
-
When you’re at the governance contract you’re going to change from “Transactions” tab to the “Contract” tab so you can see the code, read, and write functions.
- If you don’t have “read/write as a proxy” on your screen follow this 1 minute tutorial on how to view.
-
Connect your wallet
-
Scroll down to the
propose
function.
Here is where you can look at the propose
function on the PA testnet governance contract.
Zora Docs
Timestamp
If we go to the Zora Docs they have details governance from a technical perspective. The propose
function on Nouns Build governance contracts is responsible for submitting proposals. All Nouns Build DAO have this function.
/// @param _targets The target addresses to call
/// @param _values The ETH values of each call
/// @param _calldatas The calldata of each call
/// @param _description The proposal description
function propose(
address[] memory _targets,
uint256[] memory _values,
bytes[] memory _calldatas,
string memory _description
) external returns (bytes32)
This is how that function looks on Etherscan, when you are writing to the function, it will receive the same inputs.
My biggest hurdle was figuring how they wanted me to format the input??? I tried a lot of different variations before finding the corrects inputs in past successful transactions.
Building draft proposals through Nouns Build testnet proposal UI
-
I used the testnet Public Assembly DAO as scratch paper.
-
I have a demo proposal ready from last night when I wanted to figure out how to do this, however, I’m going to show some logic to the transaction builder.
- You will only be able to see this if you own a Goerli token on the DAO you are experimenting with. This also goes for submitting Etherscan transactions, it’s not a loophole for not owning tokens you need to be whitelisted/delegated or own a token to submit these transactions.
-
The
_targets
,_values
, and_calldatas
parameters are truncated from the transaction builder (above) to talk to the Governor contract. -
The title and description are parsed together to be one
_description
input.
Finding input data from draft props to use for reference of formats
-
Complete the same steps to find the Governor contract on this test DAO by clicking the contract address on the main auction page and finding the very first Contract Creation transaction.
In this example, it’s all the way at the end because we have been using this DAO for awhile.On the Governor transactions tab:
→ View last transaction
→ Scroll down to the bottom of the individual proposal transaction
→ Click to see more
→ Decode input data
…and then you have your inputs to propose on Etherscan in the correct format!
It took me a long time to figure this out, I was doing everything else but this.
Submitting transactions on Goerli testnet explorer and seeing if the transaction showed up on the Nouns Build portal
- I’m going to test this on the testnet DAO explorer page I have the window still upon.
- Here is the Propose function and my goal is to see if this transaction will actually show up on the Nouns Build portal without me having to do it the other way.
- This string description is so crazy because it’s plain HTML that the Nouns Build UI is rendering it out to.
- I am connecting my Wallet to submit. Viewing the transaction.
- Back to the testnet.nouns.build page.
- And there is my prop. It is the second draft prop that I submitted just now, there is a buffer period on all proposals so the voting isn’t active yet but we know that submitting proposal through Etherscan works now.
Using the input data from successful transactions to build the real transaction I want to submit on mainnet
- Now I’m going to redo this with a different title and description for the real version of what I want to mint onchain.
- Submitted
It take some time to show up so I opened my wallet and view the transaction on the blockchain to see if it went through and it did. From here I have the exact input I can now put on mainnet. - I still have the BLVKHVND mainnet token contract open and went through the process again to find the governor contract. I like this way of finding the addresses because it’s always the same process but there are many ways.
- Now navigating to the
propose
function and copying and pasting the inputs over. - Connect wallet.
- Switch to mainnet so I can submit the real transaction.
- And it took awhile but when I went back to the DAO page the proposal was there. Success!
Side note: A part of me wanted to wait until the delegation UI got fixed but I was curious because maybe no one in a DAO has ever had to propose something through Etherscan and in result there are no tutorials adjacent to this issue. It is a concern that the landscape of Etherscan tutorials right now are just “How to mint an NFT through Etherscan” videos.
In the event that you need to submit a transaction to your DAO contracts and the frontend website stops working, this is one solution and how I worked through building transactions on Goerli testnet and then submitting them on mainnet. I’m sure this process will be simpler in the next coming weeks but it is a good precaution to know what to do here.