Anex:Script (Bitcoin)
Script és el llenguage usat per a descriure els scripts de Bitcoin, usats per a bloquejar/desbloquejar de les transaccions. Qualsevol combinació d'un script de desbloquege i un de bloqueig que finalise en un valor de VERDADER en la pila indica que la condició de la UTXO es complix i per tant és vàlit, en qualsevol atre cas és inválido. Per eixemple si tenim el script de bloqueig 3 OP_ADD 4 OP_EQUAL este es pot satisfer en el script de desbloquege 1.[1]
Característiques
El llenguage té les següents característiques:[1][2]
- Simple
- Llimitat. El llenguage no és Turing complet degut a que no tenen cicles ni controls de fluix complexos lo que assegura que sempre termine. Per esta raó no és possible tindre bombes llògiques que ocasionen un atac de refús de servici en la ret Bitcoin.
- Requerix un processament mínim
- Pot ser implementat en una àmplia gama de dispositius.
- No hi ha un estat anterior o posterior a l'eixecució del script. Tota l'informació necessària per a eixecutar el script deu estar continguda en ell.
- És un llenguage que accedix a la memòria basant-se en una pila. Per tant no hi ha variables. Per a fer més intuitvo l'us de la pila han decidit usar notació polaca inversa . Els valors es van ficant en la pila i els operadors fiquen o trauen un o més paràmetros de la pila, modifiquen els paràmetros i finalment poden ficar un resultat en la pila. Per eixemple l'instrucció OP_ADD trau dos elements de la pila, els suma i fica el resultat en la pila. Al final del script, el cim de la pila és el valor de tornada. Script pot usar dos piles: La principal i l'alternativa. L'alternativa s'usa per a almagasenar senyes de càlculs de passos intermijos de forma similar a la tecla memòria de les calculadores.
- El seu funcionament és similar al del llenguage ensamblador eixecutat sobre una CPU little-endian en un sol registre de memòria de 16 bits. Bitcoin implementa el seu processador virtual per a interpretar el còdic màquina Script.
Còdics
El llenguage té una série de còdics definits. Cada còdic té associat un identificador del tipo OP_<nom> i un valor numèric al que se li crida Opcode. Podem agrupar els còdics segons el tipo d'utilitat que tenen:[3]
- Constants
Identificador Valor hexadeciml Entrada Eixida Descripció OP_0, OP_FALSE 0x00 Res Res Es posen a 0's en el cim de la pila. 0x01-0x4b (especial) senyes Els pròxims bytes de opcode és una senya que cal a posar en el cim de la pila OP_PUSHDATA1 0x4c (especial) senyes El pròxim byte conté el número de bytes per a ser posats en el cim de la pila. OP_PUSHDATA2 0x4d (especial) senyes Els pròxims dos bytes conté el número de bytes que cal posar en el cim de la pila. OP_PUSHDATA4 0x4i (especial) senyes Els pròxims 4 bytes contenen el número de bytes que cal posar en el cim de la pila. OP_1NEGATE 0x4f Res -1 El número -1 és posat en el cim de la pila OP_1-OP_16 0x51-0x60 Res. 1-16 El número de l'identificador del còdic (1-16) és posat en el cim de la pila.
- Control de fluix
Identificador Valor hexadeciml Entrada Eixida Descripció OP_NOP 0x61 Res Res No fa res. OP_IF 0x63 <expressió> if [sentència] [else [sentència]] endif Si el cim de la pila no és fals, eixecuta les sentències. El cim de pila és borrada. OP_NOTIF 0x64 <expressió> notif [sentència] [else [sentència]] endif Si el cim de la pila és falsa, eixecuta sentències. El cim de la pila és borrada. OP_ELSE 0x67 <expressió> if [sentència] [else [sentència]] endif Si la precedent OP_IF o OP_NOTIF o OP_ELSE no va ser eixecutada llavors les sentències estes sentències són eixecutades. Si la precedent OP_IF, OP_NOTIF o OP_ELSE va ser ejecutanda llavors no eixecuta estes sentències. OP_ENDIF 0x68 <expressió> if [sentència] [else [sentència]] endif Fi de bloc if/else. Tots els blocs tenen que acabar, o la transacció és inválida. Un OP_ENDIF sense un OP_IF anterior és inválido. OP_VERIFY 0x69 True / false Res / fallo Marca la transacció com inválida' si el cim de la pila no és true. OP_RETURN Res fallo Marca la transacció com inválida.
- Pila
Identificador Valor hexadeciml Entrada Eixida Descripció OP_TOALTSTACK 0x6b x1 (alt)x1 Posa l'entrada damunt de la pila alternativa. Borra l'entrada de la pila principal. OP_FROMALTSTACK 0x6c (alt)x1 x1 Posa l'entrada, de la pila alternativa, i la posa en el cim de la pila principal. Borra l'entrada de la pila alternativa. OP_IFDUP 0x73 x x / x x Si el cim de la pila no és zero, la duplica. OP_DEPTH 0x74 Res <Stack size> Posa el número d'artículs de la pila en la pila OP_DROP 0x75 x Res Lleva el cim de la pila. OP_DUP 0x76 x x x Duplica el cim de la pila. OP_NIP 0x77 x1 x2 x2 Borra el segon element de la pila. OP_OVER 0x78 x1 x2 x1 x2 x1 Còpia el segon element de la pila al cim de la pila. OP_PICK 0x79 xn ... x2 x1 x0 <n> xn ... x2 x1 x0 xn El n-element de la pila ho copia al cim. OP_ROLL xn ... x2 x1 x0 <n>
... x2 x1 x0 xn El n-element de la pila és mogut al cim. OP_ROT 0x7b x1 x2 x3 x2 x3 x1 Els últims tres elements de la pila són rotados a l'esquerra. OP_SWAP 0x7c x1 x2 x2 x1 Els dos últims elements de la pila són intercanviats. OP_TUCK 0x7d x1 x2 x2 x1 x2 L'element del cim de la pila és copiat i insertat abans del segon element. OP_2DROP 0x6d x1 x2 Res Borra els dos últims elements de la pila. OP_2DUP 0x6i x1 x2 x1 x2 x1 x2 Duplica els dos últims elements de la pila. En les dos celes anteriors s'indica el canvi OP_3DUP 0x6f x1 x2 x3 x1 x2 x3 x1 x2 x3 Duplica els tres últims elements de la pila. En les dos celes anteriors s'indica el canvi OP_2OVER 0x70 x1 x2 x3 x4 x1 x2 x3 x4 x1 x2 Canvia elements de la pila segons les dos celes anteriors OP_2ROT 0x71 x1 x2 x3 x4 x5 x6 x3 x4 x5 x6 x1 x2 Intercanvia posició d'elements de la pila segons les dos celes anteriors OP_2SWAP 0x72 x1 x2 x3 x4 x3 x4 x1 x2 Intercanvia posició d'elements de la pila segons les dos celes anteriors
- Empalmar
Identificador Valor hexadeciml Entrada Eixida Descripció OP_CAT 0x7i x1 x2 out deshabilitado[nota 1] OP_SUBSTR 0x7f in begin size out deshabilitado[nota 1] OP_LEFT 0x80 in size |out
deshabilitado[nota 1] OP_RIGHT 0x81 in size |out
deshabilitado[nota 1] OP_SIZE 0x82 in in size |Posa la llongitut del script en el cim de la pila.
- Llògica de bits
Identificador Valor hexadeciml Entrada Eixida Descripció OP_INVERT 0x83 in out deshabilitado[nota 1] OP_AND 0x84 x1 x2 out deshabilitado[nota 1] OP_OR 0x85 x1 x2 out deshabilitado[nota 1] OP_XOR 0x86 x1 x2 out deshabilitado[nota 1] OP_EQUAL 0x87 x1 x2 True / false Torna 1 si les entrades són iguals i 0 en un atre cas. OP_EQUALVERIFY 0x88 x1 x2 Res / fallo És lo mateix que OP_EQUAL, pero eixecuta OP_VERIFY despuix.
- Aritmètiques
- Nota: Les entrades estan llimitades a sancers de 32 bits en signe, pero pot haver desbordament d'eixida. Si un valor d'entrada per a algun dels comando és més gran que 4 bytes, el script abortarà i fallarà.
Identificador Valor hexadeciml Entrada Eixida Descripció OP_1ADD 0x8b in out S'incrementa en un l'entrada. OP_1SUB 0x8c in out Es resta 1 a l'entrada. OP_2MUL 0x8d in out deshabilitado[nota 1] OP_2DIV 0x8i in out deshabilitado[nota 1] OP_NEGATE 0x8f in out Es canvia el signe de l'entrada OP_@ABS 0x90 in out El signe de l'entrada es posa a positiu OP_NOT 0x91 in out Torna 1 si l'entrada és 0, en un atre cas torna 0 OP_0NOTEQUAL 0x92 in out Torna 0 si l'entrada és 0, en un atre cas torna 1 OP_ADD 0x93 a b |out
Se sumixca a i b OP_SUB 0x94 a b |out
A a se li resta b. OP_MUL 0x95 a b |out
deshabilitado[nota 1] OP_DIV 0x96 a b |out
deshabilitado[nota 1] OP_MOD 0x97 a b |out
deshabilitado[nota 1] OP_LSHIFT 0x98 a b |out
deshabilitado[nota 1] OP_RSHIFT 0x99 a b |out
deshabilitado[nota 1] OP_BOOLAND a b |out
Si a i b no són 0, l'eixida és 1. En un atre cas serà 0. OP_BOOLOR 0x9b a b |out
Si a o b no són 0, l'eixida és 1. En un atre cas serà 0. OP_NUMEQUAL 0x9c a b |out
Torna 1 si els números són iguals, torna 0 en un atre cas. OP_NUMEQUALVERIFY 0x9d a b |Res / fallo
És lo mateix que OP_NUMEQUAL, pero eixecutant OP_VERIFY despuix. OP_NUMNOTEQUAL 0x9i a b |out
Torna 1 si els números no són iguals, 0 en un atre cas. OP_LESSTHAN 0x9f a b |out
Torna 1 si a és menor que b, 0 en un atre cas. OP_GREATERTHAN 0xa0 a b |out
Torna 1 si a és més gran que b, 0 en un atre cas. OP_LESSTHANOREQUAL 0xa1 a b |out
Torna 1 si a és menor o igual que b, 0 en un atre cas. OP_GREATERTHANOREQUAL 0xa2 a b |out
Torna 1 si a és més gran o igual que b, 0 en un atre cas. OP_MIN 0xa3 a b |out
Torna el menor valor entre a i b. OP_MAX 0xa4 a b |out
Torna el major valor entre a i b. OP_WITHIN 0xa5 x min max out Devuleve 1 si x està en el ranc especificat (el valor de l'esquerra està inclós) i 0 en un atre cas.
- Criptográficas
Identificador Valor hexadeciml Entrada Eixida Descripció OP_RIPEMD160 0xa6 in A l'entrada se li aplica la funció# RIPEMD-160. OP_SHA1 0xa7 in A l'entrada se li aplica la funció# SHA-1. OP_SHA256 0xa8 in A l'entrada se li aplica la funció# SHA-256. OP_#160 0xa9 in A l'entrada se li aplica dos funcions#. Primer SHA-256 i despuix RIPEMD-160. OP_#256 0xaa in A l'entrada se li aplica dos voltes la funció# SHA-256. OP_CODESEPARATOR 0xab Res Res Marca el començ de les senyes firmades. Totes les operacions de chequeo de firma seran de les senyes que hi ha despuix de l'última volta que es va marcar en OP_CODESEPARATOR. OP_CHECKSIG 0xac sig pubkey True / false Els distints elements de la transacció (eixides, entrades i script des del més recent OP_CODESEPARATOR fins al final) se'ls aplica una funció#. La firma usada per OP_CHECKSIG té que s'una firma vàlida en este#i la clau pública. Si no és torna 1, en un atre cas devuleve 0. OP_CHECKSIGVERIFY 0xad sig pubkey Res / fallo És lo mateix que OP_CHECKSIG, pero OP_VERIFY és eixecutat despuix. OP_CHECKMULTISIG 0xae x sig1 sig2 ... <number of signatures> pub1 pub2 <number of public keys> True / False Compara cada firma contra cada una de les claus públiques fins a trobar una que s'ajuste. El procés de busca es repetix fins que totes les firmes hagen segut checkeades o no hi ha suficients claus públiques per a produir un resultat exitós. Totes les firmes necessiten ajustar-se en una clau pública. Les claus públiques solament són comprovades una volta si falla alguna comparació de firma. Per tant la firma tindrà que estar localisada en el scriptSig en el mateix orde que la seua corresponent clau pública va ser localisada en el scriptPubKey o redeemScript. Si totes les firmes són vàlides tornarà 1, 0 en un atre cas. Per un error és borrat de la pila un valor adicional no usat. OP_CHECKMULTISIGVERIFY 0xaf x sig1 sig2 ... <number of signatures> pub1 pub2 ... <number of public keys> Res / fallo És lo mateix que OP_CHECKMULTISIG, pero eixecutant despuix OP_VERIFY.
- Bloqueig de temps
Identificador Valor hexadeciml Entrada Eixida Descripció OP_CHECKLOCKTIMEVERIFY (prèviament OP_NOP2) 0xb1 x x / falle Marca la transacció com inválida si l'element cap de la pila és més gran que el camp nLockTime de la transacció, en un atre cas el script d'evaluació continua com si s'haguera eixecutat una operació OP_NOP. La transacció és també inválida si: 1 La pila està buida, o 2 el cap de la pila és un element negatiu o 3 si l'element del cap de la pila és major o igual a 500000000 mentres el nLockTime és menor de 500000000 o viceversa o 4 si el camp nSequence de l'entrada és igual a 0xffffffff. OP_CHECKSEQUENCEVERIFY (prèviament OP_NOP3) 0xb2 x x / falle Marca la transacció com inválida si el temps de bloqueig relatiu de l'entrada no és igual o és més gran que el valor de l'element del cim de la pila.
- Pseudocódigos
- Són usades internament per a assistir en l'ajust de transaccions. Són inválidas si són usades en els actuals scripts.
Identificador Valor hexadeciml Descripció 0xfd Representa una clau pública usant la funció#OP_#160. OP_PUBKEY 0xfe Representa una clau pública compatible en OP_CHECKSIG. OP_INVALIDOPCODE 0xff S'ajusta en qualsevol opcode que no estiga encara assignat.
- Còdics reservats
- Qualsevol opcode no assignat està també reservat. Usar un opcode no assignat fa la transacció inválida
Identificador Valor hexadeciml Quan s'usa... OP_RESERVED 0x50 La transacció és inválida a menos que ocórrega en una branca d'OP_IF no eixecutada OP_VORE 0x62 La transacció és inválida a menos que ocórrega en una branca d'OP_IF no eixecutada OP_VERIF 0x65 La transacció és inválida inclús quan ocórrega en una branca no eixecutada d'OP_IF OP_VERNOTIF 0x66 La transacció és inválida inclús quan ocórrega en una branca no eixecutada d'OP_IF OP_RESERVED1 0x89 La transacció és inválida a menos que ocórrega en una branca d'OP_IF no eixecutada OP_RESERVED2 La transacció és inválida a menos que ocórrega en una branca d'OP_IF no eixecutada
OP_NOP1, OP_NOP4-OP_NOP10 0xb0, 0xb3-0xb9 És ignorada, no es marca la transacció com inválida.
Scripts
Despuix de descobrir-se vàries vulnerabilitats importants en les primeres versions de Bitcoin es va incloure una verificació la qual solament accepta transaccions de la ret si les operacions de firma i verificació de firma complixen en un conjunt de plantilles les quals es consideren segures i si el restant de les operacions no s'ixen d'un conjunt de regles que garantisen un comportament adequat de la ret. Esta verificació està codificada en la funció IsStandard() i totes les transaccions que la complixquen es diu que són transaccions estàndar. Estes llimitacions podrien canviar o elminarse en qualsevol moment. Fins a llavors hi ha 5 tipos de transaccions estàndar (Pay-To-Public-Key-#, pay-to-pubkey, pay-to-multisig, pay-to-script-# i data output) que són les úniques acceptades pel client de referència i la majoria dels miners que usen el client de referència. Encara que és possible crear transaccions no estàndar que contenen scripts que no són estàndar, tens que trobar un miner que no seguixca estes llimitacions per a que mine la transacció en un bloc.[1][4]
Pay-To-Public-Key-#
Este tipo de transacció també s'identifica per les seues sigles P2PKH. La majoria de les transaccions de Bitcoin són d'este tipo. Contenen un script de bloqueig que assigna l'eixida a una direcció generada a partir d'una clau pública. Les direccions generades a partir d'una clau pública una volta codificades en base58check comencen en 1. Les eixides bloquejades per un script P2PKH poden ser desbloquejades en presentar la clau pública i una firma digital creada per la corresponent clau privada.[1]
- Script de bloqueig (scriptPubKey)
- @OP_DUP OP_#160 <direcció> OP_EQUALVERIFY OP_CHECKSIG
- Script de desbloquege (scriptSig)
- <firma_k> <K_pub>
Eixemple
Vejam un eixemple d'operació.[3] Siga el script de bloqueig:
76 A9 14 89 AB CD EF AB BA AB BA AB BA AB BA AB BA AB BA AB BA AB BA 88 AC OP_DUP OP_#160 Bytes per a pila Senyes per a pila OP_EQUALVERIFY OP_CHECKSIG
El processament seria:
Situació final de la pila Situació d'evaluació del script. Descripció de l'operació de la pila Buida. <sig> <pubKey> OP_DUP OP_#160 <pubKey#> OP_EQUALVERIFY OP_CHECKSIG Es combinen el script de bloqueig i el de desbloquege <sig> <pubKey> OP_DUP OP_#160 <pubKey#> OP_EQUALVERIFY OP_CHECKSIG Les constants són afegides a la pila <sig> <pubKey> <pubKey> OP_#160 <pubKey#> OP_EQUALVERIFY OP_CHECKSIG L'element cim de la pila és duplicat <sig> <pubKey> <pub#A> <pubKey#> OP_EQUALVERIFY OP_CHECKSIG Al cim de la pila se li aplica la funció#. <sig> <pubKey> <pub#A> <pubKey#> OP_EQUALVERIFY OP_CHECKSIG S'afig constant <sig> <pubKey> OP_CHECKSIG Es verifica l'igualtat entre els dos primers elements de la pila. true Buit. Es verifica la firma formada pels dos elements de la pila.
Pay-to-pubkey
És una forma simplificada del script P2PKH. En ella s'especifica la clau pública. Era amprada anteriorment, seguix sent vàlida pero es recomana amprar P2PKH per a transaccions noves.[1]
- Script de bloqueig (scriptPubKey)
- <K_pub> OP_CHECKSIG
- Script de desbloquege (scriptSig)
- <firma_k>
pay-to-multisig
Sigles P2M. Els scripts de multifirma establixen una condició a on N claus públiques es llisten en el script de bloqueig i es deuen proporcionar per lo manco M firmes en el script de desbloquege. Es té el llímit de 16 claus públiques, lo que significa que es pot elegir valors N i M que complixquen 1<=N<=M<=16. Els valors de M i N s'especifiquen per mig de còdics d'operació de la forma OP_1, OP_2,... OP_16. Per un error per un el script de desbloquege deu iniciar en OP_0. Les firmes deuen proporcionar-se en el mateix orde que les corresponents claus públiques.[1]
- Script de bloqueig (scriptPubKey)
- <M> <KA_pub> [KB_pub] [KC_pub] ..... <N> OP_CHECKMULTISIG
- Script de desbloquege (scriptSig)
- @OP_0 <firmaA_k> <firmaB_k> ...
pay-to-script-#
Sigles P2SH. Afegida en 2012. Permet simplificar l'us de scripts en transaccions complexes. Per eixemple, encara que l'us de la multifirma és molt convenient, es tenen que proporcionar molta informació a qui realisa el pagament: el valor N, el de M, cada una de les claus públiques i l'orde de les mateixes. Tot açò fa que el script de bloqueig es torne molt llarc i que siga fàcil cometre errors. Ademés no totes les carteres accepten l'us de multifirma. Per un atre costat, les comissions es basen en el tamany de la transacció, perque es deurà pagar una major comissió.[1]
En P2SH les transaccions complexes se simplifiquen en substituir un script pel seu valor#. A partir de valor#es genera una direcció la qual ya codificada en base58check escomença en 3. En el moment que es vullga amprar una UTXO que ampra P2SH es deu presentar el script de bloqueig que genera el valor#aixina com el corresponent script de desbloquege.[1]
- Script de bloqueig (scriptPubKey)
- @OP_#160 <RIPEMD-160(SHA 256(script de bloqueig))> <OP_EQUAL>
- Script de desbloquege (scriptSig)
- <script de desbloquege> <script de bloqueig>
data output
Les propietats d'inmutabilidad i transparència de la cadena de blocs de Bitcoin ha inspirat el desenroll de tècniques que permeten el transport de senyes en les seues transaccions en la finalitat d'implementar noves aplicacions més allà de simplement realisar pagaments.[5] Per eixemple es podia demostrar que un document s'havia creat abans de certa data obtenint el valor#i indicant la seua posició en la cadena de blocs. Cóm inicialment no hi havia cap mecanisme estàndar que soportara eixa funcionalitat, es va escomençar a usar la direcció en una eixida per a introduir eixes senyes. D'esta forma en acabant de que la transacció era minada esta informació estava sempre en la cadena de blocs. Açò produïa que es pergueren satoshis ya que no era possible generar un script de desbloquege. Ademés en ser UTXOs estan sent monitoreades pels nodos de la ret lo que consumix recusros. Aparte de fer que el tamany de la cadena de blocs s'incremente en informació que no és del sistema. Per a proporcionar una alternativa menys destructiva en la qual es poguera indicar als nodos que no requerixen processar l'informació d'eixa eixida, en la versió 0.9 de Bitcoin es va convertir en transacció estàndar l'instrucció OP_RETURN, la qual ya existia. A partir d'eixe moment tots els nodos varen escomençar a transmetre transaccion OP_RETURN no confirmades. OP_RETURN solament va ser admés per a evitar alternatives pijors encara que el seu us no és recomanat.[1]
El número d'eixides que contenen un script de bloqueig OP_RETURN està llimitat a una per transacció. És necessari pagar comissió per a que la transacció siga inclosa.[1] El llímit per a almagasenar senyes en el còdic OP_RETURN va ser originalment de 80 bytes. En la versió 0.9.0 per primera volta es va acceptar la transacció com a estàndar sempre que tinguera com a màxim 40 bytes de senyes. Açò va tindre gran polèmica. En la versió 0.10.0 els nodos podien elegir si acceptaven o no transaccions OP_RETURN i seleccionaven un màxim per al tamany de les senyes. En la versió 0.11.0 es va estendre el llímit de senyes a 80 bytes, i en la versió 0.12.0 es va estendre a un màxim de 83 bytes. Per estos llímits d'espai quan es requerixen molt espai de senyes es requerix partir en moltes transaccions lo que obliga a pagar més comissions[5]
Eixemples d'aplicacions d'introduir senyes en la cadena de blocs de Bitcoin:[5]
- Permetre rastrejar la propietat d'un actiu digital. En la cadena de blocs es representa actius per a permet certificar la propietat i les transferències d'actius. En una transacció es pot especificar el valor, la cantitat d'actiu transferida, el nou propietari etc. Eixemples d'aplicacions/protocols que realisen este tipo de servici: Colu, Coinspark, OpenAssets, Omni, Counterparty.
- Notaria de documents. Protocols per a certificar la propietat i sagellat de temps d'un document. Un usuari pot publicar el#d'un document en una transacció i d'esta forma pot provar la seua existència i integritat. De forma similar les firmes digitals poden ser usades per a certificar la propietat. Eixemples d'aplicacions/protocols que realisen este tipo de servici: Factom, Stampary, Proof of Existence, Blocksign, CrytoCopyright, Stampd, Bitproof, ProveBit, Remembr, OriginalMy, LaPreuve, Nicòsia, Chainpoint i Diplomar.
- Protocols per a declarar drets d'accés i drets de còpia sobre archius d'art digitals com a fotos o música. En este tipo d'aplicacions, a diferència dels servicis de notaria, normalment es necessita tindre la colecció dels archius i es requerixen interaccions en els usuaris. Per eixemple és freqüent que l'aplicació faça d'intermediari entre el productor i el consumidor. Eixemples d'aplicacions/protocols que realisen este tipo de servici Monegraph, Blockai, Ascribe.
- Atres usos com per eixemple almagasenar mensage de text curt en la cadena de blocs (com fa per eixemple Eternity Wall) o proporcionar un almagasenament clau-valor com a servici per a implementar protocols més complexos (com fa per eixemple Blockstore)
És habitual que un protocol/aplicació marque els primers bytes de les senyes en cert valor per a indicar que es referixen a dit protocol.[5]
- Script de bloqueig (scriptPubKey)
- @OP_RETURN <senyes>
OP_RETURN immediatament marca el script com inválido, garantisant que no hi ha scriptSig que poguera gastar l eixida. D'esta forma pot ser immediatament borrat del conjunt d'UTXO encara que no estiga gastat[3]
Transacció puzle
És una transacció no estàndar en la que es necessita tindre certes senyes de tal forma que en aplicar una funció#de cert valor#;Script de bloqueig (scriptPubKey)
- @OP_#256 <valor#dau> OP_EQUAL
- Script de bloqueig (scriptPubKey)
- <senyes>
Situació final de la pila Situació d'evaluació del script. Descripció de l'operació de la pila Buida. <senyes> OP_#256 <valor#dau> OP_EQUAL <senyes> OP_#256 <valor#dau> OP_EQUAL scriptSig afegit a la pila <valor#calculat> <valor#dau> OP_EQUAL The data is#ed. <valor#calculat> <valor#dau> OP_EQUAL El valor#dau es posa en la pila true Buit. Els valors es comparen i si tot és correcte es posa un
Notes
Referències
- ↑ 1,00 1,01 1,02 1,03 1,04 1,05 1,06 1,07 1,08 1,09 Aspectes de seguritat de Bitcoin i la seua aplicació en una alternativa d'infraestructura de clau pública. Tesis d'Abraham Jesús Basurto Becerra. Centre d'Investigació i d'Estudis Alvançats de l'Institut Politècnic Nacional. Mexico D. F. Decembre de 2015
- ↑ The Bitcoin Script language (pt. 1). Davide De Rosa. 25 de maig de 2015
- ↑ 3,0 3,1 3,2 Script. bitcoinwiki. 8 de juny de 2017
- ↑ Mastering Bitcoin: Unlocking Digital Cryptocurrencies. Andreas M. Antonopoulos. O'Reilly 2015
- ↑ 5,0 5,1 5,2 5,3 An analysis of Bitcoin OP RETURN metadata. Massimo Bartoletti i Livio Pompianu. Università degli Studi vaig donar Cagliari, Cagliari, Itàlia.
- Este artícul conté una traducció derivada de «Anexo:Script (Bitcoin)» de Wikipedia en castellà publicada baix la Llicència de documentació lliure de GNU i la Llicència Creative Commons Reconeiximent-CompartirIgual 4.0 Internacional.