Ready-to-use policy templates for common use cases
{ "Policy": "Transfer Constraints", "PolicyType": "open", "CallingFunctions": [ { "Name": "transfer(address to, uint256 amount)", "FunctionSignature": "transfer(address to, uint256 amount)", "EncodedValues": "address to, uint256 amount, uint256 toBalance" } ], "ForeignCalls": [], "Trackers": [], "MappedTrackers": [], "Rules": [ { "Name": "Transfer restrictions", "Condition": "(toBalance + amount >= 500) AND (amount <= 1000)", "PositiveEffects": [], "NegativeEffects": ["revert(\"Transfer violates constraints\")"], "CallingFunction": "transfer(address to, uint256 amount)" } ] }
{ "Policy": "External Access Control", "PolicyType": "open", "CallingFunctions": [ { "Name": "transfer(address to, uint256 amount)", "FunctionSignature": "transfer(address to, uint256 amount)", "EncodedValues": "address to, uint256 amount" } ], "ForeignCalls": [ { "Name": "CheckAccess", "Address": "0x1234abcd...", "Function": "isAllowed(address)", "ReturnType": "bool", "ValuesToPass": "to" } ], "Trackers": [], "MappedTrackers": [], "Rules": [ { "Name": "Access check", "Condition": "FC:CheckAccess == false", "PositiveEffects": ["revert(\"Not authorized\")"], "NegativeEffects": [], "CallingFunction": "transfer(address to, uint256 amount)" } ] }
{ "Policy": "Large Transaction Monitoring", "PolicyType": "open", "CallingFunctions": [ { "Name": "transfer(address to, uint256 amount)", "FunctionSignature": "transfer(address to, uint256 amount)", "EncodedValues": "address to, uint256 amount" } ], "ForeignCalls": [], "Trackers": [ { "Name": "largeTransactionCount", "Type": "uint256", "InitialValue": 0 } ], "MappedTrackers": [ { "Name": "largeTransactionsPerUser", "KeyType": "address", "ValueType": "uint256", "InitialKeys": [], "InitialValues": [] } ], "Rules": [ { "Name": "Track large transfers", "Condition": "amount > 100000", "PositiveEffects": [ "emit Whale alert", "TRU:largeTransactionCount += 1", "TRU:largeTransactionsPerUser(to) += 1" ], "NegativeEffects": [], "CallingFunction": "transfer(address to, uint256 amount)" } ] }
{ "Policy": "Time Window Restriction", "PolicyType": "open", "CallingFunctions": [ { "Name": "claim(uint256 amount)", "FunctionSignature": "claim(uint256 amount)", "EncodedValues": "uint256 amount" } ], "ForeignCalls": [], "Trackers": [], "MappedTrackers": [], "Rules": [ { "Name": "Time check", "Condition": "(GV:BLOCK_TIMESTAMP >= 1735689600) AND (GV:BLOCK_TIMESTAMP <= 1767225600)", "PositiveEffects": [], "NegativeEffects": ["revert(\"Outside allowed time window\")"], "CallingFunction": "claim(uint256 amount)" } ] }
{ "Policy": "Tiered Transfer Limits", "PolicyType": "open", "CallingFunctions": [ { "Name": "transfer(address to, uint256 amount)", "FunctionSignature": "transfer(address to, uint256 amount)", "EncodedValues": "address to, uint256 amount, address from" } ], "ForeignCalls": [ { "Name": "GetTier", "Address": "0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e", "Function": "userTier(address)", "ReturnType": "uint256", "ValuesToPass": "from" } ], "Trackers": [], "MappedTrackers": [], "Rules": [ { "Name": "Tier 1 limit", "Condition": "(FC:GetTier == 1) AND (amount > 1000)", "PositiveEffects": ["revert(\"Tier 1: max 1000\")"], "NegativeEffects": [], "CallingFunction": "transfer(address to, uint256 amount)" }, { "Name": "Tier 2 limit", "Condition": "(FC:GetTier == 2) AND (amount > 5000)", "PositiveEffects": ["revert(\"Tier 2: max 5000\")"], "NegativeEffects": [], "CallingFunction": "transfer(address to, uint256 amount)" } ] }
{ "Policy": "Advanced Transfer Controls", "PolicyType": "open", "CallingFunctions": [ { "Name": "transfer(address to, uint256 amount)", "FunctionSignature": "transfer(address to, uint256 amount)", "EncodedValues": "address to, uint256 amount, address from, uint256 toBalance" } ], "ForeignCalls": [ { "Name": "IsWhitelisted", "Address": "0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e", "Function": "isWhitelisted(address)", "ReturnType": "bool", "ValuesToPass": "to" } ], "Trackers": [ { "Name": "totalTransferVolume", "Type": "uint256", "InitialValue": 0 } ], "MappedTrackers": [ { "Name": "userTransferCount", "KeyType": "address", "ValueType": "uint256", "InitialKeys": [], "InitialValues": [] } ], "Rules": [ { "Name": "Whitelist check for large amounts", "Condition": "(amount > 10000) AND (FC:IsWhitelisted == false)", "PositiveEffects": ["revert(\"Large transfers require whitelist\")"], "NegativeEffects": [], "CallingFunction": "transfer(address to, uint256 amount)", "Order": 1 }, { "Name": "Balance limit check", "Condition": "toBalance + amount > 50000", "PositiveEffects": ["revert(\"Recipient balance would exceed 50K\")"], "NegativeEffects": [], "CallingFunction": "transfer(address to, uint256 amount)", "Order": 2 }, { "Name": "Track volume", "Condition": "amount > 0", "PositiveEffects": ["TRU:totalTransferVolume += amount", "TRU:userTransferCount(from) += 1"], "NegativeEffects": [], "CallingFunction": "transfer(address to, uint256 amount)", "Order": 3 } ] }