Skip to main content

Step 3: Payload Validation

Now, let’s add payload validation logic to functions requiring KYC checks.

1. Add a bytes calldata _purefidata Parameter

In the function where KYC verification is needed, add a parameter to accept the payload. The payload is encoded and signed data from PureFi, provided by the user when calling the function.

function someRestrictedFunction(address _to, bytes calldata _purefidata) external {
// Function logic
}

2. Validate the Payload with verifier.validatePayload

Call the validatePayload method from PureFiVerifier to verify the data. This method either succeeds or reverts if the payload is invalid.

function someRestrictedFunction(address _to, bytes calldata _purefidata) external {
verifier.validatePayload(_purefidata);
// Function logic after successful validation
}

The validatePayload method checks:

  • Signature validity.
  • Data freshness (timestamp).
  • Session uniqueness.
  • Issuer authorization.

If validation fails, the transaction reverts with an appropriate error.

3. (Optional) Extract Data from the Payload

If you need to retrieve data from the payload (e.g., the sender’s address), use PureFiDataLibrary. First, import the library:

import {PureFiDataLibrary} from "./PureFi/libraries/PureFiDataLibrary.sol";

Then extract data after validation:

function someRestrictedFunction(address _to, bytes calldata _purefidata) external {
bytes memory package = verifier.validatePayload(_purefidata);
address from = PureFiDataLibrary.getFrom(package);
require(from == msg.sender, "Caller must match payload sender");
// Function logic
}

Here, getFrom extracts the sender’s address from the payload, which can be useful for additional checks.