Verifica dei programmi
Questa guida è pensata come riferimento per gli sviluppatori che vogliono implementare build verificate per i loro programmi su Solana. Tratteremo cosa sono le build verificate, come utilizzarle, considerazioni speciali e best practice per garantire l'autenticità del tuo programma sulla blockchain.
Cosa sono le build verificate?
Le build verificate assicurano che il programma eseguibile che distribuisci sulla rete di Solana corrisponda al codice sorgente nel tuo repository. Grazie a questo, sviluppatori e utenti possono avere la certezza che il programma in esecuzione sulla blockchain corrisponda esattamente alla base di codice pubblica, promuovendo trasparenza e sicurezza.
Il processo di verifica prevede il confronto dell'hash del programma sulla blockchain con l'hash del programma compilato localmente dal codice sorgente. Questo garantisce che non ci siano discrepanze tra le due versioni.
Sebbene una build verificata non debba essere considerata più sicura di una build non verificata, la build permette agli sviluppatori di verificare autonomamente che il codice sorgente corrisponda a ciò che è distribuito sulla blockchain. Utilizzando il codice sorgente, uno sviluppatore può quindi validare cosa esegue il codice quando invia una transazione.
La pipeline di build verificate è stata ideata e viene mantenuta da Ellipsis Labs e OtterSec. Per maggiori dettagli, segui la guida nel repository originale delle build verificate e il processo di verifica della build direttamente nella suite di strumenti Anza, una volta supportato.
Come funziona?
Il processo di verifica viene effettuato confrontando l'hash del programma onchain con l'hash del programma compilato localmente dal codice sorgente. Compili il tuo programma in un ambiente controllato utilizzando Solana Verify CLI e Docker. Questo garantisce che il processo di compilazione sia deterministico e coerente su diversi sistemi. Una volta ottenuto l'eseguibile, puoi distribuirlo sulla rete Solana. Durante il processo di compilazione verrà creato un PDA del programma verify. Questo PDA contiene tutti i dati necessari per verificare il programma. Il PDA contiene l'indirizzo del programma, l'URL git, l'hash del commit e gli argomenti utilizzati per compilare il programma.
Utilizzando i dati nel PDA, chiunque può eseguire localmente il comando del programma verify e controllare se il programma è stato compilato dal codice sorgente fornito. Quindi tutti possono verificare autonomamente in modo completamente trustless o possono eseguire la propria API di verifica mantenuta da OtterSec per fornire un punto di accesso facile agli utenti per controllare la verifica. Puoi già vedere queste chiamate API utilizzate in Solana Explorer e SolanaFM, tra gli altri.
Perché dovrei usare build verificate?
L'utilizzo di build verificate offre i seguenti vantaggi:
-
Sicurezza: garantisce che il programma in esecuzione onchain corrisponda al codice sorgente, prevenendo alterazioni dannose.
-
Trasparenza: permette ad altri utenti e sviluppatori di convalidare che il programma onchain sia affidabile confrontandolo con il codebase pubblico.
-
Fiducia: aumenta la fiducia degli utenti, poiché le build verificate dimostrano che il comportamento onchain del tuo programma è allineato con il tuo codice pubblico. Quando costruisci programmi verificabili, riduci al minimo i rischi associati all'esecuzione di codice non autorizzato o dannoso. Garantisce inoltre che tu rispetti le migliori pratiche e offri ai ricercatori di sicurezza un modo semplice per contattarti. Anche i wallet e altri strumenti possono consentire più facilmente le transazioni dal tuo programma finché è verificato.
-
Individuabilità: quando fornisci una build verificata del tuo programma, tutti possono trovare il tuo codice sorgente, la documentazione, l'SDK o l'IDL del programma e possono anche contattarti facilmente tramite GitHub in caso di problemi.
Come creo build verificate?
Per creare build verificate, dovrai seguire questi passaggi:
Riepilogo:
- Effettua il commit del tuo codice in un repository pubblico
- Crea una build verificata in Docker
- Distribuisci la build verificata
- Verifica il programma distribuito tramite API pubblica
Se verifichi il tuo programma che non è stato compilato in un container Docker, molto probabilmente fallirà perché le build dei programmi Solana non sono deterministiche su sistemi diversi.
Installa Docker e Cargo
Installa gli strumenti necessari assicurandoti di avere Docker e Cargo installati. Docker fornisce un ambiente di build controllato per garantire la coerenza, e Cargo viene utilizzato per gestire i pacchetti Rust.
- Docker: segui i passaggi sul sito web di Docker per installare Docker per la tua piattaforma. Una volta installato, assicurati che il servizio Docker sia in esecuzione seguendo questa guida.
- Cargo: se non hai già Cargo installato, puoi installarlo eseguendo il seguente comando:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Installa la CLI Solana Verify
La CLI Solana Verify è lo strumento principale utilizzato per verificare le build. La CLI Solana Verify è attualmente mantenuta da Ellipsis Labs e può essere installata utilizzando Cargo.
Puoi installarla eseguendo:
cargo install solana-verify
Se hai bisogno di una versione specifica della CLI, puoi fissare la versione con:
cargo install solana-verify --version $VERSION
Se lo desideri, puoi installare una versione direttamente da un commit specifico:
cargo install solana-verify --git https://github.com/Ellipsis-Labs/solana-verifiable-build --rev 13a1db2
Preparare il progetto
Per verificare un repository, è necessario avere un file Cargo.lock
nella
directory principale del repository. Se hai un solo programma nel tuo repository
e un file cargo.lock
nella root, puoi passare direttamente al passaggio
successivo e compilare il tuo programma.
Se il tuo programma si trova in una sottocartella e hai un workspace Rust, devi
creare un file Cargo.toml
del workspace nella directory principale del tuo
repository.
Puoi utilizzare questo esempio di Cargo.toml
come modello:
[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
Assicurati che il tuo programma sia nell'array workspace/members
e che il file
Cargo.toml
del tuo programma abbia configurato correttamente il nome lib
.
È importante il
lib name
, non il nome del pacchetto!
Qualcosa come questo:
[package]name = "waffle"version = "0.1.0"edition = "2021"[lib]name = "waffle"crate-type = ["cdylib", "lib"][dependencies]solana-program = "2.1.0"
In questo repository
puoi vedere un esempio di workspace con un programma in una sottocartella. Nota
anche che quando il programma si trova in una sottocartella, dovrai
successivamente aggiungere questa cartella come --mount-path
al comando
verify-from-repo
.
In questo repository puoi trovare un esempio di Anchor. In questo repository puoi trovare un esempio di Rust nativo.
Con questo file Cargo.toml
in posizione, puoi quindi eseguire
cargo generate-lockfile
per creare un file di lock e continuare con la
compilazione del tuo programma.
Compilazione di programmi verificabili
Per compilare in modo verificabile il tuo programma Solana, naviga nella
directory contenente il file Cargo.toml
del tuo workspace ed esegui:
solana-verify build
Questo copierà il tuo ambiente in un container Docker e lo compilerà in modo deterministico.
Assicurati di distribuire effettivamente la build verificata e di non sovrascriverla accidentalmente con
anchor build
ocargo build-sbf
, poiché questi molto probabilmente non produrranno lo stesso hash e quindi la tua verifica fallirà.
Per progetti con più programmi, puoi compilare un programma specifico utilizzando il nome della libreria (non il nome del pacchetto):
solana-verify build --library-name $PROGRAM_LIB_NAME
Questo processo garantisce build deterministiche e può richiedere del tempo, specialmente su certi sistemi (ad es., MacBook M1) perché viene eseguito all'interno di un container docker. Per build più veloci, si consiglia l'utilizzo di una macchina Linux con architettura x86.
Una volta completata la build, puoi recuperare l'hash dell'eseguibile utilizzando il seguente comando:
solana-verify get-executable-hash target/deploy/$PROGRAM_LIB_NAME.so
Distribuzione di programmi verificabili
Una volta che hai compilato il tuo programma e recuperato il suo hash, puoi distribuirlo sulla rete Solana. Si consiglia di utilizzare una soluzione multi-firma o di governance come Squads Protocol per distribuzioni sicure, ma puoi anche distribuire direttamente con:
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
Una commissione a bassa priorità attualmente adeguata può essere richiesta dal tuo provider rpc, ad esempio Quicknode.
Per verificare che il programma distribuito corrisponda all'eseguibile compilato, esegui:
solana-verify get-program-hash -u $NETWORK_URL $PROGRAM_ID
Potresti avere versioni diverse distribuite su diversi cluster Solana (ad es. devnet, testnet, mainnet). Assicurati di utilizzare l'URL di rete corretto per il cluster Solana desiderato su cui vuoi verificare un programma. La verifica remota funzionerà solo su mainnet.
Verifica rispetto ai repository
Per verificare un programma rispetto al suo repository pubblico, utilizza:
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
Mentre esegui la build verificata nella directory del tuo programma, quando esegui
verify-from-repo
devi aggiungere il flag--mount-path
. Questo sarà il percorso alla cartella contenente ilCargo.toml
che contiene il nome della libreria del tuo programma.
Questo comando confronta l'hash del programma onchain con l'hash eseguibile costruito dal codice sorgente al commit hash specificato.
Alla fine il comando ti chiederà se vuoi caricare i tuoi dati di verifica onchain. Se lo fai, Solana Explorer mostrerà immediatamente i dati di verifica del tuo programma. Finché non sarà verificato da una build remota, apparirà come non verificato. Scopri come puoi verificare il tuo programma tramite un'API pubblica nel prossimo passaggio.
Se vuoi bloccare la verifica a una determinata release, puoi aggiungere il flag
--commit-hash
al comando.
Verifica tramite API pubblica
Infine puoi anche verificare direttamente il programma con chiunque stia eseguendo l'API di verifica:
solana-verify verify-from-repo --remote -um --program-id PhoeNiXZ8ByJGLkxNfZRnkUfjvmuYqLR89jjFHGqdXY https://github.com/Ellipsis-Labs/phoenix-v1
Si consiglia di utilizzare un URL RPC a pagamento perché altrimenti potresti incorrere in limiti di frequenza degli RPC gratuiti. Quindi invece di
-um
dovresti usare--url yourRpcUrl
per una verifica più affidabile.
Il flag --remote
invia una richiesta di build all'API di OtterSec, che attiva
una build remota del tuo programma. Una volta completata la build, il sistema
verifica che l'hash onchain del tuo programma corrisponda all'hash
dell'artefatto di build generato dal tuo repository.
L'impostazione predefinita è API OtterSec.
Assicurati di scegliere sì quando ti viene chiesto di caricare i dati di verifica onchain. Questo viene utilizzato dall'API per verificare che hai caricato i dati di verifica.
Puoi anche attivare manualmente un job remoto utilizzando:
solana-verify remote submit-job --program-id <program-id> --uploader <address>
Dove l'uploader è l'indirizzo che ha l'autorità di scrivere nel PDA. Questo dovrebbe essere l'autorità del programma nella maggior parte dei casi. Se il tuo programma è controllato da un multisig, continua nella parte verifica multisig di questa guida qui sotto.
Questo invierà un job all'API di OtterSec e potrai quindi verificare lo stato del job con:
solana-verify remote get-job-status --job-id <job-id>
Una volta completata con successo la verifica, che potrebbe richiedere del tempo, potrai vedere il tuo programma come verificato nell' API OtterSec per programmi singoli e in Solana Explorer, SolanaFM, SolScan e infine anche sul sito web gestito dalla community SolanaVerify.org mantenuto da 0xDeep e l' API dei programmi verificati di OtterSec e infine nella Dashboard Dune dei Programmi Verificati contribuendo a un ecosistema Solana più sano.
Come verificare il tuo programma quando è controllato da un Multisig come Squads
Affinché la verifica remota funzioni, devi scrivere i dati di verifica in un PDA firmato dall'autorità del programma. Se il tuo programma è controllato da un multisig, puoi esportare questa transazione di scrittura PDA e inviarla tramite Squads Protocol o un'altra soluzione multisig di tua scelta.
1. Costruire il programma verificabile
Prima costruisci il programma:
solana-verify build
Questo costruirà una build verificabile utilizzando un container docker con la
versione solana specificata nel file Cargo.lock
.
2. Distribuire il programma
solana config set --url "PayedMainnetRPCAddress" // the public endpoint will be rate limited too muchsolana program deploy target/deploy/verify_squads.so
Per il resto di questa guida multisig, useremo un ID programma di esempio
6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD
.
3. Commit e verifica rispetto al repository
Una volta fatto, facciamo il commit del progetto su github. Ecco un esempio: https://github.com/solana-developers/verify-squads
Opzionale: Verifica se puoi verificare localmente prima (questo comando usa un
ID programma di esempio 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD
):
solana-verify verify-from-repo https://github.com/solana-developers/verify-squads --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD
Solo per assicurarti che i tuoi parametri siano corretti.
4. Trasferisci l'autorità del programma al multisig
Se non hai ancora trasferito l'autorità del tuo programma al multisig e copiato l'autorità multisig, devi farlo. Ti servirà nel passaggio successivo.
5. Esporta la transazione PDA
Quando hai l'autorità del programma localmente, ti viene richiesto di caricare i
dati di build onchain quando usi il comando solana-verify verify-from-repo
.
Poiché non puoi farlo quando stai usando un multisig, devi esportare la transazione PDA manualmente e poi attivare la transazione tramite Squads.
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
Questo ti restituirà una transazione in formato base58. Se desideri una
transazione codificata in base64 da utilizzare in un ispettore di transazioni,
puoi usare --encoding base64
.
P6vBfcPaaXb8fZoT3NBAYEcdtEj7tubA1k2gBxmFKZ3UWF5YyrmDMFTvLKALCJoUuRsPAjMckudYruCu3eeWQtuDrFbEMLxLFutnKXac974fnkMivcwUdY66VLjbxQT6ATmcy7F4hBtz1G4P1h6iBJLhb8WtrtgY3i4qq45MUEb7RjuMEfUFXKrNgPdGxkz5xvMHq3dxKRcpmEK5k2DkeW6SUQYBVe19Ga3B9GyhTX8k3CMt9JCEah13WyRnQd8GjoK6sTEvGJym6xDNvmd8yiJYSNcaYwEJsjHEUf4Yh6kAC7ki2KRvVAr3NVe1gjqK9McrwSQjtUatvydTG8Zovcr7PPUEMf3yPMgKXjZLB2QpkH63yTTYdNAnWFuv9E6b6nYRqye5XcNi436yKw5U14fXh65yK34bgYLi9328UT1huJELsJU9BRGnGUmb6GWp6c2WL5BhnzgNTSnt9TXFfEgUMzhvKzpVBxLP44hwqqBdyUhHFysCF37531PnmiESq8x1xou23xJ6FcQbc199754MkqQd7tX9CUznGzAEqHGkzn3VBoJnojsKtgYmiTYbdRsT1CU18MbYEE7WvGAvXyxxbpNzbAcc94HrnM6cqRGmwhEBroPfFghTdmzg9D
6. Invia la transazione tramite Squads
Vai al builder di transazioni di Squads e importa la transazione codificata in base58. Assicurati che nella simulazione la transazione abbia solo una chiamata al programma di verifica osec e al programma di budget del computer e nient'altro!
7. Invia il job di verifica remota
Una volta che la transazione su Squads è andata a buon fine, puoi inviare il job remoto:
solana-verify remote submit-job --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD--uploader <your program authority>
Ecco fatto! Hai verificato il tuo programma rispetto a un repository pubblico e inviato un job remoto all'API di OtterSec. Ora dovresti essere in grado di vederlo riflesso nell'explorer di Solana e in altri luoghi.
8. Aggiornamento del programma (Opzionale)
Quando aggiorni il tuo programma devi esportare una nuova transazione PDA e inviarla nuovamente tramite Squads.
Come fare un aggiornamento al programma:
solana-verify buildsolana program write-buffer target/deploy/verify_squads.so --with-compute-unit-price 50000 --max-sign-attempts 50
Poi trasferisci l'autorità del buffer al multisig o crea direttamente il buffer con l'autorità del multisig.
solana program set-buffer-authority Fu3k79g53ZozAj47uq1tXrFy4QbQYh7y745DDsxjtyLR --new-buffer-authority 3JG6ULvZVCrkKtSSskKNJGe8RNZGFe8Ruev9KUhxzK5K
9. Esportazione e invio della nuova transazione PDA
Non dimenticare di fare commit delle tue modifiche su github. Esporta nuovamente la transazione di aggiornamento PDA:
solana-verify export-pda-tx https://github.com/solana-developers/verify-squads --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD --uploader 3JG6ULvZVCrkKtSSskKNJGe8RNZGFe8Ruev9KUhxzK5K
Invia nuovamente la transazione tramite Squads.
Puoi vedere un esempio di transazione qui.
Poi invia per un'altra build remota:
solana-verify remote submit-job --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD --uploader 3JG6ULvZVCrkKtSSskKNJGe8RNZGFe8Ruev9KUhxzK5K
Dovrebbe risultare qualcosa del genere:
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
Congratulazioni, hai verificato il tuo programma dopo un aggiornamento multisig!
Verifica da immagine docker
Puoi anche verificare il tuo programma con un'immagine docker eseguendo il seguente comando:
solana-verify verify-from-image -eexamples/hello_world/target/deploy/hello_world.so -iellipsislabs/hello_world_verifiable_build:latest -p2ZrriTQSVekoj414Ynysd48jyn4AX6ZF4TTJRqHfbJfn
Questo comando carica l'immagine memorizzata in
ellipsislabs/hello_world_verifiable_build:latest
, e verifica che l'hash del
percorso eseguibile nel container sia lo stesso dell'hash del programma on-chain
fornito al comando. Poiché la build è già stata caricata su un'immagine, non è
necessaria una ricostruzione completa dell'eseguibile, che potrebbe richiedere
molto tempo.
Il Dockerfile che crea l'immagine
ellipsislabs/hello_world_verifiable_build:latest
può essere trovato nel
repository di ellipsis labs
/examples/hello_world.
Di seguito è riportato l'output previsto:
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 ✅
Esempio di build verificata
Ecco un esempio di verifica di un programma di esempio con ID
FWEYpBAf9WsemQiNbAewhyESfR38GBBHLrCaU3MpEKWv
utilizzando il codice sorgente da
questo 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
Per impostazione predefinita, il comando verify-from-repo
prende l'ultimo
commit sul ramo main. Puoi anche definire un commit specifico nel caso in cui
desideri continuare a lavorare sul repository utilizzando il parametro
commit-hash
: --commit-hash 5b82b86f02afbde330dff3e1847bed2d42069f4e
Infine, puoi anche verificare direttamente il programma tramite l'API di OtterSec:
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
Il comando --remote
invia una richiesta di build all'API di OtterSec, che
attiva una build remota del tuo programma. Una volta completata la build, il
sistema verifica che l'hash on-chain del tuo programma corrisponda all'hash
dell'artefatto di build generato dal tuo repository.
Programmi popolari già verificati
Phoenix
solana-verify verify-from-repo -um --program-id PhoeNiXZ8ByJGLkxNfZRnkUfjvmuYqLR89jjFHGqdXY https://github.com/Ellipsis-Labs/phoenix-v1
Output finale:
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
Nota che abbiamo dovuto specificare
library-name
perché il repository di Squads include più programmi. Utilizziamo il flag--bpf
perchésquads_mpl
è stato precedentemente verificato con Anchor.
Output finale:
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
Output finale:
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
Output finale:
Executable Program Hash from repo: 890d68f48f96991016222b1fcbc2cc81b8ef2dcbf280c44fe378c523c108fad5On-chain Program Hash: 890d68f48f96991016222b1fcbc2cc81b8ef2dcbf280c44fe378c523c108fad5Program hash matches ✅
Conclusione
L'utilizzo di build verificate su Solana garantisce l'integrità e l'affidabilità dei tuoi programmi sulla rete e permette agli sviluppatori di trovare i tuoi SDK direttamente da Solana Explorer. Sfruttando strumenti come Solana Verify CLI e Docker, puoi mantenere build verificabili e sicure che si allineano con il tuo codice sorgente. Prendi sempre le precauzioni necessarie per utilizzare ambienti coerenti e considera soluzioni di governance per aggiornamenti e implementazioni sicure.
Sicurezza + Disclaimer
Sebbene le build verificate siano uno strumento potente per garantire l'integrità dei tuoi programmi Solana, nella configurazione predefinita non sono completamente trustless. Le immagini docker sono create e ospitate dalla Solana Foundation.
Tieni presente che stai costruendo il tuo progetto in un'immagine docker scaricata e che l'intera configurazione viene copiata in quell'immagine docker per la compilazione, incluse eventuali informazioni sensibili.
Se desideri una configurazione completamente trustless, puoi creare le immagini docker tu stesso e ospitarle sulla tua infrastruttura. In questo modo puoi essere sicuro che le immagini docker non siano state manomesse. Puoi trovare gli script per creare le tue immagini docker nel repository Verified builds e puoi effettuare un fork ed eseguire le github actions tu stesso o verificare che siano corrette.
Inoltre, per la verifica remota ti stai affidando all'API OtterSec e a Solana Explorer fino a un certo punto.
L'API o Solana Explorer potrebbero potenzialmente visualizzare informazioni errate se compromessi.
Se desideri una configurazione completamente trustless, puoi eseguire
Verify API
autonomamente o eseguire la verifica del programma localmente utilizzando il
comando verify-from-repo
utilizzando i dati di verifica on-chain che sono
salvati in un
PDA
derivato dall'autorità di distribuzione dei programmi e dal
programma verify.
Il programma di verifica è distribuito dal team OtterSec e non è ancora congelato, quindi può essere aggiornato in qualsiasi momento.
La Solana Foundation, OtterSec e il team di Ellipsis Labs non sono responsabili per eventuali perdite o danni che potrebbero verificarsi utilizzando la pipeline di build verificate.
Security.txt per i programmi Solana
Oltre alle build verificate, puoi anche aggiungere un file security.txt
al tuo
programma. In futuro, una volta implementato, il security.txt
conterrà la
chiave pubblica del verificatore per un facile accesso ai dati di verifica
memorizzati nel PDA di verifica. Il PDA contenente tutte le informazioni
necessarie per compilare e verificare un programma è derivato dall'indirizzo del
programma e dalla pubkey del verificatore. Per impostazione predefinita, questa
è la stessa pubkey che ha compilato e distribuito il programma. Ma può anche
essere un'altra pubkey che può essere specificata nel security.txt
.
La funzionalità security.txt
consente agli sviluppatori di incorporare
informazioni di contatto e sicurezza direttamente nei loro smart contract
Solana. Ispirato a securitytxt.org, questo approccio
fornisce un modo standardizzato per i ricercatori di sicurezza di contattare i
responsabili del progetto, anche se conoscono solo l'indirizzo del contratto.
Perché utilizzare security.txt?
Per molti progetti, specialmente quelli più piccoli o privati, identificare gli
sviluppatori partendo solo dall'indirizzo del contratto può essere difficile e
richiedere tempo. Incorporare un file security.txt
all'interno del programma
garantisce che i ricercatori di sicurezza possano facilmente contattare le
persone giuste, potenzialmente prevenendo exploit e assicurando segnalazioni
tempestive di bug.
Come implementare security.txt
Per aggiungere un security.txt
al tuo programma Solana, includi i seguenti
passaggi:
Aggiungi la dipendenza solana-security-txt
al tuo Cargo.toml
:
[dependencies]solana-security-txt = "1.1.1"
Utilizza la macro security_txt!
nel tuo contratto per definire le tue
informazioni di sicurezza. Puoi includere dettagli di contatto, URL del progetto
e persino una politica di sicurezza. Ecco un esempio:
#[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!"}
Una volta che le informazioni security.txt
sono incorporate nel tuo programma,
possono essere facilmente consultate tramite strumenti come Solana Explorer,
assicurando che i tuoi contatti e i dettagli di sicurezza siano disponibili a
chiunque voglia segnalare potenziali problemi.
Best practices
-
Usa i link: per informazioni che potrebbero cambiare (ad esempio, i dettagli di contatto), è consigliabile linkare a una pagina web piuttosto che codificarle direttamente nel contratto. Questo evita la necessità di frequenti aggiornamenti del programma.
-
Verifica: prima di distribuire, verifica il formato e il contenuto utilizzando lo strumento
query-security-txt
, che può validare sia i programmi onchain che i binari locali:
query-security-txt target/bpfel-unknown-unknown/release/my_contract.so
Incorporando le informazioni di contatto per la sicurezza direttamente nel tuo contratto, rendi più facile per i ricercatori raggiungerti, favorendo una migliore sicurezza e comunicazione all'interno dell'ecosistema Solana.
Questo è un esempio di come security.txt appare in Solana Explorer
Il progetto security.txt
è mantenuto da
Neodyme Labs
Is this page helpful?