USDT block chain PHP development package OmniTool

OmniTool development kit for PHP application applies to a rapid increase in the ability to support Omni Layer / USDT digital assets that support the use of scenarios Own Omni Layer node also supports lightweight deployment scenarios based on third party API services and offline transactions bare . Download: Omni / USDT PHP development package .

1, OmniTool Development Kit Introduction

OmniTool Development Kit includes the following main features:

  • Omni Layer comprehensive RPC package node
  • Support Node using its own or third-party service to obtain a set of specified address utxo
  • Support for offline generation omni transfer tokens naked trading
  • Support Node using its own or third-party service broadcasting bare transaction

OmniTool support Omnicored local node deployments, and also supports blockchain.info, btc.com other open API provides, to add support for other third-party service is also very simple, only need to refer to code that implements the following interfaces:

  • UtxoCollectorInterface: utxo collector
  • UtxoSelectorInterface: utxo Filter
  • BroadcasterInterface: bare transaction broadcaster
  • ExplorerInterface: Data Query Interface

OmniTool package running Php 7.1+ environment, current version 1.0.0, the main classes / interfaces and relationships as shown below:

12961146-9aecd68093e9ae57.png
omnitool arch

The main code file list OmniTool see: http://sc.hubwiz.com/codebag/omni-php-lib/

2, RpcClient class instructions

RpcClient class encapsulates Omni Layer RPC interface protocol. When you create a RpcClient objects need to pass contain valid identity information node RPC URL. For example, assume omnicored node software is installed in the machine is as follows:

  • rpcuser:user
  • rpcpassword:123456
  • rpcport:8332

You can use the following code to instantiate RpcClient:

use \OmniTool\RpcClient;

$client = new RpcClient(
            'http://user:123456@localhost:8332'   /*节点RPC接口的URL*/
          );

Omni Core nodes existing outside Bitcoin RPC interface, additional expansion interface for operating the data Omni layer, these extended RPC interface uses omni_a prefix to the original segment in the Bitcoin RPC interface. In order to facilitate the two layers of RPC call segment, we are introduced RpcClient protocol submodule concept, the original Bitcoin RPC interface and Omni extended RPC interface to attach a sub-module and omni btc submodules.

For example, obtaining an address token USDT balance requires Omni layer omni_getbalance call, the RPC call instance corresponding RpcClient omnisubmodule getBalance()method. The following code fetches the address 1EXoDusjGwvnjZUyKkxZ4UHEf77z6A5S4Pof USDT (Asset ID: 31) Balance:

$ret = $client->omni->getBalance(
          '1EXoDusjGwvnjZUyKkxZ4UHEf77z6A5S4P',   /*地址*/
          31                                      /*资产ID:USDT*/
       );

Similarly, the use omni_send call to perform simple USDT transfers the call to the corresponding RpcClient omni sub-module instance send()method. The following code from the address 3M9qvHKtgARhqcMtM5cRT9VaiDJ5PSfQGYto the address 37FaKponF7zqoMLUjEiko25pDiuVH5YLEa
transferred 100.0 USDT tokens:

$ret = $client->omni->send(
          '3M9qvHKtgARhqcMtM5cRT9VaiDJ5PSfQGY',    /*代币转出地址*/
          '37FaKponF7zqoMLUjEiko25pDiuVH5YLEa',    /*代币转入地址*/
          31,                                      /*代币ID:USDT*/
          "100.00"                                 /*转移的代币数量*/
       );

Original bitoin RPC interface layer can be accessed by the RpcClient btc submodule. For example, using listunspent call to get the local node in the specified address utxo:

$ret = $client->btc->listUnspent(
          6,                                        /*最小确认数*/
          999999,                                   /*最大确认数*/
          ['mgnucj8nYqdrPFh2JfZSB1NmUThUGnmsqe']    /*地址清单*/  
       );

Development package demo/rpc-demo.phpsample code uses RpcClient class full presentation in the issuance and transfer of tokens Omni functional layer, if you plan to build your own Omni Core nodes, we believed that this example will be very helpful.

3, Wallet-based instructions

If you do not want to build your own Omni Core nodes, but hope based on third party API for your PHP applications to increase support for Omni Layer / USDT, then the easiest way is to use an offline transaction entry class Wallet .

Wallet-based primary role is to create and broadcast according Omni transaction token transfer bare or naked bit transfer transaction credits, using its basic steps are as follows:

  • Use Wallet::cloud()to create an instance of a Wallet API support cloud services static method
  • Using the addKey()method of the necessary private key Wallet added to the instance, for example, turn out private address, the private key because the Wallet needs to sign the transaction bare
  • Using the omniSendTx()method of generating bare Omni token transfer transactions, or using btcSendTx()methods bare bit transfer transaction credits
  • Using the broadcast()method broadcast naked trading

3.1 Omni token transfer

Omni token transfer using Wallet sample code to achieve the following, description See note:

<?php
require('../vendor/autoload.php');

use OmniTool\Wallet;                              /*引入开发包*/

$wallet = Wallet::cloud(
            './demo.wallet',                      /*钱包文件地址,自动创建*/
            'testnet'                             /*网络ID*/
          );
$prvKey = '4aec8e45106....00d5c5af494a4e05b';     /*私钥:16进制字符串*/            
$wallet->addKey($prvKey);                         /*将私钥加入钱包,只需加入一次*/

$addressList = $wallet->getAddressList();         /*返回钱包管理的所有地址,数组*/

$rawtx = $wallet->omniSendTx(
            $addressList[0],                      /*发送方地址,私钥必须已经加入钱包*/
            'mgYPLmNuZymK...e2XUNF6VFnT',         /*接收方地址*/
            2,                                    /*转账OMNI代币ID,2:TOMN*/
            '0.000001'                            /*转账OMNI代币数量*/
         );

$ret = $wallet->broadcast($rawtx);                /*广播OMNI裸交易*/
var_dump($ret);

note:

  • Wallet wallet examples of the use of the private key to generate a list of addresses, and uses these to get utxo information from a third party service. Requiring the private key corresponding to the address wallet on chain has utxo exist, Wallet object is to be able to successfully construct bare transaction.
  • Chain transfer same ID should be the target address specified by the Wallet when creating an object, e.g. p2pkh mainnet address, the prefix should be 1

Fee payment address specified Omni trading 3.2

In the Omni protocol layer without having to pay transaction fees, but Omni Exchange embedded bit currency trading still need to pay the fee. By default, the omniSendTx()method uses the sender address Bitcoin payment transaction fees, but can pass additional parameters to specify a different address to pay transaction fees when your PHP applications require multi-account when imputation function, use a unified fee payment address will be easier to manage some.

For example, the following code uses the address mnRo8JyTHDd5NxRb3UvGbAhCBPQTQ4UZ8Wpremium omni trading:

$rawtx = $wallet->omniSendTx(
            $addressList[0],                      /*发送方地址,私钥必须已经加入钱包*/
            'mgYPLmNuZymK...e2XUNF6VFnT',         /*接收方地址*/
            2,                                    /*转账OMNI代币ID,2:TOMN*/
            '0.000001',                           /*转账OMNI代币数量*/
            'mnRo8JyTHDd5...CBPQTQ4UZ8W'          /*交易手续费支付地址*/
         );

note:

  • Even if you specify adequate balance of fee payment address, the sender Omni transaction still must have a small amount of Bitcoin balance (546 SATOSHI), because Omni transaction protocol requires the sender has at least one available UTXO.
  • Fee payment address also addresses the change, the excess will be returned to the token bit address

Bitcoin specified number of transfers 3.3 Omni transactions

Since the transaction request Omni UTXO sender must have available, and therefore in order to facilitate Omni tokens received address may continue to circulate Omni held token, omniSendTx()the method will party address received in the default currency into trace bit (546 SATOSHI), you can modify this default value when calling the method.

For example, the following code into the receiver 1000 SATOSHI:

$rawtx = $wallet->omniSendTx(
            $addressList[0],                      /*发送方地址,私钥必须已经加入钱包*/
            'mgYPLmNuZymK...e2XUNF6VFnT',         /*接收方地址
            2,                                    /*转账OMNI代币ID,2:TOMN*/
            '0.000001',                           /*转账OMNI代币数量*/
            'mnRo8JyTHDd5...CBPQTQ4UZ8W',         /*交易手续费支付地址*/
            1000                                  /*转账比特币数量,单位:SATOSHI*/
         );

3.4 Bitcoin transfers

OmniTool also supports the generation and transfer Bitcoin broadcast naked transactions.

For example, the following code into SATOSHI 1000 to a specified address from the first address receiving purse:

<?php
require('../vendor/autoload.php');

use OmniTool\Wallet;

$wallet = Wallet::cloud('./demo.wallet','testnet');
$addressList = $wallet->getAddressList();

$rawtx = $wallet->btcSendTx(
                    $addressList[0],                /*发送方地址*/
                    'moneyqMan7u...8qVrc9ikLP',     /*接收方地址*/
                    1000,                           /*转账比特币数量,单位:SATOSHI*/
                    500                             /*手续费,单位:SATOSHI*/
                  );                       
echo 'btc rawtx => ' . $rawtx . PHP_EOL;

$ret = $wallet->broadcast($rawtx);                  /*广播裸交易*/

By default, btcSendTx()using the change address as the sender address, other addresses can also be specified as the change address when invoked, for example, the following code creates a new address received the change:

$changeAddress = $wallet->getNewAddress();          /*创建新地址*/
$rawtx = $wallet->btcSendTx(
                    $addressList[0],                /*发送方地址*/
                    'moneyqMan7u...8qVrc9ikLP',     /*接收方地址*/
                    1000,                           /*转账比特币数量,单位:SATOSHI*/
                    500,                            /*手续费,单位:SATOSHI*/
                    $changeAddress                  /*找零地址*/
                  );                       

4, UTXO collector

OmniTool use the interface UtxoCollectorInterfaceto the convention collection capabilities UTXO. Implementation of this interface needs to support the specified address acquired UTXO candidate set, a plurality of addresses can be specified.

Interface method:

  • collect ($ addressList): Extraction and return candidate set UTXO

Parameters $addressListused to declare the list of addresses to collect UTXO, the type of array.

The current implementation class:

  • CloudUtxoCollector: API based on open blockchain.com the implementation Utxo collector
  • LocalUtxoCollector: omnicored node based RPC API implemented Utxo collector

For example, the following code uses the acquired address CloudUtxoCollector mi8BvbK73nDQfaN3acpaFGYQKhfQ5ysKRnUTXO of:

use OmniTool\CloudUtxoCollector;

$collector = new CloudUtxoCollector(
                    'testnet'                       /*测试网*/
                 );
$candidateBag = $collector->collect(
                    ['mi8BvbK73nDQ...KhfQ5ysKRn']   /*地址清单*/
                );

5, UTXO filters

OmniTool use UtxoSelectorInterfaceto agree UTXO filtering capabilities. The need to implement the interface to select the target value from the available candidates UTXO UTXO and returns a new instance UtxoBag.

Interface method:

  • select (candidates): Select consumable UTXO, the object is returned UtxoBag

Parameters $targetdeclared goal to reach the minimum amount, unit: wei.

Parameter $candidatesis set utxo candidates, the object is generally achieved UtxoCollectorInterface collect () UtxoBag the object returned by the call.

The current implementation class:

  • DefaultUtxoSelector

The following code example, using the example of selecting at least 100000 wei DefaultUtxoSelector of UTXO UTXO candidate is deleted from:

use OmniTool\DefaultUtxoSelector;

$selector = new DefaultUtxoSelector();
$selectedBag = $selector->select(
                  100000,                         /*最低目标金额*/
                  $candidateBag                   /*候选UTXO集合*/
               );

Considering the indivisibility UTXO the sum of several UTXO screened out, it is likely to exceed the target amount. You can use UtxoBag example of getTotal()ways to view the total UTXO collection:

echo 'total wei in bag => ' . $selectedBag->getTotal() . PHP_EOL;

6, bare transaction broadcaster

OmniTool use BroadcasterInterfaceto the agreed transaction bare broadcast function. Implementation of this interface should bare the transaction will be broadcast to Omni network.

Interface method:

  • broadcast ($ rawtx): Broadcast bare Trading

Parameters $rawtxused bare transaction statement to be broadcast, the type of hexadecimal string.

The current implementation class:

  • CloudBroadcaster
  • LocalBroadcaster

For example, the following code uses the transaction code CloudBroadcaster bare Omni stream broadcast to the network:

use OmniTool\CloudBroadcaster;

$broadcaster = new CloudBroadcaster(
                      'testnet'                     /*测试网*/
                   );
$ret = $broadcaster->broadcast(
        '01000000011da9283b4...59f58488ac00000000'  /*裸交易*/
       );

7, data query interface

OmniTool use ExplorerInterfaceto agree Omni data query functions.

Interface method:

  • getBtcBalance ($ address): Bitcoin balance query specified address
  • getOmniBalance (propertyId): Omni query specified address token balance

The current implementation class:

  • CloudBroadcaster
  • LocalBroadcaster

For example, the following code uses CloudExplorer inquiry address 1Jekm8ZswQmDhLFMp9cuYb1Kcq26riFp6mbit credits and USDT token Balance Balance:

use OmniTool\CloudExplorer;

$explorer = new CloudExplorer('mainnet');

$address = '1Jekm8ZswQmDhLFMp9cuYb1Kcq26riFp6m';

$balance = $explorer->getBtcBalance($address);
echo 'btc balance => ' . PHP_EOL;

$balance = $explorer->getOmniBalance($address,31);
echo 'usdt balance => ' . $balance['balance']. PHP_EOL;

If you want to learn block chain and building a career in Blockchain Technologies, then check out some of our share of the Ethernet Square, Bitcoin, EOS, Fabric, Tendermint block chain and other interactive online programming tutorials related to actual combat:

  • java tutorial Ethernet Square development , mainly carried out web3j Detailed block chain Ethernet Square development for java and android programmer.
  • Ethernet Square python , python mainly for engineers web3.py be developed by Square block chain Ethernet explain.
  • php Ethernet Square , is to introduce the use of intelligent interaction php development contract, content account creation, transaction, transfer, development and tokens filters and transactions.
  • Ethernet Square introductory tutorial , introduces the intelligent application development contract with dapp for entry.
  • Ethernet Square developing advanced course , is to introduce the use of node.js, mongodb, block chain, ipfs achieve decentralized electricity supplier DApp combat for advanced.
  • ERC721 Square Ethernet confirmed through war , combat courses to develop a digital art creation and sharing DApp of the main line, in-depth explanation Square Ethernet card through non-homogeneity of concepts, standards and development program. ERC-721 standard content includes self-realization, to explain the code base contract OpenZeppelin second development, the actual project uses Truffle, IPFS, to achieve a pass card and go through the center of the card exchange.
  • C # Ethernet Square , mainly on how to use C # .Net development based on Ethernet Square applications, including account management, and transaction status, contract development and intelligent interaction, filters and transactions.
  • Bitcoin java development tutorial , this course is designed for beginners, covering the content that is the core concept of Bitcoin, such as block chain store, decentralized consensus mechanism, key and scripts, trade and UTXO etc., but also explain in detail how Java Bitcoin code integrated support functions, such as creating address, wallet management, structure nude trading, is Java engineers rare Bitcoin development programs of study.
  • php Bitcoin development tutorial , this course is designed for beginners, covering the content that is the core concept of Bitcoin, such as block chain store, decentralized consensus mechanism, key and scripts, trade and UTXO etc., but also explain in detail how to Php Bitcoin code integrated support functions, such as creating address, wallet management, structure nude trading, Php engineer is rare Bitcoin development programs of study.
  • c # Bitcoin development tutorial , this course is designed for beginners, covering the content that is the core concept of Bitcoin, such as block chain store, decentralized consensus mechanism, key and scripts, trade and UTXO etc., but also explain in detail how the C # Bitcoin code integrated support functions, such as creating address, wallet management, structure nude trading, C # engineer is rare Bitcoin development programs of study.
  • EOS introductory tutorial , this course will help you develop quick start EOS block chain decentralized applications, covering EOS tool chain, accounts and wallets, issuing tokens, smart contract development and deployment, use the core knowledge to interact with the contract and other code intelligence point, and finally the integrated use of knowledge points to complete the development of a note DApp.
  • Fun in layman's language development EOS purse , in order to complete the course development process of mobile phone wallet main line EOS, EOS-depth study block chain application development, curriculum content that is covered by the account, calculated EOS block chain resources, intelligence contracts and transactions of the action core concepts, but also explain how to use eosjs and eosjs-ecc development Kit visit EOS block chain, and how to integrate support for the EOS React block chain in front-end applications. Course content easy to understand, very suitable for front-end engineers in-depth study EOS block chain application development.
  • Hyperledger Fabric block chain development explain , this course is designed for beginners, content that is included with the identity of the certificate Hyperledger Fabric MSP services, rights policy, channel configuration and startup, chain code communication interfaces such as core concepts, but also includes Fabric network design, nodejs chain operating practices code and application development, is the best choice for engineers to learn Fabric Nodejs block chain development.
  • Hyperledger Fabric java Detailed block chain development , course for beginners, content that is included Hyperledger Fabric identity certificate and MSP services, rights policy, channel configuration and startup, chain code communication interfaces such as core concepts, but also includes Fabric network design, java chain operating practices code and application development, is the best choice for engineers to learn java Fabric block chain development.
  • tendermint block chain development explain , this course is designed for engineers want to use tendermint block chain were developed, including the core curriculum content that is the concept of tendermint application development model, for example ABCI interfaces, Merkel trees, multi-state version of the library, but also including issuing tokens and other rich practical operation of the code is the best choice language engineers go quick start block chain development.

Reproduced in: https: //www.jianshu.com/p/4f5fe8780d79

Guess you like

Origin blog.csdn.net/weixin_33967071/article/details/91217924