P2PKH & P2MS
Pubblicato da Matteo il
Proseguiamo con l’analisi delle procedure di verifica che esegue Script per sbloccare le UTXO.In questo articolo verifichiamo #P2PKH (Pay To PubKey Hash) e #P2MS (Pay To Multi Signatures).
La figura rappresenta lo script P2PKH che ogni nodo deve eseguire per la verifica della transazione. l’Unlocking script e’ fornito da colui che esegue la transazione come prova di ownership delle UTXO, mentre il Locking script contiene le condizioni necessarie per sbloccarle.
Come prima cosa prendiamo gli elementi contenuti nel Unlocking script e li inseriamo nello stack:
- push Signature.
- push Public Key.
Ora passiamo al Locking script che contiene le istruzioni di verifica per sbloccare le UTXO necessarie alla formalizzazione della transazione:
- OP_DUP esegue una duplicazione dell’ultimo elemento inserito nello stack, nel caso di questo script e’ la Public Key.
- OP_HASH160 esegue le funzioni di #SHA256 e #RIPEMD160 sempre sull’ultimo elemento in top nello stack e pusha il risultato di tali funzioni.
- a questo punto, nell’ Unlocking script troviamo i byte che corrispondono alla #PubKeyHash che ci servira’ nell;istruzione successiva.
- OP_EQUALVERIFY confronta gli ultimi due elementi in top e, nel caso in cui siano uguali, li toglie dallo stack.
- OP_CHECKSIG a questo punto, come per #P2PK , esegue il confronto tra la firma e la chiave pubblica, se e’ OK, puscha 1 nello stack.
A questo punto analizziamo un altra tipologia di verifica che e’#P2MS .
Il procedimento e’ simile a #P2PK solo che ci sono piu’ di una signature nell’ Unlockink script da confrontare con le chiavi pubbliche presenti nel Locking script.
- Come possiamo vedere in figura, nell’Unlocking script sono presenti 2 signature e nel Locking script sono presenti:
- M e’ un codice d’operazione che indica il numero di signature necessarie per lo sblocco.
- Le chiavi pubbliche da confrontare con le signature nel Unlocking script.
- N che sta ad indicare il numero di chiavi pubbliche prensenti nello script.
- OP_CHECKMULTISIG che esegue il confronto tra le signature e le pubkey.
- push Signature.
- push Signature.
- push M.
- push Public Key.
- push Public Key.
- push Public Key.
- push N.
- OP_CHECKMULTISIG a questo punto prende in pop N e sa quante chiavi pubbliche prendere dallo stack, poi prende in pop N in modo tale da sapere quante signature prendere per effetturare il confronto con le chiavi prese in precedenza, in caso di successo pusha 1 nello stack, cioe’ true.
se il confronto della signature con una delle public key non dovesse andare a buon fine, quella chiave non verra’ piu’ presa in considerazione per il controllo sulla prossima signature, quindi e’ buona prassi rispettare l’ordine d’inserimento.
Non notate qualcosa? nello stack e’ rimasta una Public key e 1. sappiamo che per avere la corretta verifica della transazione, nello stack non devono rimanere altri elementi oltre ad 1… e’ per questo che questo tipo di script non viene piu’ utilizzato cosi spesso, in quanto sostituito quasi del tutto dal #P2SH e quando viene utilizzato per evitare lasciti nello stack, nell’Unlocking script, oltre alle istruzioni necessarie, veniva inserito un OP_0 come valore fittizio.