BIP 118 (ANYPREVOUT)

Difficoltà: avanzato

Argomento: tecnologia


DEFINIZIONE

Anyprevout, a volte abbreviato con la sigla APO, è un modo per rendere più flessibile la creazione di transazioni Bitcoin.

In una transazione Bitcoin normale, è necessario specificare esattamente quale output precedente si vuole utilizzare come input in ingresso. Con Anyprevout, invece, è possibile firmare una transazione senza fare riferimento ad un output specifico in ingresso e poi aggiungere dinamicamente qualsiasi output con la firma corrispondente in un secondo momento. Ciò significa che è possibile creare transazioni più flessibili, indicando ad esempio dove si vuole ricevere il pagamento e poi rendere disponibile questa transazione a chi può e vuole completandola indicando da dove vengono presi i fondi da trasferire.

BIP-118 SIGHASH_ANYPREVOUT (chiamata in precedenza SIGHASH_NOINPUT) è la proposta di soft-fork che consente di firmare una transazione senza fare riferimento a uno specifico output precedente. Qualsiasi output con una firma corrispondente può essere aggiunto dinamicamente in seguito.

È stata implementata nella testnet da dicembre 2022.

SIGHASH_ANYPREVOUT è un nuovo tipo di Sighash flag: i Sighash flag si trovano all'interno delle transazioni Bitcoin per indicare quale parte della transazione è firmata esattamente dalle chiavi private richieste. Può trattarsi di (quasi) l'intera transazione o di parti specifiche di essa. Firmare solo parti specifiche consente una certa flessibilità nel modificare la transazione anche dopo che è stata firmata, cosa che a volte può essere utile.

Con questa proposta, Sighash flag Anyprevout firma la maggior parte della transazione, ma non gli input. Ciò significa che gli input possono essere scambiati, purché i nuovi input siano ancora compatibili con la firma.

Un uso potenziale può essere relativo ai protocolli off-chain come Lightning Network che sono basati sullo scambio di transazioni che non vengono trasmesse subito alla rete Bitcoin per rinegoziare lo stato finale che dovrebbe essere regolato on-chain.

In alcuni casi si può voler rispondere a una determinata transazione che viene vista on-chain con una reazione predeterminata sotto forma di un'altra transazione.

Spesso questa risposta può essere richiesta per una serie di transazioni diverse che vengono viste on-chain, ma poiché le firme di input nella transazione di risposta sono vincolate a fare riferimento all'esatta transazione a cui si sta reagendo, ciò significa che deve essere creata una nuova firma per ogni possibile transazione a cui si desidera essere in grado di reagire.

La BIP 118 introduce un nuovo tipo di chiave pubblica che modifica il comportamento dell'algoritmo di digest delle transazioni utilizzato nella creazione e nella verifica della firma, escludendo il commitment nei confronti dell'output precedente (e, opzionalmente, del witness script e del valore). L'eliminazione di questo commitment consente il rebinding dinamico di una transazione firmata a un altro output precedente che richiede l'autorizzazione della stessa chiave.

Il rebinding dinamico è opt-in a causa dell'utilizzo di un tipo di chiave pubblica separata, e l'ampiezza delle transazioni a cui la firma può essere legata (rebound) può essere ulteriormente limitata utilizzando chiavi diverse, effettuando il commitment sullo script che viene speso nella firma, utilizzando importi diversi tra gli UTXO, utilizzando valori diversi di nSequence nella transazione di spesa, o utilizzando l'opcode codeseparator per impegnarsi sulla posizione nello script.

Per la proposta di layer Eltoo per Lightning Network è necessario un sighash di tipo noinput.


aggiornato il 2022-09-30