Solana documentatieProgramma's ontwikkelen

Programma's verifiëren

Deze gids is bedoeld als referentie voor ontwikkelaars die geverifieerde builds willen implementeren voor hun programma's op Solana. We behandelen wat geverifieerde builds zijn, hoe je ze gebruikt, speciale overwegingen en best practices om de authenticiteit van je programma op de blockchain te waarborgen.

Wat zijn geverifieerde builds?

Geverifieerde builds zorgen ervoor dat het uitvoerbare programma dat je op het Solana- netwerk implementeert, overeenkomt met de broncode in je repository. Hierdoor kunnen ontwikkelaars en gebruikers erop vertrouwen dat het programma dat op de blockchain draait precies overeenkomt met de openbare codebase, wat transparantie en veiligheid bevordert.

Het verificatieproces omvat het vergelijken van de hash van het programma op de blockchain met de hash van het lokaal gebouwde programma uit de broncode. Dit zorgt ervoor dat er geen discrepanties tussen de twee versies zijn.

Hoewel een geverifieerde build niet als veiliger moet worden beschouwd dan een niet-geverifieerde build, stelt de build ontwikkelaars in staat om zelf te verifiëren dat de broncode overeenkomt met wat er op de blockchain is geïmplementeerd. Met behulp van de broncode kan een ontwikkelaar dan valideren wat de code uitvoert bij het verzenden van een transactie.

De geverifieerde builds-pipeline is bedacht en wordt onderhouden door Ellipsis Labs en OtterSec. Voor meer details, volg de handleiding in de originele verified builds repository en het verificatieproces direct in de Anza toolsuite, zodra dit daar wordt ondersteund.

Hoe werkt het?

Het verificatieproces wordt uitgevoerd door de hash van het onchain programma te vergelijken met de hash van het lokaal gebouwde programma vanuit de broncode. Je bouwt je programma in een gecontroleerde omgeving met behulp van de Solana Verify CLI en Docker. Dit zorgt ervoor dat het bouwproces deterministisch en consistent is op verschillende systemen. Zodra je het uitvoerbare bestand hebt, kun je het implementeren op het Solana-netwerk. Tijdens het bouwproces wordt een PDA van het verify programma aangemaakt. Deze PDA bevat alle gegevens die nodig zijn om het programma te verifiëren. De PDA bevat het programma-adres, git-url, commit-hash en de argumenten die zijn gebruikt om het programma te bouwen.

Met behulp van de gegevens in de PDA kan iedereen het verify programma-commando lokaal uitvoeren en controleren of het programma is gebouwd vanuit de opgegeven broncode. Vervolgens kan iedereen volledig trustless voor zichzelf verifiëren of hun eigen verify API gebruiken, onderhouden door OtterSec, om een gemakkelijk toegangspunt te bieden voor gebruikers om de verificatie te controleren. Je kunt deze API-aanroepen al zien worden gebruikt in de Solana Explorer en SolanaFM, onder andere plaatsen.

Waarom zou ik geverifieerde builds moeten gebruiken?

Het gebruik van geverifieerde builds biedt de volgende voordelen:

  • Veiligheid: garandeert dat het programma dat onchain draait overeenkomt met de broncode, waardoor kwaadaardige wijzigingen worden voorkomen.

  • Transparantie: stelt andere gebruikers en ontwikkelaars in staat om te valideren dat het onchain programma betrouwbaar is door het te vergelijken met de openbare codebase.

  • Vertrouwen: vergroot het vertrouwen van gebruikers, aangezien geverifieerde builds aantonen dat het onchain gedrag van je programma in lijn is met je openbare code. Bij het bouwen van verifieerbare programma's minimaliseer je risico's die gepaard gaan met het uitvoeren van ongeautoriseerde of kwaadaardige code. Het zorgt er ook voor dat je voldoet aan best practices en beveiligingsonderzoekers een gemakkelijke manier biedt om contact met je op te nemen. Ook kunnen wallets en andere tools transacties van je programma gemakkelijker toestaan zolang het geverifieerd is.

  • Vindbaarheid: wanneer je een geverifieerde build van je programma levert, kan iedereen je broncode, documentatie, programma-SDK of IDL vinden en kunnen ze ook gemakkelijk contact met je opnemen via GitHub in geval van problemen.

Hoe maak ik geverifieerde builds?

Om geverifieerde builds te maken, moet je deze stappen volgen:

Samenvatting:

  • Commit je code naar een openbare repository
  • Bouw een geverifieerde build in docker
  • Deploy de geverifieerde build
  • Verifieer het gedeployde programma tegen de openbare API

Als je je programma verifieert dat niet in een docker-container is gebouwd, zal het waarschijnlijk mislukken omdat Solana-programmabuilds niet deterministisch zijn op verschillende systemen.

Installeer Docker en Cargo

Installeer de benodigde tools en zorg ervoor dat je Docker en Cargo hebt geïnstalleerd. Docker biedt een gecontroleerde bouwomgeving om consistentie te waarborgen, en Cargo wordt gebruikt voor het beheren van Rust-pakketten.

  • Docker: volg de stappen op de Docker-website om Docker voor jouw platform te installeren. Zorg er na de installatie voor dat de Docker-service draait volgens deze verdere handleiding.
  • Cargo: als je Cargo nog niet hebt geïnstalleerd, kun je het installeren door het volgende commando uit te voeren:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Installeer de Solana Verify CLI

De Solana Verify CLI is het belangrijkste hulpmiddel voor het verifiëren van builds. Solana Verify CLI wordt momenteel onderhouden door Ellipsis Labs en kan worden geïnstalleerd met Cargo.

Je kunt het installeren door het volgende uit te voeren:

cargo install solana-verify

Als je een specifieke versie van de CLI nodig hebt, kun je de versie vastleggen met:

cargo install solana-verify --version $VERSION

Indien gewenst kun je een versie rechtstreeks installeren vanaf een specifieke commit:

cargo install solana-verify --git https://github.com/Ellipsis-Labs/solana-verifiable-build --rev 13a1db2

Project voorbereiden

Om te verifiëren tegen een repository moet deze een Cargo.lock bestand in de hoofdmap van je repository hebben. Als je slechts één programma in je repository hebt en een cargo.lock bestand in je hoofdmap, kun je direct naar de volgende stap gaan en je programma bouwen.

Als je programma zich in een submap bevindt en je een rust workspace hebt, moet je een workspace Cargo.toml bestand aanmaken in de hoofdmap van je repository.

Je kunt dit Cargo.toml voorbeeld als voorinstelling gebruiken:

Cargo.toml
[workspace]
members = ["program/programs/*"]
resolver = "2"
[profile.release]
overflow-checks = true
lto = "fat"
codegen-units = 1
[profile.release.build-override]
opt-level = 3
incremental = false
codegen-units = 1

Zorg ervoor dat je programma in de workspace/members array staat en dat het Cargo.toml van je programma de juiste lib naam geconfigureerd heeft.

Belangrijk is de lib name, niet de package naam!

Zoiets als dit:

waffle/Cargo.toml
[package]
name = "waffle"
version = "0.1.0"
edition = "2021"
[lib]
name = "waffle"
crate-type = ["cdylib", "lib"]
[dependencies]
solana-program = "2.1.0"

In deze repository kun je een voorbeeld zien van een workspace met een programma in een submap. Merk ook op dat wanneer het programma zich in een submap bevindt, je later deze map moet toevoegen als --mount-path aan het verify-from-repo commando.

In deze repository vind je een Anchor voorbeeld. In deze repository vind je een native rust voorbeeld.

Met dit Cargo.toml bestand op zijn plaats kun je vervolgens cargo generate-lockfile uitvoeren om een lock-bestand aan te maken en doorgaan met het bouwen van je programma.

Verifieerbare programma's bouwen

Om je Solana-programma verifieerbaar te bouwen, navigeer je naar de map met het Cargo.toml bestand van je workspace en voer je uit:

solana-verify build

Dit zal je omgeving kopiëren naar een docker container en het op een deterministische manier bouwen.

Zorg ervoor dat je daadwerkelijk de geverifieerde build deployt en deze niet per ongeluk overschrijft met anchor build of cargo build-sbf, aangezien deze hoogstwaarschijnlijk niet in dezelfde hash zullen resulteren en je verificatie dus zal mislukken.

Voor projecten met meerdere programma's kun je een specifiek programma bouwen door de bibliotheek-naam te gebruiken (niet de pakketnaam):

solana-verify build --library-name $PROGRAM_LIB_NAME

Dit proces zorgt voor deterministische builds en kan enige tijd duren, vooral op bepaalde systemen (bijv. M1 MacBook) omdat het binnen een docker-container draait. Voor snellere builds wordt een Linux-machine met x86-architectuur aanbevolen.

Zodra de build is voltooid, kun je de hash van het uitvoerbare bestand ophalen met het volgende commando:

solana-verify get-executable-hash target/deploy/$PROGRAM_LIB_NAME.so

Verifieerbare programma's implementeren

Zodra je je programma hebt gebouwd en de hash hebt opgehaald, kun je het implementeren op het Solana-netwerk. Het wordt aanbevolen om een multi-signature of governance-oplossing zoals Squads Protocol te gebruiken voor veilige implementaties, maar je kunt ook direct implementeren met:

solana program deploy -u $NETWORK_URL target/deploy/$PROGRAM_LIB_NAME.so --program-id $PROGRAM_ID --with-compute-unit-price 50000 --max-sign-attempts 100 --use-rpc

Een momenteel passende lage prioriteitsvergoeding kun je opvragen bij je rpc-provider, bijvoorbeeld Quicknode.

Om te verifiëren dat het geïmplementeerde programma overeenkomt met het gebouwde uitvoerbare bestand, voer je uit:

solana-verify get-program-hash -u $NETWORK_URL $PROGRAM_ID

Je kunt verschillende versies hebben geïmplementeerd op verschillende Solana-clusters (bijv. devnet, testnet, mainnet). Zorg ervoor dat je de juiste netwerk-URL gebruikt voor de gewenste Solana-cluster waartegen je een programma wilt verifiëren. Verificatie op afstand werkt alleen op mainnet.

Verifiëren tegen repositories

Om een programma te verifiëren tegen zijn openbare repository, gebruik je:

solana-verify verify-from-repo -u $NETWORK_URL --program-id $PROGRAM_ID https://github.com/$REPO_PATH --commit-hash $COMMIT_HASH --library-name $PROGRAM_LIB_NAME --mount-path $MOUNT_PATH

Terwijl je de geverifieerde build uitvoert in je programmamap, moet je bij het uitvoeren van verify-from-repo de --mount-path flag toevoegen. Dit is het pad naar de map die de Cargo.toml bevat met de bibliotheknaam van je programma.

Dit commando vergelijkt de onchain programma-hash met de uitvoerbare hash die is gebouwd vanuit de broncode op de gespecificeerde commit-hash.

Aan het einde van het commando wordt gevraagd of je je verificatiegegevens onchain wilt uploaden. Als je dat doet, zal de Solana Explorer onmiddellijk je programma's verificatiegegevens tonen. Totdat het geverifieerd is door een externe build, wordt het als ongeverifieerd weergegeven. Leer in de volgende stap hoe je je programma kunt verifiëren tegen een openbare API.

Als je de verificatie wilt vastzetten aan een bepaalde release, kun je de --commit-hash flag aan het commando toevoegen.

Verifiëren tegen openbare API

Ten slotte kun je het programma ook direct verifiëren tegen iedereen die de verify API uitvoert:

solana-verify verify-from-repo --remote -um --program-id PhoeNiXZ8ByJGLkxNfZRnkUfjvmuYqLR89jjFHGqdXY https://github.com/Ellipsis-Labs/phoenix-v1

Het wordt aanbevolen om een betaalde RPC-url te gebruiken, omdat je anders tegen rate limits van de gratis RPC's kunt aanlopen. Dus in plaats van -um zou je --url yourRpcUrl moeten gebruiken voor een betrouwbaardere verificatie.

De --remote flag stuurt een build-verzoek naar de OtterSec API, wat een externe build van je programma triggert. Zodra de build is voltooid, verifieert het systeem dat de onchain hash van je programma overeenkomt met de hash van het gegenereerde build-artefact van je repository.

De standaard is de OtterSec API.

Zorg ervoor dat je 'ja' kiest wanneer je wordt gevraagd om de verificatiegegevens onchain te uploaden. Dit wordt gebruikt door de API om te verifiëren dat je de verificatie- gegevens hebt geüpload.

Je kunt ook handmatig een externe taak triggeren door het volgende te gebruiken:

solana-verify remote submit-job --program-id <program-id> --uploader <address>

Waarbij de uploader het adres is dat de bevoegdheid heeft om naar de PDA te schrijven. Dat zou in de meeste gevallen de programma-autoriteit moeten zijn. Als je programma wordt beheerd door een multisig, ga dan verder in het multisig verificatie gedeelte van deze handleiding hieronder.

Dit zal een taak indienen bij de OtterSec API en je kunt vervolgens de taakstatus verifiëren met:

solana-verify remote get-job-status --job-id <job-id>

Zodra de verificatie succesvol is voltooid, wat enige tijd kan duren, zul je je programma als geverifieerd kunnen zien in de OtterSec API voor individuele programma's en in de Solana Explorer, SolanaFM, SolScan en uiteindelijk ook op de door de community beheerde website SolanaVerify.org onderhouden door 0xDeep en de OtterSec geverifieerde programma's API en uiteindelijk in het Verified Programs Dune Dashboard waarmee wordt bijgedragen aan een gezonder Solana-ecosysteem.

Hoe je programma te verifiëren als het wordt beheerd door een multisig zoals Squads

Voor de externe verificatie moet je de verificatiegegevens schrijven naar een PDA die is ondertekend door de programma-autoriteit. Als je programma wordt beheerd door een multisig, kun je deze schrijf-PDA-transactie exporteren en indienen via Squads Protocol of een andere multisig-oplossing naar keuze.

1. Bouw het verifieerbare programma

Bouw eerst het programma:

solana-verify build

Dit bouwt een verifieerbare build met behulp van een docker-container die de solana-versie gebruikt die is gespecificeerd in het Cargo.lock bestand.

2. Deploy het programma

solana config set --url "PayedMainnetRPCAddress" // the public endpoint will be rate limited too much
solana program deploy target/deploy/verify_squads.so

Voor de rest van deze multisig-gids gebruiken we een voorbeeld programma-ID van 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD.

3. Commit en verifieer tegen repository

Zodra dat gedaan is, committen we het project naar github. Hier is een voorbeeld: https://github.com/solana-developers/verify-squads

Optioneel: kijk of je eerst lokaal kunt verifiëren (dit commando gebruikt voorbeeld programma-ID 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD):

solana-verify verify-from-repo https://github.com/solana-developers/verify-squads --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD

Alleen om zeker te weten dat je parameters correct zijn.

4. Draag programma-autoriteit over aan multisig

Als je de autoriteit van je programma nog niet hebt overgedragen aan de multisig en de multisig autoriteit hebt gekopieerd. Je hebt het nodig in de volgende stap.

5. Exporteer PDA-transactie

Wanneer je de programma-authority lokaal hebt, wordt je gevraagd om de build-data onchain te uploaden bij het gebruik van het commando solana-verify verify-from-repo.

Aangezien je dit niet kunt doen wanneer je een multisig gebruikt, moet je de PDA-transactie handmatig exporteren en vervolgens de transactie via Squads activeren.

solana-verify export-pda-tx https://github.com/solana-developers/verify-squads --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD --uploader <your program authority> --encoding base58 --compute-unit-price 0

Dit geeft je een base58 transactie terug. Als je een base64 gecodeerde transactie wilt voor gebruik in een transactie-inspector, kun je --encoding base64 gebruiken.

P6vBfcPaaXb8fZoT3NBAYEcdtEj7tubA1k2gBxmFKZ3UWF5YyrmDMFTvLKALCJoUuRsPAjMckudYruCu3eeWQtuDrFbEMLxLFutnKXac974fnkMivcwUdY66VLjbxQT6ATmcy7F4hBtz1G4P1h6iBJLhb8WtrtgY3i4qq45MUEb7RjuMEfUFXKrNgPdGxkz5xvMHq3dxKRcpmEK5k2DkeW6SUQYBVe19Ga3B9GyhTX8k3CMt9JCEah13WyRnQd8GjoK6sTEvGJym6xDNvmd8yiJYSNcaYwEJsjHEUf4Yh6kAC7ki2KRvVAr3NVe1gjqK9McrwSQjtUatvydTG8Zovcr7PPUEMf3yPMgKXjZLB2QpkH63yTTYdNAnWFuv9E6b6nYRqye5XcNi436yKw5U14fXh65yK34bgYLi9328UT1huJELsJU9BRGnGUmb6GWp6c2WL5BhnzgNTSnt9TXFfEgUMzhvKzpVBxLP44hwqqBdyUhHFysCF37531PnmiESq8x1xou23xJ6FcQbc199754MkqQd7tX9CUznGzAEqHGkzn3VBoJnojsKtgYmiTYbdRsT1CU18MbYEE7WvGAvXyxxbpNzbAcc94HrnM6cqRGmwhEBroPfFghTdmzg9D

6. Dien transactie in via Squads

Ga naar de Squads transactie-builder en importeer de base58-gecodeerde transactie. Zorg ervoor dat in de simulatie de transactie alleen een aanroep naar het osec verify programma en het computer budget programma bevat en niets anders!

7. Dien externe verificatietaak in

Zodra de transactie naar Squads succesvol was, kun je de externe taak indienen:

solana-verify remote submit-job --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD
--uploader <your program authority>

Dat is het! Je hebt je programma geverifieerd tegen een openbare repository en een externe taak ingediend bij de OtterSec API. Je zou het nu moeten kunnen zien in de Solana explorer en andere plaatsen.

8. Het programma bijwerken (Optioneel)

Wanneer je je programma bijwerkt, moet je een nieuwe PDA-transactie exporteren en opnieuw indienen via Squads.

Een update uitvoeren voor het programma:

solana-verify build
solana program write-buffer target/deploy/verify_squads.so --with-compute-unit-price 50000 --max-sign-attempts 50

Draag vervolgens die bufferautoriteit over aan de multisig of maak de buffer direct aan met de autoriteit van de multisig.

solana program set-buffer-authority Fu3k79g53ZozAj47uq1tXrFy4QbQYh7y745DDsxjtyLR --new-buffer-authority 3JG6ULvZVCrkKtSSskKNJGe8RNZGFe8Ruev9KUhxzK5K

9. Exporteer en dien nieuwe PDA-transactie in

Vergeet niet om je wijzigingen naar GitHub te committen. Exporteer de PDA-upgrade transactie opnieuw:

solana-verify export-pda-tx https://github.com/solana-developers/verify-squads --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD --uploader 3JG6ULvZVCrkKtSSskKNJGe8RNZGFe8Ruev9KUhxzK5K

Dien de transactie opnieuw in via Squads.

Je kunt een voorbeeldtransactie hier bekijken.

Dien vervolgens een nieuwe externe build in:

solana-verify remote submit-job --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD --uploader 3JG6ULvZVCrkKtSSskKNJGe8RNZGFe8Ruev9KUhxzK5K

Dit zou moeten resulteren in iets als dit:

Verification request sent with request id: b63339d2-163e-49ac-b55d-3454c1c2b5b3
Verification in progress... ⏳ [00:18:02] ✅ Process completed. (Done in 18
minutes) Program 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD has been verified.
The provided GitHub build matches the on-chain hash. On Chain Hash:
96f8c3d9400258f7759408d1f6f8435b4a24d9b52f5a0340d97907e567cb8773 Executable
Hash: 96f8c3d9400258f7759408d1f6f8435b4a24d9b52f5a0340d97907e567cb8773 Repo URL:
https://github.com/Woody4618/verify-squads/tree/0fb0a2e30c15c51732c0ad5e837975a6f7bbc7ed
Check the verification status at:
https://verify.osec.io/status/6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD Job
url: https://verify.osec.io/job/b63339d2-163e-49ac-b55d-3454c1c2b5b3

Gefeliciteerd, je hebt je programma geverifieerd na een multisig-upgrade!

Verifiëren vanuit docker-image

Je kunt je programma ook verifiëren tegen een docker-image door het volgende commando uit te voeren:

solana-verify verify-from-image -e
examples/hello_world/target/deploy/hello_world.so -i
ellipsislabs/hello_world_verifiable_build:latest -p
2ZrriTQSVekoj414Ynysd48jyn4AX6ZF4TTJRqHfbJfn

Dit commando laadt de image die is opgeslagen op ellipsislabs/hello_world_verifiable_build:latest, en verifieert dat de hash van het uitvoerbare pad in de container hetzelfde is als de hash van het onchain programma dat aan het commando is meegegeven. Omdat de build al naar een image is geüpload, is er geen volledige rebuild van het uitvoerbare bestand nodig, wat lang kan duren.

Het Dockerfile dat de image ellipsislabs/hello_world_verifiable_build:latest creëert, is te vinden in de ellipsis labs repository /examples/hello_world.

Hieronder staat de verwachte uitvoer:

Verifying image: "ellipsislabs/hello_world_verifiable_build:latest", on network
"https://api.mainnet.solana.com" against program ID
2ZrriTQSVekoj414Ynysd48jyn4AX6ZF4TTJRqHfbJfn Executable path in container:
"examples/hello_world/target/deploy/hello_world.so"
Executable hash:
08d91368d349c2b56c712422f6d274a1e8f1946ff2ecd1dc3efc3ebace52a760 Program hash:
08d91368d349c2b56c712422f6d274a1e8f1946ff2ecd1dc3efc3ebace52a760 Executable
matches on-chain program data ✅

Voorbeeld van een geverifieerde build

Hier is een voorbeeld van het verifiëren van een voorbeeldprogramma met de ID FWEYpBAf9WsemQiNbAewhyESfR38GBBHLrCaU3MpEKWv met behulp van de broncode uit deze repository:

solana-verify verify-from-repo https://github.com/solana-developers/verified-program --url YOUR-RPC-URL --program-id FWEYpBAf9WsemQiNbAewhyESfR38GBBHLrCaU3MpEKWv --mount-path waffle --library-name waffle --commit-hash 5b82b86f02afbde330dff3e1847bed2d42069f4e

Standaard neemt het verify-from-repo commando de laatste commit op de main branch. Je kunt ook een specifieke commit definiëren als je verder wilt werken aan de repository door de commit-hash parameter te gebruiken: --commit-hash 5b82b86f02afbde330dff3e1847bed2d42069f4e

Tot slot kun je het programma ook direct verifiëren via de OtterSec API:

solana-verify verify-from-repo https://github.com/solana-developers/verified-program --url YOUR-RPC-URL --remote --program-id FWEYpBAf9WsemQiNbAewhyESfR38GBBHLrCaU3MpEKWv --mount-path waffle --library-name waffle --commit-hash 5b82b86f02afbde330dff3e1847bed2d42069f4e

Het --remote commando stuurt een buildverzoek naar de OtterSec API, die een externe build van je programma start. Zodra de build is voltooid, verifieert het systeem dat de onchain hash van je programma overeenkomt met de hash van het gegenereerde build artefact van je repository.

Populaire programma's die al geverifieerd zijn

Phoenix

solana-verify verify-from-repo -um --program-id PhoeNiXZ8ByJGLkxNfZRnkUfjvmuYqLR89jjFHGqdXY https://github.com/Ellipsis-Labs/phoenix-v1

Eindresultaat:

Executable Program Hash from repo: 6877a5b732b3494b828a324ec846d526d962223959534dbaf4209e0da3b2d6a9
On-chain Program Hash: 6877a5b732b3494b828a324ec846d526d962223959534dbaf4209e0da3b2d6a9
Program hash matches ✅

Squads V3

solana-verify verify-from-repo https://github.com/Squads-Protocol/squads-mpl --commit-hash c95b7673d616c377a349ca424261872dfcf8b19d --program-id SMPLecH534NA9acpos4G6x7uf3LWbCAwZQE9e8ZekMu -um --library-name squads_mpl --bpf

Merk op dat we de library-name moesten specificeren omdat de Squads repo meerdere programma's bevat. We gebruiken de --bpf vlag omdat squads_mpl eerder geverifieerd was met Anchor.

Eindresultaat:

Executable Program Hash from repo: 72da599d9ee14b2a03a23ccfa6f06d53eea4a00825ad2191929cbd78fb69205c
On-chain Program Hash: 72da599d9ee14b2a03a23ccfa6f06d53eea4a00825ad2191929cbd78fb69205c
Program hash matches ✅

Drift V2

solana-verify verify-from-repo -um --program-id dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH https://github.com/drift-labs/protocol-v2 --commit-hash 110d3ff4f8ba07c178d69f9bfc7b30194fac56d6 --library-name drift

Eindresultaat:

Executable Program Hash from repo: e31d58edeabc3c30bf6f2aa60bfaa5e492b41ec203e9006404b463e5adee5828
On-chain Program Hash: e31d58edeabc3c30bf6f2aa60bfaa5e492b41ec203e9006404b463e5adee5828
Program hash matches ✅

Marginfi V2

solana-verify verify-from-repo -um --program-id MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA https://github.com/mrgnlabs/marginfi-v2 --commit-hash d33e649e415c354cc2a1e3c49131725552d69ba0 --library-name marginfi -- --features mainnet-beta

Eindresultaat:

Executable Program Hash from repo: 890d68f48f96991016222b1fcbc2cc81b8ef2dcbf280c44fe378c523c108fad5
On-chain Program Hash: 890d68f48f96991016222b1fcbc2cc81b8ef2dcbf280c44fe378c523c108fad5
Program hash matches ✅

Veelgestelde vragen

Mijn verificatie mislukt. Wat moet ik doen?

Controleer deze veelvoorkomende problemen:

  • Verkeerde ondertekenaar: Bevestig dat uw ondertekenaar de upgrade-autoriteit van het programma is door solana program show YourProgramId uit te voeren
  • Geen on-chain PDA: Voer solana-verify verify-from-repo -um uit en selecteer JA wanneer daarom wordt gevraagd. Zonder het uploaden van de PDA kan de API uw verificatiemetadata niet ophalen.
  • PDA-gegevens komen niet overeen: Werk uw PDA bij als u uw programma opnieuw hebt geïmplementeerd. Uw PDA-gegevens moeten overeenkomen met uw geïmplementeerde programma.
  • Onjuiste commit-hash: Maak uw PDA aan met de exacte commit-hash die u hebt geïmplementeerd
  • Verschillen in build-omgeving: Gebruik Docker met solana-verify bij het aanmaken van uw PDA

Mijn lokale build-hash komt niet overeen met de on-chain hash. Waarom?

Dit betekent meestal:

  • U gebruikt verschillende versies van de Rust/Solana-toolchain
  • Uw afhankelijkheden zijn tussen builds bijgewerkt
  • U hebt niet in een Docker-container gebouwd
  • U hebt de verkeerde commit uitgecheckt

Los dit op door te bouwen met solana-verify build in Docker met de exacte commit die u hebt geïmplementeerd.

Hoe lang duurt mijn verificatie?

Verwacht deze tijdsduren op basis van uw programmagrootte:

  • Eenvoudige programma's: 1-5 minuten
  • Complexe programma's: 5-15 minuten
  • Zeer grote programma's: Tot 30 minuten

Volg uw voortgang met behulp van het jobstatus-endpoint.

Mijn programma is onveranderlijk (geen upgrade-autoriteit). Hoe kan ik het verifiëren?

Als uw programma geen upgrade-autoriteit heeft of onveranderlijk is gemaakt voordat u een PDA kon aanmaken, hebben we hiervoor een goedgekeurd adres. Neem contact met ons op via contact@osec.io en we helpen u uw programma te laten verifiëren.

Wat is de PDA en waarom is deze belangrijk?

Uw PDA (Program Derived Account) maakt vertrouwensloze verificatie mogelijk:

  • On-Chain Opslag: Bewaar uw verificatiemetadata (repo-URL, commit-hash, build-parameters) on-chain in een PDA die eigendom is van het Otter Verify-programma (verifycLy8mB96wd9wqq3WDXQwM4oU6r42Th37Db9fC)
  • Cryptografische Koppeling: Uw PDA is afgeleid van uw programma-adres, waardoor een onveranderlijke koppeling naar uw verificatiegegevens ontstaat
  • Gedecentraliseerd Vertrouwen: Iedereen kan uw PDA lezen en onafhankelijk uw programma verifiëren

Waarom moet ik de PDA aanmaken voordat ik de API gebruik?

De API werkt alleen met on-chain PDA's omdat:

  • Vertrouwensloos: De API weigert willekeurige gegevens - het gebruikt alleen wat uw upgrade-autoriteit on-chain heeft opgeslagen
  • Eenvoudiger: Geef alleen ondertekener + program_id op; de API haalt al het andere uit uw PDA
  • Fraudebestendig: Uw PDA creëert een onveranderlijk record dat iedereen onafhankelijk kan verifiëren
  • Eigendomsbewijs: Uw ondertekener moet de upgrade-autoriteit zijn, wat cryptografisch bewijst dat u het programma beheert

Hoe vaak moet ik mijn programma verifiëren?

Verifieer uw programma:

  • Na elke implementatie of upgrade
  • Wanneer u uw broncode-repository bijwerkt
  • Maak u verder geen zorgen over herverificatie - de API herverifieert automatisch alle programma's elke 24 uur

Wat gebeurt er wanneer ik mijn programma upgrade?

Volg deze stappen na het upgraden:

  1. De API detecteert uw upgrade en maakt de verificatie van uw programma ongedaan.
  2. Update uw PDA met nieuwe verificatiemetadata:
solana-verify verify-from-repo -um \
--program-id YourProgramId... \
https://github.com/your-org/your-program
  1. Dien een nieuw verificatieverzoek in met uw upgrade-autoriteit
  2. De API zal uw nieuwe versie verifiëren tegen de bijgewerkte PDA

Belangrijk: Update uw PDA altijd met uw upgrade-autoriteit met de nieuwe commit-hash voor het geüpgradede programma.

Kan ik de verificatieresultaten vertrouwen?

Ja - het systeem is ontworpen om vertrouwensloos en onafhankelijk verifieerbaar te zijn:

Wat het betrouwbaar maakt:

  • On-Chain PDA: Je verificatiemetadata staat on-chain, niet gecontroleerd door een centrale autoriteit
  • Upgrade Authority Bewijs: Alleen de upgrade authority van je programma kan de PDA aanmaken/bijwerken
  • Onafhankelijke Verificatie: Iedereen kan verifiëren door je PDA te lezen en solana-verify lokaal uit te voeren
  • Continue Herverificatie: De API herverifieert automatisch alle programma's elke 24 uur

Begrijp deze beperkingen:

  • Verificatie bevestigt dat de bron overeenkomt met de deployment - NIET dat je code veilig is
  • Controleer altijd de code voordat je met programma's interacteert
  • Geverifieerd ≠ geauditeerd of veilig
  • Controleer de repository en commit in de PDA om te bevestigen dat deze van een betrouwbare bron komt

Hoe kan ik een programma zelf verifiëren?

Verifieer elk programma zelf door de on-chain PDA te lezen en verificatie lokaal uit te voeren:

Stap 1: Lees de On-Chain PDA

# Install solana-verify if you haven't
cargo install solana-verify
# Get the PDA data
solana-verify list-program-pdas --program-id YourProgramId...

Stap 2: Verifieer Lokaal

# Verify using the repository and commit & other arguments from the PDA
solana-verify verify-from-repo \
--program-id YourProgramId... \
https://github.com/your-org/your-program
--commit-hash <commit-hash>
... (other arguments from the PDA)
# Confirm the hash output matches the on-chain program hash

Dit bewijst:

  1. De PDA-metadata is authentiek (opgeslagen on-chain)
  2. De broncode in de repository van de PDA komt overeen met het gedeployde programma
  3. Je hoeft de API niet te vertrouwen - verifieer alles zelf on-chain

Kan iemand anders mijn programma verifiëren zonder toestemming?

Ja, dat is de reden waarom we vereisen dat de ondertekenaar de upgrade authority is. We beschouwen de verificatie alleen als geldig als de ondertekenaar de upgrade authority is.

Wat heb ik nodig om verifieerbare builds te maken?

Installeer deze tools:

  • Docker (voor deterministische builds)
  • Cargo (Rust package manager)
  • Solana Verify CLI: cargo install solana-verify
  • Een publieke Git-repository met je broncode

Kan ik privérepositories verifiëren?

Nee - verificatie vereist openbare broncode:

  • Je PDA slaat een openbare repository-URL op die iedereen kan raadplegen
  • Trustless verificatie is afhankelijk van openbare toegang tot code
  • Gebruikers moeten je broncode kunnen lezen om te begrijpen wat je programma doet
  • Het hele doel is om gebruikers in staat te stellen zelfstandig te verifiëren dat de bron overeenkomt met de deployment

Privérepositories breken het kernvertrouwensmodel van het verificatiesysteem.

Hoe verifieer ik een programma dat wordt beheerd door Squads Multisig?

Volg deze stappen voor multisig-beheerde programma's:

# 1. Build and deploy normally
solana-verify build
solana program deploy <your-program.so> --program-id YourProgramId...
# 2. Verify locally first - confirm the hash matches
solana-verify verify-from-repo -um \
--program-id YourProgramId... \
https://github.com/your-org/your-program
# 3. Export the PDA creation transaction
solana-verify export-pda-tx \
--program-id YourProgramId... \
https://github.com/your-org/your-program
# 4. Execute the PDA transaction through your Squads Multisig interface
# 5. After multisig execution, trigger remote verification
solana-verify remote submit-job \
--program-id YourProgramId... \
--uploader YourMultisigAddress...

Cruciaal: Verifieer altijd lokaal (stap 2) om te bevestigen dat de build-hash overeenkomt voordat je de PDA-transactie exporteert.

Conclusie

Het gebruik van geverifieerde builds op Solana waarborgt de integriteit en betrouwbaarheid van je programma's op het netwerk en stelt ontwikkelaars in staat om je SDK's rechtstreeks vanuit een Solana Explorer te vinden. Door gebruik te maken van tools zoals de Solana Verify CLI en Docker, kun je verifieerbare en veilige builds onderhouden die overeenkomen met je broncode. Neem altijd de noodzakelijke voorzorgsmaatregelen om consistente omgevingen te gebruiken, en overweeg governance- oplossingen voor veilige upgrades en deployments.

Beveiliging + Disclaimer

Hoewel geverifieerde builds een krachtig hulpmiddel zijn om de integriteit van je Solana-programma's te waarborgen, is het niet volledig trustless in de standaardconfiguratie. De docker- images worden gebouwd en gehost door de Solana Foundation.

Houd er rekening mee dat je je project bouwt in een gedownloade docker-image en dat je volledige setup in die docker-image wordt gekopieerd voor de build, inclusief potentieel gevoelige informatie.

Als je een volledig trustless configuratie wilt, kun je de docker-images zelf bouwen en hosten op je eigen infrastructuur. Op deze manier kun je er zeker van zijn dat de docker-images niet zijn gemanipuleerd. Je vindt de scripts om je eigen docker-images te maken in de Verified builds repository en je kunt het forken en de github actions zelf uitvoeren of valideren dat ze correct zijn.

Bovendien vertrouw je voor de externe verificatie tot op zekere hoogte op de OtterSec API en de Solana Explorer.

De API of Solana Explorer kunnen mogelijk onjuiste informatie weergeven indien gecompromitteerd.

Als je een volledig trustless setup wilt hebben, kun je de Verify API zelf draaien of de programmaverificatie lokaal uitvoeren met het verify-from-repo commando, waarbij je gebruik maakt van de on-chain verificatiegegevens die zijn opgeslagen in een PDA die is afgeleid van de deploy authority van het programma en het verify programma.

Het verify programma is gedeployed door het OtterSec team en is nog niet bevroren, dus het kan op elk moment worden geüpgraded.

De Solana Foundation, OtterSec en het Ellipsis Labs team zijn niet verantwoordelijk voor eventuele verliezen of schade die kunnen ontstaan door het gebruik van de verified builds pipeline.

Security.txt voor Solana programma's

Naast verified builds kun je ook een security.txt bestand aan je programma toevoegen. In de toekomst, zodra geïmplementeerd, zal de security.txt de verifier public key bevatten voor eenvoudige toegang tot de verificatiegegevens die zijn opgeslagen in de verificatie PDA. De PDA die alle informatie bevat die nodig is om een programma te bouwen en te verifiëren, is afgeleid van het adres van het programma en de verifier pubkey. Standaard is dit dezelfde pubkey die het programma heeft gebouwd en gedeployed. Maar het kan ook een andere pubkey zijn die kan worden gespecificeerd in de security.txt.

De security.txt functie stelt ontwikkelaars in staat om contact- en beveiligingsinformatie direct in hun Solana smart contracts in te bedden. Geïnspireerd door securitytxt.org, biedt deze aanpak een gestandaardiseerde manier voor beveiligingsonderzoekers om contact op te nemen met projectbeheerders, zelfs als ze alleen het adres van het contract kennen.

Waarom security.txt gebruiken?

Voor veel projecten, vooral kleinere of private projecten, kan het lastig en tijdrovend zijn om de ontwikkelaars te identificeren op basis van alleen het contractadres. Door een security.txt-bestand in het programma in te sluiten, kunnen beveiligingsonderzoekers gemakkelijk contact opnemen met de juiste personen, waardoor exploits mogelijk worden voorkomen en bugs tijdig worden gemeld.

Hoe security.txt te implementeren

Om een security.txt aan je Solana-programma toe te voegen, volg je de volgende stappen:

Voeg de solana-security-txt-dependency toe aan je Cargo.toml:

Cargo.toml
[dependencies]
solana-security-txt = "1.1.1"

Gebruik de security_txt!-macro in je contract om je beveiligingsinformatie te definiëren. Je kunt contactgegevens, project-URL's en zelfs een beveiligingsbeleid toevoegen. Hier is een voorbeeld:

#[cfg(not(feature = "no-entrypoint"))]
use {default_env::default_env, solana_security_txt::security_txt};
#[cfg(not(feature = "no-entrypoint"))]
security_txt! {
name: "MyProject",
project_url: "https://myproject.com",
contacts: "email:security@myproject.com,discord:security#1234",
policy: "https://myproject.com/security-policy",
// Optional Fields
preferred_languages: "en,de",
source_code: "https://github.com/solana-developers/solana-game-preset",
source_revision: "5vJwnLeyjV8uNJSp1zn7VLW8GwiQbcsQbGaVSwRmkE4r",
source_release: "",
encryption: "",
auditors: "Verifier pubkey: 5vJwnLeyjV8uNJSp1zn7VLW8GwiQbcsQbGaVSwRmkE4r",
acknowledgements: "Thank you to our bug bounty hunters!"
}

Zodra de security.txt-informatie in je programma is ingebed, kan deze eenvoudig worden opgevraagd via tools zoals de Solana Explorer, zodat je contact- en beveiligingsgegevens beschikbaar zijn voor iedereen die potentiële problemen wil melden.

Best practices

  • Gebruik links: Voor informatie die waarschijnlijk zal veranderen (bijv. contactgegevens), is het aan te raden om naar een webpagina te linken in plaats van deze hard-coded in het contract op te nemen. Dit voorkomt de noodzaak van frequente programma-upgrades.

  • Verificatie: Verifieer vóór het deployen het formaat en de inhoud met behulp van de query-security-txt-tool, die zowel onchain-programma's als lokale binaries kan valideren:

query-security-txt target/bpfel-unknown-unknown/release/my_contract.so

Door beveiligingscontactinformatie direct in je contract in te sluiten, maak je het voor onderzoekers gemakkelijker om je te bereiken, wat betere beveiliging en communicatie binnen het Solana-ecosysteem bevordert.

Dit is een voorbeeld van hoe security.txt eruitziet in de Solana Explorer

Het security.txt-project wordt onderhouden door Neodyme Labs

Je kunt de verificatiestatus controleren en geverifieerde programma's bekijken op verify.osec.io.

Is this page helpful?

Inhoudsopgave

Wat zijn geverifieerde builds?Hoe werkt het?Waarom zou ik geverifieerde builds moeten gebruiken?Hoe maak ik geverifieerde builds?Installeer Docker en CargoInstalleer de Solana Verify CLIProject voorbereidenVerifieerbare programma's bouwenVerifieerbare programma's implementerenVerifiëren tegen repositoriesVerifiëren tegen openbare APIHoe je programma te verifiëren als het wordt beheerd door een multisig zoals Squads1. Bouw het verifieerbare programma2. Deploy het programma3. Commit en verifieer tegen repository4. Draag programma-autoriteit over aan multisig5. Exporteer PDA-transactie6. Dien transactie in via Squads7. Dien externe verificatietaak in8. Het programma bijwerken (Optioneel)9. Exporteer en dien nieuwe PDA-transactie inVerifiëren vanuit docker-imageVoorbeeld van een geverifieerde buildPopulaire programma's die al geverifieerd zijnPhoenixSquads V3Drift V2Marginfi V2Veelgestelde vragenMijn verificatie mislukt. Wat moet ik doen?Mijn lokale build-hash komt niet overeen met de on-chain hash. Waarom?Hoe lang duurt mijn verificatie?Mijn programma is onveranderlijk (geen upgrade-autoriteit). Hoe kan ik het verifiëren?Wat is de PDA en waarom is deze belangrijk?Waarom moet ik de PDA aanmaken voordat ik de API gebruik?Hoe vaak moet ik mijn programma verifiëren?Wat gebeurt er wanneer ik mijn programma upgrade?Kan ik de verificatieresultaten vertrouwen?Hoe kan ik een programma zelf verifiëren?Kan iemand anders mijn programma verifiëren zonder toestemming?Wat heb ik nodig om verifieerbare builds te maken?Kan ik privérepositories verifiëren?Hoe verifieer ik een programma dat wordt beheerd door Squads Multisig?ConclusieBeveiliging + DisclaimerSecurity.txt voor Solana programma'sWaarom security.txt gebruiken?Hoe security.txt te implementerenBest practices
Pagina Bewerken

Beheerd door

© 2026 Solana Foundation.
Alle rechten voorbehouden.
Blijf Verbonden