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

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); } }

编辑eth/migrations/1_initial_migration.js部署脚本,把HelloWorld设置到文件中

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

编辑eth/truffle-config.js配置文件,设置我们稍后要部署智能合约的位置,内容如下:

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文件,内容如下:

<?phprequire('./vendor/autoload.php');useWeb3\Web3;useWeb3\Contract;//浏览器友好的变量输出functiondump($var){ ob_start(); var_dump($var); $output = ob_get_clean();if(!extension_loaded('xdebug')) { $output = preg_replace("/\]\=\>\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版)”](http://www.weiphp.cn/home/index/course_detail/id/8/pbid/21)主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账开发以及过滤器和事件等内容。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值