php工程师如何利用web3开发以太坊应用

jimi2018 · · 328 次点击 · 开始浏览   
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。
web3.php是一个PHP接口,主要用于与以太坊区块链及其生态系统进行交互. ### 安装 通过Composer来管理依赖关系,首先将`minimum-stability`设置为`dev` ``` "minimum-stability": "dev" ``` 然后执行: ``` composer require sc0vu/web3.php dev-master ``` 或者你可以在`composer.json`中添加这行。 <!--more--> ``` "sc0vu/web3.php": "dev-master" ``` ### 用法 #### 实例 ``` use Web3\Web3; $web3 = new Web3('http://localhost:8545'); ``` #### 接口调用 ``` use Web3\Web3; use Web3\Providers\HttpProvider; use Web3\RequestManagers\HttpRequestManager; $web3 = new Web3(new HttpProvider(new HttpRequestManager('http://localhost:8545'))); // timeout $web3 = new Web3(new HttpProvider(new HttpRequestManager('http://localhost:8545', 0.1))); ``` #### 使用回调函数调用rpc ``` $web3->clientVersion(function ($err, $version) { if ($err !== null) { // do something return; } if (isset($client)) { echo 'Client version: ' . $version; } }); ``` #### eth ``` use Web3\Web3; $web3 = new Web3('http://localhost:8545'); $eth = $web3->eth; ``` 这样也行: ``` use Web3\Eth; $eth = new Eth('http://localhost:8545'); ``` #### net ``` use Web3\Web3; $web3 = new Web3('http://localhost:8545'); $net = $web3->net; ``` 或者 ``` use Web3\Net; $net = new Net('http://localhost:8545'); ``` #### batch web3 ``` $web3->batch(true); $web3->clientVersion(); $web3->hash('0x1234'); $web3->execute(function ($err, $data) { if ($err !== null) { // do something // it may throw exception or array of exception depends on error type // connection error: throw exception // json rpc error: array of exception return; } // do something }); ``` eth ``` $eth->batch(true); $eth->protocolVersion(); $eth->syncing(); $eth->provider->execute(function ($err, $data) { if ($err !== null) { // do something return; } // do something }); ``` net ``` $net->batch(true); $net->version(); $net->listening(); $net->provider->execute(function ($err, $data) { if ($err !== null) { // do something return; } // do something }); ``` personal ``` $personal->batch(true); $personal->listAccounts(); $personal->newAccount('123456'); $personal->provider->execute(function ($err, $data) { if ($err !== null) { // do something return; } // do something }); ``` #### 智能合约Contract ``` use Web3\Contract; $contract = new Contract('http://localhost:8545', $abi); // deploy contract $contract->bytecode($bytecode)->new($params, $callback); // call contract function $contract->at($contractAddress)->call($functionName, $params, $callback); // change function state $contract->at($contractAddress)->send($functionName, $params, $callback); // estimate deploy contract gas $contract->bytecode($bytecode)->estimateGas($params, $callback); // estimate function gas $contract->at($contractAddress)->estimateGas($functionName, $params, $callback); // get constructor data $constructorData = $contract->bytecode($bytecode)->getData($params); // get function data $functionData = $contract->at($contractAddress)->getData($functionName, $params); ``` ### 将值分配给外部域(从回调域到域外) ``` 由于和JavaScript回调不同,如果需要将值赋值到域外,我们需要给回调赋值。 $newAccount = ''; $web3->personal->newAccount('123456', function ($err, $account) use (&$newAccount) { if ($err !== null) { echo 'Error: ' . $err->getMessage(); return; } $newAccount = $account; echo 'New account: ' . $account . PHP_EOL; }); ``` 为了解决php程序员学习以太坊的需求,我们提供很受欢迎的互动教程: [php以太坊](http://xc.hubwiz.com/course/5b36629bc02e6b6a59171de3?affid=719phperzh),主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和事件等内容。
328 次点击  
加入收藏 微博
5 回复  |  直到 2019-03-18 06:33:07
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet