Ohjelmien käyttöönotto
Tämä opas olettaa seuraavien aiheiden tuntemusta:
Loader-v3 ja Loader-v4
Tällä hetkellä on käynnissä siirtymä loader-v3:sta (program-alikomento) loader-v4:ään (program -v4 -alikomento), koska loader-v3 on poistumassa käytöstä.
Uusissa käyttöönotoissa käytä komentoa solana program-v4 deploy
komennon
solana program deploy
sijaan.
Olemassa olevan ohjelman siirtäminen (mikä on käytännössä sen uudelleenkäyttöönotto):
solana program migrate ./target/deploy/your_program-keypair.json
Valmistelu
Ensin ohjelma täytyy rakentaa (kääntää, linkittää, karsia).
cargo +solana build --target sbpf-solana-solana --release
Tämä vaihe on suoritettava ennen jokaista käyttöönottoa tai uudelleenkäyttöönottoa.
Tarkista, että oletustilin käytettävissä on riittävästi varoja suhteessa suoritettavan tiedoston kokoon:
du -h ./target/deploy/your_program.sosolana balance
Lisäksi jokaisella ohjelmalla on ohjelmatili ja ohjelmatunnus (program ID), joka on kyseisen ohjelmatilin osoite. Seuraava komento luo avainparin ohjelmatilin:
solana-keygen new -o ./target/deploy/your_program-keypair.json
Tämä täytyy tehdä vain kerran ohjelmaa kohden, ja samaa avainparia käytetään saman ohjelman myöhemmissä uudelleenkäyttöönotoissa.
Työkaluketjussa oli oikotie, mutta se on poistumassa käytöstä / vanhentunut:
cargo-build-sbf
Ensimmäinen käyttöönotto
Nyt suoritettava tiedosto voidaan ladata ohjelmatilille:
Loader-v3
Parametrin nimi on program-id
vaikka se odottaa avainparin tiedostopolkua:
solana program deploy ./target/deploy/your_program.so --program-id ./target/deploy/your_program-keypair.json
Loader-v4
solana program-v4 deploy ./target/deploy/your_program.so --program-keypair ./target/deploy/your_program-keypair.json
Uudelleenkäyttöönotto
Eri suoritettavan tiedoston lataaminen samaan ohjelmatiliin uudelleen korvaa/vaihtaa sen. Uudelleenkäyttöönottoa varten tarvitaan kuitenkin vain ohjelman tunnus (ohjelmaavainparin pubkey), ei koko avainparia, koska allekirjoittajana toimii päivitysoikeuden avainpari.
Loader-v3
Tämä on täsmälleen sama kuin ensimmäinen käyttöönotto:
solana program deploy ./target/deploy/your_program.so --program-id ./target/deploy/your_program-keypair.json
Jos vanha suoritettava tiedosto oli lyhyempi kuin uusi, saattaa olla tarpeen kasvattaa programdata-tiliä ensin:
solana program extend ./target/deploy/your_program.so <ADDITIONAL_BYTES>
Loader-v4
Huomaa, että ensimmäisessä käyttöönotossa käytettiin program-keypair
, kun taas
uudelleenkäyttöönotossa käytetään program-id
:
solana program-v4 deploy ./target/deploy/your_program.so --program-id ./target/deploy/your_program-keypair.json
Latauksen priorisointi
Ruuhka-aikoina voit käyttää muutamia lisälippuja ohjelman käyttöönoton helpottamiseksi:
--with-compute-unit-price
: Asettaa laskentayksikön hinnan transaktiolle 0,000001 lamportin (mikro-lamportin) askelin laskentayksikköä kohden. Käytä Heliuksen Priority Fee API:a saadaksesi arvion asetettavasta prioriteettimaksusta.--use-rpc
: Lähettää kirjoitustransaktiot määritettyyn RPC:hen validaattorien TPU:iden sijaan. Tämä lippu vaatii stake-weighted RPC-yhteyden, kuten Helius tai Triton. Tämä lippu voidaan myös määrittää oletusarvoksi käyttämällä:solana config set --url <RPC_URL>
.--max-sign-attempts
: Maksimimäärä yrityksiä allekirjoittaa tai uudelleenallekirjoittaa transaktioita blockhash-vanhentumisen jälkeen. Jos jokin ohjelman käyttöönoton aikana lähetetty transaktio on edelleen vahvistamatta alun perin valitun viimeisimmän blockhash-arvon vanhennuttua, nämä transaktiot allekirjoitetaan uudelleen uudella viimeisimmällä blockhash-arvolla ja lähetetään uudelleen. Käytä tätä asetusta säätääksesi transaktioiden allekirjoitusiteraatioiden enimmäismäärää. Kukin blockhash on voimassa noin 60 sekuntia, mikä tarkoittaa, että oletusarvon 5 käyttäminen johtaa transaktioiden lähettämiseen vähintään 5 minuutin ajan tai kunnes kaikki transaktiot on vahvistettu, kumpi tahansa tulee ensin.
Latauksen jatkaminen
On mahdollista, että lataus jumiutuu tai keskeytyy.
Loader-v3
Jos ohjelman käyttöönotto epäonnistuu, jäljelle jää väliaikainen puskuritili,
jossa on nollasta poikkeava saldo. Saadaksesi saldon takaisin voit jatkaa
epäonnistunutta käyttöönottoa antamalla saman väliaikaisen puskurin uudelle
deploy
-kutsulle.
Käyttöönoton epäonnistuessa näytetään virheviesti, jossa määritetään siemenlause, jota tarvitaan luodun väliaikaisen puskurin avainparin palauttamiseen:
==================================================================================Recover the intermediate account's ephemeral keypair file with`solana-keygen recover` and the following 12-word seed phrase:==================================================================================valley flat great hockey share token excess clever benefit traffic avocado athlete==================================================================================To resume a deploy, pass the recovered keypair asthe [BUFFER_SIGNER] to `solana program deploy` or `solana program write-buffer'.Or to recover the account's lamports, pass it as the[BUFFER_ACCOUNT_ADDRESS] argument to `solana program drain`.==================================================================================
Avainparin palauttaminen:
solana-keygen recover -o ./target/deploy/buffer-keypair.json
Syötä pyydettäessä 12 sanan siemenlause.
Anna sitten uusi deploy
-komento ja määritä puskuri:
solana program deploy ./target/deploy/your_program.so --program-id ./target/deploy/your_program-keypair.json --buffer ./target/deploy/buffer-keypair.json
Loader-v4
Latauksen jatkaminen on mahdollista määritetystä tavusijainnista:
solana program deploy ./target/deploy/your_program.so --program-id ./target/deploy/your_program-keypair.json --start-offset <BYTES_UPLOADED_SO_FAR>
Viimeistely
Tämä on peruuttamaton toiminto.
Ohjelma voidaan tehdä muuttumattomaksi poistamalla sen päivitysoikeus.
Loader-v3
solana program set-upgrade-authority ./target/deploy/your_program-keypair.json --final
Loader-v4
solana program finalize --program-id ./target/deploy/your_program-keypair.json
Ohjelmien ylikirjoittamisen sijaan on myös mahdollista tarjota käyttäjille mahdollisuus valita, mitä ohjelman versiota he haluavat käyttää, muodostamalla linkitetty lista viimeistellyistä ohjelmista:
solana program finalize --program-id ./target/deploy/your_program-keypair.json --next-version ../your_newer_program/target/deploy/your_newer_program-keypair.json
Sulkeminen
Loader-v3:n alla käyttöönotetuista ohjelmista vain niiden programdata-tili, puskuritilit ja niihin lukitut varat voidaan palauttaa. Ohjelmatili sekä ohjelmatunnus ja erityisesti ohjelmatiliin lukitut varat jäävät jumiin.
Loader-v4:n alla käyttöönotetut ohjelmat voidaan sulkea, jolloin niiden ohjelmatili, ohjelmatunnus ja lukitut varat vapautuvat jälleen muuhun käyttöön.
Loader-v3
Tämä on peruuttamaton toimenpide loader-v3:lla käyttöönotetuille ohjelmille.
Huomaa, että kun ohjelma on suljettu, sen ohjelmatunnusta ei voi käyttää uudelleen. Jos yrität ottaa käyttöön ohjelman aiemmin suljetulla ohjelmatunnuksella, saat virheilmoituksen. Jos haluat ottaa ohjelman uudelleen käyttöön sulkemisen jälkeen, sinun on luotava uusi ohjelma-keypair-tiedosto.
Yhden programdata-tilin sulkeminen:
solana program close ./target/deploy/your_program-keypair.json
Kaikkien nykyiseen valtuuteen liittyvien puskuritilien sulkeminen:
solana program close --buffers
Loader-v4
solana program-v4 close --program-id ./target/deploy/your_program-keypair.json
Metatietojen tarkastelu
show
-alikomento näyttää ohjelman metatiedot.
Esimerkki tulosteesta:
Program Id: 3KS2k14CmtnuVv2fvYcvdrNgC94Y11WETBpMUGgXyWZLOwner: BPFLoaderUpgradeab1e11111111111111111111111ProgramData Address: EHsACWBhgmw8iq5dmUZzTA1esRqcTognhKNHUkPi4q4gAuthority: FwoGJNUaJN2zfVEex9BB11Dqb3NJKy3e9oY3KTh9XzCULast Deployed In Slot: 63890568Data Length: 5216 (0x1460) bytes
Program Id
on osoite, johon voidaan viitata ohjeenprogram_id
-kentässä ohjelmaa kutsuttaessa.Owner
: Loader, jolla tämä ohjelma otettiin käyttöön.ProgramData Address
on ohjelmatiliin liittyvä programdata-tili, joka sisältää ohjelman suoritettavan koodin (vain loader-v3).Status
:retracted
,deployed
taifinalized
(vain loader-v4).Authority
on ohjelman päivitysvaltuus.Last Deployed In Slot
on slot, jossa ohjelma viimeksi otettiin käyttöön.Data Length
on käyttöönottoja varten varatun tilan koko. Nykyisen käyttöönotetun ohjelman käyttämä todellinen tila voi olla pienempi.
Loader-v3
Tietyn ohjelman tarkastelu:
solana program show ./target/deploy/your_program-keypair.json
Oletusvaltuudella käyttöönotettujen ohjelmien luettelon tarkastelu:
solana program show --programs
Kaikkien puskuritilien näyttäminen valtuudesta riippumatta:
solana program show --buffers --all
Eri valtuuden määrittäminen:
solana program show --programs --buffer-authority ~/.config/solana/authority-keypair.jsonsolana program show --buffers --buffer-authority ~/.config/solana/authority-keypair.json
Loader-v4
Tietyn ohjelman tarkasteleminen:
solana program-v4 show --program-id ./target/deploy/your_program-keypair.json
Oletusvaltuudella käyttöönotettujen ohjelmien luettelon tarkasteleminen:
solana program-v4 show --all
Tietyllä valtuudella käyttöönotettujen ohjelmien luettelon tarkasteleminen:
solana program-v4 show --authority ~/.config/solana/authority-keypair.json
Suoritettavan tiedoston lataaminen
Joskus on hyödyllistä ladata ja vertailla ohjelmaa varmistaakseen, että se sisältää tunnetun suoritettavan tiedoston. Ladattu tiedosto voidaan katkaista, laskea siitä tiiviste ja verrata sitä alkuperäisen ohjelmatiedoston tiivisteeseen.
Loader-v3
solana program dump ./target/deploy/your_program-keypair.json ./target/deploy/your_program.so
Loader-v4
solana program download ./target/deploy/your_program.so --program-id ./target/deploy/your_program-keypair.json
Edistynyt: valtuuden siirto
Oikeus muuttaa tiettyä ohjelmaa kuuluu sen valtuudelle. Tämä valtuus voidaan siirtää toiselle keypairille muuttamatta ohjelman keypairiä, jolloin ohjelmatunnus pysyy samana. Lisäksi yksi valtuus voi hallita useita ohjelmatileja.
Jos valtuutta ei ole nimenomaisesti määritetty alkuperäisen käyttöönoton yhteydessä, käytetään oletusarvoisesti oletuskeypairiä. Tämän vuoksi ohjelman uudelleenkäyttöönotto yllä olevissa vaiheissa ei vaatinut valtuuden nimenomaista määrittämistä.
Nimenomainen valtuus on hyödyllinen offline-allekirjoituksessa ja usean tahon hallinnoimissa ohjelmissa.
Ensin on luotava keypair valtuutta varten:
solana-keygen new -o ~/.config/solana/authority-keypair.json
Loader-v3
Valtuus voidaan määrittää käyttöönoton yhteydessä:
solana program deploy ./target/deploy/your_program.so --upgrade-authority ~/.config/solana/authority-keypair.json
Tai käyttöönoton jälkeen käyttäen oletuskeypairiä nykyisenä valtuutena:
solana program set-upgrade-authority ./target/deploy/your_program-keypair.json --new-upgrade-authority ~/.config/solana/authority-keypair.json
Tai käyttöönoton jälkeen määrittämällä nykyinen auktoriteetti:
solana program set-upgrade-authority ./target/deploy/your_program-keypair.json --upgrade-authority ~/.config/solana/authority-keypair.json --new-upgrade-authority ~/.config/solana/new_authority-keypair.json
Loader-v4
Auktoriteetti voidaan määrittää käyttöönoton aikana:
solana program-v4 deploy ./target/deploy/your_program.so --program-keypair ./target/deploy/your_program-keypair.json --authority ~/.config/solana/authority-keypair.json
Tai käyttöönoton jälkeen käyttämällä oletusavainparia nykyisenä auktoriteettina:
solana program-v4 transfer-authority --program-id ./target/deploy/your_program-keypair.json --new-authority ~/.config/solana/authority-keypair.json
Tai käyttöönoton jälkeen määrittämällä nykyinen auktoriteetti:
solana program-v4 transfer-authority --program-id ./target/deploy/your_program-keypair.json --authority ~/.config/solana/authority-keypair.json --new-authority ~/.config/solana/new_authority-keypair.json
Edistynyt: Kaksivaiheinen uudelleenkäyttöönotto puskuria käyttäen
Sen sijaan, että suoritettava koodi ladattaisiin suoraan ohjelmatilille, se voidaan ladata ensin väliaikaiseen puskuritiliin ja siirtää sitten ohjelmatilille toisessa vaiheessa (varsinainen uudelleen-/käyttöönotto). Tämä on hyödyllistä offline-allekirjoituksessa ja usean tahon hallinnoimissa ohjelmissa, kuten DAO-äänestyksessä, jossa päätetään hyväksytäänkö vai hylätäänkö ladattu suoritettava koodi ennen varsinaista uudelleenkäyttöönottoa.
Huomaa, että puskuritilien käyttö lähes kaksinkertaistaa latauksen aikana tarvittavat varat, koska kaksi tiliä pitää hallussaan yhtä suoritettavaa koodia samanaikaisesti.
Ensin on luotava avainpari puskuritiliä varten:
solana-keygen new -o ~/.config/solana/buffer-keypair.json
Puskuritiliä voidaan käyttää uudelleen eri latauksiin, eikä se ole sidottu mihinkään tiettyyn ohjelmatiliin.
Loader-v3
solana program write-buffer ./target/deploy/your_program.so --buffer ~/.config/solana/buffer-keypair.jsonsolana program deploy --program-id ./target/deploy/your_program-keypair.json --buffer ~/.config/solana/buffer-keypair.json
Loader-v4
solana program-v4 deploy ./target/deploy/your_program.so --buffer ~/.config/solana/buffer-keypair.jsonsolana program-v4 deploy --program-id ./target/deploy/your_program-keypair.json --buffer ~/.config/solana/buffer-keypair.json
Edistynyt: Offline-allekirjoitus
Jotkin turvallisuusmallit edellyttävät allekirjoitusprosessin erottamista transaktion lähettämisestä siten, että allekirjoitusavaimet voidaan täysin irrottaa verkosta. Tätä kutsutaan offline-allekirjoitukseksi.
Huomaa, että vain uudelleenkäyttöönottoja voidaan suorittaa offline-tilassa. Alkuperäinen ohjelman käyttöönotto täytyy suorittaa verkossa olevalta laitteelta, ja vain myöhemmät ohjelman uudelleenkäyttöönotot voivat hyödyntää offline-allekirjoitusta.
Tyypillinen kokoonpano koostuisi kahdesta eri allekirjoittajasta:
- online-allekirjoittaja (maksun maksaja ja puskuritilin auktoriteetti)
- offline-allekirjoittaja (ohjelmatilin auktoriteetti)
Yleinen prosessi on kaksivaiheinen uudelleenkäyttöönotto muutamilla lisäyksillä:
- (online) luo uusi ohjelma
- (online) siirrä valtuutus offline-allekirjoittajalle
- (online) luo puskuri ja lataa suoritettava tiedosto siihen
- (valinnainen) varmista puskurin lohkoketjussa olevat sisällöt
- (offline) allekirjoita transaktio ohjelman uudelleenkäyttöönottamiseksi
puskuria käyttäen
--blockhash <VALUE> --sign-only
- (online) käytä tätä allekirjoitusta uudelleenkäyttöönottotransaktion
lähettämiseen
--blockhash <VALUE> --signer <OFFLINE_SIGNER_PUBKEY>:<OFFLINE_SIGNER_SIGNATURE>
Etsi tuore blockhash
ja liitä se offline-transaktion allekirjoituksen
luomiseksi. blockhash
vanhenee noin 60 sekunnin kuluttua. Jos et ehtinyt
ajoissa - hae vain uusi tuore tiiviste ja toista kunnes onnistut, tai harkitse
kestävien transaktiononce-arvojen käyttämistä.
Is this page helpful?