# Protocol Architecture

Self Connect uses a federated architecture where multiple independent issuers can register attestations that map obfuscated identifiers to blockchain addresses.

## Core Components

```
┌─────────────────┐
│   User/Client   │
└────────┬────────┘
         │
         ├──────────────┐
         │              │
         v              v
┌─────────────┐  ┌─────────────┐
│    ODIS     │  │   Issuer    │
│  (Privacy)  │  │(Verification)│
└──────┬──────┘  └──────┬──────┘
       │                │
       └────────┬───────┘
                │
                v
     ┌──────────────────────┐
     │ FederatedAttestations│
     │   Smart Contract     │
     └──────────────────────┘
```

## FederatedAttestations Smart Contract

The `FederatedAttestations` contract is the on-chain registry for all attestation mappings. It stores attestations in a structure that allows:

* **Registration:** Issuers register mappings between obfuscated identifiers and addresses
* **Lookup:** Anyone can query attestations for a given obfuscated identifier
* **Multi-Issuer Support:** Attestations are organized by issuer, allowing trust-based filtering
* **Batch Operations:** Multiple attestations can be queried simultaneously

**Key Functions:**

```solidity
// Register an attestation as an issuer
function registerAttestationAsIssuer(
    bytes32 identifier,
    address account,
    uint64 issuedOn
) external

// Lookup attestations for an identifier across multiple issuers
function lookupAttestations(
    bytes32 identifier,
    address[] calldata trustedIssuers
) external view returns (
    uint256[] memory countsPerIssuer,
    address[] memory accounts,
    address[] memory signers,
    uint64[] memory issuedOns,
    uint64[] memory publishedOns
)
```

Deployed contract addresses for mainnet and Alfajores are listed in [Reference & Resources](/docs/self-connect/reference/#contract-addresses).

## Issuer Ecosystem

Issuers are independent entities that:

1. **Verify** user ownership of identifiers through their chosen method
2. **Request** obfuscated identifiers from ODIS
3. **Register** attestations to the FederatedAttestations contract
4. **Maintain** ODIS quota for continued operations

Applications choose which issuers to trust based on:

* Verification rigor
* Reputation
* Use case alignment
* Uptime and reliability
