<?php session_start(); $supportCoins = ['btc/main'=>"Bitcoin Mainnet", 'btc/test3'=>"Bitcoin Testnet3", 'dash/main'=>"Dash Mainnet", 'doge/main'=>"Dogecoin Mainnet", 'ltc/main'=>"Litecoin Mainnet",'bcy/test'=>"Blockcypher Testnet"]; $hasResult = false; if ($_SERVER['REQUEST_METHOD'] == 'POST') { try { if(md5($_POST['captcha']) != $_SESSION['CAPTCHA_FORM1']){ throw new Exception("CAPTCHA verification failed."); } else if (!isset($supportCoins[$_POST['network']])) { throw new Exception('Network not found.'); } else { $networkName = $_POST['network']; } $url = "https://api.blockcypher.com/v1/{$networkName}/addrs/{$_POST['address']}?unspentOnly=true&includeHex=true"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); $rawUtxos = curl_exec($ch); $rawUtxos = json_decode($rawUtxos,true); if ($rawUtxos['error']) { throw new Exception("URL: {$url}, Error: {$rawUtxos['error']}."); } $utxos = $rawUtxos['txrefs']; if (!@count($utxos)) { throw new Exception("UTXO not found."); } curl_close($ch); foreach($utxos as $k=>$utxo) { $url = "https://api.blockcypher.com/v1/{$networkName}/txs/{$utxo['tx_hash']}?outstart={$utxo['tx_output_n']}&instart=99999999&limit=1"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); $prevOutput = curl_exec($ch); $prevOutput = json_decode($prevOutput,true); if ($prevOutput['error']) { throw new Exception("URL: {$url}, Error: {$prevOutput['error']}."); } $prevOutput = $prevOutput['outputs'][0]; $utxos[$k]['script'] = $prevOutput['script']; curl_close($ch); } $hasResult = true; } catch (Exception $e) { $errmsg .= "Problem found. " . $e->getMessage(); } } include_once("html_iframe_header.php"); if ($errmsg) { ?> <div class="alert alert-danger"> <strong>Error!</strong><br/><?php echo $errmsg?> </div> <?php } if ($hasResult) { ?> <div class="table-responsive"> <table border=0 class='table'> <tr><th>Tx Hash</th><th>Index</th><th>Script</th><th>Amount</th></tr> <?php foreach($utxos as $utxo) { echo "<tr><td>{$utxo['tx_hash']}</td><td>{$utxo['tx_output_n']}</td><td>{$utxo['script']}</td><td>{$utxo['value']}</td></tr>"; } ?> </table> </div> <?php } ?> <form action='' method='post'> <div class="form-group"> <label for="network">Network:</label> <select id="network" name="network" class="form-control" > <?php foreach($supportCoins as $k=>$v) { echo "<option value='{$k}'".($k == $_POST['network'] ? " selected": "").">{$v}</option>"; } ?> </select> </div> <div class="form-group"> <label for="address">Address:</label> <input class="form-control" type='text' name='address' id='address' value='<?php echo $_POST['address']?>'> </div> <div class="form-group"> <label for="captcha">CAPTCHA:</label> <img style='border:1px solid black' src='../verificationimage.php?key=CAPTCHA_FORM1'/> <input name="captcha" type="captcha" class="form-control" placeholder="CAPTCHA" id="captcha" value=""> </div> <input type='submit' class="btn btn-success btn-block"/> </form> <?php include_once("html_iframe_footer.php");
<?php use BitWasp\Bitcoin\Transaction\TransactionFactory; include_once "../common.php"; //include this just to derive $_ELECTRUM_CONFIG[...] variable include_once "../libraries/vendor/autoload.php"; $supportCoins = ['btc/main'=>"Bitcoin Mainnet", 'btc/test'=>"Bitcoin Testnet"]; $hasResult = false; if ($_SERVER['REQUEST_METHOD'] == 'POST') { try { $postFields = [ 'id'=>'curltext', 'method'=>'getaddressunspent', 'params'=> [$_POST['address']] ]; $electrumRpcProtocol = "http"; $electrumRpcHost = $_ELECTRUM_CONFIG['electrum_rpc_host']; if ($_POST['network'] == 'btc/test') { $electrumRpcPort = "7778"; } else { $electrumRpcPort = "7777"; } $electrumRpcUser = $_ELECTRUM_CONFIG['electrum_rpc_user']; $electrumRpcPwd = $_ELECTRUM_CONFIG['electrum_rpc_pwd']; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url = "{$electrumRpcProtocol}://{$electrumRpcHost}:{$electrumRpcPort}"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_POST , 1); curl_setopt($ch, CURLOPT_USERPWD , "{$electrumRpcUser}:{$electrumRpcPwd}"); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postFields)); $rawResult = curl_exec($ch); if (curl_errno($ch)) { throw new Exception('CURL Error: ' . curl_error($ch). "#" . curl_errno($ch)); } else if (!($result = json_decode($rawResult,true))) { throw new Exception('Invalid JSON format.'); } else if (is_array($result['error']) AND $result['error'] !='null') { throw new Exception('Electrum Error: ' . $result['error']['message'] . "#" . $result['error']['code']); } else if (!@count($result['result'])) { throw new Exception("UTXO not found."); } else { curl_close($ch); //find utxo's scriptpubkey foreach($result['result'] as $k=> $utxo) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "{$electrumRpcProtocol}://{$electrumRpcHost}:{$electrumRpcPort}"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_POST , 1); curl_setopt($ch, CURLOPT_USERPWD , "{$electrumRpcUser}:{$electrumRpcPwd}"); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(['id'=>'curltext','method'=>'gettransaction','params'=> [$utxo['tx_hash']]])); $thisRawResult = curl_exec($ch); if (curl_errno($ch)) { throw new Exception('CURL Error: ' . curl_error($ch). "#" . curl_errno($ch)); } else if (!($thisResult = json_decode($thisRawResult,true))) { throw new Exception('Invalid JSON format.'); } else if (is_array($thisResult['error']) AND $thisResult['error'] !='null') { throw new Exception('Electrum Error: ' . $thisResult['error']['message'] . "#" . $thisResult['error']['code']); } else { $utxhex = $thisResult['result']['hex']; $utx = TransactionFactory::fromHex($utxhex); $result['result'][$k]['script_pub_key'] = $utx->getOutputs()[$utxo['tx_pos']]->getScript()->getHex(); } curl_close($ch); } } $hasResult = true; } catch (Exception $e) { $errmsg .= "Problem found. " . $e->getMessage(); } } include_once("html_iframe_header.php"); if ($errmsg) { ?> <div class="alert alert-danger"> <strong>Error!</strong> <?php echo $errmsg?> </div> <?php } if ($hasResult) { ?> <div class="table-responsive"> <table border=0 class='table'> <tr><td style='width:20%;'>Raw Electrum Result </td><td style='width:80%;'><textarea class="form-control" readonly rows=8><?php echo $rawResult;?></textarea></td></tr> </table> <table border=0 class='table'> <tr><th>Tx Hash</th><th>Index</th><th>Script</th><th>Amount</th></tr> <?php foreach($result['result'] as $utxo) { echo "<tr><td>{$utxo['tx_hash']}</td><td>{$utxo['tx_pos']}</td><td>{$utxo['script_pub_key']}</td><td>{$utxo['value']}</td></tr>"; } ?> </table> </div> <?php } ?> <form action='' method='post'> <div class="form-group"> <label for="network">Network:</label> <select id="network" name="network" class="form-control" > <?php foreach($supportCoins as $k=>$v) { echo "<option value='{$k}'".($k == $_POST['network'] ? " selected": "").">{$v}</option>"; } ?> </select> </div> <div class="form-group"> <label for="address">Address:</label> <input class="form-control" type='text' name='address' id='address' value='<?php echo $_POST['address']?>'> </div> <input type='submit' class="btn btn-success btn-block"/> </form> <?php include_once("html_iframe_footer.php");