|
20 | 20 | <!-- Icons-->
|
21 | 21 | <link href="node_modules/@coreui/icons/css/coreui-icons.min.css" rel="stylesheet">
|
22 | 22 | <link href="node_modules/flag-icon-css/css/flag-icon.min.css" rel="stylesheet">
|
23 |
| - <link href="node_modules/font-awesome/css/font-awesome.min.css" rel="stylesheet"> |
| 23 | + <link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"> |
24 | 24 | <link href="node_modules/simple-line-icons/css/simple-line-icons.css" rel="stylesheet">
|
25 | 25 | <!-- Main styles for this application-->
|
26 | 26 | <link href="css/style.css" rel="stylesheet">
|
27 | 27 | <link href="vendors/pace-progress/css/pace.min.css" rel="stylesheet">
|
28 | 28 | <!-- Global site tag (gtag.js) - Google Analytics-->
|
29 | 29 | <!-- <script async="" src="https://www.googletagmanager.com/gtag/js?id=UA-118965717-3"></script> -->
|
30 |
| - <script src='https://unpkg.com/bsv'></script> |
| 30 | + <script src='https://unpkg.com/bsv@0.24.3/bsv.min.js'></script> |
31 | 31 | <script>
|
32 | 32 |
|
33 | 33 | // window.dataLayer = window.dataLayer || [];
|
|
122 | 122 | <div class="card">
|
123 | 123 | <div class="card-header"><i class="fa fa-unlock fa-lg mt-4"></i>Unlock Script (aka ScriptSig from Transaction Input vin)</div>
|
124 | 124 | <div class="card-body">
|
125 |
| - <textarea id="txtUnlock">OP_3</textarea> |
| 125 | + <textarea id="txtUnlock" class="colspan=12 w-100">OP_1 OP_2 OP_MUL</textarea> |
126 | 126 | </div>
|
127 | 127 | </div>
|
128 | 128 |
|
129 | 129 | <div class="card">
|
130 | 130 | <div class="card-header"><i class="fa fa-lock fa-lg mt-4"></i>Locking Script (aka ScriptPubKey from Transaction Output vout)</div>
|
131 | 131 | <div class="card-body">
|
132 |
| - <textarea id="txtLock">OP_1 OP_2 OP_ADD OP_EQUAL</textarea> |
| 132 | + <textarea id="txtLock" class="colspan=12 w-100">OP_2 OP_EQUAL</textarea> |
133 | 133 | </div>
|
134 | 134 | </div>
|
135 | 135 |
|
136 |
| - <div> |
137 |
| - <button id="scriptRun">Run Script</button> |
| 136 | + <div class="pb-3"> |
| 137 | + <button id="scriptRun">Run Script</button> |
138 | 138 | </div>
|
139 | 139 |
|
140 | 140 | <div class="card">
|
141 |
| - <div class="card-header">Results</div> |
142 |
| - <div class="card-body"> |
143 |
| - <label type="text" id="txtResults"></label> |
144 |
| - </div> |
| 141 | + <div class="card-header"> |
| 142 | + <span class="pr-3">Results</span> |
| 143 | + <span class="pr-3" id="results-icon"></span> |
| 144 | + <label type="text" id="txtResults"></label> |
145 | 145 | </div>
|
| 146 | + <div id="debugger"></div> |
| 147 | + </div> |
146 | 148 |
|
147 | 149 | </div>
|
148 | 150 | </div>
|
|
165 | 167 | </div>
|
166 | 168 | </footer>
|
167 | 169 | <!-- CoreUI and necessary plugins-->
|
168 |
| - <script src="node_modules/jquery/dist/jquery.min.js"></script> |
| 170 | + <script src="https://code.jquery.com/jquery-3.3.1.min.js" |
| 171 | + integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" |
| 172 | + crossorigin="anonymous"></script> |
169 | 173 | <script src="node_modules/popper.js/dist/umd/popper.min.js"></script>
|
170 | 174 | <script src="node_modules/bootstrap/dist/js/bootstrap.min.js"></script>
|
171 | 175 | <script src="node_modules/pace-progress/pace.min.js"></script>
|
|
179 | 183 | <script>
|
180 | 184 | document.addEventListener("DOMContentLoaded", function(e) {
|
181 | 185 | $('#scriptRun').click( (clk) => {
|
182 |
| - const unlock = $('#txtUnlock').val() |
183 |
| - console.log(unlock) |
184 |
| - const sunlock = bsv.Script(unlock) |
185 |
| - const lock = $('#txtLock').val() |
186 |
| - const slock = bsv.Script(lock) |
187 |
| - console.log(slock) |
188 |
| - const si = bsv.Script.Interpreter() |
189 |
| - const verified = si.verify(sunlock, slock) |
190 |
| - $('#txtResults').text(verified) |
| 186 | + initRun() |
| 187 | + try { |
| 188 | + const unlock = $('#txtUnlock').val() |
| 189 | + const sunlock = bsv.Script(unlock) |
| 190 | + const lock = $('#txtLock').val() |
| 191 | + const slock = bsv.Script(lock) |
| 192 | + const si = bsv.Script.Interpreter() |
| 193 | + si.stepListener = function (step, stack, altstack) { |
| 194 | + showStep(step, stack, altstack) |
| 195 | + } |
| 196 | + //function (scriptSig, scriptPubkey, tx, nin, flags, satoshisBN) |
| 197 | + const verified = si.verify(sunlock, slock, null, null, bsv.Script.Interpreter.SCRIPT_VERIFY_P2SH | |
| 198 | + bsv.Script.Interpreter.SCRIPT_ENABLE_MAGNETIC_OPCODES | bsv.Script.Interpreter.SCRIPT_ENABLE_MONOLITH_OPCODES) |
| 199 | + showResults({si: si, verified: verified, error: si.errstr}) |
| 200 | + } |
| 201 | + catch (err) { |
| 202 | + showResults({si: null, verified: false, error: err}) |
| 203 | + } |
191 | 204 | })
|
192 | 205 | })
|
| 206 | + |
| 207 | + function initRun() { |
| 208 | + $('#txtResults').text('') |
| 209 | + $('#results-icon').empty() |
| 210 | + $('#debugger').empty() |
| 211 | + } |
| 212 | + |
| 213 | + function showResults(results) { |
| 214 | + $('#results-icon').empty() |
| 215 | + if (results.verified) { |
| 216 | + $('#results-icon').append(`<i class="fa fa-thumbs-up fa-lg mt-4" style="color:green"></i>`) |
| 217 | + } else { |
| 218 | + $('#results-icon').append(`<i class="fa fa-thumbs-down fa-lg mt-4" style="color:red"></i>`) |
| 219 | + } |
| 220 | + $('#txtResults').text(`${results.verified} ${results.error}`) |
| 221 | + } |
| 222 | + |
| 223 | + function showStep(step, stack, altstack) { |
| 224 | + const script = (new bsv.Script()).add(step.opcode) |
| 225 | + let stackTop = '>' |
| 226 | + for (let item in stack.reverse()) { |
| 227 | + const stepDescription = `Step ${step.pc}: ${script}:${stackTop}${stack[item].toString('hex')}` |
| 228 | + $('#debugger').append(`<div class="card-body"> |
| 229 | + <label type="text">${stepDescription}</label> |
| 230 | + </div>`); |
| 231 | + stackTop = ' ' |
| 232 | + } |
| 233 | + } |
193 | 234 |
|
194 | 235 | </script>
|
195 | 236 |
|
|
0 commit comments