<div style="text-align:center; color:#ff6800"> # **Proof of Humanity v2** </div> <br/> Proof of Humanity v2 comes with 2 new main features: ***soulbound IDs*** and ***multi-chain expansion***. In this document we're going to explore these new features in depth. We'll start with a brief overview of the changes compared to v1 and only after we'll go into the more technical details. <div style="display:flex; align-items:end; justify-content:center; color:#ff6800"> ![](https://i.imgur.com/Exwd7fZ.png) ## **v2** </div> <div style="color:#ff6800"> ### **Soulbound IDs** </div> In the first version of Proof of Humanity each human each registering corresponded to the address he used. If one lost the address, she would have to register with another one (thus losing the reputation/assets connected with the old address). In Proof of Humanity v2, each human will correspond to an ***unique ID***. Having assigned that soulbound ID, when registering again the human needs to point to that ID. Since each unique ID should correspond to a human and an address of that human (and vice-versa), we can use the terms ***humanity*** and ***pohID*** (also refered in some places as *humanity ID* or *soulbound ID*) to refer to the concept of soulbound specific to Proof of Humanity. A person registers on Proof of Humanity to ***claim*** an ***unclaimed*** `humanity` by referencing to a `pohID`. A humanity can have an owner (thus being claimed) or not. It has a `lifespan` (similar to the concept of submission duration in v1), after which, expired, becomes unclaimed. <div style="display:flex; align-items:center; justify-content:center; color:#ff6800"> ***1 human → 1 wallet address ↔ 1 humanity*** <div style="width:2em;"> ![](https://i.imgur.com/Exwd7fZ.png) </div> </div> It follows that if you lost your address, you can request removal of the lost address and register with the new one, having to reference to your *PoH ID*. Thus you can have your reputation/assets connected to the *PoH ID*, making them recoverable. It wouldn't be wise for someone to buy the identity of someone else, since the human corresponding to it can easily recover it. <div style="margin:0 2em"> ``` # human lost access to wallet humanity.owner == lost address isHuman(lost address) == true # human requests removal of lost address humanity.owner == none isHuman(lost address) == false # human registers with new wallet address humanity.owner == new address isHuman(new address) == true ``` </div> This allows for robustly serving use cases such as soulbound tokens, soulbound wallet, social recovery, governance experiments and so on. <div style="display:flex; align-items:center; justify-content:center;"> ### Request states diagram </div> ![](https://i.imgur.com/7bx2M4m.png) <br/> <div style="color:#ff6800"> ### **Multi-chain expansion** </div> In addition to mainnet, Proof of Humanity v2 is also be deployed on Gnosis chain. It is possible to use bridge gateways to communicate between chains in order to update the humanity registration state or transfer the humanity and change the home chain. It is possible to have the state of a humanity on multiple chains at the same time. There will be 2 important smart contracts (all of them deployed on all supported chains): <div style="margin-left:2em; color:#ff6800"> **ProofOfHumanity** </div> - Has similar functionality to the main PoH v1 contract (+ soulbound functionality) - A humanity claimed on this contract on a specific chain *XYZ* has as ***home chain*** chain *XYZ* - A humanity must have one unique home chain, so once claimed on chain *XYZ*, a claim on another chain should be challenged - It will be possible change the home chain by transferring through *CrossChainProofOfHumanity* (or by having the humanity removed / pass its lifespan on the home chain then claiming it on any chain) - This is the contract where the human corresponding to a humanity can vouch for others, reapply and request removal and send state updates of the humanity to any other chain Calling `isHuman` on this contract for a specific address should return true on max one chain (the home chain). In this example Gnosis chain is the home chain: ``` # on mainnet isHuman(address) == false # on gnosis chain isHuman(address) == true ``` <div style="margin-left:2em; color:#ff6800"> **CrossChainProofOfHumanity** </div> - Handles the logic for updating the state of humanity or transfering (changing the home chain) - Can send updates of the state of humanity from the home chain to any other chain - Stores the received state of humanity (if an instance receives an update of the state of humanity it is assumed that the chain it is deployed on is not the home chain of the humanity) - In case of transfers, it manually removes/adds the humanity to *ProofOfHumanity* contract accordingly Thus a humanity with Gnosis chain as home chain can have a state update to mainnet returning the following results when calling `isHuman` on this contract: ``` # on mainnet isHuman(address) == true # on gnosis chain isHuman(address) == true ``` <br/> Having built this infrastructure, expanding to other chains in the future will be much easier (as easy as deploying the contracts, setting up the arbitrator and the bridge gateways). However, we need to keep in mind that the legitimacy of Proof of Humanity will depend on all chains it is deployed on and there is complex logic involved so it is recommended to expand with caution :) ![](https://i.imgur.com/3WOdLG5.png) <br/> <br/> <br/> <!-- <div style="color:#ff6800"> #### **Other features** </div> --> ### What's your PoH ID? ![](https://i.imgur.com/932Lxtc.png) <span style="color:red; display:flex; flex-direction:column; align-items:center; justify-content:center;"> ### It doesn't matter if it's a different chain. ### **PoH ID must be universal across chains!** </span> <br> ### How humanity transfers work ![](https://i.imgur.com/fpxNesu.png) <!-- ![](https://i.imgur.com/Ryl5fA6.png) --> <!-- # V1 compatibility -->