Skip to main content

Counterfactual Delegation

Solidity framework for extending smart contracts
with counterfactual revocable-delegation

Get startedConcepts

Scale the Web of Trust with Capabilities

Library
1
Caveat Enforcers
5+
Of Opportunities
1,000's

Scalability. Security. Simplicity.

Access Controls for an Open Web3

  • Counterfactual Delegation

    Delegate permissions to a third party without an on-chain transaction.

  • Bounded Permissions

    Limit delegations by time, block, or any other on-chain condition using shared enforcers.

  • Readable Code using EIP712

    Clearly express intent. And make it easy to verify the code and side-effects.

How it works

Delegations | Revocations | Enforcers

Off-chain signatures
Off-Chain Signatures

Delegate smart contract permissions to friends, family, and/or third-parties using a Capabilities based EVM framework.

On-chain revocations
On-Chain Revocations

Revoke permissions at any time by submitting an on-chain transaction that invalidates the original delegation.

Composable rules
Composable Rules

Use a library of caveat-enforcers to create unique rules and conditions for delegations can be executed.

Easy To Understand Access Controls

The Delegatable Framework uses the EIP712 standard to create a human-readable and machine-verifiable signature. Limiting the risk of human error and malicious intent.

  • Human Readable | Express Intent

    Users can more easily understand the permissions they are granting to a third-party. Seeing important information like the enforcer contract address, full capabilities, side-effects, expiration dates and more.

  • Machine Verifiable | Reduce Risk

    Delegations, invocations and other transactions metadata can be verified by any machine. This allows for a more secure and reliable ecosystem. Providing opportunities to education and inform users about the risks of granting permissions.

docsearch-modal

Layered Permissions + Chainable Signatures

The Delegatable Framework uses the EIP712 standard to create a human-readable and machine-verifiable signature. Limiting the risk of human error and malicious intent.

  • Grant permissions to any Wallet. Including Your own.

    Stop using a single wallet for all your accounts.The Delegatable Framework enables Users to start using multiple wallets for different purposes, while still inheriting authority from a root Wallet.

  • Peer-to-Peer Access Controls. A Web of Trust.

    Delegations can be re-delegated to other Wallets, without permission from the root Wallet. Enabling a new substrate of for a Web of Trust to emerge and more fluid peer-to-peer access controls for digital organizations.

anatomy-of-docsearch

Caveat Enforcers

Bounded Access Controls for any Delegated On-Chain Permission

  • Timestamp Range

    Use the `block.timestamp` global variable to enforce transaction execution periods; before, after, or between two timestamps.

  • Block Number Range

    Use the `block.number` global variable to enforce transaction execution periods; before, after, or between two block numbers.

  • Nonce/Transaction Limits

    Use a transaction log to enforce the maximum number of transactions per delegated address.

  • ERC20 Allowances

    Use the `allowance` function to enforce the maximum amount of tokens that can be transferred from a delegated address.

  • Oracle Data

    Use on-chain oracles to determine if a delegated permission can be executed. For example, if the price of ETH is above $1000.

  • If You Can Think It, You Can Build It

    Write your own custom logic to enforce any permission you can think of. And compose them together to create complex permission systems.

Unlock Web3 at Human Scale with
Counterfactual Revocable Delegations

Explore the documentation to learn more about how to use
delegations, invocations, enforcers, revocations and more.

  • Delegations

    Authorize any address to execute transactions on your Wallet's behalf. Enabling better private key management strategies and generalized capabilities access controls.

  • Enforcers

    Limit the scope and duration of delegations using shared on-chain enforcers. Specifying conditions, like timestamp and blockNumber ranges, at the transaction signing level.

  • Invocations

    Delegations can be invoked by any address, including other contracts. And custom transaction queues can be set, which means nonces are no longer a blocker.

  • Revocations

    Delegations can be revoked at any time, using an on-chain revocation registry. This allows for granular, per-delegation, per-enforcer, per-invocation revocation.