当前位置: 首页 > 编程日记 > 正文

EOS Chain/Wallet RPC API的PHP开发包

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

介绍一个EOS Chain/Wallet RPC API的PHP开发包。

开始

你可以查看EOS的RPC API参考,但要注意缺少一些较新的方法。Wallet RPC API实现EOS v1.1.0 of RPC API reference。此外,这些文档中的一些示例也使用了过时的语法。

安装

composer require manamine/php-eos-rpc-sdk

配置

使用你最喜欢的RPC API主机和KEOSD在项目根目录中创建一个dotenv.env文件。你可以使用env.example作为模板:

cp .env.example .env

有一个漂亮的工厂方法来自动化实例所有依赖项:

$api = (new ChainFactory)->api();
$walapi = (new WalletFactory)->api();
$eos = (new EosRpc($api, $walapi));

示例

为了帮助你入门,运行一个简单的示例,它涵盖了所有API命令。

只需通过cli运行此命令即可查看所有命令的示例输出:

cd examples
php chain.php
php wallet.php
php eosrpc.php

API方法

涵盖了几乎所有区块链和钱包API方法。

区块链API

Get Info

获取与节点相关的最新信息

echo $api->getInfo();

Get Block

获取与区块相关的信息

echo $api->getBlock("1337");

Get Block Header State

获取与块头状态相关的信息

echo $api->getBlockHeaderState("0016e48707b181d93117b07451d9837526eba34a9a37125689fb5a73a5d28a38");

Get Account

获取与帐户相关的信息

$api->getAccount("blockmatrix1");

Get Code

获取智能合约代码

echo $api->getCode("eosio.token");

Get Table Rows

从帐户中获取智能合约数据

echo $api->getTableRows("eosio", "eosio", "producers", ["limit" => 10]);

Get Currency Balance

获取帐户的货币余额

echo $api->getCurrencyBalance("eosio.token", "eosdacserver");

Get Currency Stats

获取货币状态

echo $api->getCurrencyStats("eosio.token", "EOS");

Get ABI

获取账户ABI

echo $api->getAbi("eosio.token");

Get Raw Code and ABI

获取原生代码和ABI

echo $api->getRawCodeAndAbi("eosio.token");

Get Producers

列出生产者

echo $api->getProducers(10);

ABI JSON To Bin

将json序列化为二进制十六进制

echo $api->abiJsonToBin("eosio.token", "transfer", ["blockmatrix1", "blockmatrix1", "7.0000 EOS", "Testy McTest"]);

ABI Bin To JSON

将二进制十六进制序列化为json

echo $api->abiBinToJson("eosio.token", "transfer", "10babbd94888683c10babbd94888683c701101000000000004454f53000000000c5465737479204d6354657374");

Get Required Keys

获取签署交易所需的密钥

echo $api->getRequiredKeys(["expiration" => "2018-08-23T05.00.00","ref_block_num" => 15078,"ref_block_prefix" => 1071971392,"max_net_usage_words" => 0,"delay_sec" => 0,"context_free_actions" => [],"actions" => [["account" => "eosio.token","name" => "transfer","authorization" => [["actor" => "user","permission" => "active"]],"data" => "00000000007015d6000000005c95b1ca102700000000000004454f53000000000c757365722d3e746573746572"]],"transaction_extensions" => []],["EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4"]);

Push Transaction

提交推送一个交易

echo $api->pushTransaction("2018-08-23T05:29:39", "15780", "90170226",["actions" => [["account" => "eosio.token","name" => "transfer","authorization" => [["actor" => "user","permission" => "active"]],"data" => "00000000007015d6000000005c95b1ca102700000000000004454f53000000000c757365722d3e746573746572"]],"signatures" => ["SIG_K1_KaGHyi59BRqfaDUK6424TYEWcUhWxAG7BLCgYC8vwYNgaHgGLpduTUbNQEsfL8xLzboK8W9T2X69bNpqozTQVCbRSNJWFd"]]
);

Push transactions

提交推送一些交易

echo $api->pushTransactions([["compression" => "none","transaction" => ["expiration" => "2018-08-23T06:27:26","ref_block_num" => 22017,"ref_block_prefix" => 3920123292,"context_free_actions" => [],"actions" => [["account" => "eosio.token","name" => "transfer","authorization" => [["actor" => "user","permission" => "active"]],"data" => "00000000007015d6000000005c95b1ca102700000000000004454f53000000000c757365722d3e746573746572"]],"transaction_extensions" => []],"signatures" => ["SIG_K1_JzN9DnpyhKfjoef3C2TZBTPA5b6ftwuEBnBpvzkueVXThJ34PFFpUFgqyayfXjeLRc15JmZmDiMYAFX99hUgX8vkGAYcnx"]],["compression" => "none","transaction" => ["expiration" => "2018-08-23T06:27:26","ref_block_num" => 22017,"ref_block_prefix" => 3920123292,"context_free_actions" => [],"actions" => [["account" => "eosio.token","name" => "transfer","authorization" => [["actor" => "tester","permission" => "active"]],"data" => "000000005c95b1ca00000000007015d6881300000000000004454f53000000000c7465737465722d3e75736572"]],"transaction_extensions" => []],"signatures" => ["SIG_K1_KZ2M4AG59tptdRCpqbwzMQvBv1dce5btJCJiCVVy96fTGepApGXqJAwsi17g8AQdJjUQB4R62PprfdUdRYHGdBqK1z9Sx9"]]]
);

钱包 Wallet APIs

Create

创建具有给定名称的新钱包

echo $walapi->create("testwallet");

Open

打开给定名称的现有钱包

echo $walapi->open("testwallet");

Lock

锁定给定名称的现有钱包

echo $walapi->lock("testwallet");

Lock All

锁定所有现有钱包

echo $walapi->lockAll();

Unlock

使用给定的名称和密码解锁钱包

echo $ walapi-> unlock([“testwallet”,“PW5Jb8RAZP6CBjjMLPser3T8i8k9hZXZkMBJ8kb1p6f6hAg2n68jY”]);

Import Key

将私钥导入给定名称的钱包

echo $walapi->importKey(["testwallet", "5Jmsawgsp1tQ3GD6JyGCwy1dcvqKZgX6ugMVMdjirx85iv5VyPR"]);

Remove Key

从给定名称的钱包中删除密钥对

echo $walapi->removeKey(["testwallet", "PW5Jb8RAZP6CBjjMLPser3T8i8k9hZXZkMBJ8kb1p6f6hAg2n68jY", "EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4"]);

Create Key

创建密钥对并导入

echo $walapi->createKey(["testwallet", "K1"]);

List Wallets

列出所有钱包

echo $walapi->listWallets();

List Keys

列出给定名称和密码的钱包中的所有密钥对

echo $walapi->listKeys(["testwallet", "PW5Jb8RAZP6CBjjMLPser3T8i8k9hZXZkMBJ8kb1p6f6hAg2n68jY"]);

Get Public Keys

列出所有钱包中的所有公钥

echo $walapi->getPublicKeys();

Set Timeout

设置钱包自动锁定超时(以秒为单位)

echo $walapi->setTimeout(60);

Sign Transaction

签署交易

echo $walapi->signTransaction(["expiration" => "2018-08-23T06:35:30","ref_block_num" => 22985,"ref_block_prefix" => 3016594541,"max_net_usage_workds" => 0,"delay_sec" => 0,"context_free_actions" => [],"actions" => [["account" => "eosio.token","name" => "transfer","authorization" => [["actor" => "user","permission" => "active"]],"data" => "00000000007015d6000000005c95b1ca102700000000000004454f53000000000c757365722d3e746573746572"]],"transaction_extensions" => []],["EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4"],"cf057bbfb72640471fd910bcb67639c22df9f92470936cddc1ade0e2f2e7dc4f"
);

EOS Wrapper APIs

Prerequisites

需要设置钱包名称和密码

$eos->setWalletInfo("testwallet", "PW5Jb8RAZP6CBjjMLPser3T8i8k9hZXZkMBJ8kb1p6f6hAg2n68jY");

Push Transaction

推送交易

echo $eos->pushTransaction([["account" => "eosio.token","name" => "transfer","authorization" => [["actor" => "user","permission" => "active"]],"data" => ["from" => "user","to" => "tester","quantity" => "1.0000 EOS","memo" => "memo"]]]
);

Make Transaction

进行交易(对pushTransactions有用)

$trx = $eos->makeTransaction([["account" => "eosio.token","name" => "transfer","authorization" => [["actor" => "user","permission" => "active"]],"data" => ["from" => "user","to" => "tester","quantity" => "1.0000 EOS","memo" => "memo"]]]
);

Push Transactions

推送一些交易

$trx_ids = $eos->pushTransactions([$eos->makeTransaction([["account" => "eosio.token","name" => "transfer","authorization" => [["actor" => "user","permission" => "active"]],"data" => ["from" => "user","to" => "tester","quantity" => "1.0000 EOS","memo" => "memo"]]]),$eos->makeTransaction([["account" => "eosio.token","name" => "transfer","authorization" => [["actor" => "tester","permission" => "active"]],"data" => ["from" => "tester","to" => "user","quantity" => "0.5000 EOS","memo" => "memo"]]])]
);
foreach ($trx_ids as $key => $value) {echo $trx_ids[$key]['transaction_id'] . PHP_EOL;
}

Push Action

推动一个操作

echo $eos->pushAction("eosio", "buyram", ["payer"=>"tester","receiver"=>"tester","quant"=>"1.0000 EOS"], ["actor"=>"tester","permission"=>"active"]);

Transfer

交易支付

echo $eos->transfer("user", "tester", "1.0000 EOS", "memo");

Create Key Pair

创建密钥对并返回

$keyPair = $eos->createKeyPair("K1");
echo "$keyPair[0], $keyPair[1]";

Tests

要运行测试套件,只需执行:

vendor/bin/phpunit

如果您想获得想象并检查代码覆盖率:

vendor/bin/phpunit --coverage-html tests/coverage

如果你真的很无聊,你可能想要运行一些静态分析:

vendor/bin/phpmetrics --report-html="tests/static" .

======================================================================

另外,如果大家觉得开源后续支持和服务有问题,也可以选择这个商业的PHP EOS SDK 开发服务

分享一些以太坊、EOS、比特币等区块链相关的交互式在线编程实战教程:

  • java以太坊开发教程,主要是针对java和android程序员进行区块链以太坊开发的web3j详解。
  • python以太坊,主要是针对python工程师使用web3.py进行区块链以太坊开发的详解。
  • php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和交易等内容。
  • 以太坊入门教程,主要介绍智能合约与dapp应用开发,适合入门。
  • 以太坊开发进阶教程,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
  • C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和交易等。
  • EOS教程,本课程帮助你快速入门EOS区块链去中心化应用的开发,内容涵盖EOS工具链、账户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用各知识点完成一个便签DApp的开发。
  • java比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Java代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Java工程师不可多得的比特币开发学习课程。
  • php比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Php代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Php工程师不可多得的比特币开发学习课程。
  • tendermint区块链开发详解,本课程适合希望使用tendermint进行区块链开发的工程师,课程内容即包括tendermint应用开发模型中的核心概念,例如ABCI接口、默克尔树、多版本状态库等,也包括代币发行等丰富的实操代码,是go语言工程师快速入门区块链开发的最佳选择。

汇智网原创翻译,转载请标明出处。这里是原文EOS Chain/Wallet RPC API的PHP开发包

转载于:https://my.oschina.net/u/2472105/blog/2980707

相关文章:

深入浅出理解Paxos算法

Paxos算法是莱斯利兰伯特(英语:Leslie Lamport,LaTeX中的「La」)于1990年提出的一种基于消息传递且具有高度容错特性的一致性算法。 Paxos算法一开始非常难以理解,但是一旦理解其实也并不难,之所以难理解其…

显示界面的普通仓库

实际脚本如下 procedure xianshi_PTCK(Npc: TNormNpc; Player: TPlayObject);procedure CWPRPTCK_QWP(Npc: TNormNpc; Player: TPlayObject; Args: TArgs); beginplayer.TakebackStorageItem(Args.Int[0]);cangku.xianshi_PTCK(npc,player); end; procedure xianshi_PTCK(Np…

【CTF】实验吧 围在栅栏中的爱

对摩斯密码进行解码&#xff1a;kiqlwtfcqgnsoo QWE是键盘上的前三个&#xff0c;ABC是26个字母的前三个。所以&#xff0c;二者有这样的对应关系。 #include <stdio.h> #include <string.h> int main () {char zc[]"abcdefghijklmnopqrstuvwxyz"; cha…

nginx tomcat https

1.首先确保机器上安装了openssl和openssl-devel #yum install openssl #yum install openssl-devel2. server {listen 443 ssl;server_name vota.swmmotors.com.cn;ssl_certificate cert/vota.swmmotors.com.cn_bundle.crt; #当前conf/目录下ssl_certificate_…

Spring4实战学习笔记

《Spring4实战 第4版》2016年4月新出版的&#xff0c;之前的第三版看起来还是不错的&#xff0c;所以看到新版就直接买下来。 英文版源码地址&#xff1a;Spring in Action, Fourth Edition Covers Spring 4 1.IOC装配Bean 参考【Spring实战4 2.2】&#xff0c;作者提倡无XML…

vmstat 命令

2019独角兽企业重金招聘Python工程师标准>>> 1.用法 vmstat [-a] [-n] [-S unit] [delay [ count]] vmstat [-s] [-n] [-S unit] vmstat [-m] [-n] [delay [ count]] vmstat [-d] [-n] [delay [ count]] vmstat [-p disk partition] [-n] [delay [ count]] vmstat […

【CTF】实验吧 疑惑的汉字

考察的是当铺密码&#xff1a; 王夫 井工 夫口 由中人 井中 夫夫 由中大&#xff1a;67 84 70 123 82 77 125 当铺密码就是一种将中文和数字进行转化的密码&#xff0c;算法相当简单:当前汉字有多少笔画出头&#xff0c;就是转化成数字几。

Date PHP

转载于:https://www.cnblogs.com/liuliang389897172/p/10087895.html

Java多线程的11种创建方式以及纠正网上流传很久的一个谬误

创建线程比较传统的方式是继承Thread类和实现Runnable&#xff0c;也可以用内部类&#xff0c;Lambda表达式&#xff0c;线程池&#xff0c;FutureTask等。 经常面试会问到继承Thread类和实现Runnable的区别&#xff0c;然后网上会流传如下这样的说法&#xff0c;这是错误的。…

【CTF】实验吧 古典密码

一共是35个字符分成5*7或者7*5 最终选择5行7列 首先变动第一行的位置&#xff0c;然后根据第一行变动的位置&#xff0c;依次变动下面的行 OCU{CFT ELXOUYD ECTNGAH OHRNFIE NM}IOTA CTF{COU LTYOUEX CHANGET HEINFOR MATION} CTF{COULTYOUEXCHANGETHEINFORMATION}

对比React Native、dcloud、LuaView三个框架技术(内部)

转载自&#xff1a;http://www.jianshu.com/p/ee1cdb33db8d主要对比React Native和5SDK&#xff08;就是dcloud的SDK&#xff09;两个&#xff1a; 开发语言&#xff1a;三个都是用其他语言来统一开发IOS、android应用的框架技术&#xff0c;其中&#xff0c;React Native是使用…

spring boot 临时文件过期

2019独角兽企业重金招聘Python工程师标准>>> 第一种方案&#xff1a;-Djava.io.tmpdir /xxx 第二种方案&#xff1a; 线上的系统中不能上传文件了&#xff0c;出现如下错误&#xff1a; org.springframework.web.multipart.MultipartException: Could not parse mu…

ASP.NET MVC+Bootstrap个人博客之打造清新分页Helper(三)

0. 没有找到一款中意的分页插件&#xff0c;又不想使用现成的(丑到爆)&#xff0c;所以自己动手造一个吧 先看下效果(其实也不咋滴...)&#xff1a; 有点另类&#xff0c;分页直接是在后台拼接好html&#xff0c;然后发送到前台的&#xff1a; 1. 分页容器&#xff1a; <di…

支撑Java框架的基础技术:泛型,反射,动态代理,cglib

以Spring为例要想看明白他的源码需要彻底理解Java的一些基础技术泛型&#xff0c;反射同时对于一些高级技术例如动态代理&#xff0c;cglib和字节码技术也需要掌握&#xff0c;下面就按章节来一一说清楚这些技术的核心部分&#xff0c;最后手写一个简单的Spring框架。 一.静态代…

【CTF】实验吧 困在栅栏里的凯撒

题目先提到栅栏&#xff0c;再提到凯撒&#xff0c;按照顺序先栅栏解码&#xff0c;再凯撒解码。 一般密码的开头不是flag就是key或者ctf 所以选择“6栏”&#xff0c;在进行凯撒解码 在所有组合中&#xff0c;发现CTF即为flag

经典算法书籍推荐以及算法书排行【算法四库全书】

经典算法书籍推荐以及算法书排行【算法四库全书】 作者&#xff1a;霞落满天 https://linuxstyle.blog.csdn.net/ https://blog.csdn.net/21aspnet 行文方式&#xff1a;类似《四库全书》截取经典算法书目录和精华篇章 版权说明&#xff1a;本文于2019年5月5日首发于CS…

【CTF】实验吧 Fair-Play

它的标题就是题解的提示&#xff1a;Play-Fair Playfair解密算法首先将密钥填写在一个5*5的矩阵中&#xff08;去Q留Z&#xff09;&#xff0c;矩阵中其它未用到的字母按顺序填在矩阵剩余位置中&#xff0c;根据替换矩阵由密文得到明文。 对密文解密规则如下&#xff1a; 1 若c…

【DAY23】JVM与反射的学习笔记

JVM:-----------------1.JVM: java virtual machine.2.class file *.class3.ClassLoader4.runtime data area运行时数据区。1.Method area : 方法区.(shared)供所有线程共享.2.heap(shared):供所有线程共享.3.java stack(栈区)独占的。4.native method stack(本地方法栈)独占5.…

BZOJ2281:[SDOI2011]黑白棋(博弈论,组合数学,DP)

Description 小A和小B又想到了一个新的游戏。这个游戏是在一个1*n的棋盘上进行的&#xff0c;棋盘上有k个棋子&#xff0c;一半是黑色&#xff0c;一半是白色。最左边是白色棋子&#xff0c;最右边是黑色棋子&#xff0c;相邻的棋子颜色不同。小A可以移动白色棋子&#xff0c;小…

高性能微服务架构设计模式@霞落满天

高性能微服务架构设计模式 主讲&#xff1a;霞落满天 现在企业开发都是微服务架构&#xff0c;但是有很多问题&#xff0c;比如分布式定义&#xff0c;分布式的微服务怎么拆分&#xff0c;什么时候拆分&#xff0c;怎么做到高性能&#xff0c;中台怎么设计&#xff0c;读写分…

【数据结构】顺序栈的实现(C语言)

栈的基本概念及其描述 栈是一种特殊的线性表&#xff0c;规定它的插入运算和删除运算均在线性表的同一端进行&#xff0c;进行插入操作和删除操作的那一端称为栈顶&#xff0c;另一端称为栈底。 栈的插入操作和删除操作分别称为进栈和出栈。 FILO&#xff08;First In Last …

iOS绘制图片与文字

2019独角兽企业重金招聘Python工程师标准>>> #####绘制图片与文字 #####1.绘制图片&#xff0c;直接代码说明 加载图片 #pragma mark - 小黄人 -(void) drawImage:(CGRect) rect{UIImage *image[UIImage imageNamed:"黄人"];//图片有可能显示不全&#xf…

php-fpm慢执行日志

vim /usr/local/php-fpm/etc/php-fpm.d/www.conf//加入如下内容request_slowlog_timeout 1slowlog /usr/local/php-fpm/var/log/www-slow.log 测试&#xff1a;/usr/local/php-fpm/sbin/php-fpm -t/etc/init.d/php-fpm reloadls ../../var/log/ //生成日志php-fpm.log www-sl…

spring springboot springcloud常用注解

SpringBootApplication 组合注解&#xff0c;用在启动类上&#xff0c;源码&#xff1a; Retention(RetentionPolicy.RUNTIME) SpringBootConfiguration EnableAutoConfiguration ComponentScan public interface SpringBootApplication SpringBootConfiguration Configurat…

解决eclipse ctrl+鼠标左键不能用

选择【Window】菜单 Preferences ——>General——>Editors——>Text Editors——>Hyperlinking 把勾都点上,然后确定KEY 值为 crtl

【数据结构】顺序队列的实现(C语言)

队列的基本概念及其描述 队列是一种特殊的线性表&#xff0c;它的特殊性在于队列的插入和删除操作分别在表的两端进行。 插入的那一端称为队尾&#xff0c;删除的那一端称为队首。队列的插入操作和删除操作分别称为进队和出队。 先进先出&#xff08;First In First Out&…

ethereumjs/ethereumjs-vm-2-API文档

https://github.com/ethereumjs/ethereumjs-vm/blob/master/docs/index.md vm.runBlockchain Processes blocks and adds them to the blockchain 处理区块并将其添加到区块链中 Parameters输入参数 blockchain Blockchain A blockchain that to process 一个处理的区块链cb Fu…

qt 拖拽 修改大小(二)

最近项目需要实现windows下橡皮筋的效果&#xff0c;所以对此做了一些了解&#xff0c;特此记录。 首先windows系统是支持橡皮筋效果的&#xff0c;需要使用win32方 法&#xff1a;SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, showFullWindow, NULL, 0);showFullWindow是一个…

互联网大厂技术面试内幕@霞落满天

很多求职者往往并非因为技术不好&#xff0c;而是没有掌握面试的技巧导致不能把握机会&#xff0c;本课程的目的就是本课程先通过比较真实的好简历和不好的简历让大家明白自己的简历有哪些问题&#xff0c;事实上简历是大厂的敲门砖&#xff0c;非常重要&#xff0c;很多人得不…

【数据结构】顺序表的应用(1)(C语言)

问题&#xff1a; 1.将顺序表(a1,a2,…,an)重新排列以a1为界的两部分&#xff1a;a1前面的值均比a1小&#xff0c;a1后面的值均比a1大&#xff08;这里假设数据元素的类型具有可比性&#xff0c;不妨设为整型&#xff09;。 头文件与该头文件一样&#xff1a;【数据结构】顺序…