Tämä opas on tarkoitettu viitteeksi kehittäjille, jotka haluavat toteuttaa varmennetut käännökset ohjelmilleen Solanassa. Käsittelemme mitä varmennetut käännökset ovat, miten niitä käytetään, erityisiä huomioita ja parhaita käytäntöjä ohjelmasi aitouden varmistamiseksi lohkoketjussa.
Mitä ovat varmennetut käännökset?
Varmennetut käännökset varmistavat, että Solanan verkkoon käyttöönottamasi suoritettava ohjelma vastaa lähdekoodia repositoriossasi. Tämän avulla kehittäjät ja käyttäjät voivat luottaa siihen, että lohkoketjussa toimiva ohjelma vastaa täsmälleen julkista lähdekoodia, edistäen läpinäkyvyyttä ja turvallisuutta.
Varmennusprosessi sisältää lohkoketjussa olevan ohjelman tiivisteen vertaamisen paikallisesti lähdekoodista käännetyn ohjelman tiivisteeseen. Tämä varmistaa, ettei versioiden välillä ole eroavaisuuksia.
Vaikka varmennettua käännöstä ei tulisi pitää turvallisempana kuin varmentamatonta käännöstä, käännös mahdollistaa kehittäjien itse varmistaa, että lähdekoodi vastaa sitä, mikä on käyttöönotettu lohkoketjussa. Lähdekoodin avulla kehittäjä voi sitten validoida mitä koodi suorittaa, kun lähetetään transaktio.
Varmennettujen käännösten prosessin ovat suunnitelleet ja sitä ylläpitävät Ellipsis Labs ja OtterSec. Lisätietoja saat seuraamalla ohjeita alkuperäisessä varmennettujen käännösten repositoriossa sekä varmennusprosessia suoraan Anza -työkalupaketissa, kun se on tuettu siellä.
Miten se toimii?
Vahvistusprosessi tehdään vertaamalla lohkoketjussa olevan ohjelman tiivistettä paikallisesti lähdekoodista rakennetun ohjelman tiivisteeseen. Rakennat ohjelmasi kontrolloidussa ympäristössä käyttäen Solana Verify CLI:tä ja Dockeria. Tämä varmistaa, että rakennusprosessi on deterministinen ja yhdenmukainen eri järjestelmissä. Kun sinulla on suoritettava tiedosto, voit ottaa sen käyttöön Solana-verkossa. Rakennusprosessin aikana luodaan verify-ohjelman PDA. Tämä PDA sisältää kaikki tarvittavat tiedot ohjelman vahvistamiseen. PDA sisältää ohjelman osoitteen, git-url-osoitteen, commit-tiivisteen ja ohjelman rakentamiseen käytetyt argumentit.
PDA:ssa olevien tietojen avulla kuka tahansa voi suorittaa verify-ohjelmakomennon paikallisesti ja tarkistaa, onko ohjelma rakennettu annetusta lähdekoodista. Sitten jokainen voi vahvistaa täysin luottamuksettomasti tai käyttää omaa OtterSecin ylläpitämää verify API:a, joka tarjoaa käyttäjille helpon pääsyn tarkistamaan vahvistuksen. Voit jo nähdä näitä API-kutsuja käytettävän Solana Explorerissa ja SolanaFM:ssä sekä muissa paikoissa.
Miksi minun pitäisi käyttää vahvistettuja buildeja?
Vahvistettujen buildien käyttö tarjoaa seuraavat edut:
-
Turvallisuus: Takaa, että lohkoketjussa toimiva ohjelma vastaa lähdekoodia, estäen haitalliset muutokset.
-
Läpinäkyvyys: Mahdollistaa muiden käyttäjien ja kehittäjien vahvistaa, että lohkoketjussa oleva ohjelma on luotettava vertaamalla sitä julkiseen koodikantaan.
-
Luottamus: Lisää käyttäjien luottamusta, sillä vahvistetut buildit osoittavat, että ohjelmasi lohkoketjukäyttäytyminen on linjassa julkisen koodisi kanssa. Kun rakennat vahvistettavia ohjelmia, minimoit luvattoman tai haitallisen koodin suorittamiseen liittyvät riskit. Se varmistaa myös, että noudatat parhaita käytäntöjä ja tarjoat tietoturvatutkijoille helpon tavan ottaa sinuun yhteyttä. Myös lompakot ja muut työkalut voivat sallia transaktioita ohjelmastasi helpommin, kunhan se on vahvistettu.
-
Löydettävyys: Kun tarjoat varmennetun version ohjelmastasi, kaikki voivat löytää lähdekoodisi, dokumentaatiosi, ohjelma-SDK:n tai IDL:n, ja he voivat myös helposti ottaa sinuun yhteyttä GitHubin kautta, jos ongelmia ilmenee.
Miten luon varmennettuja buildeja?
Luodaksesi varmennettuja buildeja sinun on noudatettava seuraavia vaiheita:
Yhteenveto:
- Committaa koodisi julkiseen repositoryyn
- Rakenna varmennettu build dockerissa
- Ota käyttöön varmennettu build
- Varmenna käyttöönotettu ohjelma julkista API:a vastaan
Jos varmennat ohjelman, jota ei ole rakennettu docker-kontissa, se todennäköisesti epäonnistuu, koska Solana-ohjelmien buildit eivät ole deterministisiä eri järjestelmien välillä.
Asenna Docker ja Cargo
Asenna tarvittavat työkalut: varmista, että sinulla on Docker ja Cargo asennettuna. Docker tarjoaa kontrolloidun build-ympäristön johdonmukaisuuden varmistamiseksi, ja Cargoa käytetään Rust-pakettien hallintaan.
- Docker: Seuraa ohjeita Docker-verkkosivustolla asentaaksesi Dockerin alustallesi. Kun asennus on valmis, varmista että Docker-palvelu on käynnissä seuraamalla tätä ohjetta eteenpäin.
- Cargo: Jos sinulla ei ole vielä Cargoa asennettuna, voit asentaa sen suorittamalla seuraavan komennon:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Asenna Solana Verify CLI
Solana Verify CLI on ensisijainen työkalu, jota käytetään buildien varmentamiseen. Solana Verify CLI:tä ylläpitää tällä hetkellä Ellipsis Labs ja se voidaan asentaa Cargon avulla.
Voit asentaa sen suorittamalla:
cargo install solana-verify
Jos tarvitset tietyn version CLI:stä, voit kiinnittää version komennolla:
cargo install solana-verify --version $VERSION
Halutessasi voit asentaa version suoraan tietystä commitista:
cargo install solana-verify --git https://github.com/Ellipsis-Labs/solana-verifiable-build --rev 13a1db2
Valmistele projekti
Repositoriota vasten todentamiseksi sen juurihakemistossa tulee olla
Cargo.lock-tiedosto. Jos repositoriossasi on vain yksi ohjelma ja juuressa on
cargo.lock-tiedosto, voit siirtyä suoraan seuraavaan vaiheeseen ja rakentaa
ohjelmasi.
Jos ohjelmasi on alikansiossa ja sinulla on Rust-workspace, sinun tulee luoda
workspace-Cargo.toml-tiedosto repositoriosi juurihakemistoon.
Voit käyttää tätä Cargo.toml-esimerkkiä pohjana:
[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
Varmista, että ohjelmasi on workspace/members-taulukossa ja että ohjelmasi
Cargo.toml-tiedostossa on määritetty oikea lib-nimi.
Tärkeää on
lib name, ei paketin nimi!
Jotain tällaista:
[package]name = "waffle"version = "0.1.0"edition = "2021"[lib]name = "waffle"crate-type = ["cdylib", "lib"][dependencies]solana-program = "2.1.0"
Tästä repositoriosta
näet esimerkin workspacesta, jossa ohjelma on alikansiossa. Huomaa myös, että
kun ohjelma on alikansiossa, sinun tulee myöhemmin lisätä tämä kansio
--mount-path-parametrina verify-from-repo-komentoon.
Tästä repositoriosta löydät Anchor-esimerkin. Tästä repositoriosta löydät natiivi Rust -esimerkin.
Kun tämä Cargo.toml-tiedosto on paikallaan, voit suorittaa
cargo generate-lockfile-komennon luodaksesi lock-tiedoston ja jatkaa ohjelmasi
rakentamiseen.
Todennettavien ohjelmien rakentaminen
Rakentaaksesi Solana-ohjelmasi todennettavasti, siirry hakemistoon, joka
sisältää workspacesi Cargo.toml-tiedoston, ja suorita:
solana-verify build
Tämä kopioi ympäristösi docker-konttiin ja rakentaa sen deterministisellä tavalla.
Varmista, että todella julkaiset todennetun buildin äläkä vahingossa ylikirjoita sitä
anchor build- taicargo build-sbf-komennoilla, sillä nämä eivät todennäköisesti tuota samaa hashia ja todentaminen epäonnistuu.
Projekteissa, joissa on useita ohjelmia, voit rakentaa tietyn ohjelman käyttämällä kirjaston nimeä (ei paketin nimeä):
solana-verify build --library-name $PROGRAM_LIB_NAME
Tämä prosessi varmistaa deterministiset käännökset ja voi viedä jonkin aikaa, erityisesti tietyillä järjestelmillä (esim. M1 MacBook), koska se suoritetaan docker- kontissa. Nopeampia käännöksiä varten suositellaan x86-arkkitehtuuria käyttävää Linux-konetta.
Kun käännös on valmis, voit hakea suoritettavan tiedoston tiivisteen käyttämällä seuraavaa komentoa:
solana-verify get-executable-hash target/deploy/$PROGRAM_LIB_NAME.so
Todennettavien ohjelmien käyttöönotto
Kun olet rakentanut ohjelmasi ja hakenut sen tiivisteen, voit ottaa sen käyttöön Solana-verkossa. On suositeltavaa käyttää moniallekirjoitus- tai hallintoratkaisua kuten Squads Protocol turvalliseen käyttöönottoon, mutta voit myös ottaa sen suoraan käyttöön komennolla:
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
Sopivan matalan prioriteetin maksun voit pyytää rpc-palveluntarjoajaltasi, esimerkiksi Quicknode.
Varmistaaksesi, että käyttöönotettu ohjelma vastaa rakennettua suoritettavaa tiedostoa, suorita:
solana-verify get-program-hash -u $NETWORK_URL $PROGRAM_ID
Sinulla voi olla eri versioita käytössä eri Solana-klustereissa (esim. devnet, testnet, mainnet). Varmista, että käytät oikeaa verkko-URL:ää haluamallesi Solana-klusterille, jota vastaan haluat todentaa ohjelman. Etätodentaminen toimii vain mainnetissä.
Todentaminen repositorioita vastaan
Ohjelman todentamiseksi sen julkista repositoriota vastaan käytä:
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
Kun suoritat vahvistetun käännöksen ohjelmahakemistossasi, sinun on lisättävä
--mount-path-lippu käyttäessäsi komentoaverify-from-repo. Tämä on polku kansioon, joka sisältääCargo.toml-tiedoston, jossa on ohjelmasi kirjaston nimi.
Tämä komento vertaa ketjussa olevaa ohjelman tiivistettä lähdekoodista rakennettuun suoritettavaan tiivisteeseen määritetyssä commit-tiivisteessä.
Lopuksi komento kysyy, haluatko ladata vahvistustietosi ketjuun. Jos teet niin, Solana Explorer näyttää välittömästi ohjelmasi vahvistustiedot. Kunnes se on vahvistettu etäkäännöksellä, se näkyy vahvistamattomana. Opi seuraavassa vaiheessa, kuinka voit vahvistaa ohjelmasi julkista API:a vastaan.
Jos haluat lukita vahvistuksen tiettyyn julkaisuun, voit lisätä komentoon
--commit-hash -lipun.
Vahvista julkista API:a vastaan
Lopuksi voit myös suoraan vahvistaa ohjelman ketä tahansa vastaan, joka käyttää vahvistus-API:a:
solana-verify verify-from-repo --remote -um --program-id PhoeNiXZ8ByJGLkxNfZRnkUfjvmuYqLR89jjFHGqdXY https://github.com/Ellipsis-Labs/phoenix-v1
On suositeltavaa käyttää maksullista RPC-osoitetta, koska muuten saatat kohdata ilmaisten RPC:iden nopeusrajoituksia. Joten
-um-osoitteen sijaan sinun tulisi käyttää--url yourRpcUrl-osoitetta luotettavampaa vahvistusta varten.
--remote -lippu lähettää rakennuspyynnön OtterSec API:lle, joka käynnistää
ohjelmasi etäkäännöksen. Kun käännös on valmis, järjestelmä vahvistaa, että
ohjelmasi ketjussa oleva tiiviste vastaa repositoriostasi luodun käännöstuotteen
tiivistettä.
Oletusarvoisesti käytetään OtterSec API:a.
Varmista, että valitset kyllä, kun sinulta kysytään vahvistustietojen lataamisesta ketjuun. Tätä käytetään API:ssa vahvistamaan, että olet ladannut vahvistustiedot.
Voit myös käynnistää etätyön manuaalisesti käyttämällä:
solana-verify remote submit-job --program-id <program-id> --uploader <address>
Jossa lataaja on osoite, jolla on oikeus kirjoittaa PDA:han. Tämän tulisi useimmissa tapauksissa olla ohjelman valtuutus. Jos ohjelmaasi hallinnoi moniallekirjoitus, jatka moniallekirjoituksen vahvistus -osioon tämän oppaan alapuolella.
Tämä lähettää työn OtterSec API:lle, ja voit sitten tarkistaa työn tilan komennolla:
solana-verify remote get-job-status --job-id <job-id>
Kun vahvistus on suoritettu onnistuneesti, mikä saattaa kestää jonkin aikaa, ohjelmasi näkyy vahvistettuna OtterSec API:ssa yksittäisille ohjelmille ja Solana Explorerissa, SolanaFM:ssä, SolScanissa ja lopulta myös yhteisön ylläpitämällä verkkosivustolla SolanaVerify.org, jota ylläpitää 0xDeep sekä OtterSec vahvistettujen ohjelmien API:ssa ja viimeisenä Vahvistettujen ohjelmien Dune-kojelaudassa, mikä edistää terveempää Solana-ekosysteemiä.
Miten vahvistat ohjelmasi, kun sitä hallinnoi moniallekirjoitus kuten Squads
Jotta etävahvistus toimisi, sinun täytyy kirjoittaa vahvistustiedot PDA:han, jonka ohjelman valtuutus on allekirjoittanut. Jos ohjelmaasi hallinnoi moniallekirjoitus, voit viedä tämän kirjoitus-PDA-transaktion ja lähettää sen Squads Protocolin tai muun valitsemasi moniallekirjoitusratkaisun kautta.
1. Rakenna vahvistettava ohjelma
Rakenna ensin ohjelma:
solana-verify build
Tämä rakentaa vahvistettavan käännöksen docker-konttia käyttäen, hyödyntäen
Cargo.lock -tiedostossa määritettyä Solana-versiota.
2. Ota ohjelma käyttöön
solana config set --url "PayedMainnetRPCAddress" // the public endpoint will be rate limited too muchsolana program deploy target/deploy/verify_squads.so
Tämän multisig-oppaan loppuosassa käytämme esimerkkiohjelman ID:tä
6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD.
3. Tee commit ja varmenna repositoriota vastaan
Kun se on tehty, commitoimme projektin githubiin. Tässä on esimerkki: https://github.com/solana-developers/verify-squads
Valinnainen: Katso, voitko vahvistaa paikallisesti ensin (tämä komento käyttää
esimerkkiohjelman ID:tä 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD):
solana-verify verify-from-repo https://github.com/solana-developers/verify-squads --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD
Vain varmistaaksesi, että parametrisi ovat oikein.
4. Siirrä ohjelman valtuudet multisigille
Jos et ole vielä siirtänyt ohjelmasi valtuuksia multisigille ja kopioinut multisigin valtuuksia. Tarvitset niitä seuraavassa vaiheessa.
5. Vie PDA-transaktio
Kun sinulla on ohjelman valtuutus paikallisesti, sinua pyydetään lataamaan
käännöstiedot ketjuun käyttäessäsi komentoa solana-verify verify-from-repo.
Koska et voi tehdä sitä käyttäessäsi multisigiä, sinun täytyy viedä PDA-transaktio manuaalisesti ja sitten käynnistää transaktio Squadsin kautta.
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
Tämä palauttaa base58-muotoisen transaktion. Jos haluat base64-koodatun
transaktion käytettäväksi transaktiotarkastimessa, voit käyttää
--encoding base64 -komentoa.
P6vBfcPaaXb8fZoT3NBAYEcdtEj7tubA1k2gBxmFKZ3UWF5YyrmDMFTvLKALCJoUuRsPAjMckudYruCu3eeWQtuDrFbEMLxLFutnKXac974fnkMivcwUdY66VLjbxQT6ATmcy7F4hBtz1G4P1h6iBJLhb8WtrtgY3i4qq45MUEb7RjuMEfUFXKrNgPdGxkz5xvMHq3dxKRcpmEK5k2DkeW6SUQYBVe19Ga3B9GyhTX8k3CMt9JCEah13WyRnQd8GjoK6sTEvGJym6xDNvmd8yiJYSNcaYwEJsjHEUf4Yh6kAC7ki2KRvVAr3NVe1gjqK9McrwSQjtUatvydTG8Zovcr7PPUEMf3yPMgKXjZLB2QpkH63yTTYdNAnWFuv9E6b6nYRqye5XcNi436yKw5U14fXh65yK34bgYLi9328UT1huJELsJU9BRGnGUmb6GWp6c2WL5BhnzgNTSnt9TXFfEgUMzhvKzpVBxLP44hwqqBdyUhHFysCF37531PnmiESq8x1xou23xJ6FcQbc199754MkqQd7tX9CUznGzAEqHGkzn3VBoJnojsKtgYmiTYbdRsT1CU18MbYEE7WvGAvXyxxbpNzbAcc94HrnM6cqRGmwhEBroPfFghTdmzg9D
6. Lähetä transaktio Squadsin kautta
Mene Squadsin transaktiorakentajaan ja tuo base58-koodattu transaktio. Varmista, että simulaatiossa transaktio sisältää vain kutsun osec verify -ohjelmaan ja computer budget -ohjelmaan eikä mitään muuta!
7. Lähetä etävarmennus-työ
Kun transaktio Squadsiin onnistui, voit lähettää etätyön:
solana-verify remote submit-job --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD--uploader <your program authority>
Siinä se! Olet varmentanut ohjelmasi julkista repositoriota vastaan ja lähettänyt etätyön OtterSec API:lle. Sinun pitäisi nyt nähdä se Solana explorerissa ja muissa paikoissa.
8. Ohjelman päivittäminen (Valinnainen)
Kun päivität ohjelmasi, sinun täytyy viedä uusi PDA-transaktio ja lähettää se uudelleen Squadsin kautta.
Ohjelman päivittäminen:
solana-verify buildsolana program write-buffer target/deploy/verify_squads.so --with-compute-unit-price 50000 --max-sign-attempts 50
Siirrä sitten puskurin hallintaoikeus multisigille tai luo puskuri suoraan multisigin hallintaoikeudella.
solana program set-buffer-authority Fu3k79g53ZozAj47uq1tXrFy4QbQYh7y745DDsxjtyLR --new-buffer-authority 3JG6ULvZVCrkKtSSskKNJGe8RNZGFe8Ruev9KUhxzK5K
9. Vie ja lähetä uusi PDA-transaktio
Muista tallentaa muutoksesi githubiin. Vie PDA-päivitystransaktio uudelleen:
solana-verify export-pda-tx https://github.com/solana-developers/verify-squads --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD --uploader 3JG6ULvZVCrkKtSSskKNJGe8RNZGFe8Ruev9KUhxzK5K
Lähetä transaktio uudelleen Squadsin kautta.
Voit nähdä esimerkkitransaktion täällä.
Lähetä sitten etäkäännöstä varten:
solana-verify remote submit-job --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD --uploader 3JG6ULvZVCrkKtSSskKNJGe8RNZGFe8Ruev9KUhxzK5K
Tuloksen pitäisi näyttää tältä:
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
Onnittelut, olet varmistanut ohjelmasi multisig-päivityksen jälkeen!
Varmistaminen docker-imagesta
Voit myös varmistaa ohjelmasi docker-imagea vastaan suorittamalla seuraavan komennon:
solana-verify verify-from-image -eexamples/hello_world/target/deploy/hello_world.so -iellipsislabs/hello_world_verifiable_build:latest -p2ZrriTQSVekoj414Ynysd48jyn4AX6ZF4TTJRqHfbJfn
Tämä komento lataa ellipsislabs/hello_world_verifiable_build:latest
-osoitteessa tallennetun imagen ja varmistaa, että kontissa olevan suoritettavan
tiedoston hash on sama kuin komennolle toimitetun ketjussa olevan ohjelman hash.
Koska build on jo ladattu imageen, täyttä uudelleenbuildia ei tarvita, mikä voi
kestää pitkään.
Dockerfile, joka luo imagen ellipsislabs/hello_world_verifiable_build:latest,
löytyy ellipsis labs -repositorystä
/examples/hello_world.
Alla on odotettu tuloste:
Verifying image: "ellipsislabs/hello_world_verifiable_build:latest", on network"https://api.mainnet.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 ✅
Esimerkki verifioidusta buildista
Tässä on esimerkki esimerkkiohjelman varmistamisesta ID:llä
FWEYpBAf9WsemQiNbAewhyESfR38GBBHLrCaU3MpEKWv käyttäen lähdekoodia tästä
repositorystä:
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
Oletuksena verify-from-repo -komento ottaa viimeisimmän commitin
main-haarasta. Voit myös määrittää tietyn commitin, jos haluat jatkaa
repositoryn työstämistä käyttämällä commit-hash -parametria:
--commit-hash 5b82b86f02afbde330dff3e1847bed2d42069f4e
Lopuksi voit myös suoraan verifioida ohjelman OtterSec API:a vastaan:
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
--remote -komento lähettää build-pyynnön OtterSec API:lle, joka käynnistää
ohjelmasi etäbuildin. Kun build on valmis, järjestelmä varmistaa, että ohjelmasi
ketjussa oleva hash vastaa repositorystasi generoidun build-artifaktin hashia.
Suosittuja ohjelmia, jotka on jo verifioitu
Phoenix
solana-verify verify-from-repo -um --program-id PhoeNiXZ8ByJGLkxNfZRnkUfjvmuYqLR89jjFHGqdXY https://github.com/Ellipsis-Labs/phoenix-v1
Lopputulos:
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
Huomaa, että meidän piti määrittää
library-name, koska Squads-repositorio sisältää useita ohjelmia. Käytämme--bpf-lippua, koskasquads_mplon aiemmin vahvistettu Anchorilla.
Lopputulos:
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
Lopputulos:
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
Lopputulos:
Executable Program Hash from repo: 890d68f48f96991016222b1fcbc2cc81b8ef2dcbf280c44fe378c523c108fad5On-chain Program Hash: 890d68f48f96991016222b1fcbc2cc81b8ef2dcbf280c44fe378c523c108fad5Program hash matches ✅
Usein kysytyt kysymykset
Vahvistukseni epäonnistuu. Mitä minun pitäisi tehdä?
Tarkista nämä yleiset ongelmat:
- Väärä allekirjoittaja: Varmista, että allekirjoittajasi on ohjelman
päivitysvaltuutettu suorittamalla
solana program show YourProgramId - Ei on-chain PDA:ta: Suorita
solana-verify verify-from-repo -umja valitse KYLLÄ kehotettaessa. Ilman PDA:n lataamista API ei voi hakea vahvistusmetatietojasi. - PDA-datan epäsuhta: Päivitä PDA:si, jos olet ottanut ohjelmasi uudelleen käyttöön. PDA-datasi on vastattava käyttöönotettua ohjelmaasi.
- Virheellinen commit-hajautus: Luo PDA:si käyttämällä tarkkaa commit-hajautusta, jonka otit käyttöön
- Rakennusympäristön erot: Käytä Dockeria solana-verifyn kanssa luodessasi PDA:si
Paikallinen rakennushajautukseni ei vastaa on-chain hajautusta. Miksi?
Tämä tarkoittaa yleensä:
- Käytät eri Rust/Solana-työkaluketjuversioita
- Riippuvuutesi päivitettiin rakennusten välillä
- Et rakentanut Docker-konteissa
- Tarkistit väärän commitin
Korjaa tämä rakentamalla solana-verify build -komennolla Dockerissa käyttäen
tarkkaa committia, jonka otit käyttöön.
Kuinka kauan vahvistukseni kestää?
Odota näitä aikarajoja ohjelmasi koon perusteella:
- Yksinkertaiset ohjelmat: 1-5 minuuttia
- Monimutkaiset ohjelmat: 5-15 minuuttia
- Erittäin suuret ohjelmat: Jopa 30 minuuttia
Seuraa edistymistäsi käyttämällä työn tilapäätepistettä.
Ohjelmani on muuttumaton (ei päivitysvaltuutettua). Miten voin vahvistaa sen?
Jos ohjelmallasi ei ole päivitysvaltuutettua tai se muutettiin muuttumattomaksi ennen kuin pystyit luomaan PDA:n, meillä on hyväksytty osoite tätä tilannetta varten. Ota yhteyttä osoitteeseen contact@osec.io, niin autamme saamaan ohjelmasi vahvistetuksi.
Mikä on PDA ja miksi sillä on väliä?
PDA (Program Derived Account) mahdollistaa luotettavan vahvistuksen ilman luottamusta:
- On-Chain-tallennus: Tallenna vahvistuksen metatiedot (repo-URL,
commit-hash, koostamisparametrit) lohkoketjuun PDA:han, jonka omistaa Otter
Verify -ohjelma (
verifycLy8mB96wd9wqq3WDXQwM4oU6r42Th37Db9fC) - Kryptografinen linkki: PDA:si johdetaan ohjelmaosoitteestasi, luoden muuttumattoman linkin vahvistustietoihisi
- Hajautettu luottamus: Kuka tahansa voi lukea PDA:si ja vahvistaa ohjelmasi itsenäisesti
Miksi minun täytyy luoda PDA ennen API:n käyttöä?
API toimii vain lohkoketjussa olevien PDA:iden kanssa, koska:
- Luotettava ilman luottamusta: API hylkää mielivaltaiset tiedot - se käyttää vain sitä, mitä päivitysoikeutesi on tallentanut lohkoketjuun
- Yksinkertaisempaa: Anna vain allekirjoittaja + program_id; API hakee kaiken muun PDA:stasi
- Peukaloinnin kestävä: PDA:si luo muuttumattoman tietueen, jonka kuka tahansa voi vahvistaa itsenäisesti
- Omistajuuden todistus: Allekirjoittajasi täytyy olla päivitysoikeus, todistaa kryptografisesti, että hallitset ohjelmaa
Kuinka usein minun tulisi vahvistaa ohjelmani?
Vahvista ohjelmasi:
- Jokaisen käyttöönoton tai päivityksen jälkeen
- Kun päivität lähdekoodivarastosi
- Älä huolehdi uudelleenvahvistamisesta muuten - API vahvistaa automaattisesti kaikki ohjelmat uudelleen 24 tunnin välein
Mitä tapahtuu, kun päivitän ohjelmani?
Seuraa näitä vaiheita päivityksen jälkeen:
- API havaitsee päivityksesi ja poistaa ohjelmasi vahvistuksen.
- Päivitä PDA:si uusilla vahvistuksen metatiedoilla:
solana-verify verify-from-repo -um \--program-id YourProgramId... \https://github.com/your-org/your-program
- Lähetä uusi vahvistuspyyntö käyttäen päivitysoikeuttasi
- API vahvistaa uuden versiosi päivitettyä PDA:ta vasten
Tärkeää: Päivitä aina PDA:si käyttäen päivitysoikeuttasi uudella commit-hashilla päivitettyä ohjelmaa varten.
Voinko luottaa vahvistustuloksiin?
Kyllä - järjestelmä on suunniteltu luottamuksettomaksi ja itsenäisesti todennettavaksi:
Mikä tekee siitä luotettavan:
- Ketjussa oleva PDA: Vahvistusmetatietosi sijaitsevat ketjussa, eikä mikään keskusviranomainen hallitse niitä
- Päivitysvaltuuden todiste: Vain ohjelmasi päivitysvaltuus voi luoda/päivittää PDA:n
- Itsenäinen todentaminen: Kuka tahansa voi todentaa lukemalla PDA:si ja
suorittamalla
solana-verifypaikallisesti - Jatkuva uudelleentodentaminen: API todentaa automaattisesti kaikki ohjelmat uudelleen 24 tunnin välein
Ymmärrä nämä rajoitukset:
- Vahvistus varmistaa, että lähdekoodi vastaa käyttöönottoa - EI sitä, että koodisi on turvallinen
- Tarkista aina koodi ennen ohjelmien kanssa vuorovaikuttamista
- Vahvistettu ≠ auditoitu tai turvallinen
- Tarkista PDA:n repositorio ja commit varmistaaksesi, että se on luotettavasta lähteestä
Kuinka voin itsenäisesti todentaa ohjelman?
Todenna mikä tahansa ohjelma itse lukemalla sen ketjussa oleva PDA ja suorittamalla todentaminen paikallisesti:
Vaihe 1: Lue ketjussa oleva PDA
# Install solana-verify if you haven'tcargo install solana-verify# Get the PDA datasolana-verify list-program-pdas --program-id YourProgramId...
Vaihe 2: Todenna paikallisesti
# Verify using the repository and commit & other arguments from the PDAsolana-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
Tämä todistaa:
- PDA-metatiedot ovat aitoja (tallennettu ketjuun)
- PDA:n repositorion lähdekoodi vastaa käyttöönotettua ohjelmaa
- Sinun ei tarvitse luottaa API:in - todenna kaikki itse ketjussa
Voiko joku muu todentaa ohjelmani ilman lupaa?
Kyllä, tästä syystä vaadimme allekirjoittajan olevan päivitysvaltuus. Pidämme todennusta pätevänä vain, jos allekirjoittaja on päivitysvaltuus.
Mitä tarvitsen todennettavien buildien luomiseen?
Asenna nämä työkalut:
- Docker (deterministisiä buildeja varten)
- Cargo (Rustin paketinhallinta)
- Solana Verify CLI:
cargo install solana-verify - Julkinen Git-repositorio, jossa on lähdekoodisi
Voinko vahvistaa yksityisiä repositorioita?
Ei - vahvistaminen edellyttää julkista lähdekoodia:
- PDA-tietosi tallentaa julkisen repositorio-URL:n, johon kuka tahansa pääsee käsiksi
- Luottamukseton vahvistaminen riippuu julkisesta koodiin pääsystä
- Käyttäjien on luettava lähdekoodisi ymmärtääkseen, mitä ohjelmasi tekee
- Koko tarkoitus on antaa käyttäjien itsenäisesti vahvistaa, että lähdekoodi vastaa käyttöönottoa
Yksityiset repositoriot rikkovat vahvistusjärjestelmän keskeisen luottamusmallin.
Kuinka vahvistan Squads Multisig -hallinnassa olevan ohjelman?
Noudata näitä vaiheita multisig-hallinnassa olevien ohjelmien osalta:
# 1. Build and deploy normallysolana-verify buildsolana program deploy <your-program.so> --program-id YourProgramId...# 2. Verify locally first - confirm the hash matchessolana-verify verify-from-repo -um \--program-id YourProgramId... \https://github.com/your-org/your-program# 3. Export the PDA creation transactionsolana-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 verificationsolana-verify remote submit-job \--program-id YourProgramId... \--uploader YourMultisigAddress...
Kriittistä: Vahvista aina paikallisesti (vaihe 2) varmistaaksesi, että build-hash vastaa ennen PDA-transaktion vientiä.
Yhteenveto
Vahvistettujen buildien käyttäminen Solanassa varmistaa ohjelmien eheyden ja luotettavuuden verkossa ja mahdollistaa kehittäjien löytää SDK:t suoraan Solana Explorerista. Hyödyntämällä työkaluja kuten Solana Verify CLI ja Docker, voit ylläpitää vahvistettavia ja turvallisia buildeja, jotka ovat linjassa lähdekoodisi kanssa. Käytä aina tarvittavia varotoimia johdonmukaisten ympäristöjen ylläpitämiseksi ja harkitse hallintoratkaisuja turvallisten päivitysten ja käyttöönottojen varmistamiseksi.
Turvallisuus + vastuuvapauslauseke
Vaikka vahvistetut buildit ovat tehokas työkalu Solana-ohjelmien eheyden varmistamiseksi, ne eivät ole täysin luottamuksettomia oletusasetuksilla. Docker- kuvat rakennetaan ja isännöidään Solana Foundationin toimesta.
Huomioi, että rakennat projektisi ladatussa docker-kuvassa ja että koko asetuksesi kopioidaan kyseiseen docker-kuvaan buildausta varten sisältäen mahdollisesti arkaluonteista tietoa.
Jos haluat täysin luottamuksettoman asetusten, voit rakentaa docker-kuvat itse ja isännöidä ne omassa infrastruktuurissasi. Näin voit olla varma, ettei docker-kuvia ole peukaloitu. Löydät skriptit omien docker-kuviesi luomiseen Verified builds -repositoriosta, ja voit forkata sen ja ajaa github actionit itse tai vahvistaa, että ne ovat oikein.
Lisäksi etäverifioinnissa luotat tietyssä määrin OtterSec API:iin ja Solana Exploreriin.
API tai Solana Explorer saattaa mahdollisesti näyttää virheellistä tietoa, jos ne on vaarannettu.
Jos haluat täysin luottamuksettoman asetuksen, voit ajaa
Verify API:a itse
tai suorittaa ohjelman verifioinnin paikallisesti itse käyttämällä
verify-from-repo -komentoa käyttäen ketjussa olevaa verifiointi dataa, joka on
tallennettu
PDA:han
joka on johdettu ohjelman käyttöönottoauktoriteetista ja
verifiointi ohjelmasta.
Verifiointi ohjelman on ottanut käyttöön OtterSec-tiimi eikä sitä ole vielä jäädytetty, joten sitä voidaan päivittää milloin tahansa.
Solana Foundation, OtterSec ja Ellipsis Labs -tiimi eivät ole vastuussa mistään tappioista tai vahingoista, joita saattaa aiheutua verifioitujen käännösten putken käytöstä.
Security.txt Solana-ohjelmille
Verifioitujen käännösten lisäksi voit myös lisätä security.txt-tiedoston
ohjelmaasi. Tulevaisuudessa, kun se on toteutettu, security.txt sisältää
verifioijan julkisen avaimen helppoa pääsyä varten verifiointi-PDA:han
tallennettuun verifiointi dataan. PDA, joka sisältää kaiken tarvittavan tiedon
ohjelman rakentamiseen ja verifiointiin, johdetaan ohjelman osoitteesta ja
verifioijan pubkeystä. Oletuksena tämä on sama pubkey, joka rakensi ja otti
käyttöön ohjelman. Mutta se voi olla myös toinen pubkey, joka voidaan määrittää
security.txt:ssä.
security.txt-ominaisuus mahdollistaa kehittäjille yhteystietojen ja
tietoturvatietojen upottamisen suoraan heidän Solana-älysopimusten sisään.
securitytxt.org:sta inspiroituneena tämä
lähestymistapa tarjoaa standardoidun tavan tietoturvatutkijoille ottaa yhteyttä
projektin ylläpitäjiin, vaikka he tuntisivat vain sopimuksen osoitteen.
Miksi käyttää security.txt-tiedostoa?
Monissa projekteissa, erityisesti pienemmissä tai yksityisissä, kehittäjien
tunnistaminen pelkän sopimuksosoitteen perusteella voi olla vaikeaa ja aikaa
vievää. security.txt-tiedoston upottaminen ohjelmaan varmistaa, että
tietoturvatutkijat voivat helposti ottaa yhteyttä oikeisiin henkilöihin, mikä
voi estää hyväksikäyttöjä ja varmistaa oikea-aikaiset virheraportoinnit.
Kuinka toteuttaa security.txt
Lisätäksesi security.txt-tiedoston Solana-ohjelmaasi, noudata seuraavia
vaiheita:
Lisää solana-security-txt-riippuvuus Cargo.toml-tiedostoosi:
[dependencies]solana-security-txt = "1.1.1"
Käytä security_txt!-makroa sopimuksessasi määrittääksesi tietoturvatietosi.
Voit sisällyttää yhteystiedot, projektin URL-osoitteet ja jopa
tietoturvakäytännön. Tässä on esimerkki:
#[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!"}
Kun security.txt-tiedot on upotettu ohjelmaasi, ne voidaan helposti hakea
työkaluilla, kuten Solana Explorer, jolloin yhteystietosi ja tietoturvatietosi
ovat kaikkien saatavilla niille, jotka haluavat raportoida mahdollisista
ongelmista.
Parhaat käytännöt
-
Käytä linkkejä: Todennäköisesti muuttuville tiedoille (esim. yhteystiedot) on suositeltavaa linkittää verkkosivulle sen sijaan, että ne kovakoodattaisiin sopimukseen. Tämä välttää tarpeen toistuviin ohjelmaversiopäivityksiin.
-
Vahvistus: Ennen käyttöönottoa vahvista muoto ja sisältö käyttämällä
query-security-txt-työkalua, joka voi validoida sekä ketjussa olevia ohjelmia että paikallisia binääritiedostoja:
query-security-txt target/bpfel-unknown-unknown/release/my_contract.so
Upottamalla tietoturvan yhteystiedot suoraan sopimukseesi teet tutkijoiden yhteydenoton helpommaksi, edistäen parempaa tietoturvaa ja viestintää Solana-ekosysteemissä.
Tämä on esimerkki siitä, miltä security.txt näyttää Solana Explorerissa
security.txt-projektia ylläpitää
Neodyme Labs
Voit tarkistaa vahvistustilan ja selata vahvistettuja ohjelmia osoitteessa verify.osec.io.
Is this page helpful?