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 hebben in de hoofdmap van je repository. Als je maar éé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 basis 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 de Cargo.toml van je programma de juiste lib naam geconfigureerd heeft.

Belangrijk is de lib name niet de pakketnaam!

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. Let ook op dat wanneer het programma zich in een submap bevindt, je deze map later 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 te maken en doorgaan met het bouwen van je programma.

Verifieerbare programma's bouwen

Om je Solana-programma verifieerbaar te bouwen, navigeer naar de map die je workspace's Cargo.toml bestand bevat en voer 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 implementeert en deze niet per ongeluk overschrijft met anchor build of cargo build-sbf aangezien deze hoogstwaarschijnlijk niet in dezelfde hash zullen resulteren en daardoor zal je verificatie 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 in je programmadirectory uitvoert, moet je bij het uitvoeren van verify-from-repo de vlag --mount-path toevoegen. Dit is het pad naar de map die de Cargo.toml bevat met de bibliotheek-naam 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 koppelen aan een bepaalde release, kun je de --commit-hash vlag 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 snelheidsbeperkingen van de gratis RPC's kunt aanlopen. Dus in plaats van -um kun je beter --url yourRpcUrl gebruiken voor een betrouwbaardere verificatie.

De --remote vlag 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 zal een verifieerbare build maken 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-handleiding 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 lokaal over de programma-autoriteit beschikt, word je gevraagd om de build data on-chain te uploaden bij 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 gebruiken 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 on-chain programma dat aan het commando is meegegeven. Omdat de build al is geüpload naar een image, is er geen volledige herbouw van het uitvoerbare bestand nodig, wat veel tijd kan kosten.

De Dockerfile die de image ellipsislabs/hello_world_verifiable_build:latest aanmaakt, 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-beta.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 van 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 gebruikt het verify-from-repo commando de laatste commit op de main branch. Je kunt ook een specifieke commit definiëren voor het geval je wilt doorgaan met 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 flag omdat squads_mpl eerder was geverifieerd 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 ✅

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 via 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 implementaties.

Beveiliging + Disclaimer

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

Wees je ervan bewust dat je je project bouwt in een gedownloade docker-image en dat je hele setup wordt gekopieerd naar die docker-image voor het bouwen, inclusief potentieel gevoelige informatie.

Als je een volledig trustless setup wilt hebben, 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 kunt de scripts om je eigen docker-images te maken vinden in de Verified builds repository en je kunt deze forken en de github-acties zelf uitvoeren of valideren dat ze correct zijn.

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

De API of Solana Explorer kan mogelijk onjuiste informatie weergeven als deze gecompromitteerd is.

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, gebruikmakend van de on-chain verificatiegegevens die zijn opgeslagen in een PDA die is afgeleid van de deploy-autoriteit van het programma en het verify programma.

Het verificatieprogramma wordt ingezet door het OtterSec team en is nog niet bevroren, dus het kan op elk moment worden bijgewerkt.

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

Security.txt voor Solana programma's

Naast geverifieerde builds kun je ook een security.txt bestand toevoegen aan je programma. In de toekomst, zodra geïmplementeerd, zal de security.txt de verifier pubkey 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 wordt afgeleid van het programma-adres en de verifier pubkey. Standaard is dit dezelfde pubkey die het programma heeft gebouwd en geïmplementeerd. 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 rechtstreeks in hun Solana smart contracts op te nemen. 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, kan het identificeren van de ontwikkelaars op basis van alleen het contractadres moeilijk en tijdrovend zijn. Door een security.txt bestand in het programma op te nemen, kunnen beveiligingsonderzoekers eenvoudig contact opnemen met de juiste personen, waardoor potentiële exploits kunnen worden voorkomen en tijdige bugrapporten worden verzekerd.

Hoe security.txt implementeren

Om een security.txt toe te voegen aan je Solana programma, 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 opnemen. 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 is ingebed in je programma, kan deze gemakkelijk worden opgevraagd via tools zoals de Solana Explorer, waardoor 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 aanbevolen om te linken naar een webpagina in plaats van deze hard te coderen in het contract. Dit voorkomt de noodzaak voor frequente programma-upgrades.

  • Verificatie: controleer vóór het implementeren het formaat en de inhoud met 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 bedden, maak je het gemakkelijker voor onderzoekers om je te bereiken, wat zorgt voor betere beveiliging en communicatie binnen het Solana-ecosysteem.

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

Het security.txt project wordt onderhouden door Neodyme Labs

Is this page helpful?