Merge pull request #42 from cryptochangements34/master
Allow optional 0 confirmation transactions
This commit is contained in:
commit
566a003122
@ -13,6 +13,7 @@ class Monero_Gateway extends WC_Payment_Gateway
|
||||
private $confirmed = false;
|
||||
private $monero_daemon;
|
||||
private $non_rpc = false;
|
||||
private $zero_cofirm = false;
|
||||
|
||||
function __construct()
|
||||
{
|
||||
@ -33,6 +34,7 @@ class Monero_Gateway extends WC_Payment_Gateway
|
||||
$this->address = $this->get_option('monero_address');
|
||||
$this->viewKey = $this->get_option('viewKey');
|
||||
$this->discount = $this->get_option('discount');
|
||||
$this->accept_zero_conf = $this->get_option('zero_conf');
|
||||
|
||||
$this->use_viewKey = $this->get_option('use_viewKey');
|
||||
$this->use_rpc = $this->get_option('use_rpc');
|
||||
@ -45,7 +47,10 @@ class Monero_Gateway extends WC_Payment_Gateway
|
||||
{
|
||||
$this->non_rpc = false;
|
||||
}
|
||||
|
||||
if($this->accept_zero_conf == 'yes')
|
||||
{
|
||||
$this->zero_confirm = true;
|
||||
}
|
||||
// After init_settings() is called, you can get the settings and load them into variables, e.g:
|
||||
// $this->title = $this->get_option('title' );
|
||||
$this->init_settings();
|
||||
@ -145,6 +150,13 @@ class Monero_Gateway extends WC_Payment_Gateway
|
||||
'description' => __('Check this box if you are using testnet', 'monero_gateway'),
|
||||
'default' => 'no'
|
||||
),
|
||||
'zero_conf' => array(
|
||||
'title' => __(' Accept 0 conf txs', 'monero_gateway'),
|
||||
'label' => __(' Accept 0-confirmation transactions ', 'monero_gateway'),
|
||||
'type' => 'checkbox',
|
||||
'description' => __('This is faster but less secure', 'monero_gateway'),
|
||||
'default' => 'no'
|
||||
),
|
||||
'onion_service' => array(
|
||||
'title' => __(' SSL warnings ', 'monero_gateway'),
|
||||
'label' => __(' Check to Silence SSL warnings', 'monero_gateway'),
|
||||
@ -312,14 +324,19 @@ class Monero_Gateway extends WC_Payment_Gateway
|
||||
}
|
||||
$uri = "monero:$address?amount=$amount?payment_id=$payment_id";
|
||||
|
||||
if($this->zero_confirm){
|
||||
$this->verify_zero_conf($payment_id, $amount, $order_id);
|
||||
}
|
||||
else{
|
||||
$this->verify_non_rpc($payment_id, $amount_xmr2, $order_id);
|
||||
}
|
||||
if($this->confirmed == false)
|
||||
{
|
||||
echo "<h4> We are waiting for your transaction to be confirmed </h4>";
|
||||
echo "<h4><font color=DC143C> We are waiting for your transaction to be confirmed </font></h4>";
|
||||
}
|
||||
if($this->confirmed)
|
||||
{
|
||||
echo "<h4> Your transaction has been successfully confirmed! </h4>";
|
||||
echo "<h4><font color=006400> Your transaction has been successfully confirmed! </font></h4>";
|
||||
}
|
||||
|
||||
echo "
|
||||
@ -628,7 +645,7 @@ class Monero_Gateway extends WC_Payment_Gateway
|
||||
if(isset($output_found))
|
||||
{
|
||||
$amount_atomic_units = $amount * 1000000000000;
|
||||
if($txs_from_block[$block_index]['payment_id'] == $payment_id && $output_found >= $amount)
|
||||
if($txs_from_block[$block_index]['payment_id'] == $payment_id && $output_found['amount'] >= $amount_atomic_units)
|
||||
{
|
||||
$this->on_verified($payment_id, $amount_atomic_units, $order_id);
|
||||
}
|
||||
@ -638,6 +655,42 @@ class Monero_Gateway extends WC_Payment_Gateway
|
||||
return false;
|
||||
}
|
||||
|
||||
public function verify_zero_conf($payment_id, $amount, $order_id)
|
||||
{
|
||||
$tools = new NodeTools();
|
||||
$txs_from_mempool = $tools->get_mempool_txs();;
|
||||
$tx_count = count($txs_from_mempool['data']['txs']);
|
||||
$i = 0;
|
||||
$output_found;
|
||||
|
||||
while($i <= $tx_count)
|
||||
{
|
||||
$tx_hash = $txs_from_mempool['data']['txs'][$i]['tx_hash'];
|
||||
if(strlen($txs_from_mempool['data']['txs'][$i]['payment_id']) != 0)
|
||||
{
|
||||
$result = $tools->check_tx($tx_hash, $this->address, $this->viewKey);
|
||||
if($result)
|
||||
{
|
||||
$output_found = $result;
|
||||
$tx_i = $i;
|
||||
$i = $tx_count; // finish loop
|
||||
}
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
if(isset($output_found))
|
||||
{
|
||||
$amount_atomic_units = $amount * 1000000000000;
|
||||
if($txs_from_mempool['data']['txs'][$tx_i]['payment_id'] == $payment_id && $output_found['amount'] >= $amount_atomic_units)
|
||||
{
|
||||
$this->on_verified($payment_id, $amount_atomic_units, $order_id);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
public function do_ssl_check()
|
||||
{
|
||||
if ($this->enabled == "yes" && !$this->get_option('onion_service')) {
|
||||
|
@ -377,4 +377,18 @@ class NodeTools
|
||||
|
||||
}
|
||||
|
||||
function get_mempool_txs()
|
||||
{
|
||||
$curl = curl_init();
|
||||
|
||||
curl_setopt_array($curl, array(
|
||||
CURLOPT_RETURNTRANSFER => 1,
|
||||
CURLOPT_URL => 'https://xmrchain.net/api/mempool',
|
||||
));
|
||||
$resp = curl_exec($curl);
|
||||
curl_close($curl);
|
||||
$array = json_decode($resp, true);
|
||||
return $array;
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user