EOS Chain/Wallet RPC API的PHP開發(fā)包

介紹一個(gè)EOS Chain/Wallet RPC API的PHP開發(fā)包招狸。

開始

你可以查看EOS的RPC API參考曹仗,但要注意缺少一些較新的方法。Wallet RPC API實(shí)現(xiàn)EOS v1.1.0 of RPC API reference扫腺。此外愁茁,這些文檔中的一些示例也使用了過時(shí)的語法蚕钦。

安裝

composer require manamine/php-eos-rpc-sdk

配置

使用你最喜歡的RPC API主機(jī)和KEOSD在項(xiàng)目根目錄中創(chuàng)建一個(gè)dotenv.env文件。你可以使用env.example作為模板:

cp .env.example .env

有一個(gè)漂亮的工廠方法來自動(dòng)化實(shí)例所有依賴項(xiàng):

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

示例

為了幫助你入門鹅很,運(yùn)行一個(gè)簡單的示例嘶居,它涵蓋了所有API命令。

只需通過cli運(yùn)行此命令即可查看所有命令的示例輸出:

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

API方法

涵蓋了幾乎所有區(qū)塊鏈和錢包API方法促煮。

區(qū)塊鏈API

Get Info

獲取與節(jié)點(diǎn)相關(guān)的最新信息

echo $api->getInfo();

Get Block

獲取與區(qū)塊相關(guān)的信息

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

Get Block Header State

獲取與塊頭狀態(tài)相關(guān)的信息

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

Get Account

獲取與帳戶相關(guān)的信息

$api->getAccount("blockmatrix1");

Get Code

獲取智能合約代碼

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

Get Table Rows

從帳戶中獲取智能合約數(shù)據(jù)

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

Get Currency Balance

獲取帳戶的貨幣余額

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

Get Currency Stats

獲取貨幣狀態(tài)

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

列出生產(chǎn)者

echo $api->getProducers(10);

ABI JSON To Bin

將json序列化為二進(jìn)制十六進(jìn)制

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

ABI Bin To JSON

將二進(jìn)制十六進(jìn)制序列化為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

提交推送一個(gè)交易

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

創(chuàng)建具有給定名稱的新錢包

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

Open

打開給定名稱的現(xiàn)有錢包

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

Lock

鎖定給定名稱的現(xiàn)有錢包

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

Lock All

鎖定所有現(xiàn)有錢包

echo $walapi->lockAll();

Unlock

使用給定的名稱和密碼解鎖錢包

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

Import Key

將私鑰導(dǎo)入給定名稱的錢包

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

Remove Key

從給定名稱的錢包中刪除密鑰對

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

Create Key

創(chuàng)建密鑰對并導(dǎo)入

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

設(shè)置錢包自動(dòng)鎖定超時(shí)(以秒為單位)

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

需要設(shè)置錢包名稱和密碼

$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

進(jìn)行交易(對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

推動(dòng)一個(gè)操作

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

創(chuàng)建密鑰對并返回

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

Tests

要運(yùn)行測試套件,只需執(zhí)行:

vendor/bin/phpunit

如果您想獲得想象并檢查代碼覆蓋率:

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

如果你真的很無聊菠齿,你可能想要運(yùn)行一些靜態(tài)分析:

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

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

另外佑吝,如果大家覺得開源后續(xù)支持和服務(wù)有問題,也可以選擇這個(gè)商業(yè)的PHP EOS SDK 開發(fā)服務(wù)

分享一些以太坊绳匀、EOS芋忿、比特幣等區(qū)塊鏈相關(guān)的交互式在線編程實(shí)戰(zhàn)教程:

  • java以太坊開發(fā)教程,主要是針對java和android程序員進(jìn)行區(qū)塊鏈以太坊開發(fā)的web3j詳解疾棵。
  • python以太坊戈钢,主要是針對python工程師使用web3.py進(jìn)行區(qū)塊鏈以太坊開發(fā)的詳解。
  • php以太坊是尔,主要是介紹使用php進(jìn)行智能合約開發(fā)交互殉了,進(jìn)行賬號創(chuàng)建、交易拟枚、轉(zhuǎn)賬薪铜、代幣開發(fā)以及過濾器和交易等內(nèi)容。
  • 以太坊入門教程恩溅,主要介紹智能合約與dapp應(yīng)用開發(fā)隔箍,適合入門。
  • 以太坊開發(fā)進(jìn)階教程脚乡,主要是介紹使用node.js鞍恢、mongodb、區(qū)塊鏈每窖、ipfs實(shí)現(xiàn)去中心化電商DApp實(shí)戰(zhàn)帮掉,適合進(jìn)階。
  • C#以太坊窒典,主要講解如何使用C#開發(fā)基于.Net的以太坊應(yīng)用蟆炊,包括賬戶管理、狀態(tài)與交易瀑志、智能合約開發(fā)與交互涩搓、過濾器和交易等污秆。
  • EOS教程,本課程幫助你快速入門EOS區(qū)塊鏈去中心化應(yīng)用的開發(fā)昧甘,內(nèi)容涵蓋EOS工具鏈良拼、賬戶與錢包、發(fā)行代幣充边、智能合約開發(fā)與部署庸推、使用代碼與智能合約交互等核心知識點(diǎn),最后綜合運(yùn)用各知識點(diǎn)完成一個(gè)便簽DApp的開發(fā)浇冰。
  • java比特幣開發(fā)教程贬媒,本課程面向初學(xué)者,內(nèi)容即涵蓋比特幣的核心概念肘习,例如區(qū)塊鏈存儲际乘、去中心化共識機(jī)制、密鑰與腳本漂佩、交易與UTXO等脖含,同時(shí)也詳細(xì)講解如何在Java代碼中集成比特幣支持功能,例如創(chuàng)建地址投蝉、管理錢包养葵、構(gòu)造裸交易等,是Java工程師不可多得的比特幣開發(fā)學(xué)習(xí)課程墓拜。
  • php比特幣開發(fā)教程港柜,本課程面向初學(xué)者请契,內(nèi)容即涵蓋比特幣的核心概念咳榜,例如區(qū)塊鏈存儲、去中心化共識機(jī)制爽锥、密鑰與腳本涌韩、交易與UTXO等,同時(shí)也詳細(xì)講解如何在Php代碼中集成比特幣支持功能氯夷,例如創(chuàng)建地址臣樱、管理錢包、構(gòu)造裸交易等腮考,是Php工程師不可多得的比特幣開發(fā)學(xué)習(xí)課程雇毫。
  • tendermint區(qū)塊鏈開發(fā)詳解,本課程適合希望使用tendermint進(jìn)行區(qū)塊鏈開發(fā)的工程師踩蔚,課程內(nèi)容即包括tendermint應(yīng)用開發(fā)模型中的核心概念棚放,例如ABCI接口、默克爾樹馅闽、多版本狀態(tài)庫等飘蚯,也包括代幣發(fā)行等豐富的實(shí)操代碼馍迄,是go語言工程師快速入門區(qū)塊鏈開發(fā)的最佳選擇。

匯智網(wǎng)原創(chuàng)翻譯局骤,轉(zhuǎn)載請標(biāo)明出處攀圈。這里是原文EOS Chain/Wallet RPC API的PHP開發(fā)包

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市峦甩,隨后出現(xiàn)的幾起案子赘来,更是在濱河造成了極大的恐慌,老刑警劉巖穴店,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撕捍,死亡現(xiàn)場離奇詭異,居然都是意外死亡泣洞,警方通過查閱死者的電腦和手機(jī)忧风,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來球凰,“玉大人狮腿,你說我怎么就攤上這事∨凰撸” “怎么了缘厢?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長甩挫。 經(jīng)常有香客問我贴硫,道長,這世上最難降的妖魔是什么伊者? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任英遭,我火速辦了婚禮,結(jié)果婚禮上亦渗,老公的妹妹穿的比我還像新娘挖诸。我一直安慰自己,他們只是感情好法精,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布多律。 她就那樣靜靜地躺著,像睡著了一般搂蜓。 火紅的嫁衣襯著肌膚如雪狼荞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天帮碰,我揣著相機(jī)與錄音相味,去河邊找鬼。 笑死收毫,一個(gè)胖子當(dāng)著我的面吹牛攻走,可吹牛的內(nèi)容都是我干的殷勘。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼昔搂,長吁一口氣:“原來是場噩夢啊……” “哼玲销!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起摘符,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤贤斜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后逛裤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瘩绒,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年带族,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了锁荔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,789評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蝙砌,死狀恐怖阳堕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情择克,我是刑警寧澤恬总,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站肚邢,受9級特大地震影響壹堰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜骡湖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一贱纠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧勺鸦,春花似錦并巍、人聲如沸目木。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽刽射。三九已至军拟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間誓禁,已是汗流浹背懈息。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留摹恰,地道東北人辫继。 一個(gè)月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓怒见,卻偏偏與公主長得像,于是被迫代替她去往敵國和親姑宽。 傳聞我的和親對象是個(gè)殘疾皇子遣耍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容