Kora on Rust-workspace, joka koostuu kolmesta crate-paketista:
kora-libsisältää ydinlogiikan ja RPC-palvelimen,kora-clirakentaakora-binäärin, jota operaattorit ajavat, jakora-deployon erikoistunut ohjelmien käyttöönottotyökalu, jolla on oma versiointinsa. Kaikki alla oleva sijaitsee hakemistossacrates/lib/src, ellei toisin mainita.
Pyynnön elinkaari
Alla oleva kaavio kuvaa transaktion yleisen kulun Koran läpi. Kutsupolun ymmärtäminen on tärkeää Kora-solmun konfiguroinnissa ja uusien ominaisuuksien lisäämisessä.
Missä kukin vaihe sijaitsee
| Kaavion vaihe | Lähde | Aloituspiste |
|---|---|---|
| Yhdyskäytävä | rpc_server/server.rs | run_rpc_server |
| Välitys | rpc_server/rpc.rs | KoraRpc |
| Metodikohtainen logiikka | rpc_server/method/ | yksi tiedosto kutakin JSON-RPC-metodia kohti |
| Validointi | validator/transaction_validator.rs | TransactionValidator |
| Laajennukset | plugin/mod.rs | TransactionPluginRunner |
| Allekirjoitus | signer/ | solana-keychain-crate-paketin tukema |
Kaksi muuta tiedostoa kannattaa tuntea: config.rs määrittelee koko kora.toml-skeeman, ja
state.rs säilyttää deserialisoidun konfiguraation prosessin globaalissa tilassa.
RPC-palvelimen koodin lukeminen
rpc.rs on ohut välityskerros, jossa on yksi metodi kutakin JSON-RPC-päätepistettä kohti, ja
se on nopein tapa nähdä koko API. Kunkin metodin logiikka on omassa tiedostossaan hakemistossa
rpc_server/method/. Lue sign_transaction.rs alusta loppuun; muut allekirjoitusmetodit
ovat sen muunnelmia.
Validaattorimoduulin koodin lukeminen
transaction_validator.rs ja transaction/instruction_util.rs sisältävät logiikan
transaktioiden ja instruktioiden validointiin. Lisäksi hakemistossa on fee-payer-policy-
turvallisuusominaisuuksien testit, jotka sijaitsevat yhtenä tiedostona kutakin rajattua ohjelmaa kohti
hakemistossa validator/transaction_validator/fee_payer_policy_props/.
Tärkeitä käytäntöjä
Oletusvalidointi. Jokaisen [validation.fee_payer_policy]-osion lipun
oletusarvo on false, ja policy-structeilla on #[serde(default)]. Tämä
yhdistelmä on tarkoituksellinen: uuden rajatun instruktion lisääminen ei saa rikkoa
olemassa olevan operaattorin konfiguraatiota, ja sen on päädyttävä estoon eikä
vahingossa sallituksi. Säilytä molemmat, kun lisäät lipun.
Validoi aina resolvoitu transaktio, älä koskaan raakaa. Raaka
VersionedTransaction paljastaa vain staattiset tiliavaimet, joten V0-transaktion validointi tai
hinnoittelu sen pohjalta ohittaa hiljaa lookup-taulun tilit ja
perii liian vähän. VersionedTransactionResolved::from_transaction resolvoi nämä
osoitteet etukäteen, minkä vuoksi jokainen myöhempi vaihe ottaa vastaan resolvoidun tyypin.
Transaktiolaajennuksen lisääminen
Laajennukset toteuttavat TransactionPlugin-traitin tiedostossa plugin/mod.rs. Siinä on kaksi
metodia: validate suoritetaan kunkin transaktion kohdalla allekirjoitusvirroissa, ja
validate_config suoritetaan kerran käynnistyksen yhteydessä ja palauttaa virheet ja varoitukset
operaattorille. PluginExecutionContext kertoo laajennukselle, mikä neljästä allekirjoitusmetodista
sen kutsui.
TransactionPluginRunner::from_config tekee match-vertailun TransactionPluginType-tyyppiin,
joka on määritelty tiedostossa config.rs. Uusi sisäänrakennettu laajennus tarkoittaa uutta varianttia siellä sekä uutta
match-haaraa runnerissa. Kaksi tällä hetkellä mukana toimitettavaa laajennusta ovat gas_swap ja
deploy_authority.
Testaus
Kora säilyttää konfiguraation prosessin globaalissa tilassa, joten tests/ määrittelee yhden
[[test]]-kohteen kutakin vaihetta kohti, ja jokainen kohde käynnistää oman upotetun surfnetinsä sekä
Kora-solmunsa, jotka alustetaan tyhjästä. Yksi konfiguraatio per binääri: uusi vaihe tarvitsee uuden
kohteen, ei uutta moduulia olemassa olevaan.
cargo test -p tests --test <target>
Kaikki muu on kytketty justfile-tiedoston kautta. Lue se sen sijaan, että
rakentaisit komennot käsin.
Is this page helpful?