欢迎光临外链推广平台,一个优秀的外链推广平台,为你解决获客难题!

区块链DAPP2快速入门:HelloWorld 实例开发(PHP版)

作者:jcmp      发布时间:2021-05-09      浏览量:0
2.1 合约编写在命令行中进入上面创建的

2.1 合约编写

在命令行中进入上面创建的eth目录下,初始化一个新的智能合约项目。

truffle init

如果报错,请先试试以下命令

npminstall-g request

在eth/contracts目录中新建一个HelloWorld.sol文件,代码如下。

pragma solidity >=0.4.21;contract HelloWorld {stringname = 'World';functionsay()public view returns (stringmemory) {    return strConcat("Hello ",name);  }functionset(stringmemory _name) public{    name = _name;  }functiongetName()public view returns (stringmemory) {    return name;  }functionstrConcat(stringmemory_a,stringmemory_b)pure internal returns (stringmemory){bytesmemory _ba =bytes(_a);bytesmemory _bb =bytes(_b);stringmemory ret =newstring(_ba.length +_bb.length);bytesmemory bret =bytes(ret);    uint k =0;    for (uint i =0; i <_ba.length; i++)bret[k++]= _ba[i];    for (uint i =0; i <_bb.length; i++) bret[k++]= _bb[i];    returnstring(ret);  } }

constMigrations = artifacts.require("Migrations");constHelloWorld = artifacts.require("HelloWorld");module.exports =function(deployer){  deployer.deploy(Migrations);  deployer.deploy(HelloWorld);};

module.exports = {    networks:{        development:{          host:"127.0.0.1",          port:7545,          network_id:"*"}    }};

2.2 合约编译

代码准备就绪,在cmd命令行中开始编译

truffle compile

2.3 合约部署

然后回到Truffle,输入truffle migrate开始部署。

成功后最终生成的日志中会有以下内容(参数值每个人的可能是不同的),重点记录下合约地址(contract address),后续会有用。

Deploying'HelloWorld'----------------------  > transactionhash:0x32239d601b66877881b333c1ba92c823a07ec6fd02e7c9c866bd942371873eb5>Blocks:0Seconds:0> contractaddress:0x89e2925efD0A0247CDC641e961EeF319652ec1C2> blocknumber:2> blocktimestamp:1575429025>account:0x5cc9023B717E71f82FE6e378Bff386446A7c8ED7>balance:99.98511256> gasused:480631> gasprice:20gwei  > valuesent:0ETH  > totalcost:0.00961262ETH。

2.4 PHP调用合约

进入web目录下,创建一个index.php文件,内容如下:

\n(\s+)/m","] => ", $output);        $output ='

'. htmlspecialchars($output, ENT_QUOTES) .'
';    }echo'';echo($output);}$web3 =newWeb3('http://127.0.0.1:7545/');$eth = $web3->eth;$json = file_get_contents('../eth/build/contracts/HelloWorld.json');$json = json_decode($json,true);//dump($json);$networks = array_pop($json['networks']);$contractAddress = $networks['address'];//dump($contractAddress);$abi = json_encode($json['abi']);//dump($abi);$contract =newContract($web3->provider, $abi);$contract->at($contractAddress)->call('say',function($err, $result){if($err !==null) {        dump("获取值错误: ". $err->getMessage());    }if($result) {        dump("设置前的值: ");        dump($result);    }});$fromAccount ='0xC60e2e50c51609BB1E7A511Fc1cB971f693B7138';$contract->at($contractAddress)->send('set','weiphp', ['from'=> $fromAccount],function($err, $result)use($contract, $contractAddress){if($err !==null) {        dump("设置报错: ". $err->getMessage());    }if($result) {        dump("设置返回的ID: ");        dump($result);    }});$contract->at($contractAddress)->call('say',function($err, $result){if($err !==null) {        dump("获取值错误: ". $err->getMessage());    }if($result) {        dump("设置后的值: ");        dump($result);    }});$contract->at($contractAddress)->call('getName',function($err, $result){if($err !==null) {        dump("直接获取值报错: ". $err->getMessage());    }if($result) {        dump("直接获取的值: ");        dump($result);    }});

2.5 调试网页

启动xampp,然后启用apache

在浏览器中输入网址: http://localhost/helloworld/web/index.php。

就可以看到调试结束

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

大家可以到下面教程的网址来观看课程 “区块链DAPP开发入门课程(PHP版)” 主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账开发以及过滤器和事件等内容。