---
# System prepended metadata

title: SOUL

---

# SOUL

SOUL is a proof-of-personhood protocol that provides an enhanced soul-bound NFT.

This is through the usage of biometrics to prove **unique** humanness through a series of different steps:

1. Facial Scanning
2. Randomised Video Gesture
3. Randomised Audio-Video Phrase

In steps 2 & 3, the facial scan from step 1 will be used to **verify** the person in the proceeding videos utilising facial recognition. Step 3 will be used to produce an audio profile for the user which **must** be the same each time the process is gone through - despite being random words used.

There is no network and no token. Monetisation can be done through selling integration services with platforms (ideally Web2 companies).

## Architectural Diagrams

The protocol can be developed in numerous ways: below are some diagrams detailing some ideas around its design.

_NOTE: This is still a work in progress_

### High Level Component Diagram

```mermaid
---
title: Component Diagram
---
erDiagram
    APP {
        access public-key
        access camera
        access microphone
        access NFC
    }
    PROCESSES {
        video facial-scan
        video randomised-gesture
        video randomised-audio-phrase
    }
    BIOMETRICS {
        bytes facial-scan
        bytes audio-profile
        serde serialiser
        serde deserialiser
    }
    ENCODED-BIOMETRICS {
        bytes biometrics
    }
    ENCRYPTOR {
        string public-key
    }
    CONTRACT {
        serde biometrics
        method mint
        method vouch
        method link
    }
    SDK {
        fluentbase zk-trie
        fluentbase evm-contract
    }
    DECRYPTOR {
        user Alice
        wallet evm-wallet
    }
    NFT {
        uuid biometric-recursive-proof
        uint64 vouch-score
        list credentials
        flag non-transferable
    }
    VOUCHER {
        uses nfc
        bytes commitment
    }
    APP }|..|{ CAMERA : uses
    APP }|..|{ MICROPHONE: uses
    APP }|..|{ NFC: uses
    APP ||--|{ PROCESSES: performs
    PROCESSES ||--|| CAMERA: "facial scan"
    PROCESSES ||--|| CAMERA: "randomised gesture"
    PROCESSES ||--|| MICROPHONE: "randomised audio phrase"
    MICROPHONE ||--|| CAMERA: "audio-video"
    PROCESSES ||--|| CAMERA: "verifies face each process"
    PROCESSES ||--|| BIOMETRICS: creates
    BIOMETRICS ||--|| ENCODED-BIOMETRICS: serialises
    ENCODED-BIOMETRICS ||--|| ENCRYPTOR: encrypts
    ENCRYPTOR ||--|| CONTRACT: "sends encrypted bytes"
    SDK ||--|| CONTRACT: "contract_read_input()"
    CONTRACT ||--|| DECRYPTOR: "decrypt bytes"
    DECRYPTOR ||--|| ENCODED-BIOMETRICS: "unencrypts bytes"
    ENCODED-BIOMETRICS ||--|| BIOMETRICS: deserialises
    CONTRACT ||--|{ NFT: mint
    APP ||--|{ VOUCHER: "anonymous commitment to social vouching"
    NFC ||--|{ VOUCHER: "tap phones"
    VOUCHER ||--|{ CONTRACT: "NFC ZK vouching"
    WEB-UI ||--|{ CONTRACT: "credential authentication and linking"
```

### Biometric Userflow

```mermaid
---
title: User Flow
---
flowchart
    subgraph App
        subgraph a1_hw[Hardware Access]
            a1_ca[Camera]
            a1_mi[Microphone]
        end
        subgraph a1_bi[Biometric Process]
            a1_fs[Facial Scan]
            a1_gs[Random Gesture]
            a1_av[Random Audio Phrase]
        end
        subgraph bp[Biometric Profile]
            b1_fs[Facial Scan]
            b1_ap[Audio Profile]
        end
        a1_eb[Encrypted Bytes]
        subgraph sbp[Serialised Biometric Profile]
            s1_bz[Bytes]
        end
        subgraph ebp[Encrypted Biometric Profile]
            e1_bz[Bytes]
        end
    end
    subgraph FluentXYZ
        f1_ch[Accounts]
        f1_sk[SDK]
    end
    User --"Authenticate"--> App
    a1_ca --"#CreateFacialScan()"--> a1_fs
    a1_ca --"#VerifyFacialScan()"--> a1_gs
    a1_ca --"#VerifyFacialScan()"--> a1_av
    a1_mi --"#CreateAudioProfile()"--> a1_av
    a1_fs --> b1_fs
    a1_av --> b1_ap
    bp --"#SerialiseProfile()"--> sbp
    sbp -."#GetPublicKeyForAccount()".-> f1_ch
    ebp --"Encrypted, Serialised, Biometric Profile"--> a1_eb
    a1_eb -."#CallContract(EncryptedBytes)".-> f1_sk
    f1_ch --"#EncryptSerialisedProfile()"--> ebp
    f1_sk --"Biometric NFT"--> Wallet
```