jeankassio / electrumphp
用于连接 Electrum JSON-RPC 的 PHP 库
0.31
2024-10-02 13:24 UTC
Requires
- php: >=7.4
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 文件。