Solana-dokumentaatioOhjelmien kehittäminen

Ohjelmien varmentaminen

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:

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

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:

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

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

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 -e
examples/hello_world/target/deploy/hello_world.so -i
ellipsislabs/hello_world_verifiable_build:latest -p
2ZrriTQSVekoj414Ynysd48jyn4AX6ZF4TTJRqHfbJfn

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 ID
2ZrriTQSVekoj414Ynysd48jyn4AX6ZF4TTJRqHfbJfn Executable path in container:
"examples/hello_world/target/deploy/hello_world.so"
Executable hash:
08d91368d349c2b56c712422f6d274a1e8f1946ff2ecd1dc3efc3ebace52a760 Program hash:
08d91368d349c2b56c712422f6d274a1e8f1946ff2ecd1dc3efc3ebace52a760 Executable
matches on-chain program data ✅

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: 6877a5b732b3494b828a324ec846d526d962223959534dbaf4209e0da3b2d6a9
On-chain Program Hash: 6877a5b732b3494b828a324ec846d526d962223959534dbaf4209e0da3b2d6a9
Program hash matches ✅

Squads V3

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

Huomaa, että meidän piti määrittää library-name, koska Squads-repositorio sisältää useita ohjelmia. Käytämme --bpf -lippua, koska squads_mpl on aiemmin vahvistettu Anchorilla.

Lopputulos:

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

Drift V2

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

Lopputulos:

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

Marginfi V2

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

Lopputulos:

Executable Program Hash from repo: 890d68f48f96991016222b1fcbc2cc81b8ef2dcbf280c44fe378c523c108fad5
On-chain Program Hash: 890d68f48f96991016222b1fcbc2cc81b8ef2dcbf280c44fe378c523c108fad5
Program 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 -um ja 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:

  1. API havaitsee päivityksesi ja poistaa ohjelmasi vahvistuksen.
  2. Päivitä PDA:si uusilla vahvistuksen metatiedoilla:
solana-verify verify-from-repo -um \
--program-id YourProgramId... \
https://github.com/your-org/your-program
  1. Lähetä uusi vahvistuspyyntö käyttäen päivitysoikeuttasi
  2. 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-verify paikallisesti
  • 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't
cargo install solana-verify
# Get the PDA data
solana-verify list-program-pdas --program-id YourProgramId...

Vaihe 2: Todenna paikallisesti

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

Tämä todistaa:

  1. PDA-metatiedot ovat aitoja (tallennettu ketjuun)
  2. PDA:n repositorion lähdekoodi vastaa käyttöönotettua ohjelmaa
  3. 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 normally
solana-verify build
solana program deploy <your-program.so> --program-id YourProgramId...
# 2. Verify locally first - confirm the hash matches
solana-verify verify-from-repo -um \
--program-id YourProgramId... \
https://github.com/your-org/your-program
# 3. Export the PDA creation transaction
solana-verify export-pda-tx \
--program-id YourProgramId... \
https://github.com/your-org/your-program
# 4. Execute the PDA transaction through your Squads Multisig interface
# 5. After multisig execution, trigger remote verification
solana-verify remote submit-job \
--program-id YourProgramId... \
--uploader YourMultisigAddress...

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:

Cargo.toml
[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 Fields
preferred_languages: "en,de",
source_code: "https://github.com/solana-developers/solana-game-preset",
source_revision: "5vJwnLeyjV8uNJSp1zn7VLW8GwiQbcsQbGaVSwRmkE4r",
source_release: "",
encryption: "",
auditors: "Verifier pubkey: 5vJwnLeyjV8uNJSp1zn7VLW8GwiQbcsQbGaVSwRmkE4r",
acknowledgements: "Thank you to our bug bounty hunters!"
}

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?

Sisällysluettelo

Mitä ovat varmennetut käännökset?Miten se toimii?Miksi minun pitäisi käyttää vahvistettuja buildeja?Miten luon varmennettuja buildeja?Asenna Docker ja CargoAsenna Solana Verify CLIValmistele projektiTodennettavien ohjelmien rakentaminenTodennettavien ohjelmien käyttöönottoTodentaminen repositorioita vastaanVahvista julkista API:a vastaanMiten vahvistat ohjelmasi, kun sitä hallinnoi moniallekirjoitus kuten Squads1. Rakenna vahvistettava ohjelma2. Ota ohjelma käyttöön3. Tee commit ja varmenna repositoriota vastaan4. Siirrä ohjelman valtuudet multisigille5. Vie PDA-transaktio6. Lähetä transaktio Squadsin kautta7. Lähetä etävarmennus-työ8. Ohjelman päivittäminen (Valinnainen)9. Vie ja lähetä uusi PDA-transaktioVarmistaminen docker-imagestaEsimerkki verifioidusta buildistaSuosittuja ohjelmia, jotka on jo verifioituPhoenixSquads V3Drift V2Marginfi V2Usein kysytyt kysymyksetVahvistukseni epäonnistuu. Mitä minun pitäisi tehdä?Paikallinen rakennushajautukseni ei vastaa on-chain hajautusta. Miksi?Kuinka kauan vahvistukseni kestää?Ohjelmani on muuttumaton (ei päivitysvaltuutettua). Miten voin vahvistaa sen?Mikä on PDA ja miksi sillä on väliä?Miksi minun täytyy luoda PDA ennen API:n käyttöä?Kuinka usein minun tulisi vahvistaa ohjelmani?Mitä tapahtuu, kun päivitän ohjelmani?Voinko luottaa vahvistustuloksiin?Kuinka voin itsenäisesti todentaa ohjelman?Voiko joku muu todentaa ohjelmani ilman lupaa?Mitä tarvitsen todennettavien buildien luomiseen?Voinko vahvistaa yksityisiä repositorioita?Kuinka vahvistan Squads Multisig -hallinnassa olevan ohjelman?YhteenvetoTurvallisuus + vastuuvapauslausekeSecurity.txt Solana-ohjelmilleMiksi käyttää security.txt-tiedostoa?Kuinka toteuttaa security.txtParhaat käytännöt
Muokkaa sivua

Hallinnoi

© 2026 Solana Foundation.
Kaikki oikeudet pidätetään.
Yhdistä