A compliance layer enabling developers to easily integrate compliance into smart contracts.
Assura Network is a developer-friendly compliance layer that simplifies regulatory compliance for blockchain applications. Instead of building compliance infrastructure from scratch, developers can integrate Assura in under an hour and immediately enforce programmable compliance rules.
Assura provides a simple, modular approach to compliance:
No need to build KYC systems, manage user databases, or handle complex compliance logic. Assura handles all of this through its Oasis TEE (Trusted Execution Environment) infrastructure, which evaluates users off-chain and provides cryptographically signed attestations that are verified on-chain.
Assura Network enables three core programmable compliance values that are attested by the Oasis TEE and verified on-chain by your smart contract:
A numeric score between 0–1000 that evaluates a user's wallet activity and identity level. Examples of factors included:
If an app requires a score higher than a user's confidence score and the user does not want to provide more information, Assura introduces a time-based interface where:
All attestations include an expiry. Once expired, the attestation is no longer valid on-chain and must be refreshed by the user.
All compliance parameters are configured directly in your smart contract, making your application fully programmable from deployment. Assura reads this configuration off-chain before issuing any attestations. You can define:
This means your compliance rules are part of your contract's immutable configuration, ensuring consistent enforcement and eliminating the need for centralized compliance management.
For Developers:
For Your Users:
1. Institutions Institutions can use Assura to offer a verifiable interface for liquidity provision, tokenization of RWAs or stocks, and other financial activity ensuring that only compliant users can access or trade through their interface.
2. App Builders App builders can instantly launch compliance-ready applications that only allow specific users to interact with their apps, preventing access from sanctioned regions, hacker groups, or other restricted categories. This removes the need for builders to handle compliance logic themselves.
3. Users For users, Assura generates attested tax reports that summarize all activity performed with their wallets across both compliant and non-compliant apps, making legal and reporting processes significantly easier.
The Assura system consists of three main components:
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ Oasis TEE │ │ AssuraVerifier│ │ Application │
│ (Signer) │────────▶│ Contract │◀───────│ Contract │
└─────────────┘ └──────────────┘ └─────────────┘
│ │ │
│ Signs │ Verifies │ Enforces
│ Attestations │ Signatures │ Compliance
│ │ │
└─────────────────────────┴─────────────────────────┘
User submits compliance data
Assura uses ENS subdomains with an off-chain resolver to efficiently track users who have already interacted and meet compliance score criteria. This optimization reduces redundant verification and improves user experience.
How It Works:
assuranet.eth for that userBenefits:
Example Flow:
0x123... interacts with an Assura-protected app with score 7500x123.assuranet.eth with text records indicating complianceThe main verification contract (AssuraVerifier.sol) provides:
Key Features:
Key Functions:
// Set verification requirements for an app contract
function setVerifyingData(
address appContractAddress,
bytes32 key,
AssuraTypes.VerifyingData memory data
) external;
// Verify compliance data (view function, no state changes)
function verify(
address app,
bytes32 key,
bytes calldata attestedComplianceData
) external view returns (bool);
// Verify compliance with automatic bypass entry creation
function verifyWithBypass(
address app,
bytes32 key,
bytes calldata attestedComplianceData
) external returns (bool);
Bypass Mechanism:
When a user's score is insufficient, verifyWithBypass automatically creates a bypass entry:
expiry = block.timestamp + (scoreDifference * 10 seconds)AttestedData (signed by Oasis TEE):
struct AttestedData {
uint256 score; // Confidence score (0-1000)
uint256 timeAtWhichAttested; // Timestamp when attestation was created
uint256 chainId; // Chain ID where attestation is valid
}
VerifyingData (requirements set by app):
struct VerifyingData {
uint256 score; // Minimum required score (0 = no requirement)
uint256 expiry; // Expiry timestamp (0 = no expiry)
uint256 chainId; // Required chain ID (0 = any chain)
}
ComplianceData (submitted by user):
struct ComplianceData {
address userAddress; // The user's address
bytes32 key; // Function selector or verification key
bytes signedAttestedDataWithTEESignature; // Oasis TEE signature over AttestedData
AttestedData actualAttestedData; // The attested data
}
BypassData (time-based access control):
struct BypassData {
uint256 expiry; // Timestamp when bypass expires and user can access
uint256 nonce; // Nonce for replay protection
bool allowed; // Always set to true when created
}
The library (AssuraVerifierLib.sol) provides helper functions:
Signature Verification:
SignatureChecker to support both EOA and smart contract wallets (EIP-1271)Compliance Checking:
Helper Function:
function requireCompliance(
IAssuraVerifier verifier,
address app,
bytes32 key,
bytes calldata attestedComplianceData
) internal;
This function is designed to be used in modifiers, automatically calling verifyWithBypass and reverting if verification fails.
User Requests Attestation from Oasis TEE:
{address}.assuranet.eth) via off-chain resolverAttestedData with score, timestamp, and chain IDUser Prepares Compliance Data:
ComplianceData struct with:
bytes complianceData = abi.encode(complianceData)User Calls Application Function:
onlyCompliant modifierOn-Chain Verification Process:
AssuraVerifierLib.requireCompliance()assuraVerifier.verifyWithBypass()ComplianceData from bytesASSURA_TEE_ADDRESS (Oasis TEE address)true if all checks pass, otherwise revertsFunction Execution:
NPM Package: https://www.npmjs.com/package/assura-sdk ASSURA_VERIFIER:"0xf4e351d9ed83b5516b82c044b0e5ee570154010d"

