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

Kun olet ladannut vahvistus-PDA:n ketjuun verify-from-repo-komennolla, lähetä etävahvistustehtävä OtterSec API:lle:

solana-verify remote submit-job --program-id <program-id> --uploader <address>

--uploader on osoite, joka latasi vahvistus-PDA:n – yleensä ohjelmasi päivitysvaltuus. Jos ohjelmasi on multisigin hallinnassa, jatka tämän oppaan multisig-vahvistus -osioon alla.

Vanha --remote-lippu verify-from-repo-komennossa on poistettu käytöstä. Lataa ensin PDA:si ja suorita sitten remote submit-job.

Tämä lähettää tehtävän OtterSec API:lle. Voit tarkistaa tehtävän tilan komennolla:

solana-verify remote get-job --job-id <job-id>

Kun vahvistus on suoritettu onnistuneesti – mikä voi kestää hetken – voit nähdä ohjelmasi vahvistettuna OtterSec API:ssa yksittäisille ohjelmille sekä Solana Explorerissa, SolanaFM:ssä, SolScanissa ja myöhemmin myös yhteisön ylläpitämällä sivustolla SolanaVerify.org, jota ylläpitävät 0xDeep ja OtterSec:n vahvistettujen ohjelmien API sekä lopulta Verified Programs Dune Dashboard -palvelussa, edistäen terveellisempää Solana-ekosysteemiä.

Ohjelman vahvistaminen, kun se on Multisigin, kuten Squadsin, hallinnassa

Etävahvistuksen toimimiseksi sinun on kirjoitettava vahvistusdata PDA:han, jonka ohjelman valtuus on allekirjoittanut. Jos ohjelmasi on multisigin hallinnassa, voit viedä tämän kirjoitus-PDA-transaktion ja lähettää sen Squads Protocolin tai muun valitsemasi multisig-ratkaisun kautta.

1. Rakenna vahvistettava ohjelma

Rakenna ensin ohjelma:

solana-verify build

Tämä rakentaa vahvistettavan buildin Docker-konttia käyttäen, hyödyntäen Cargo.lock-tiedostossa määriteltyä 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ässä multisig-oppaassa käytämme esimerkkinä ohjelmatunnusta 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD.

3. Sitoudu ja vahvista arkistoa vasten

Kun tämä on tehty, lähetämme projektin GitHubiin. Tässä on esimerkki: https://github.com/solana-developers/verify-squads

Valinnainen: Tarkista ensin, voitko vahvistaa paikallisesti (tämä komento käyttää esimerkkinä ohjelmatunnusta 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD):

solana-verify verify-from-repo https://github.com/solana-developers/verify-squads --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD

Varmista, että parametrisi ovat oikein.

4. Siirrä ohjelman hallintaoikeus multisigille

Jos et ole vielä siirtänyt ohjelmasi hallintaoikeutta multisigille, kopioi multisigin hallintaosoite. Tarvitset sitä seuraavassa vaiheessa.

5. Vie PDA-transaktio

Kun sinulla on ohjelman hallintaoikeus paikallisesti, sinua kehotetaan lataamaan koontitiedot lohkoketjuun komennolla solana-verify verify-from-repo.

Koska et voi tehdä sitä multisigia käyttäessäsi, sinun täytyy viedä PDA-transaktio manuaalisesti ja 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 sinulle base58-transaktion. Jos haluat base64-koodatun transaktion käytettäväksi transaktion tarkastajassa, voit käyttää --encoding base64.

P6vBfcPaaXb8fZoT3NBAYEcdtEj7tubA1k2gBxmFKZ3UWF5YyrmDMFTvLKALCJoUuRsPAjMckudYruCu3eeWQtuDrFbEMLxLFutnKXac974fnkMivcwUdY66VLjbxQT6ATmcy7F4hBtz1G4P1h6iBJLhb8WtrtgY3i4qq45MUEb7RjuMEfUFXKrNgPdGxkz5xvMHq3dxKRcpmEK5k2DkeW6SUQYBVe19Ga3B9GyhTX8k3CMt9JCEah13WyRnQd8GjoK6sTEvGJym6xDNvmd8yiJYSNcaYwEJsjHEUf4Yh6kAC7ki2KRvVAr3NVe1gjqK9McrwSQjtUatvydTG8Zovcr7PPUEMf3yPMgKXjZLB2QpkH63yTTYdNAnWFuv9E6b6nYRqye5XcNi436yKw5U14fXh65yK34bgYLi9328UT1huJELsJU9BRGnGUmb6GWp6c2WL5BhnzgNTSnt9TXFfEgUMzhvKzpVBxLP44hwqqBdyUhHFysCF37531PnmiESq8x1xou23xJ6FcQbc199754MkqQd7tX9CUznGzAEqHGkzn3VBoJnojsKtgYmiTYbdRsT1CU18MbYEE7WvGAvXyxxbpNzbAcc94HrnM6cqRGmwhEBroPfFghTdmzg9D

6. Lähetä transaktio Squadsin kautta

Siirry Squadsin transaktionrakentajaan ja tuo base58-koodattu transaktio. Varmista, että simulaatiossa transaktiossa on ainoastaan kutsu osec-vahvistusohjelmaan ja tietokonebudjettiohjelmaan, eikä mitään muuta!

7. Lähetä etävahvistustehtävä

Kun transaktio Squadsiin onnistui, voit lähettää etätehtävän:

solana-verify remote submit-job --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD
--uploader <your program authority>

Siinä kaikki! Olet varmentanut ohjelmasi julkista repositoriota vasten ja lähettänyt etätyön OtterSec API:lle. Sen pitäisi nyt näkyä Solana Explorerissa ja muissa paikoissa.

8. Ohjelman päivittäminen (Valinnainen)

Kun päivität ohjelmaasi, sinun täytyy viedä uusi PDA-transaktio ja lähettää se uudelleen Squadsin kautta.

Ohjelman päivityksen suorittaminen:

solana-verify build
solana program write-buffer target/deploy/verify_squads.so --with-compute-unit-price 50000 --max-sign-attempts 50

Siirrä sen jälkeen 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 tarkastella esimerkkitransaktiota täältä.

Lähetä sen jälkeen uusi etäkäännöspyyntö:

solana-verify remote submit-job --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD --uploader 3JG6ULvZVCrkKtSSskKNJGe8RNZGFe8Ruev9KUhxzK5K

Tuloksen pitäisi näyttää suunnilleen 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 onchain 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 varmentanut ohjelmasi multisig-päivityksen jälkeen!

Varmennus Docker-imagesta

Voit myös varmentaa ohjelmasi Docker-imagea vasten 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 osoitteessa ellipsislabs/hello_world_verifiable_build:latest tallennetun imagen ja varmentaa, että kontin suoritettavan tiedoston polun hajautusarvo on sama kuin komennolle annetun ketjussa olevan ohjelman hajautusarvo. Koska käännös on jo ladattu imageen, koko suoritettavan tiedoston uudelleenkääntäminen ei ole tarpeen, mikä voi muuten viedä paljon aikaa.

Dockerfile, joka luo imagen ellipsislabs/hello_world_verifiable_build:latest, löytyy Ellipsis Labsin repositoriosta /examples/hello_world.

Alla on odotettu tulos:

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 onchain program data ✅

Esimerkki varmennetusta buildista

Tässä on esimerkki esimerkkiohjelman varmentamisesta tunnuksella FWEYpBAf9WsemQiNbAewhyESfR38GBBHLrCaU3MpEKWv käyttämällä lähdekoodia tästä repositoriosta:

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

Oletusarvoisesti verify-from-repo-komento käyttää main-haaran viimeistä committia. Voit myös määrittää tietyn commitin, jos haluat jatkaa työskentelyä repositoriossa käyttämällä commit-hash-parametria: --commit-hash 5b82b86f02afbde330dff3e1847bed2d42069f4e

Kun sinulta kysytään, vastaa kyllä ladataksesi varmennus-PDA:n ketjuun. Lähetä sen jälkeen etävarmennus-työ OtterSec API:lle:

solana-verify remote submit-job --program-id FWEYpBAf9WsemQiNbAewhyESfR38GBBHLrCaU3MpEKWv --uploader <your-upgrade-authority>

Suosittuja ohjelmia, jotka on jo varmennettu

Phoenix

solana-verify verify-from-repo -um --program-id PhoeNiXZ8ByJGLkxNfZRnkUfjvmuYqLR89jjFHGqdXY https://github.com/Ellipsis-Labs/phoenix-v1

Lopullinen tulos:

Executable Program Hash from repo: 6877a5b732b3494b828a324ec846d526d962223959534dbaf4209e0da3b2d6a9
Onchain 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 oli aiemmin varmennettu Anchor-työkalulla.

Lopullinen tulos:

Executable Program Hash from repo: 72da599d9ee14b2a03a23ccfa6f06d53eea4a00825ad2191929cbd78fb69205c
Onchain 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

Lopullinen tulos:

Executable Program Hash from repo: e31d58edeabc3c30bf6f2aa60bfaa5e492b41ec203e9006404b463e5adee5828
Onchain 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

Lopullinen tulos:

Executable Program Hash from repo: 890d68f48f96991016222b1fcbc2cc81b8ef2dcbf280c44fe378c523c108fad5
Onchain 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äivitysvaltuus ajamalla solana program show YourProgramId
  • Ei ketjussa olevaa PDA:ta: Suorita solana-verify verify-from-repo -um ja valitse KYLLÄ pyydettäessä. Ilman PDA:n lataamista API ei pysty hakemaan vahvistusmetatietojasi.
  • PDA-tietojen ristiriita: Päivitä PDA:si, jos olet ottanut ohjelmasi uudelleen käyttöön. PDA-tietojesi on vastattava käyttöön ottamaasi ohjelmaa.
  • Virheellinen commit-tiiviste: Luo PDA:si käyttämällä täsmälleen sitä commit-tiivistettä, jonka olet ottanut käyttöön
  • Koontaympäristön erot: Käytä Dockeria solana-verifyn kanssa, kun luot PDA:ta

Paikallinen koontitiivisteeni ei täsmää ketjussa olevan tiivisteen kanssa. Miksi?

Tämä tarkoittaa yleensä:

  • Käytät eri Rust/Solana-työkaluketjuversioita
  • Riippuvuutesi päivitettiin koontikertojen välillä
  • Et rakentanut Docker-säiliössä
  • Haoit väärän commitin

Korjaa tämä rakentamalla solana-verify build Dockerissa käyttäen täsmälleen sitä committia, jonka otit käyttöön.

Kuinka kauan vahvistukseni kestää?

Odota näitä aikatauluja ohjelmasi koon mukaan:

  • Yksinkertaiset ohjelmat: 1–5 minuuttia
  • Monimutkaiset ohjelmat: 5–15 minuuttia
  • Erittäin suuret ohjelmat: Enintään 30 minuuttia

Seuraa edistymistäsi työn tila -päätepisteellä.

Ohjelmani on muuttumaton (ei päivitysvaltuutta). Kuinka voin vahvistaa sen?

Jos ohjelmallasi ei ole päivitysvaltuutta tai se tehtiin muuttumattomaksi ennen kuin pystyit luomaan PDA:n, meillä on tätä tilannetta varten sallittujen listalla oleva osoite. Ota meihin yhteyttä osoitteessa contact@osec.io, niin autamme sinua saamaan ohjelmasi vahvistetuksi.

Mikä on PDA ja miksi sillä on merkitystä?

PDA-tilisi (Program Derived Account) mahdollistaa luottamuksettoman todentamisen:

  • Ketjutallennus: Tallenna todentamismetatietosi (repo-URL, commit-hajautusarvo, koontiversioparametrit) ketjulle PDA-tiliin, jonka omistaa Otter Verify -ohjelma (verifycLy8mB96wd9wqq3WDXQwM4oU6r42Th37Db9fC)
  • Kryptografinen linkki: PDA-tilisi johdetaan ohjelmaosoitteestasi, luoden muuttumattoman yhteyden todentamistietoihisi
  • Hajautettu luottamus: Kuka tahansa voi lukea PDA-tilisi ja todentaa ohjelmasi itsenäisesti

Miksi minun täytyy luoda PDA ennen API:n käyttöä?

API toimii vain ketjulla olevien PDA-tilien kanssa, koska:

  • Luottamukseton: API hylkää mielivaltaisen datan – se käyttää vain sitä, mitä päivitysvaltuutesi on tallentanut ketjulle
  • Yksinkertaisempi: Anna vain allekirjoittaja ja program_id; API hakee kaiken muun PDA-tililtäsi
  • Väärentämissuojattu: PDA-tilisi luo muuttumattoman tietueen, jonka kuka tahansa voi todentaa itsenäisesti
  • Omistajuustodistus: Allekirjoittajasi täytyy olla päivitysvaltuus, kryptografisesti todistaa, että hallitset ohjelmaa

Kuinka usein minun tulisi todentaa ohjelmani?

Todenna ohjelmasi:

  • Jokaisen käyttöönoton tai päivityksen jälkeen
  • Kun päivität lähderepositoriosi
  • Älä huolehdi uudelleentodentamisesta muulloin – API todentaa automaattisesti kaikki ohjelmat uudelleen 24 tunnin välein

Mitä tapahtuu, kun päivitän ohjelmani?

Noudata näitä vaiheita päivityksen jälkeen:

  1. API havaitsee päivityksesi ja poistaa ohjelmasi todennuksen.
  2. Päivitä PDA-tilisi uusilla todentamismetatiedoilla:
solana-verify verify-from-repo -um \
--program-id YourProgramId... \
https://github.com/your-org/your-program
  1. Lähetä uusi todentamispyyntö käyttämällä päivitysvaltuuttasi
  2. API todentaa uuden versiosi päivitettyä PDA-tiliä vasten

Tärkeää: Päivitä aina PDA-tilisi päivitysvaltuudellasi käyttäen uuden päivitetyn ohjelman commit-hajautusarvoa.

Voiko vahvistustuloksiin luottaa?

Kyllä – järjestelmä on suunniteltu luottamuksettomaksi ja itsenäisesti todennettavaksi:

Mikä tekee siitä luotettavan:

  • Ketjussa oleva PDA: Vahvistusmetadatasi on tallennettu ketjuun, eikä mikään keskusviranomainen hallitse sitä
  • Päivitysvaltuuden todiste: Vain ohjelmasi päivitysvaltuus voi luoda/päivittää PDA:n
  • Itsenäinen todentaminen: Kuka tahansa voi todentaa lukemalla PDA:si ja ajamalla solana-verify paikallisesti
  • Jatkuva uudelleentodentaminen: API todentaa kaikki ohjelmat automaattisesti uudelleen 24 tunnin välein

Huomioi nämä rajoitukset:

  • Vahvistus varmistaa, että lähdekoodi vastaa käyttöönottoa – EI sitä, että koodisi on turvallinen
  • Tarkista koodi aina ennen ohjelmien kanssa vuorovaikuttamista
  • Vahvistettu ≠ auditoitu tai turvallinen
  • Tarkista PDA:n repositorio ja commit varmistaaksesi, että se on luotetusta lähteestä

Miten voin itsenäisesti todentaa ohjelman?

Todenna mikä tahansa ohjelma itse lukemalla sen ketjussa oleva PDA ja ajamalla 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 onchain program hash

Tämä todistaa:

  1. PDA:n metadata on aito (tallennettu ketjuun)
  2. PDA:n repositorion lähdekoodi vastaa käyttöönotettua ohjelmaa
  3. Sinun ei tarvitse luottaa API:in – voit todentaa kaiken itse ketjussa

Voiko joku muu todentaa ohjelmani ilman lupaa?

Kyllä, ja juuri siksi vaadimme allekirjoittajan olevan päivitysvaltuus. Pidämme vahvistusta pätevänä vain, jos allekirjoittaja on päivitysvaltuus.

Mitä tarvitsen todennettavien buildien luomiseen?

Asenna nämä työkalut:

  • Docker (deterministisia buildeja varten)
  • Cargo (Rustin paketinhallinta)
  • Solana Verify CLI: cargo install solana-verify
  • Julkinen Git-repositorio lähdekoodillesi

Voinko vahvistaa yksityisiä repositorioita?

Ei – vahvistus edellyttää julkista lähdekoodia:

  • PDA:si tallentaa julkisen repositorion URL-osoitteen, johon kaikilla on pääsy
  • Luottamukseton vahvistus riippuu julkisesta koodin saatavuudesta
  • Käyttäjien on luettava lähdekoodisi ymmärtääkseen, mitä ohjelmasi tekee
  • Koko tarkoituksena on antaa käyttäjien itsenäisesti varmistaa, että lähdekoodi vastaa käyttöönotettua versiota

Yksityiset repositoriot rikkovat vahvistusjärjestelmän keskeisen luottamusmallin.

Kuinka vahvistan Squads Multisig -ohjelman?

Noudata näitä vaiheita multisig-hallittujen 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...

Tärkeää: Vahvista aina paikallisesti (vaihe 2) varmistaaksesi, että build-hajautusarvo täsmää ennen PDA-transaktion vientiä.

Yhteenveto

Käyttämällä vahvistettuja buildeja Solanassa varmistat ohjelmiesi eheyden ja luotettavuuden verkossa sekä mahdollistat kehittäjille SDK:idesi löytämisen suoraan Solana Explorerista. Hyödyntämällä työkaluja kuten Solana Verify CLI ja Docker, voit ylläpitää todennettavia ja turvallisia buildeja, jotka vastaavat lähdekoodiasi. Käytä aina tarvittavia varotoimia yhtenäisten ympäristöjen varmistamiseksi, ja harkitse hallintaratkaisuja turvallisia päivityksiä ja käyttöönottoja varten.

Tietoturva ja vastuuvapauslauseke

Vaikka vahvistetut buildit ovat tehokas työkalu Solana-ohjelmiesi eheyden varmistamiseen, ne eivät ole täysin luottamuksettomia oletusasetuksissa. Docker-kuvat rakennetaan ja isännöidään Solana Foundationin toimesta.

Huomaa, että rakennat projektisi ladatussa Docker-kuvassa ja koko asetuksesi kopioidaan kyseiseen Docker-kuvaan rakentamista varten, mukaan lukien mahdollisesti arkaluonteiset tiedot.

Jos haluat täysin luottamuksettoman asetuksen, voit rakentaa Docker-kuvat itse ja isännöidä niitä omassa infrastruktuurissasi. Näin voit varmistua, että Docker-kuvia ei ole muutettu. Löydät skriptit omien Docker-kuvien luomiseen Verified builds -repositoriosta, josta voit haarauttaa sen ja ajaa GitHub Actions -toiminnot itse tai vahvistaa, että ne ovat oikein.

Lisäksi etävarennuksessa luotat OtterSec API:hin ja Solana Exploreriin jossain määrin.

API tai Solana Explorer saattaa näyttää virheellistä tietoa, jos se on vaarantunut.

Jos haluat täysin luottamuksettoman ympäristön, voit ajaa Verify API:n itse tai suorittaa ohjelman varennuksen paikallisesti käyttämällä verify-from-repo -komentoa, joka hyödyntää ketjussa tallennettua varennusdataa PDA:ssa, joka on johdettu ohjelman käyttöönottovaltuudesta ja verify-ohjelmasta.

Verify-ohjelma on OtterSec-tiimin käyttöönotettama, 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 vahingoista tai menetyksistä, joita voi aiheutua varennettuja build-putkia käytettäessä.

Security.txt Solana-ohjelmille

Varennetttujen buildien lisäksi voit myös lisätä security.txt -tiedoston ohjelmaasi. Tulevaisuudessa, kun se on toteutettu, security.txt sisältää varmentajan julkisen avaimen, jotta varennusdataan pääsee helposti käsiksi varennusPDA:sta. PDA, joka sisältää kaikki tarvittavat tiedot ohjelman buildaamiseen ja varennukseen, johdetaan ohjelman osoitteesta ja varmentajan pubkey:stä. Oletuksena tämä on sama pubkey, jolla ohjelma on builtattu ja otettu käyttöön. Se voi kuitenkin olla myös toinen pubkey, joka voidaan määrittää security.txt -tiedostossa.

security.txt -ominaisuus antaa kehittäjille mahdollisuuden upottaa yhteystieto- ja turvallisuustiedot suoraan Solana-älykkäisiin sopimuksiinsa. Inspiraationaan securitytxt.org, tämä lähestymistapa tarjoaa standardoidun tavan turvallisuustutkijoille ottaa yhteyttä projektin ylläpitäjiin, vaikka he tietäisivät vain sopimuksen osoitteen.

Miksi käyttää security.txt:ää?

Monissa projekteissa, erityisesti pienemmissä tai yksityisissä, kehittäjien tunnistaminen pelkän sopimusosoitteen perusteella voi olla vaikeaa ja aikaa vievää. Liittämällä security.txt -tiedosto ohjelmaan varmistetaan, että tietoturvatutkijat voivat helposti ottaa yhteyttä oikeisiin henkilöihin, mikä voi ehkäistä hyökkäyksiä ja varmistaa virheilmoitusten oikea-aikaisen käsittelyn.

Kuinka toteuttaa security.txt

Lisätäksesi security.txt 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ääritellä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, niitä voidaan helposti hakea esimerkiksi Solana Explorerin kaltaisilla työkaluilla, jolloin yhteystietosi ja tietoturvatietosi ovat kaikkien saatavilla mahdollisten ongelmien ilmoittamista varten.

Parhaat käytännöt

  • Käytä linkkejä: Tietojen osalta, jotka todennäköisesti muuttuvat (esim. yhteystiedot), on suositeltavaa linkittää verkkosivulle sen sijaan, että ne kovakoodataan sopimukseen. Tämä välttää tarpeen päivittää ohjelmaa usein.

  • Varmennus: Ennen käyttöönottoa tarkista muoto ja sisältö käyttämällä query-security-txt -työkalua, joka pystyy validoimaan sekä ketjussa olevat ohjelmat että paikalliset binäärit:

query-security-txt target/bpfel-unknown-unknown/release/my_contract.so

Upottamalla tietoturvayhteystiedot suoraan sopimukseesi helpottaa tutkijoiden yhteydenottoa sinuun, 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 varmennetun tilan ja selata varmennetuja 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 vastaanOhjelman vahvistaminen, kun se on Multisigin, kuten Squadsin, hallinnassa1. Rakenna vahvistettava ohjelma2. Ota ohjelma käyttöön3. Sitoudu ja vahvista arkistoa vasten4. Siirrä ohjelman hallintaoikeus multisigille5. Vie PDA-transaktio6. Lähetä transaktio Squadsin kautta7. Lähetä etävahvistustehtävä8. Ohjelman päivittäminen (Valinnainen)9. Vie ja lähetä uusi PDA-transaktioVarmennus Docker-imagestaEsimerkki varmennetusta buildistaSuosittuja ohjelmia, jotka on jo varmennettuPhoenixSquads V3Drift V2Marginfi V2Usein kysytyt kysymyksetVahvistukseni epäonnistuu. Mitä minun pitäisi tehdä?Paikallinen koontitiivisteeni ei täsmää ketjussa olevan tiivisteen kanssa. Miksi?Kuinka kauan vahvistukseni kestää?Ohjelmani on muuttumaton (ei päivitysvaltuutta). Kuinka voin vahvistaa sen?Mikä on PDA ja miksi sillä on merkitystä?Miksi minun täytyy luoda PDA ennen API:n käyttöä?Kuinka usein minun tulisi todentaa ohjelmani?Mitä tapahtuu, kun päivitän ohjelmani?Voiko vahvistustuloksiin luottaa?Miten 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 -ohjelman?YhteenvetoTietoturva ja vastuuvapauslausekeSecurity.txt Solana-ohjelmilleMiksi käyttää security.txt:ää?Kuinka toteuttaa security.txtParhaat käytännöt
Muokkaa sivua
© 2026 Solana Foundation. Kaikki oikeudet pidätetään.