Integrate
One view call. No keys, no subscription, no gas for off-chain callers. A vault checks a launch before deploying capital; an agent checks before recommending it.
Check one launch (viem)
import { createPublicClient, http, parseAbi } from 'viem';
import { xLayer } from 'viem/chains';
const gate = '0x649373f612d278634Ba8656aF53bCA7D8dc0f940';
const abi = parseAbi([
'function check(address token, uint256 filterId) view returns (bool pass, uint16 inputs)',
'function checkMany(address[] tokens, uint256 filterId) view returns (bool[] passes, uint16[] ins)',
]);
const client = createPublicClient({ chain: xLayer, transport: http() });
const [pass, inputs] = await client.readContract({
address: gate, abi, functionName: 'check', args: [token, 1n], // 1 = BASIC_SAFETY
});Gate a vault (Solidity)
interface ILatchGate {
function checkMany(address[] calldata tokens, uint256 filterId)
external view returns (bool[] memory passes, uint16[] memory inputs);
}
function _deployable(address[] calldata candidates) internal view returns (address[] memory ok) {
(bool[] memory passes,) = GATE.checkMany(candidates, FILTER_ID);
// keep only unlatched launches…
}Semantics
check/checkManyevaluate the live TapeOut circuit. Combinational filters revert withFeedStale()if the attestor feed is older than its max age; latch filters return their last snapshotted state instead.checkManyreturnsfalsefor tokens the feed has never seen, instead of reverting.inputsis the 16-bit word the circuit saw: bits 0–6 and 10–12 are attested;LATCH_LOCKEDandAGE_*(bits 7–9) are computed on-chain.checkLocalruns the same circuit through the sealed LatchEvaluator, which is what LatchLock releases use.verifyreturns both.
Lock an allocation
LatchLock.createLock(token, amount, beneficiary, [(filterId, bps)…]). bps must sum to 10,000; unlock filters must be combinational. release(lockId, trancheIdx) is callable by anyone and pays only the beneficiary.