[Execution] HIP 22 - Finalize split of UBI DAO from PoH DAO

We need to move forward with the approved execution of HIP 22 which specifies two things:

  • Changing the Governor of the UBI ERC20 and the Owner of the Proxy.
  • Transferring the holdings in UBI from PoH DAO to the UBI DAO.

I’ll detail each action on a section each:


Changing the Governor of the UBI ERC20 and the Owner of the Proxy.

According to HIP 22:

This HIP will split the governance of the UBI smart contract from the governance of the Proof of Humanity protocol by creating a new DAO specifically for the monetary policy and technical innovations required for the Universal Basic Income ERC20 smart contract (UBI).

Thus changing the Admin of the UBI smart contract proxy from the PoH Governor address to the UBI Governor address.

In order to do this, we should setup the following ticket:

- Title: HIP 22 Change admin of the UBI ERC20 proxy with the UBI DAO Governor
- Contract Address: 0x2b59500ad441bf5accf8ff89449552b6487132e0
- Value: 0
- Contract Input: transferOwnership
     - newOwner: 0x7510c77163683448b8Dc8fe9e019d9482Be1ed2b

That ticket should transfer the ownership of the Proxy Contract from the POH DAO to the UBI DAO. This means that it will be the UBI DAO who will have the power in the future to change or upgrade the UBI Smart Contract for a new one (eg. UBI v2)

For reference, the last time we did this was when I personally transferred the ownership of the proxy to the PoH DAO: https://etherscan.io/tx/0x2d7f9215bd0afb3e8e3623da0b9ea9a7a709a3aeb9cc59a4ddcf70dfdb38154a

Then, we must change the Governor of the UBI Smart Contract with the following ticket:

- Title: HIP 22 Change Governor of UBI ERC20 from the PoH Governor to the UBI Governor
- Contract Address: 0xDd1Ad9A21Ce722C151A836373baBe42c868cE9a4
- Value: 0
- Contract Input: changeGovernor
     - _governor: 0x7510c77163683448b8Dc8fe9e019d9482Be1ed2b

With that ticket in place, the UBI DAO Governor will be the only entity able to modify parameters of the UBI ERC20 Smart Contract itself.


Transferring the holdings in UBI from PoH DAO to the UBI DAO.

According to HIP 22, it states the following:

From the treasury of the Proof of Humanity DAO that originally consisted of 4 million UBI, 50% will be sent to the UBI DAO (2 million UBI). This will not have impact over the ETH or any other assets currently under the custody of the Proof of Humanity DAO.

Thus, requiring the transfer of 2M UBI from PoH DAO to UBI DAO. For this I suggest the following ticket:

- Title: HIP 22 Transfer 2M UBI to the UBI DAO Governor - Transfer
- Contract Address: 0xDd1Ad9A21Ce722C151A836373baBe42c868cE9a4
- Value: 0
- Contract Input: transfer
     - _recipient: 0x7510c77163683448b8Dc8fe9e019d9482Be1ed2b
     - _amount: 2000000000000000000000000

Final Observations:

This is a highly technical post, so the more eyes we can get on this content, the better and safer this actions shall be. Please provide feedback as much as possible and feel free to ask questions.

I have the following ones and will tag folks that I think it can be helpful for us:

  • @0xjean.eth @clesaege: I’m asking you as Mission Board members, due to the complexity of these actions, do you think it’s better to do a HIP with these tickets to avoid any potential disputes or risks associated to these actions?

  • @forgeron.eth: I noticed in the UI of the Governor that it does not support to call the methods of a proxy contract which is the case of UBI (0xDd1Ad9A21Ce722C151A836373baBe42c868cE9a4) and instead it shows the methods of the Proxy Wrapper. See the screenshot here:


    If I insert the bytecode as Data Input would that be okay as an alternative?

Looking forward to the help, feedback and advise of the community. This is a necessary step to finish the split of UBI DAO from PoH DAO as we have agreed a year ago, and also a necessary step before we upgrade UBI to UBI v2.

Due to the complexity of these actions, we need as much help as possible. Thank you all.

2 Likes

paging also @Andrei @fnanni @forgeron.eth @juanu @herniadlf on this matter.

Some members of FORK DAO were checking it right now, and explaining how it works. Fantastic.

@berty
Hernan @0x9c0c308d2ee659524dcf1d17be48deb651870d36_Ethereum
@green

4 Likes

You won’t need the approve there, those are only for transferFrom calls. Just do the regular transfer.

1 Like

Excellent, will edit the post accordingly.

Yes, we were trying to learn and check this out. The first ticket (transferOwnership) is easy because of the UI. Address is OK.

The second ticket changeGovernor bytecode will be 0xe4c0aaf40000000000000000000000007510c77163683448b8Dc8fe9e019d9482Be1ed2b. We have some doubts about the proxy as well. Is it okay to call directly on the proxy (0xDd1Ad9A21Ce722C151A836373baBe42c868cE9a4) ? It seems that it’s okay, just a double check question.

offt: i have to delete that handle @0x9c0c308d2ee659524dcf1d17be48deb651870d36_Ethereum hahah

1 Like

It would be great if we can reach out to some of the folks of Open Zeppelin regarding this. I will try to ping Santiago Palladino and Ethernaut among others and check with them if we are taking the right steps.

Update: I posted on the Open Zeppeling forum in order to get their assistance regarding the transfer of the ownership of the proxy contract.

I confirm that I get the following bytecode on the changeGovernor function:

0xe4c0aaf40000000000000000000000007510c77163683448b8dc8fe9e019d9482be1ed2b

Regarding the second ticket that does a transfer of 2M UBI from PoH DAO to the UBI DAO, I get the following bytecode:

0xa9059cbb0000000000000000000000007510c77163683448b8dc8fe9e019d9482be1ed2b00000000000000000000000000000000000000000001a784379d99db42000000

Can you double check this @herniadlf on your end?


We are definitely sure that the Governor will execute the proxy functions properly on the Governor contract using the bytecode option @forgeron.eth @fnanni @clesaege ?

Thanks all for your help.

Confirmed:
0xa9059cbb0000000000000000000000007510c77163683448b8dc8fe9e019d9482be1ed2b00000000000000000000000000000000000000000001a784379d99db42000000

Update: I posted on the Open Zeppeling forum in order to get their assistance regarding the transfer of the ownership of the proxy contract.

With the transferOwnership call I see no problem. In fact, the kleros governor UI let you select that function. My doubts are with the changeGovernor over the UBI Proxy (0xDd1Ad9A21Ce722C151A836373baBe42c868cE9a4) because the AdminUpgradeabilityProxy doesn’t have the function definition. It will delegate the call to the implementation (afaik it is 0x45574741ce337505359cca0d80fa810f49158793).

Meanwhile we have a confirmation, I will try to reproduce the execution. I’ll make a mainnet fork with hardhat and execute the transactions manually. I let you know if i can get it done.

1 Like


It works fine. I uploaded all the files needed to reproduce it here. Hope it helps!

1 Like

This is so awesomely extraordinarily useful I don’t know where to begin to thank you for taking the time to do it. Definitely removes many existential doubts when setting up the tickets.

From what I see on the code you executed this ticket which changes the governor on the UBI contract:

0xe4c0aaf40000000000000000000000007510c77163683448b8Dc8fe9e019d9482Be1ed2b

My main doubt though has to do with this action:

Where you able to test that one?

2 Likes

Well, I’ve been testing and updating my repo. I’ve tried running each transaction isolated just to ensure that each transaction is OK. It works.

Transfer Ownership:

await pohGovernorContract.submitList(
        ['0x2b59500ad441bf5accf8ff89449552b6487132e0'], 
        [0], //uint[] value
        '0xf2fde38b0000000000000000000000007510c77163683448b8dc8fe9e019d9482be1ed2b',
        ['36'],
        'Testing',
        opts
        );

Change Governor:

await pohGovernorContract.submitList(
        ['0xDd1Ad9A21Ce722C151A836373baBe42c868cE9a4'], 
        [0], 
        '0xe4c0aaf40000000000000000000000007510c77163683448b8Dc8fe9e019d9482Be1ed2b', 
        ['36'], 
        'Testing',
        opts
        );

Transfer UBI funds:

await pohGovernorContract.submitList(
        ['0xDd1Ad9A21Ce722C151A836373baBe42c868cE9a4'], 
        [0], 
       '0xa9059cbb0000000000000000000000007510c77163683448b8dc8fe9e019d9482be1ed2b00000000000000000000000000000000000000000001a784379d99db42000000',
        ['68'], 
        'Testing',
        opts
        );

The output is here


Then, the real case is a submission with the three transactions together. When I want to make it in testHip22.js script, I was getting the error “The transactions are in incorrect order” because of a validation in KlerosGovernor.sol. I found that it only works if the order of the submission is: (1) changeGovernor (2) transfer funds (3) transferOwnership . Idk if the Kleros Governor UI get the transactions in order for you, or if you have to add in the right order. @forgeron.eth @fnanni would you confirm this?

1 Like

Sorry 4 flooding, but after doing the nerdy stuff, I went to check the original HIP specification. I’ve talked to @santisiri because the ubi transferOwnership is not 100% explicit imo. The original HIP talks about:

  • “A Kleros Governor shall be setup to enforce on-chain the off-chain votes expressed on the UBI DAO.” which is a match with the “changeGovernor” call
  • “From the treasury of the Proof of Humanity DAO that originally consisted of 4 million UBI, 50% will be sent to the UBI DAO (2 million UBI). This will not have impact over the ETH or any other assets currently under the custody of the Proof of Humanity DAO.” which is a match with the “transfer” call.

But the ownership of UBI wasn’t specified. I suggest that we create a new HIP just for transferOwnership. Or something like a “patch” for this hip.

What do you think?

1 Like

Hey Hernan, I believe this part covers that.

1 Like

Ooops, my mistake. I was reading the phase-2 linked in the post :man_facepalming: You are right, it’s explicit there in the phase-3 post. Thanks Jean!

2 Likes

Hi everyone, I talked with the PoH Board regarding this topic and we issued an approved resolution for the tickets that you can find on the Board’s Snapshot page.

We also had an internal debate of the Proxy Admin ticket that transfers ownership and we have all agreed:

With this in place I think we should be okay to advance with the 3 tickets on the governor.

4 Likes