# 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 ```