<?php use BitWasp\Bitcoin\Script\ScriptFactory; use BitWasp\Bitcoin\Transaction\TransactionFactory; use BitWasp\Bitcoin\Script\Interpreter\InterpreterInterface as I; include_once "../libraries/vendor/autoload.php"; include_once("html_iframe_header.php"); $result = false; if ($_SERVER['REQUEST_METHOD'] == 'POST') { try { $flags = I::VERIFY_NONE; $scriptSig = ScriptFactory::fromHex($_POST['script_sig']); $scriptPubKey = ScriptFactory::fromHex($_POST['script_pub_key']); //build empty tx for quick test purpose $tx = TransactionFactory::build() ->input(str_pad('', 64, '0'), 0, $scriptSig) ->get(); $consensus = ScriptFactory::consensus(); $nIn = 0; $amount = 0; if (!$consensus->verify($tx, $scriptPubKey, $nIn, $flags, $amount)) { throw new Exception("Consensus verification failed."); } $result = true; } catch (Exception $e) { $errmsg .= "Problem found. " . $e->getMessage(); } } if ($errmsg) { ?> <div class="alert alert-danger"> <strong>Error!</strong> <?php echo $errmsg?> </div> <?php } if ($result) { ?> <div class="alert alert-success"> <strong>Success!</strong> </div> <?php } ?> <form action='' method='post'> <div class="form-group"> <label for="script_sig">ScriptSig (In Hex):</label> <input class="form-control" type='text' name='script_sig' id='script_sig' value='<?php echo $_POST['script_sig']?>'> </div> <div class="form-group"> <label for="script_pub_key">UTXO's ScriptPubKey (In Hex):</label> <input class="form-control" type='text' name='script_pub_key' id='script_pub_key' value='<?php echo $_POST['script_pub_key']?>'> </div> <input type='submit' class="btn btn-success btn-block"/> </form> <?php include_once("html_iframe_footer.php");
<?php use BitWasp\Bitcoin\Script\ScriptFactory; use BitWasp\Bitcoin\Script\Opcodes; use BitWasp\Buffertools\Buffer; include_once "../libraries/vendor/autoload.php"; $operators = array("+", "-"); //* and / have been disabled if ($_GET['ajax'] == '1') { if ($_SERVER['REQUEST_METHOD'] == 'POST') { try { $data = ['error'=>'']; if (!(ctype_digit($_POST['operand1']) AND ctype_digit($_POST['operand2']))) { throw new Exception("Operand must be integer."); } else { $operand1 = (int)$_POST['operand1']; $operand2 = (int)$_POST['operand2']; } if ($_POST['operator'] == '+') { $result = $operand1 + $operand2; $op = 'OP_ADD'; } else if ($_POST['operator'] == '-') { $result = $operand1 - $operand2; $op = 'OP_SUB'; } else if ($_POST['operator'] == '*') { $result = $operand1 * $operand2; $op = 'OP_MUL'; } else if ($_POST['operator'] == '/') { $result = $operand1 / $operand2; $op = 'OP_DIV'; } else { throw new Exception("Invalid operator."); } if (!is_integer($result)) { throw new Exception("Equal result must be integer."); } if ($result < 0 ) { throw new Exception("Equal result must be positive number."); } $scriptPubKey = ScriptFactory::create()->int($operand2)->op($op)->int($result)->op('OP_EQUAL')->getScript(); $scriptSig = ScriptFactory::create()->int($operand1)->getScript(); $data['result'] = $result; $data['scriptPubKey'] = $scriptPubKey->getHex(); $data['scriptSig'] = $scriptSig->getHex(); } catch (Exception $e) { $data['error'] = $e->getMessage(); } die(json_encode($data)); } } include_once("html_iframe_header.php"); ?> <form id='this_form' action='' method='post'> <div class="form-group"> <label for="scriptsig">Math:</label> <div class="form-row"> <div class="form-group col-sm-1"> <input class="form-control" type='text' name='operand1' id='operand1' value='<?php echo $_POST['operand1']?>' placeholder="Operand#1 (Integer)"> </div> <div class="form-group col-sm-1"> <select id="operator" name="operator" class="form-control" > <?php foreach($operators as $operator) { echo "<option value='{$operator}'".($operator == $_POST['operator'] ? " selected": "").">{$operator}</option>"; } ?> </select> </div> <div class="form-group col-sm-1"> <input class="form-control" type='text' name='operand2' id='operand2' value='<?php echo $_POST['operand2']?>' placeholder="Operand#2 (Integer)"> </div> <div class="form-group col-sm-1"> = </div> <div class="form-group col-sm-1"> <input class="form-control" type='text' name='result' id='result' placeholder="Result" readonly> </div> <div class="form-group col-sm-7" id='msg' style='color:red'> </div> </div> </div> <div class="form-group"> <label for="scriptsig">ScriptSig:</label> <textarea id='scriptsig' class="form-control" rows="1" readonly></textarea> </div> <div class="form-group"> <label for="scriptpubkey">ScriptPubKey:</label> <textarea id='scriptpubkey' class="form-control" rows="1" readonly></textarea> </div> <a href='#hashtag1' onclick="javascript:parent.moveData($('textarea#scriptsig').val(),'iframe_verify_form', 'script_sig');parent.moveData($('textarea#scriptpubkey').val(),'iframe_verify_form', 'script_pub_key')">Insert</a> </form> <script> jQuery(document).ready(function() { $('#this_form').on('keyup change paste', 'input, select, textarea', function(){ var self = $(this); $.ajax({ url: '?ajax=1', data: $('#this_form :input'), type: 'post', success:function(result){ try { j = eval('(' + result + ')'); if (j.error.length >0) { $('#msg').html(j.error); $('#result').val('Error'); $('textarea#scriptpubkey').val('Error'); $('textarea#scriptsig').val('Error'); } else { $('#msg').html(''); $('#result').val(j.result); $('textarea#scriptpubkey').val(j.scriptPubKey); $('textarea#scriptsig').val(j.scriptSig); } } catch(e) { alert('Invalid Json Format.'); } } }); }); }); </script> <?php include_once("html_iframe_footer.php");
<?php use BitWasp\Bitcoin\Script\ScriptFactory; use BitWasp\Bitcoin\Crypto\Hash; use BitWasp\Bitcoin\Script\Opcodes; use BitWasp\Buffertools\Buffer; include_once "../libraries/vendor/autoload.php"; if ($_GET['ajax'] == '1') { if ($_SERVER['REQUEST_METHOD'] == 'POST') { try { $data = ['error'=>'']; if (empty($_POST['preimage'])) { throw new Exception("Preimage cannot be empty."); } $preimage = new Buffer($_POST['preimage']); $hash = Hash::sha256($preimage); $scriptPubKey = ScriptFactory::create()->op('OP_SHA256')->push($hash)->op('OP_EQUAL')->getScript(); $scriptSig = ScriptFactory::create()->push($preimage)->getScript(); $data['scriptPubKey'] = $scriptPubKey->getHex(); $data['scriptSig'] = $scriptSig->getHex(); } catch (Exception $e) { $data['error'] = $e->getMessage(); } die(json_encode($data)); } } include_once("html_iframe_header.php"); ?> <form id='this_form' action='' method='post'> <label for="preimage">Preimage:</label> <div class="form-row"> <div class="form-group col-sm-6"> <input class="form-control" type='text' name='preimage' id='preimage' value='<?php echo $_POST['preimage']?>' placeholder=""> </div> <div class="form-group col-sm-6" id='msg' style='color:red'> </div> </div> <div class="form-group"> <label for="scriptsig">ScriptSig:</label> <textarea id='scriptsig' class="form-control" rows="1" readonly></textarea> </div> <div class="form-group"> <label for="scriptpubkey">ScriptPubKey:</label> <textarea id='scriptpubkey' class="form-control" rows="1" readonly></textarea> </div> <a href='#hashtag1' onclick="javascript:parent.moveData($('textarea#scriptsig').val(),'iframe_verify_form', 'script_sig');parent.moveData($('textarea#scriptpubkey').val(),'iframe_verify_form', 'script_pub_key')">Insert</a> </form> <script> jQuery(document).ready(function() { $('#this_form').on('keyup change paste', 'input, select, textarea', function(){ var self = $(this); $.ajax({ url: '?ajax=1', data: $('#this_form :input'), type: 'post', success:function(result){ try { j = eval('(' + result + ')'); if (j.error.length >0) { $('#msg').html(j.error); $('#result').val('Error'); $('textarea#scriptpubkey').val('Error'); $('textarea#scriptsig').val('Error'); } else { $('#msg').html(''); $('#result').val(j.result); $('textarea#scriptpubkey').val(j.scriptPubKey); $('textarea#scriptsig').val(j.scriptSig); } } catch(e) { alert('Invalid Json Format.'); } } }); }); }); </script> <?php include_once("html_iframe_footer.php");