jeankassio/electrumphp

用于连接 Electrum JSON-RPC 的 PHP 库

0.31 2024-10-02 13:24 UTC

This package is auto-updated.

Last update: 2024-10-02 13:26:41 UTC


README

ElectrumPHP 是一个 PHP 库,设计用于通过 RPC 调用与 Electrum 钱包交互。使用此库,您可以管理钱包、生成地址、检查余额和交易历史,并使用 Electrum 守护进程进行比特币支付。

要求

  • PHP 7.4 或更高版本
  • 启用 Curl
  • 启用 putenv
  • 启用 exec(用于启动 Electrum)
  • 在您的服务器上安装并配置了 Electrum

安装

如果您在 Web 服务器上安装,请直接在 Web 服务器使用的用户上安装 Electrum。

sudo -u www pip3 install https://download.electrum.org/4.5.5/Electrum-4.5.5.tar.gz

可以使用 Composer 安装此包

  composer require jeankassio/electrumphp

使用方法

实例化 ElectrumPHP 类

require_once(dirname(__FILE__) . "/path/to/autoload.php");

use JeanKassio\ElectrumPHP;

$walletPath = dirname(__FILE__) . "/wallet/walletfile";
$walletPass = "0123456789";
$rpcUser = "user";
$rpcPass = "9876543210";
$rpcPort = 7777;
$rpcHost = "127.0.0.1";
$binary = false; //if false, the code find automatically the binary of Electrum

$electrum = new ElectrumPHP($walletPath, $walletPass, $rpcUser, $rpcPass, $rpcPort, $rpcHost, $binary);

方法

启动 Electrum 守护进程(如果需要)

$electrum->start();

停止 Electrum 守护进程(如果需要)

$electrum->stop();

检查守护进程是否正在运行

if($electrum->isRunning()){
    echo "Electrum daemon is running.";
}

创建新钱包并接收种子

$walletPath = dirname(__FILE__) . "/wallet/walletfile";
$seed = false;
$password = "0123456789";
$encrypt = true;
$segwit = true;
$language = "english";
$entropy = 256;
$response = $electrum->createWallet($walletPath, $password, $seed, $encrypt, $segwit, $language, $entropy);
echo "Seed: " . $response['seed'];

使用您的种子创建新钱包

$walletPath = dirname(__FILE__) . "/wallet/walletfile";
$seed = "excess title assist very badge rain pet purchase device narrow awesome recall";
$password = NULL;
$encrypt = false;
$segwit = false;
$response = $electrum->createWallet($walletPath, $password, $seed, $encrypt, $segwit);
echo "Seed: " . $response['seed'];

创建新地址

$address = $electrum->createAddress();
echo "New address: " . $address;

获取地址余额

$address = "1PuJjnF476W3zXfVYmJfGnouzFDAXakkL4";
$balance = $electrum->getAddressBalance($address);
echo "Confirmed: " . $balance['confirmed'];
echo "Unconfirmed: " . $balance['unconfirmed'];

获取钱包余额

$balance = $electrum->getWalletBalance();
if(isset($balance['confirmed'])){
  echo "Confirmed: " . $balance['confirmed'];
}
				
if(isset($balance['unconfirmed'])){
  echo "Unconfirmed: " . $balance['unconfirmed'];
}
				
if(isset($balance['unmatured'])){
  echo "Unmatured: " . $balance['unmatured'];
}

获取交易详情

$txid = "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b";
$transaction = $electrum->getTransaction($txid);
echo "Transaction details: " . json_encode($transaction);

向比特币地址付款

$address = "bc1qlaee57ehqfe2388muudvrf7wvuw2p3lwz0kzh4";
$amount = 0.001;
$fee = 0.00001;
$feerate = NULL;
$fromAddr = "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa";
$fromCoins = NULL;
$change = "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa";
$nocheck = false;
$unsigned = false;
$replaceByFee = true;

$response = $electrum->pay($address, $amount, $fee, $feerate, $fromAddr, $fromCoins, $change, $nocheck, $unsigned, $replaceByFee);
echo "Payment response: " . json_encode($response);

向多个地址付款

$outputs = [
  [
    "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa",
    0.002
  ],
  [
    "bc1pgmpdnkdyxs6qp2we865tz43umrssvsqweaxvz2cuq5gp9zz6e6tstuj3wa",
    0.0015
  ],
  [
    "bc1pce8yk5epjlqrpnnavelul54ed6663tjqv6taz3gq9cte979624uqjjrv55",
    5.9216
  ]
];
$fee = 0.0009;
$feerate = NULL;
$fromAddr = "bc1plgjpn3cr5khxfee0k40py8njx0qcejrqldldnedqrshvut64jlvs467hnr";
$fromCoins = NULL;
$change = "bc1pqys8mqkneumdyncyz42ljd5zl9gqw4pryd9xsj9gnx5cw6rlvn0sjhdlhy";
$nocheck = false;
$unsigned = false;
$replaceByFee = false;

$response = $electrum->payToMany($outputs, $fee, $feerate, $fromAddr, $fromCoins, $change, $nocheck, $unsigned, $replaceByFee);
echo "Payment response: " . json_encode($response);

加载钱包

//Load the wallet instantiated
$electrum->loadWallet();

获取当前打开的钱包

$wallets = $electrum->getWalletsOpen();
echo "Open wallets: " . json_encode($wallets);

通知地址变更(Webhooks)[不推荐,可能会失败]

$address = "bc1pce8yk5epjlqrpnnavelul54ed6663tjqv6taz3gq9cte979624uqjjrv55";
$yourUrl = "https://your-webhook-url";
$response = $electrum->notify($address, $yourUrl);
echo "Notify response: " . json_encode($response);

删除地址通知

$address = "bc1pce8yk5epjlqrpnnavelul54ed6663tjqv6taz3gq9cte979624uqjjrv55";
$response = $electrum->deleteNotify($address);
echo "Notification deleted: " . json_encode($response);

获取钱包中地址的私钥

$address = "bc1pce8yk5epjlqrpnnavelul54jjrv55";
$privateKey = $electrum->getPrivateKeys($address);
echo "Private key: " . $privateKey;

获取钱包的种子

$seed = $electrum->getSeed();
echo "Wallet seed: " . $seed;

如果不存在所需的方 法,请进行自定义调用。

$method = "getaddressunspent";
$params = [
  'address' => "bc1pce8yk5epjlqrpnnavelul54ed6663tjqv6taz3gq9cte979624uqjjrv55"
];
$response = $electrum->custom($method, $params);
echo "Response: " . $response;

错误处理

每个失败的 RPC 调用都会抛出异常。

您可以使用简单的 try-catch 块来处理这些异常

try{
    $electrum->start();
}catch(Exception $e){
    echo "Error: " . $e->getMessage();
}

贡献

欢迎贡献!如果您发现错误或对改进有建议。

请随意打开一个 问题 或提交一个 Pull Request

许可协议

本项目采用 MIT 许可协议 - 有关详细信息,请参阅 LICENSE.md 文件。