我试图为我的比特币支付处理添加一些额外的安全性。我希望允许即时交付数字商品而无需等待确认,但前提是交易是安全的,即不是双重支出并且具有足够高的费用或优先权。如果检测到异常,我想在分娩前等待确认。
我能够使用blockchain.info API和blockr.io作为备份来提取所需的信息,以检查tx是双倍花费还是对其大小有足够高的费用。我还想允许接受高优先级交易而不收取费用,就像他们收取费用一样,就像比特币网络一样。问题是我无法找到提供所需信息的API,tx优先级或tx输入的硬币年龄,这些用于优先级计算,如下所述: https://en.bitcoin.it/wiki/Transaction_fees#Technical_info
我可以使用额外的API调用来引用tx的输入并找到确认的数量,但显然单个API调用是理想的。如果不存在这样的API,我可以访问一个完整的比特币节点,我认为可以某种方式用它来建立我自己的API。在这种情况下,我需要指出一些关于如何开始的文档。
答案 0 :(得分:0)
我使用比特币节点easybitcoin-php和以下PHP代码解决了这个问题 访问页面并传递tx哈希将输出"高优先级"如果tx有标准或更高的费用,或者它没有费用但是足够高的优先级,否则它将输出"低优先级,"或"错误"如果有问题。
<?php
require_once('/var/www/easybitcoin.php');
$bitcoin = new Bitcoin('user', 'pass', '127.0.0.1', '8332');
$tx_hash = $_GET['tx'];
$tx = $bitcoin->getrawtransaction($tx_hash, 1);
$coin_age = 0;
$in_value = 0;
$out_value = 0;
$output_too_small = false;
foreach($tx['vin'] as $input) {
$tx_in = $bitcoin->getrawtransaction($input['txid'], 1);
$value = $tx_in['vout'][$input['vout']]['value'];
$coin_age += $value * 1e8 * $tx_in['confirmations'];
$in_value += $value;
}
foreach($tx['vout'] as $output) {
$out_value += $output['value'];
if ($output['value'] < 0.01) {
$output_too_small = true;
}
}
$size = strlen($tx['hex']) / 2;
$priority = $coin_age / $size;
$fee_per_byte = (($in_value - $out_value) * 1e8) / $size;
if (is_numeric($priority)) {
if (($priority > 57600000 && $size < 1000 && $output_too_small == false) || $fee_per_byte >= 10) {
echo 'high priority';
} else {
echo 'low priority';
}
} else {
echo 'error';
}
?>