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
month
is the current month - The
year
is the current year (specified asyyyy
) - The
pbhNonce
is <pbhNonceLimit
. PBH nonces are0
indexed, meaning if thepbhNonce
limit is29
, a user is allotted30
PBH 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
.