infinitysoftwareltd/walletlibrary

用于创建infi/hedge钱包的自定义包

v2.1.4 2022-02-05 09:13 UTC

README

N|Solid

Build Status

处理创建支持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
    }
  ]
}