@inco/automata-dcap-attestation
v1.0.0
Published
Automata DCAP Attestation EVM contracts and ABIs.
Readme
Automata DCAP Attestation on EVM Guide
Integration
To integrate your contract with Automata DCAP Attestation, you need to first install Foundry.
Add to your dependency, by running:
forge install automata-network/automata-dcap-attestationThen, add the following to your remappings.txt
@automata-network/dcap-attestation/=lib/automata-dcap-attestation/contracts/Example
import "@automata-network/dcap-attestation/AutomataDcapAttestationFee.sol";
contract ExampleDcapContract {
AutomataDcapAttestationFee attest;
constructor(address _attest) {
attest = AutomataDcapAttestationFee(_attest);
}
// On-Chain Attestation example
function attestOnChain(bytes calldata quote) public {
(bool success, bytes memory output) = attest.verifyAndAttestOnChain(quote);
if (success) {
// ... implementation to handle successful attestations
} else {
string memory errorMessage = string(output);
// ... implementation to handle failed attestations
}
}
// SNARK Attestation example
// ZkCoProcessorType can either be RiscZero or Succinct
function attestWithSnark(
bytes calldata output,
ZkCoProcessorType zkvm,
bytes calldata proofBytes
) public
{
(bool success, bytes memory output) = attest.verifyAndAttestWithZKProof(
output,
zkvm,
proofBytes
);
if (success) {
// ... implementation to handle successful attestations
} else {
string memory errorMessage = string(output);
// ... implementation to handle failed attestations
}
}
}BUIDL 🛠️
Getting Started
Clone this repo, by running the following command:
git clone https://github.com/automata-network/automata-dcap-attestation.git --recurse-submodulesBuilding With Foundry
Compile the contracts:
forge buildTesting the contracts:
forge testTo view gas report, pass the --gas-report flag.
To provide additional test cases, please include those in the /forge-test directory.
To provide additional scripts, please include those in the /forge-script directory.
Deployment Scripts
Before beginning with contract deployment, it is recommended that you store your wallet key as an encrypted keystore using cast wallet import
cast wallet import -k keystores dcap_prod --interactiveYou may also simply pass your wallet key to the PRIVATE_KEY environment variable, but we do not recommend doing this with production keys.
Deploy the PCCS Router:
make deploy-router RPC_URL=<rpc-url>Deploy Automata DCAP Attestation Entrypoint:
make deploy-attestation RPC_URL=<rpc-url>Automata DCAP Entrypoint zkVM Configuration
| zkVM | zkVM Selector | zkVM Program ID |
| --- | --- | --- |
| RiscZero | 1 | 0x4cf071b3cc25d73e77f430b65f5700dd53522dacc21c1bfc0862b2e46fda3584 |
| SP1 | 2 | 0x0036efd519bb371b29a40322e40031833716e9441c6907f8aefc5e52ceebc9a6 |
make config-zk RPC_URL=<rpc-url> ZKVM_SELECTOR=<number> ZKVM_VERIFIER_ADDRESS=<address> ZKVM_PROGRAM_IDENTIFIER=<identifier>Deploy Quote Verifiers For All Supported Versions:
make deploy-all-verifiers RPC_URL=<rpc-url>Currently, we only support V3 and V4 quotes.
Deploy Quote Verifier For A Specific Version
make deploy-verifier RPC_URL=<rpc-url> QUOTE_VERIFIER_VERSION=<ver>Add QuoteVerifier(s) to the Entrypoint contract:
make config-verifier RPC_URL=<rpc-url> QUOTE_VERIFIER_VERSION=<ver>ℹ️ NOTE: This command automatically grants the Quote Verifier read access to the PCCS Router.
Explicitly Granting or Revoking the access privilege for the specified caller address to the PCCS Router
make config-router RPC_URL=<rpc-url> CALLER_ADDRESS=<address> AUTHORIZED=<true | false>