Skip to content

Commit 6f14396

Browse files
committed
first working code showing stack steps
1 parent e9e6ba9 commit 6f14396

File tree

2 files changed

+62
-21
lines changed

2 files changed

+62
-21
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
"@coreui/coreui-plugin-chartjs-custom-tooltips": "1.2.0",
4242
"@coreui/icons": "0.3.0",
4343
"bootstrap": "^4.2.1",
44-
"bsv": "^0.24.1",
44+
"bsv": "^0.24.2",
4545
"chart.js": "2.7.3",
4646
"core-js": "^2.6.1",
4747
"flag-icon-css": "^3.2.1",

src/index.html

Lines changed: 61 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,14 @@
2020
<!-- Icons-->
2121
<link href="node_modules/@coreui/icons/css/coreui-icons.min.css" rel="stylesheet">
2222
<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">
2424
<link href="node_modules/simple-line-icons/css/simple-line-icons.css" rel="stylesheet">
2525
<!-- Main styles for this application-->
2626
<link href="css/style.css" rel="stylesheet">
2727
<link href="vendors/pace-progress/css/pace.min.css" rel="stylesheet">
2828
<!-- Global site tag (gtag.js) - Google Analytics-->
2929
<!-- <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>
3131
<script>
3232

3333
// window.dataLayer = window.dataLayer || [];
@@ -122,27 +122,29 @@
122122
<div class="card">
123123
<div class="card-header"><i class="fa fa-unlock fa-lg mt-4"></i>Unlock Script (aka ScriptSig from Transaction Input vin)</div>
124124
<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>
126126
</div>
127127
</div>
128128

129129
<div class="card">
130130
<div class="card-header"><i class="fa fa-lock fa-lg mt-4"></i>Locking Script (aka ScriptPubKey from Transaction Output vout)</div>
131131
<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>
133133
</div>
134134
</div>
135135

136-
<div>
137-
<button id="scriptRun">Run Script</button>
136+
<div class="pb-3">
137+
<button id="scriptRun">Run Script</button>
138138
</div>
139139

140140
<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>
145145
</div>
146+
<div id="debugger"></div>
147+
</div>
146148

147149
</div>
148150
</div>
@@ -165,7 +167,9 @@
165167
</div>
166168
</footer>
167169
<!-- 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>
169173
<script src="node_modules/popper.js/dist/umd/popper.min.js"></script>
170174
<script src="node_modules/bootstrap/dist/js/bootstrap.min.js"></script>
171175
<script src="node_modules/pace-progress/pace.min.js"></script>
@@ -179,17 +183,54 @@
179183
<script>
180184
document.addEventListener("DOMContentLoaded", function(e) {
181185
$('#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+
}
191204
})
192205
})
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+
}
193234

194235
</script>
195236

0 commit comments

Comments
 (0)