# Maria Amore Vennootschappenregister > Openbaar register van besloten vennootschappen (B.V.'s) op Base. Elke akte, elk KvK-uittreksel en elk besluit is een eigen registratie met nummer KVK-VOLGNUMMER (bijvoorbeeld 99579677-2). Registraties vormen per vennootschap een hash-keten. Aandelen worden per aandeelnummer bijgehouden; elke overdracht verwijst naar de registratie waarmee de vervreemder de aandelen verkreeg. ## Waar - Smart contract: 0xd9CA625c6e80F90583f6288c9b2440aee265EF38 op Base (chainId 8453) - Basescan: https://basescan.org/address/0xd9CA625c6e80F90583f6288c9b2440aee265EF38 - Leesbare JSON, live van de blockchain: /api (alle vennootschappen), /api?q={naam} (zoeken op naam) en /api/{kvk} (alles van één vennootschap) - Pagina per vennootschap: /{kvk}; pagina per registratie: /{kvk}/{nr} - Controle van personen en documenten: /controle ## Zo bouw je het aandeelhoudersregister van een vennootschap 1. Haal /api/{kvk} op. Of lees het contract: vennootschap(kvk).aantalRegistraties, dan registratie(kvk, nr) en registratieData(kvk, nr) voor nr = 1 tot en met dat aantal. 2. registratieData is abi.encode van het invoertype van registreer(Invoer). Decodeer met de ABI van het contract. 3. Controleer de keten: hash(nr) = keccak256(abi.encode(bytes32 hash(nr-1), uint32 kvk, uint32 nr, bytes32 keccak256(data))), met hash(0) = 0x00…00. 4. Pas de mutaties in volgorde toe. aard 1 = uitgifte, 2 = levering, 3 = intrekking, 4 = pandrecht, 5 = vruchtgebruik, 6 = opheffing beperkt recht, 7 = certificaten met vergaderrecht, 8 = ontheffing stortingsplicht, 9 = (bij)storting. Elke uitgifte en levering heeft een datum van erkenning of betekening; elke uitgifte en storting het gestorte bedrag per aandeel. Bij pandrecht, vruchtgebruik en certificaten staat of stemrecht en vergaderrecht bij de gerechtigde liggen. Bij een levering moet de vervreemder (vanCode) de nummers van/tot houden, verkregen bij registratie verkregenBij. Code 0 is de vennootschap zelf. 5. De uitkomst moet gelijk zijn aan stand(kvk). In /api/{kvk} staat dit als controle.reconstructieGelijkAanStand. 6. Stemmen en winstrecht: per soort aandeel staan stemmen en winstrecht per aandeel (soortenAandelen). zeggenschap(kvk) geeft per houder het totaal. Eigen aandelen tellen niet mee. 7. Bestuur: bestuur(kvk), openbaar met naam en bevoegdheid, volgens het laatste KvK-uittreksel of besluit. 8. Besluitregels uit de statuten: in de registratie regelsVastgelegdBij(kvk) (veld regels). 9. Kapitaal: geplaatst en gestort kapitaal worden berekend uit de aandelen; daarnaast het gestorte kapitaal volgens het laatste geregistreerde KvK-uittreksel. 11. Art. 2:194 BW: per aandeelhouder staan op Base soort, nummers, datum verkrijging (aktedatum van verkregenBij), datum erkenning en gestort bedrag. Namen en adressen van personen staan niet op Base maar in het besloten deel bij Maria Amore; bedrijven staan met naam en adres openbaar. Bevestigingen door bestuurders: bevestigingen(kvk, nr), te vergelijken met bestuur(kvk).account. 10. Een registratie met gecorrigeerdDoor is hersteld door die latere registratie; de correctie bevat de herstelmutaties. ## Personen Personen staan alleen als code. Bedrijven en bestuurders staan openbaar. identiteitHash = PBKDF2-HMAC-SHA256, 600.000 rondes, 32 bytes. Wachtwoord: "voornamen achternaam|JJJJ-MM-DD|geboorteplaats", na normalisatie: kleine letters, ß→ss, æ→ae, ø→o, œ→oe, ł→l; accenten weg (NFD); elk teken buiten a-z en 0-9 wordt een spatie; meerdere spaties worden één; begin en eind zonder spaties. Zout: "maria-amore-register|{kvk}|{code}". Voorbeeld in Python: hashlib.pbkdf2_hmac('sha256', wachtwoord.encode(), f'maria-amore-register|{kvk}|{code}'.encode(), 600000).hex() ## Documenten documentHash en kvkHash zijn SHA-256 van het PDF-bestand. Een ander afschrift of een opnieuw gedownload uittreksel geeft een andere hash.