Osittainen allekirjoitus

Osittaisen allekirjoituksen avulla useat osapuolet voivat allekirjoittaa saman transaktion eri aikoina tai eri laitteilla. Koordinaattori rakentaa viestin, jokainen vaadittu allekirjoittaja allekirjoittaa täsmälleen samat serialisoidut viestitavut, ja koordinaattori varmistaa ja yhdistää allekirjoitukset ennen lähettämistä.

Allekirjoitukset valtuuttavat tavut, eivät aikomusta

Jos muutat maksajaa, blockhashia, ohjeiden järjestystä, tililuetteloa tai mitä tahansa instruction data -tietoa, syntyy eri viesti, ja kaikki jo kerätyt allekirjoitukset mitätöityvät.

Osittaisen allekirjoituksen kulku

  1. Sovi transaktion ohjeista ja siitä, kuka maksaa transaktiomaksun.
  2. Määritä transaktion voimassaoloaika ja maksun maksaja.
  3. Serialisoi viesti vain kerran. Käsittele näitä tavuja muuttumattomina.
  4. Jaa viestin tavut ja ihmisluettava yhteenveto jokaiselle allekirjoittajalle.
  5. Kerää jokainen Ed25519-allekirjoitus ja varmista se samoja viestitavuja vasten.
  6. Liitä allekirjoitukset vastaaviin vaadittuihin allekirjoittajien osoitteisiin.
  7. Varmista, että jokainen vaadittu allekirjoitus on olemassa ja kelvollinen, ja lähetä sitten.

Täydellinen esimerkki

Alla oleva maksun maksaja ja SOL-lähettäjä allekirjoittavat toisistaan riippumatta. Koordinaattori varmistaa molemmat allekirjoitukset, yhdistää ne ja lähettää valmiin transaktion.

Esimerkissä käytetään raakaa Ed25519-allekirjoitusta, jotta koordinaattorin ja jokaisen allekirjoittajan välinen raja näkyy selvästi. Lompakko, laitteistolaite, säilytyspalvelu tai offline-allekirjoittaja voi korvata kumman tahansa paikallisen keypairin, kunhan se allekirjoittaa täsmälleen samat viestitavut.

Lukitse viesti ennen allekirjoittamista

Jokainen allekirjoitus kattaa serialisoidun transaktioviestin. Viesti sisältää kaikki seuraavat:

  • transaktiomaksun maksajan
  • tuoreen blockhashin tai durable noncen
  • jokaisen ohjelman ja tilin osoitteen
  • tilin allekirjoittaja- ja kirjoitusoikeudet
  • ohjeiden järjestyksen ja instruction datan

Rakenna nämä kentät ensin, serialisoi viesti vain kerran ja jaa tämä tavutaulukko jokaiselle allekirjoittajalle. On hyödyllistä tallentaa viestin tiiviste jokaisen allekirjoituspyynnön yhteyteen, jotta koordinaattori voi hylätä allekirjoituksen, joka on palautettu eri viestille.

Älä pura viestiä, muuta sitä ja odota aiemmin kerättyjen allekirjoitusten pysyvän voimassa. Jopa käytännölliseltä vaikuttava muutos, kuten vanhentuneen blockhashin vaihtaminen tai maksun maksajan muuttaminen, edellyttää, että jokainen allekirjoittaja allekirjoittaa uudelleen.

Koordinoi maksun maksaja

Transaktiomaksun maksaja on aina vaadittu allekirjoittaja, ja hänet on valittava ennen kuin viesti lukitaan. Varmista, että tilillä on riittävästi SOL-tokeneita perusmaksuun ja mahdolliseen prioriteettimaksuun. Jos sponsori tai taustajärjestelmä maksaa maksun, lisää kyseinen osoite viestiin ennen käyttäjän allekirjoituksen keräämistä; sponsorin lisääminen myöhemmin muuttaa allekirjoitettuja tavuja.

Koordinaattorin tulee varmistaa, että saapuva allekirjoitus kuuluu osoitteelle, joka on lueteltu vaadittuna allekirjoittajana. Älä koskaan hyväksy mielivaltaista julkista avainta ja liitä sitä transaktioon.

Hallitse transaktion voimassaoloaikaa

Tuoreeseen blockhashiin perustuva transaktio on voimassa vain niin kauan kuin sen blockhash pysyy validatorin tuoreiden blockhashien jonossa. Ennen monen osapuolen allekirjoituskulun aloittamista arvioi, ehtivätkö kaikki allekirjoittajat vastata ennen arvoa lastValidBlockHeight.

Jos blockhash vanhenee, rakenna uusi viesti uudella blockhashilla ja kerää kaikki allekirjoitukset uudelleen. Työnkuluissa, jotka voivat kestää kauemmin tai joihin kuuluu offline- allekirjoittajia, käytä durable noncea. Durable nonce välttää tuoreen blockhashin aikaikkunan, mutta sen noncen eteneminen tai muu kuluttaminen mitätöi silti odottavan transaktion.

Varmista ennen lähettämistä

Jokaisen palautetun allekirjoituksen osalta:

  1. Varmista allekirjoitus lukittuja viestitavuja ja odotetun allekirjoittajan julkista avainta vasten.
  2. Liitä se kyseisen allekirjoittajan paikkaan transaktion allekirjoitustaulukossa.
  3. Varmista, että koottu transaktio sisältää kelvolliset allekirjoitukset jokaiselta vaaditulta allekirjoittajalta.
  4. Lähetä serialisoitu transaktio rakentamatta sen viestiä uudelleen.

Vahvista lähettämisen jälkeen transaktio käyttämällä samoja voimassaolotietoja, jotka sisältyivät allekirjoitettuun viestiin. Jos vahvistus ilmoittaa vanhentuneesta blockhashista tai kulutetusta noncesta, älä yritä uudelleen muokatulla transaktiolla; aloita allekirjoituskulku alusta.

Is this page helpful?

Sisällysluettelo

Muokkaa sivua
© 2026 Solana Foundation. Kaikki oikeudet pidätetään.