Transakcija s više potpisa
Transakcije s više potpisa (engl.
multisignature/multisig) zathijevaju više od jednog ključa
(potpisa) da se pristupi bitcoinima, npr. dva od tri.
Primjer 2-od-3: scriptSig: <sig1> <sig2>
scriptPubKey: OP_2 <pubKey1> <pubKey2>
<pubKey3> OP_3 OP_CHECKMULTISIG
Za ovu je transakciju potrebno dva od tri potpisa. Prva
transakcija ima dva potpisa koji su potrebni za otključavanje
sredstava na adresi. Za transakciju s više potpisa scriptPubKey dio
ima posebnu konstrukciju. Prvo se navodi koliko je potpisa potrebno
za otključavanje, zatim javni ključevi (ne hashevi kao kod
standardnih), koliko tih ključeva ima te na kraju naredba za
provjeru potpisa.
Stog
|
Naredba
|
Opis
|
<sig2>
<sig1>
|
Potpisi se stavljaju na stog.
|
|
<2>
<sig2>
<sig1>
|
Dodaje se broj potpisa potreban za otključavanje.
|
|
<pubKey3>
<pubKey2>
<pubKey1>
<2>
<sig2>
<sig1>
|
Dodaju se javni ključevi pomoću koji se
verificiraju potpisi. Potpisi i ključevi verificiraju se u
parovima.
|
|
<3>
<pubKey3>
<pubKey2>
<pubKey1>
<2>
<sig2>
<sig1>
|
OP_CHECKMULTISIG
|
Dodaje se broj javnih ključeva. Sad su na stogu svi
potrebni ulazi za provjeru transakcije.
|
<1>
|
Na stogu je rezulat izvršavanja OP_CHECKMULTISIG
naredbe
|
Tehnički gledano, OP_CHECKMULTISIG zbog buga uzima
jedan parametar previše te se u scriptSig prije potpisa dodaje OP_0
kao lažni parametar.
Odd/Event Bet
Slijedi prijmjer kompleksne skripte koja nasumično izvršava podskripte. Može se, na primjer, koristiti za
nasumično određivanje koji korisnik plaća naknadu na transakciju.
Naredba OP_2DUP duplira dva elementa s vrha stoga.
OP_SWAP zamijeni dva elementa s vrha stoga. OP_LEFT zadrži samo n
lijevih znakova. OP_ADD zbraja dva elementa s vrha stoga. OP_MOD je
ostatak pri dijeljenju gornja dva elementa stoga.
Primjer: scriptSig: <Sig><pubKey>
scripPubKey: <7bb...><5aa...> OP_2DUP
OP_HASH160 <aHash> OP_EQUALVERIFY OP_HASH160 <bHASH>
OP_EQUALVERIFY OP_1 OP_LEFT OP_SWAP OP_1 OP_LEFT OP_ADD OP_2
OP_SWAP OP_MOD
OP_IF
OP_ELSE
OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY
OP_CHECKSIG
OP_ENDIF
Stog
|
Naredba
|
Opis
|
<5aa...>
<7bb...>
<pubKey>
<sig>
|
OP_2DUP
|
Na stog se prvo stavljaju svi elementi i gornja se
dva dupliraju.
|
<5aa...>
<7bb...>
<5aa...>
<7bb...>
<pubKey>
<sig>
|
OP_HASH160
|
Hashiranje vrha stoga
|
<aHash>
<aHash>
<7bb...>
<5aa...>
<7bb...>
<pubKey>
<sig>
|
OP_EQUALVERIFY
|
Dodavanje hasha i provjera jesu li jednaki
|
<7bb...>
<5aa...>
<7bb...>
<pubKey>
<sig>
|
OP_HASH160
|
Hashiranje vrha stoga
|
<bHash>
<5aa...>
<7bb...>
<pubKey>
<sig>
|
Dodavanja hasha na stog
|
|
<bHash>
<bHash>
<5aa...>
<7bb...>
<pubKey>
<sig>
|
OP_EQUALVERIFY
|
Provjera jesu li jednaki
|
<5aa...>
<7bb...>
<pubKey>
<sig>
|
Dodaje se 1 na stog
|
|
<1>
<5aa...>
<7bb...>
<pubKey>
<sig>
|
OP_LEFT
|
Uzima se <1> znak hash <5aa...>
|
<5>
<7bb...>
<pubKey>
<sig>
|
OP_SWAP
|
Zamijena dva gornja elementa
|
<7bb...>
<5>
<pubKey>
<sig>
|
Na stog se dodaje <1>
|
|
<1>
<7bb...>
<5>
<pubKey>
<sig>
|
OP_LEFT
|
Uzima se <1> znak hash <7bb...>
|
<7>
<5>
<pubKey>
<sig>
|
OP_ADD
|
Gornja se dva elementa zbrajaju
|
<12>
<pubKey>
<sig>
|
Dodaje se 2
|
|
<2>
<12>
<pubKey>
<sig>
|
OP_SWAP
|
Zamjena
|
<12>
<2>
<pubKey>
<sig>
|
OP_MOD
|
Ostatak pri dijeljenju <12> s <2>
|
<0>
<pubKey>
<sig>
|
OP_IF
|
Ako je na vrhu element isitni != 0 izvrši sljedeću
naredbu
|
<pubKey>
<sig>
|
OP_ELSE
|
Ako nije (=0)
|
<pubKey>
<sig>
|
OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY
OP_CHECKSIG
|
Izvrši ovo
|
Ova skripta ne može se zapravo izvršiti budući da su
naredbe OP_LEFT i OP_MOD onemogućene. Ovdje je stavljena samo kao
primjer kompleksne skripte.
No comments:
Post a Comment