Glossario / Transazioni e commissioni
SIGHASH_ANYONECANPAY
- Che cos'è SIGHASH_ANYONECANPAY?
- SIGHASH_ANYONECANPAY è un modificatore che elimina dal digest ogni altro input, così una firma copre solo il singolo bitcoin che spende e altri possono aggiungersi liberamente alla transazione.
Non è un modo a sé. Il flag ha il valore 128 e si aggiunge a uno dei tre modi di base, producendo 129, 130 o 131, e ogni combinazione risponde a una domanda diversa su cosa il firmatario è disposto a lasciare che estranei cambino. Il crowdfunding e i mercati di ordinals sono i due ambiti in cui dimostra la sua utilità.
Come funziona
Attivare il modificatore riduce il lato degli input del digest a una sola voce: l'outpoint speso, il suo numero di sequenza e lo script che sblocca.
Ogni altro input scompare dal calcolo. Un firmatario che opera con questa regola non sa né gli importa quante altre persone abbiano contribuito con bitcoin, in quale ordine lo abbiano fatto o se ne arriveranno altri in seguito, e aggiungere un input più tardi non può invalidare una firma fatta prima. Questa proprietà è l'intera funzionalità, ed è ciò che rende le firme raccoglibili: più persone possono firmare in isolamento, in momenti diversi, su macchine diverse, e qualcuno può raccogliere i pezzi in un'unica transazione valida.
Il modo di base governa ancora il lato delle uscite, e le tre combinazioni si comportano in modo molto diverso.
- 129, il modificatore con la regola di tutte le uscite, significa "il mio bitcoin entra e i pagamenti devono essere esattamente questa lista". Si possono aggiungere input, non uscite.
- 130, il modificatore con la regola senza uscite, è la firma più debole che il protocollo consenta: un bitcoin entra e nessuna dichiarazione su dove finisca qualcosa.
- 131, il modificatore con la regola di una sola uscita, significa "il mio bitcoin entra e io devo ricevere l'uscita al mio indice". Tutto il resto resta aperto.
Dove lo vedi
Due costruzioni lo usano sul serio, ed entrambe dipendono dalla possibilità che estranei aggiungano fondi senza rompere ciò che è già firmato.
La prima è il contratto di garanzia, la versione bitcoin di una promessa di finanziamento collettivo. Ogni sostenitore firma con valore 129 su una lista fissa di uscite che contiene il pagamento del progetto, e ogni promessa è un input. La transazione diventa valida solo quando gli input promessi coprono le uscite, così l'obiettivo di raccolta si fa rispettare da solo con l'aritmetica invece che con un agente di deposito a garanzia, e una campagna che resta sotto non produce mai una transazione valida. Promettere non costa nulla e ritirarsi non costa nulla, perché i bitcoin non si muovono mai.
La seconda è l'offerta prefirmata di un mercato. Un venditore firma con valore 131 sulla propria uscita di iscrizione o di runa e sul prezzo che vuole, pubblica il risultato come transazione parzialmente firmata, e qualsiasi acquirente la completa con i propri input, il proprio resto e una commissione. Nessun contratto di annuncio, nessun custode e nessuna controparte di cui fidarsi per la liquidazione stessa.
Arriva con un avvertimento. Un valore 130 fermo in una mempool pubblica è denaro gratis per chi lo prende per primo, e solo un bit lo separa dalle combinazioni sicure. Se esamini codice di firma, verifica che il modo di base sia una costante scritta nel codice e che il modificatore sia l'unica parte che è consentito variare.
Leggere il byte del flag
Dividi il byte del flag sighash nelle sue due metà e smette di essere criptico. I bit bassi danno il modo di base: 1 per tutte le uscite, 2 per nessuna, 3 per una sola uscita corrispondente. Il bit alto, che vale 128, è il modificatore. Quindi una firma che termina in 81 copre tutto tranne gli altri input, 83 è la regola del mercato, e un semplice 01 senza modificatore è il pagamento ordinario che il tuo wallet produce ogni volta che spendi.