User decryption delegation
Last updated
import { IACL } from "@fhevm/solidity/lib/Impl.sol";
IACL(aclAddress).delegateForUserDecryption(relayer, vault, expirationDate);import { FHE } from "@fhevm/solidity/lib/FHE.sol";
import { ZamaEthereumConfig } from "@fhevm/solidity/config/ZamaConfig.sol";
contract Aggregator is ZamaEthereumConfig {
address public immutable vault;
constructor(address vault_) { vault = vault_; }
function authorizeRelayer(address relayer, uint64 expirationDate) external {
FHE.delegateUserDecryption(relayer, vault, expirationDate);
}
function revokeRelayer(address relayer) external {
FHE.revokeUserDecryptionDelegation(relayer, vault);
}
}// Granting (caller-contract side)
FHE.delegateUserDecryption(delegate, contractAddress, expirationDate);
FHE.delegateUserDecryptionWithoutExpiration(delegate, contractAddress);
FHE.delegateUserDecryptions(delegate, contractAddresses, expirationDate); // batch
FHE.delegateUserDecryptionsWithoutExpiration(delegate, contractAddresses); // batch
// Revoking
FHE.revokeUserDecryptionDelegation(delegate, contractAddress);
FHE.revokeUserDecryptionDelegations(delegate, contractAddresses); // batch
// Querying
FHE.isDelegatedForUserDecryption(delegator, delegate, contractAddress, handle); // active for handle?
FHE.getDelegatedUserDecryptionExpirationDate(delegator, delegate, contractAddress); // 0 = none, max = permanent
FHE.isUserDecryptable(handle, user, contractAddress); // raw ACL check, ignores delegation