PBH Validation
Upon receiving new transactions, the World Chain Builder will first ensure that the payload is a valid OP Stack tranasaction. In addition to the default checks, the builder will also evaluate transactions for PBH conditions.
Any transaction that calls the pbhMulticall() or handleAggregatedOps() function on the PBHEntyrPoint will be considered a PBH transaction and must clear PBH Validation. PBH transactions must contain a valid PBHPayload or PBHPayload[] in the case of PBH 4337 bundles.
struct PBHPayload {
uint256 root;
uint256 pbhExternalNullifier;
uint256 nullifierHash;
uint256[8] proof;
}
Signal Hash
Transactions that target the pbhMulticall() function must provide a valid PBHPayload where included proof is generated with a signalHash specified as:
uint256 signalHash = abi.encode(msg.sender, calls).hashToField();
Transactions that target the handleAggregatedOps()function (ie. PBH 4337 Bundles) must contain an aggregated signature consisting of an array of PBHPayload where there is a PBHPayload for each UserOp in the bundle. The included proof must be generated with a signalHash specified as:
uint256 signalHash = abi.encodePacked(sender, userOp.nonce, userOp.callData).hashToField();
External Nullifier
PBH transactions must contain a valid external nullifier where:
- The
monthis the current month - The
yearis the current year (specified asyyyy) - The
pbhNonceis <pbhNonceLimit. PBH nonces are0indexed, meaning if thepbhNoncelimit is29, a user is allotted30PBH transactions per month.
Root
The root provided must be a valid World ID Root with a timestamp less than 7 days old.
Proof
The proof must be a valid semaphore proof, proving inclusion in the World ID set associated with the specified root.