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:
[workspace]members = ["program/programs/*"]resolver = "2"[profile.release]overflow-checks = truelto = "fat"codegen-units = 1[profile.release.build-override]opt-level = 3incremental = falsecodegen-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:
[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
ofcargo 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 deCargo.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 muchsolana 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 buildsolana 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-3454c1c2b5b3Verification in progress... ⏳ [00:18:02] ✅ Process completed. (Done in 18minutes) Program 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD has been verified.✅ The provided GitHub build matches the on-chain hash. On Chain Hash:96f8c3d9400258f7759408d1f6f8435b4a24d9b52f5a0340d97907e567cb8773 ExecutableHash: 96f8c3d9400258f7759408d1f6f8435b4a24d9b52f5a0340d97907e567cb8773 Repo URL:https://github.com/Woody4618/verify-squads/tree/0fb0a2e30c15c51732c0ad5e837975a6f7bbc7edCheck the verification status at:https://verify.osec.io/status/6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD Joburl: 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 -eexamples/hello_world/target/deploy/hello_world.so -iellipsislabs/hello_world_verifiable_build:latest -p2ZrriTQSVekoj414Ynysd48jyn4AX6ZF4TTJRqHfbJfn
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 ID2ZrriTQSVekoj414Ynysd48jyn4AX6ZF4TTJRqHfbJfn Executable path in container:"examples/hello_world/target/deploy/hello_world.so"Executable hash:08d91368d349c2b56c712422f6d274a1e8f1946ff2ecd1dc3efc3ebace52a760 Program hash:08d91368d349c2b56c712422f6d274a1e8f1946ff2ecd1dc3efc3ebace52a760 Executablematches 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: 6877a5b732b3494b828a324ec846d526d962223959534dbaf4209e0da3b2d6a9On-chain Program Hash: 6877a5b732b3494b828a324ec846d526d962223959534dbaf4209e0da3b2d6a9Program 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 omdatsquads_mpl
eerder was geverifieerd met Anchor.
Eindresultaat:
Executable Program Hash from repo: 72da599d9ee14b2a03a23ccfa6f06d53eea4a00825ad2191929cbd78fb69205cOn-chain Program Hash: 72da599d9ee14b2a03a23ccfa6f06d53eea4a00825ad2191929cbd78fb69205cProgram 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: e31d58edeabc3c30bf6f2aa60bfaa5e492b41ec203e9006404b463e5adee5828On-chain Program Hash: e31d58edeabc3c30bf6f2aa60bfaa5e492b41ec203e9006404b463e5adee5828Program 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: 890d68f48f96991016222b1fcbc2cc81b8ef2dcbf280c44fe378c523c108fad5On-chain Program Hash: 890d68f48f96991016222b1fcbc2cc81b8ef2dcbf280c44fe378c523c108fad5Program 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
:
[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 Fieldspreferred_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?