Gedeeltelijk ondertekenen

Met gedeeltelijk ondertekenen kunnen meerdere partijen dezelfde transactie op verschillende tijdstippen of op verschillende apparaten ondertekenen. Een coördinator bouwt het bericht, elke vereiste ondertekenaar ondertekent exact dezelfde geserialiseerde berichtbytes, en de coördinator verifieert en voegt de handtekeningen samen vóór het indienen.

Handtekeningen autoriseren bytes, geen intentie

Als je de fee payer, de blockhash, de volgorde van instructies, de accountlijst of een deel van de instruction data wijzigt, ontstaat een ander bericht en worden alle reeds verzamelde handtekeningen ongeldig.

Verloop van gedeeltelijk ondertekenen

  1. Kom overeen welke transactie-instructies worden uitgevoerd en wie de transactiekosten betaalt.
  2. Stel de geldigheidsduur van de transactie en de fee payer in.
  3. Serialiseer het bericht één keer. Beschouw die bytes als onveranderlijk.
  4. Verstuur de berichtbytes en een voor mensen leesbare samenvatting naar elke ondertekenaar.
  5. Verzamel en verifieer elke Ed25519-handtekening aan de hand van dezelfde berichtbytes.
  6. Koppel de handtekeningen aan de adressen van de vereiste ondertekenaars.
  7. Controleer of elke vereiste handtekening aanwezig en geldig is, en dien de transactie vervolgens in.

Volledig voorbeeld

De fee payer en de SOL-afzender hieronder ondertekenen onafhankelijk van elkaar. De coördinator verifieert beide handtekeningen, voegt ze samen en dient de voltooide transactie in.

Het voorbeeld gebruikt ruwe Ed25519-ondertekening om de grens tussen de coördinator en elke ondertekenaar expliciet te maken. Een wallet, hardwareapparaat, bewaardienst of offline ondertekenaar kan elke lokale keypair vervangen, zolang die exact dezelfde berichtbytes ondertekent.

Zet het bericht vast vóór het ondertekenen

Elke handtekening dekt het geserialiseerde transactiebericht. Het bericht bevat het volgende:

  • de fee payer
  • de recente blockhash of durable nonce
  • elk programma- en accountadres
  • ondertekenaar- en schrijfmachtigingen van accounts
  • de volgorde van instructies en de instruction data

Bouw eerst deze velden, serialiseer het bericht één keer en verspreid die bytearray onder alle ondertekenaars. Het is handig om bij elk ondertekeningsverzoek een digest van het bericht op te slaan, zodat de coördinator een handtekening kan weigeren die voor een ander bericht is teruggestuurd.

Deserialiseer een bericht niet om het te wijzigen en verwacht niet dat eerder verzamelde handtekeningen geldig blijven. Zelfs een wijziging die operationeel lijkt, zoals het vervangen van een verlopen blockhash of het wijzigen van de fee payer, vereist dat elke ondertekenaar opnieuw tekent.

De fee payer coördineren

De fee payer is altijd een vereiste ondertekenaar en moet worden gekozen voordat het bericht wordt vastgezet. Controleer of het account voldoende SOL heeft voor de basisvergoeding en eventuele prioriteitsvergoeding. Als een sponsor of backend de vergoeding betaalt, zet dan dat adres in het bericht voordat je de handtekening van de gebruiker verzamelt; als je de sponsor later toevoegt, veranderen de ondertekende bytes.

De coördinator moet controleren of een binnenkomende handtekening bij een adres hoort dat als vereiste ondertekenaar is opgenomen. Accepteer nooit zomaar een willekeurige publieke sleutel en voeg die toe aan de transactie.

De geldigheidsduur van de transactie beheren

Een transactie met een recente blockhash is alleen geldig zolang de blockhash in de recente blockhash-wachtrij van de validator staat. Schat voordat je een ondertekenproces met meerdere partijen start in of alle ondertekenaars kunnen reageren vóór lastValidBlockHeight.

Als de blockhash verloopt, bouw dan een nieuw bericht met een nieuwe blockhash en verzamel alle handtekeningen opnieuw. Gebruik voor workflows die langer kunnen duren of offline ondertekenaars omvatten een durable nonce. Een durable nonce omzeilt het venster van de recente blockhash, maar als je die nonce vooruitzet of anderszins verbruikt, wordt de openstaande transactie alsnog ongeldig.

Verifiëren vóór het indienen

Voor elke teruggestuurde handtekening:

  1. Verifieer de handtekening aan de hand van de vastgezette berichtbytes en de publieke sleutel van de verwachte ondertekenaar.
  2. Koppel de handtekening aan de plek van die ondertekenaar in de handtekeningenarray van de transactie.
  3. Controleer of de samengestelde transactie geldige handtekeningen heeft voor elke vereiste ondertekenaar.
  4. Dien de geserialiseerde transactie in zonder het bericht opnieuw op te bouwen.

Bevestig na het indienen met dezelfde informatie over de geldigheidsduur die in het ondertekende bericht was opgenomen. Als de bevestiging een verlopen blockhash of verbruikte nonce meldt, probeer het dan niet opnieuw met een gewijzigde transactie; start het ondertekenproces opnieuw.

Is this page helpful?

Inhoudsopgave

Pagina Bewerken
© 2026 Solana Foundation. Alle rechten voorbehouden.