Core contracts for Predicate AVS
npm install @predicate/contracts!Predicate Application Compliance Flow
Full integration guide: docs.predicate.io
```
src/
├── PredicateRegistry.sol # Core registry contract (Predicate-owned)
│ # - Attester management
│ # - Attestation verification
│ # - UUID-based replay protection
│
├── mixins/
│ ├── PredicateClient.sol # Full-featured client (WHO + WHAT validation)
│ │ # - _authorizeTransaction(attestation, encoded, sender, value)
│ │
│ └── BasicPredicateClient.sol # Simplified client (WHO-only validation)
│ # - _authorizeTransaction(attestation, sender)
│ # - Use when policies only validate sender identity
│
├── interfaces/
│ ├── IPredicateRegistry.sol # Registry interface + Statement/Attestation structs
│ └── IPredicateClient.sol # Client interface
│
└── examples/ # Reference implementations
├── inheritance/ # Direct inheritance pattern
└── proxy/ # Proxy pattern for separation of concerns
`bash`
forge install PredicateLabs/predicate-contracts
`bash`
npm install @predicate/contracts
BasicPredicateClient - Use when your policy only validates WHO is calling (sender identity):
`solidity
import {BasicPredicateClient} from "@predicate/contracts/src/mixins/BasicPredicateClient.sol";
import {Attestation} from "@predicate/contracts/src/interfaces/IPredicateRegistry.sol";
contract MyVault is BasicPredicateClient {
constructor(address _registry, string memory _policyID) {
_initPredicateClient(_registry, _policyID);
}
function deposit(uint256 amount, Attestation calldata attestation) external payable {
require(_authorizeTransaction(attestation, msg.sender), "Unauthorized");
// ... business logic
}
}
`
PredicateClient - Use when your policy also validates WHAT is being done (function, args, value):
`solidity
import {PredicateClient} from "@predicate/contracts/src/mixins/PredicateClient.sol";
import {Attestation} from "@predicate/contracts/src/interfaces/IPredicateRegistry.sol";
contract MyVault is PredicateClient {
constructor(address _registry, string memory _policyID) {
_initPredicateClient(_registry, _policyID);
}
function deposit(uint256 amount, Attestation calldata attestation) external payable {
bytes memory encoded = abi.encodeWithSignature("_deposit(uint256)", amount);
require(_authorizeTransaction(attestation, encoded, msg.sender, msg.value), "Unauthorized");
// ... business logic
}
}
``
- Integration Guide: docs.predicate.io/v2/applications/smart-contracts
- Supported Chains: docs.predicate.io/v2/applications/supported-chains
- API Reference: docs.predicate.io/api-reference
See LICENSE for details.
This software is provided as-is. Use at your own risk.