是否存在包含交易优先级或输入年龄的比特币API?

时间:2014-07-11 23:32:43

标签: bitcoin

我试图为我的比特币支付处理添加一些额外的安全性。我希望允许即时交付数字商品而无需等待确认,但前提是交易是安全的,即不是双重支出并且具有足够高的费用或优先权。如果检测到异常,我想在分娩前等待确认。

我能够使用blockchain.info API和blockr.io作为备份来提取所需的信息,以检查tx是双倍花费还是对其大小有足够高的费用。我还想允许接受高优先级交易而不收取费用,就像他们收取费用一样,就像比特币网络一样。问题是我无法找到提供所需信息的API,tx优先级或tx输入的硬币年龄,这些用于优先级计算,如下所述: https://en.bitcoin.it/wiki/Transaction_fees#Technical_info

我可以使用额外的API调用来引用tx的输入并找到确认的数量,但显然单个API调用是理想的。如果不存在这样的API,我可以访问一个完整的比特币节点,我认为可以某种方式用它来建立我自己的API。在这种情况下,我需要指出一些关于如何开始的文档。

1 个答案:

答案 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';
}
?>