- Calling
.on(chain)
is required after each convenience method to set the target chain, except for requireLitAction
.
- Use
validate()
during development to catch operator ordering and empty builder issues.
- For advanced conditions, prefer
unifiedAccs()
when you already have canonical unified condition objects.
Installation
npm install @lit-protocol/access-control-conditions@beta
Examples
Using the convenience helpers
import { createAccBuilder } from '@lit-protocol/access-control-conditions';
// Simple ETH balance check on Ethereum
const simple = createAccBuilder()
.requireEthBalance('1000000000000000000')
.on('ethereum')
.build();
// Weather-gated content using Lit Action
const weatherGated = createAccBuilder()
.requireLitAction('Qm...IPFSCID', 'checkTemperature', ['40'], 'true')
.build();
// Complex: (ETH >= 0.001 on ethereum) OR (ERC20 >= 1000 on polygon) AND (Wallet ownership on ethereum)
const complex = createAccBuilder()
.requireEthBalance('1000000000000000').on('ethereum')
.or()
.requireTokenBalance('0x123...', '1000').on('polygon')
.and()
.requireWalletOwnership('0x123...').on('ethereum')
.build();
See Weather Check Lit Action for more details.
Using the raw conditions
import { createAccBuilder } from '@lit-protocol/access-control-conditions';
const rawCondition = {
conditionType: 'evmBasic',
contractAddress: '',
standardContractType: '',
chain: 'ethereum',
method: 'eth_getBalance',
parameters: [':userAddress', 'latest'],
returnValueTest: {
comparator: '>=',
value: '1000000000000000000',
},
};
const conditions = createAccBuilder()
.unifiedAccs(rawCondition)
.build();
Reference
Functions
createAccBuilder()
Builder for Access Control Conditions (ACC) supporting EVM, Solana, Cosmos, and Lit Actions with boolean logic, grouping, and helpers.
Parameters
No parameters.
Returns
Fluent builder with convenience methods, boolean operators, grouping, and utilities.
Custom Access Control Conditions
Manually supply the access control conditions instead of using the chainable helper methods.
EVM Conditions
requireEthBalance(amount, comparator?)
Require ETH balance on a chain.
Minimum balance required (wei as string or normalised amount per your app).
comparator
'>=' | '>' | '=' | '<=' | '<'
Defaults to ’>=’.
const conditions = createAccBuilder()
.requireEthBalance('1000000000000000000') // 1 ETH
.on('ethereum')
.build();
requireTokenBalance(contractAddress, amount, comparator?)
Require ERC‑20 token balance.
requireNftOwnership(contractAddress, tokenId?)
Require ERC‑721 or ERC‑1155 ownership.
If provided, assumes ERC‑721; otherwise ERC‑1155 with default tokenId ‘1’.
requireWalletOwnership(address)
Verify that :userAddress equals the provided address.
requireTimestamp(timestamp, comparator?)
Compare latest block timestamp using comparator (default ’>=’).
requireDAOMembership(daoAddress)
Check membership for MolochDAOv2.1.
requirePOAPOwnership(eventId)
Check POAP event ownership.
Solana Conditions
requireSolBalance(amount, comparator?)
requireSolNftOwnership(collectionAddress)
requireSolWalletOwnership(address)
Cosmos Conditions
requireCosmosBalance(amount, comparator?)
requireCosmosWalletOwnership(address)
requireCosmosCustom(path, key, value, comparator?)
comparator
'contains' | '=' | '>' | '>=' | '<' | '<=' | '!=' | '!contains'
Defaults to ’=’.
Lit Action Conditions
requireLitAction(ipfsCid, method, parameters, expectedValue, comparator?)
Create a condition validated by a Lit Action.
comparator
'= | != | contains | !contains'
Defaults to ’=’.
const conditions = createAccBuilder()
.requireLitAction(
'QmcgbVu2sJSPpTeFhBd174FnmYmoVYvUFJeDkS7eYtwoFY', // Weather check Lit Action
'go',
['40'], // Max temperature 40°F
'true'
)
.build();
See Weather Check Lit Action
Boolean operations
Build and utilities
Finalise and return the conditions array (unformatted; canonical formatting occurs downstream).
validate()
{ valid: boolean; errors: string[] }
Generate a human-readable explanation of the built conditions.