[DRAFT] How to Propose Through Etherscan

I asked for a one-time delegation to propose a small community contribution to BLVKHVND to set up a forum discussion board

  • 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

Timestamp

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

Timestamp

  • 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

Timestamp

  • 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

Timestamp

  • 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

Timestamp

  • 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

Timestamp

  • 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.

5 Likes

Very thorough! Got me thinking, this could be a really cool tool to work on as a full frontend kit. Alongside Nouns Builder for launching a DAO, I can see how this tool could sequence nicely before or after that process in jumpstarting treasuries/initiatives/building awareness and attestation for new projects much earlier than price/social bid history for inter DAO love that don’t (or can’t yet) share so (m)any holders?

3 Likes

how the fuck did u figure all of this out lmao

fr tho this is so sick, also great first move towards us building out our own proposal builder UI (edit: as @thekidnamedkd mentioned before me !!!)

2 Likes

This is sick @valcoholics

Going to definitely look this over cause I’m curious about that part we were struggling on before!

How can we turn this into an artifact?

there’s a decoder right in every etherscan transcation, but its hidden in the advanced details.

This is crazy. read thru the entire process and it’s crazy how many addresses/inputs you have to make sure it is the correct one. Thank you for the detailed documentation!! This was so dope to read thru.

1 Like