infinitysoftwareltd / walletlibrary
用于创建infi/hedge钱包的自定义包
Requires
- ext-gmp: *
- ext-json: *
- bitwasp/bitcoin: 1.0.4
Requires (Dev)
- guzzlehttp/guzzle: 6.0.*
- orchestra/testbench: 3.5.6
- phpunit/phpunit: 6.5.14
README
处理创建支持Infinity和Hedge币种纸钱包的库
功能
- 允许生成纸钱包
- 允许选择网络
- 允许签名交易
- 允许发送交易
- 允许创建webhooks
安装
composer require infinitysoftwareltd/walletlibrary
使用
网络
- 主网络
- 测试网络
- 开发网络
币种区块链
- infinity
- hedge
生成钱包
生成钱包支持不同的网络,包括主网络
、开发网络
和测试网络
。每个网络都有其自己的钱包前缀。
Testnet = t Devnet = x Mainnet = G
将InfinitySolution\Wallet\Wallet
添加到您的类中
use InfinitySolution\Wallet\Wallet;
测试网络
要为该网络创建钱包,请将以下内容添加到您的类中。
use InfinitySolution\Wallet\Network\Infinity\Testnet;
在钱包构造函数中调用Testnet
。
$wallet = (new Wallet(new Testnet))->generateWallet();
响应
{ "passphrase":"lizard apart sing melt replace verify keep chair endorse truly crawl basket", "pubkey":"025286998d31a898bd60cb16be09c87a85fbfd3cd824a441a714d7643903a47ca1", "address":"tTEp99x1DMnEDhSgVy4ruhDMMkXP67MbsF" }
开发网络
要为该网络创建钱包,请将以下内容添加到您的类中。
use InfinitySolution\Wallet\Network\Infinity\Devnet;
在钱包构造函数中调用Devnet
。
$wallet = (new Wallet(new Devnet))->generateWallet();
响应
{ "passphrase":"series elephant swamp attend uniform opinion average input project outer tennis feel", "pubkey":"038a7002316832cbee49a27fc2d44d0ebadb385597c9dd5e97ae8e11abedf4150b", "address":"xEUisYP6fhD685FerFsJRB2UNzFxEQJ79m" }
主网络
要为该网络创建钱包,请将以下内容添加到您的类中。
use InfinitySolution\Wallet\Network\Infinity\Mainnet;
在钱包构造函数中调用Mainnet
。
$wallet = (new Wallet(new Mainnet))->generateWallet();
响应
{ "passphrase":"lunar chuckle paddle diamond clip swallow use bright hat jeans spawn virus", "pubkey":"033713279146a679a9430f80174e017f90de22b1c2a3c51a83c22fd3f21aade01b", "address":"GRLbCpaWi1DePju8m6G4Xkn6i59ddq4Luw" }
为消费者生成二维码
您的交易所可能正在为您的消费者生成二维码钱包地址。Infinity移动应用期望的格式为{network}:{address}
示例二维码数据
针对Infinity区块链
infi:GWHtg6SufVqKx539msjMoZZqa89g9Z4tg8
针对Hedge区块链
edge:GWHtg6SufVqKx539msjMoZZqa89g9Z4tg8
签名交易
要签名交易,您需要遵循数据结构。它应该是一个包含费用、金额、密码短语和收款人的数组。示例:
$data = [ 'fee' => {FEE}, 'amount' => {AMOUNT IN DECIMAL}, 'passphrase' => {SENDER_PASSPHRASE}, 'recipient' => {WALLET_ADDRESS}, 'vendor_field' => {YOUR MESSAGE OR NOTE | THIS IS OPTIONAL} ];
您可以根据上面的列表更改服务器和网络。请将InfinitySolution\Wallet\Transaction
添加到您的类中。
use InfinitySolution\Wallet\Transaction;
测试网络
对于Testnet
,您需要在实例化Transaction
类时设置网络和服务器。
$wallet = (new Wallet(new Testnet))->generateWallet(); $data = [ 'amount' => 100000000, 'passphrase' => $wallet['passphrase'], 'recipient' => '{RECIPIENT ADDRESS}', 'vendor_field' => 'Example Message' ]; $sign_transaction = (new Transaction); $sign_transaction->setTransaction(new \InfinitySolution\Wallet\Transaction\Transfer); $sign_transaction->data($data); $sign_transaction->network('Testnet'); $sign_transaction->blockchain('infinity'); $sign_transaction->peer('{IP_PEER}:{PORT}'); return $sign_transaction->build();
响应
{ "transactions": { "transactions":[ { "type":0, "typeGroup":1, "nonce":"1", "amount":"100000000", "fee":"90", "version":2, "network":127, "expiration":0, "recipientId":"tAvoigCkJe4pxkngs6ChdRKojjCoE1f6s2", "vendorField":"Example Message", "senderPublicKey":"03688ab87c4b4a9e7f74e9ae0f67ffa05108924595d8ff539b5fa7635be8a68c9b", "signature":"3045022100ea2d326409ea88da4a7eaa47717391c712b4c4e534e79005ce8a51f00a45eebe02204a9de894d6437ad851b06116dfda7769b0ebdd3f22bc586b7a2ca953906832bb", "id":"515564c3b26eb0d6a950e13e8825f387162a6cd64358097c00d2877694aa187b" } ] }, "peer":"https://{your_node_ip_server}:4003/api/transactions" }
开发网络
对于Devnet
,您需要在实例化Transaction
类时设置网络和服务器。
$wallet = (new Wallet(new Devnet))->generateWallet(); $data = [ 'amount' => 100000000, 'passphrase' => $wallet['passphrase'], 'recipient' => '{RECIPIENT ADDRESS}', 'vendor_field' => 'Example Message' ]; $sign_transaction = (new Transaction); $sign_transaction->setTransaction(new \InfinitySolution\Wallet\Transaction\Transfer); $sign_transaction->data($data); $sign_transaction->network('Devnet'); $sign_transaction->blockchain('infinity'); $sign_transaction->peer('{IP_PEER}:{PORT}'); return $sign_transaction->build();
响应
{ "transactions": { "transactions":[ { "type":0, "typeGroup":1, "nonce":"1", "amount":"100000000", "fee":"90", "version":2, "network":137, "expiration":0, "recipientId":"xNjK5NaJ43YEofwNDf5wQncsRHit5qBjik", "vendorField":"Example Message", "senderPublicKey":"035aa61875fc9dae2abac08b03b831692fe269a7dfb25d7e437ce9215ef5ffde44", "signature":"3045022100f1122f5b91b4e09f6abd1f3503ab113d75efd6ecd5d9d43c7bfbae6db74f3fea02201101657ad9349129288ec65be9442e9d999fb6b4afd47038cbe2636d2440d971", "id":"2f21e2527e4b9f4ab8366766f72e2c08a480cfa221bdd4eb8b7c8bdb4e8277c2" } ] }, "peer":"https://{your_node_ip_server}:4003/api/transactions" }
主网络
对于Mainnet
,您需要在实例化Transaction
类时设置网络和服务器。
$wallet = (new Wallet(new Mainnet))->generateWallet(); $data = [ 'amount' => 100000000, 'passphrase' => $wallet['passphrase'], 'recipient' => '{RECIPIENT ADDRESS}', 'vendor_field' => 'Example Message' ]; $sign_transaction = (new Transaction); $sign_transaction->setTransaction(new \InfinitySolution\Wallet\Transaction\Transfer); $sign_transaction->data($data); $sign_transaction->network('Mainnet'); $sign_transaction->blockchain('infinity'); $sign_transaction->peer('{IP_PEER}:{PORT}'); return $sign_transaction->build();
响应
{ "transactions": { "transactions":[ { "type":0, "typeGroup":1, "nonce":"1", "amount":"100000000", "fee":"90", "version":2, "network":38, "expiration":0, "recipientId":"GaH5knapB7hHmVN7JQNswnW1uuSnAoxRGh", "vendorField":"Example Message", "senderPublicKey":"035e65bbf63d1d17f5e1765482402ce0ec67e7e1e250e5b09886ae0b59a1fdf3a6", "signature":"30450221009c2951bf48dcafba06456491f85fe22813100237b4ff61a77b96290a6a8638ad022079efe66b39201de85dd11a3e5cd688767b0c98f0e889ef2ee8e8eccd9e1d6997", "id":"94761b12525e3b8b769f2b629fd1b3ac693e0e7856043f7080f9b7574fbb7a4c" } ] }, "peer":"https://{your_node_ip_server}:4003/api/transactions" }
向区块链发送交易
向具有自定义对等方的节点发送交易。
$data = [ 'fee' => 90, 'amount' => 100000, 'passphrase' => '{SENDER_PASSPHRASE}', 'recipient' => '{RECIPIENT_WALLET_ADDRESS}', 'vendor_field' => 'TEST MESSAGE' ]; $sign_transaction = (new Transaction); $sign_transaction->setTransaction(new \InfinitySolution\Wallet\Transaction\Transfer); $sign_transaction->data($data); $sign_transaction->network('Mainnet'); $sign_transaction->blockchain('infinity'); $sign_transaction->peer('{IP_PEER}:{PORT}'); $tx = $sign_transaction->build(); $peer = $tx['peer']; $client = new \GuzzleHttp\Client(); $req = $client->post($peer, ['json'=> $tx['transactions']]); $data = $req->getBody()->getContents(); if ($data) { $data = json_decode($data); // This will return an object of ['accept' => ['transaction_id']] }
Webhook
您可以创建、删除和更新webhook事件。您可以设置自己的协议、IP地址和端口。一旦实例化Webhook
事件类,请遵循以下代码。
首先设置webhook到您的节点
$webhook = new Webhook; $webhook->setProtocol({YOUR PROTOCOL}); $webhook->setIP({YOUR NODE SERVER}); $webhook->setPort({YOUR PORT});
示例
$webhook = new Webhook; $webhook->setProtocol('http'); $webhook->setIP('63.250.53.87'); $webhook->setPort('4004');
创建Webhook事件
按照数据结构创建事件
$events = [ [ 'event' => 'transaction.applied', 'target' => 'https://{your_endpoint_post}', 'conditions' => [ [ "key" => "recipientId", "condition" => "eq", "value" => "wallet_address" ] ] ] ];
要创建webhook事件,请将其调用到您的类中
use InfinitySolution\Wallet\Webhook;
在您的控制器或PHP类中,传递事件数组,它将返回boolean
。
$events = [ 'event' => 'transaction.applied', 'target' => 'https://{your_endpoint_post}', 'conditions' => [ [ "key" => "recipientId", "condition" => "eq", "value" => "wallet_address" ] ] ]; (new Webhook)->create($events);
创建多个webhook条件
您可以在每个webhook事件中添加多个条件,通过在array
中添加额外的条件来实现。
$events = [ 'event' => 'transaction.applied', 'target' => 'https://{your_endpoint_post}', 'conditions' => [ [ "key" => "senderPublicKey", "condition" => "eq", "value" => "{YOUR SENDER PUBLIC KEY}" ], [ "key" => "recipientId", "condition" => "eq", "value" => "{YOUR WALLET ADDRESS}" ] ] ]; (new Webhook)->create($events);
获取所有webhook
您可以获取您创建的所有webhook列表。
return (new Webhook)->getAll();
如果您有自己的节点服务器,您可以通过这种方式设置它以获取最新的webhooks。
$webhook = new Webhook; $webhook->setProtocol({YOUR PROTOCOL}); $webhook->setIP({YOUR NODE IP}); $webhook->setPort({YOUR NODE PORT}); return $webhook->getAll();
示例
$webhook = new Webhook; $webhook->setProtocol('http'); $webhook->setIP('63.250.53.87'); $webhook->setPort('4004'); return $webhook->getAll();
删除Webhook
您可以使用此代码删除自己的webhook。如果删除成功,它应该返回一个boolean
。
$webhook = new Webhook; $webhook->delete({WEBHOOK-ID});
示例
$webhook = new Webhook; $webhook->delete('bc983be2-1b8a-4415-a9c3-09fda240928d');
如果您有自己的节点,您可以使用此代码添加自己的协议、IP和端口。
$webhook = new Webhook; $webhook->setProtocol({YOUR PROTOCOL}); $webhook->setIP({YOUR NODE IP}); $webhook->setPort({YOUR NODE PORT}); $webhook->delete({WEBHOOK-ID});
示例
$webhook = new Webhook; $webhook->setProtocol('http'); $webhook->setIP('63.250.53.87'); $webhook->setPort('4004'); $webhook->delete('bc983be2-1b8a-4415-a9c3-09fda240928d');
费用
您可以从自己的节点获取自己的费用。将此添加到您的PHP文件或类中。
use InfinitySolution\Wallet\Fee;
您也可以通过实例化new Fee();
类后添加此命令来自定义协议、对等方和URL费用。
$fees = (new Fee); $fees->setPeer({URL_PEER}); $fees->setProtocol({PROTOCOL}); $fees->setUrlFee({YOUR_URL_FEE}); return $fees->getFees();
示例
$fees = (new Fee); $fees->setPeer('api.infinitysolutions.io'); $fees->setProtocol('https'); $fees->setUrlFee('/api/transactions/fees'); return $fees->getFees();
响应
{ "data": { "1": { "transfer": "90", "secondSignature": "100000", "delegateRegistration": "1000000", "vote": "100", "multiSignature": "100000", "ipfs": "500000", "multiPayment": "100000", "delegateResignation": "100", "htlcLock": "300", "htlcClaim": "0", "htlcRefund": "0" } } }
对等方
您可以通过在您的类或PHP文件中调用此命令来获取您的对等方列表。
use InfinitySolution\Wallet\Peer;
您可以使用此方法来设置自己的节点
$peer = (new Peer); $peer->setIP({YOUR NODE IP}); $peer->setProtocol({YOUR PROTOCOL}); $peer->setUrlParams({YOUR URL PARAMS}); return $peer->getPeers();
示例
$peer = (new Peer); $peer->setIP('api.infinitysolutions.io'); $peer->setProtocol('https'); $peer->setUrlParams('/api/v2/peers'); return $peer->getPeers();
响应
{ "meta": { "count": 23, "pageCount": 1, "totalCount": 23, "next": null, "previous": null, "self": "/peers?page=1&limit=100", "first": "/peers?page=1&limit=100", "last": "/peers?page=1&limit=100" }, "data": [ { "ip": "159.65.199.136", "port": 4002, "ports": { "@arkecosystem/core-webhooks": -1, "@arkecosystem/core-exchange-json-rpc": -1, "@arkecosystem/core-api": 4003, "@arkecosystem/core-wallet-api": 4040 }, "version": "2.6.38", "height": 6678599, "latency": 3 }, { "ip": "89.233.107.30", "port": 4002, "ports": { "@arkecosystem/core-webhooks": -1, "@arkecosystem/core-exchange-json-rpc": -1, "@arkecosystem/core-wallet-api": 4040, "@arkecosystem/core-api": 4003 }, "version": "2.6.38", "height": 6678598, "latency": 4 } ] }