当前位置:   article > 正文

区块链-web3与智能合约交互实例_web3.0智能合约例子

web3.0智能合约例子

        其它相关知识在以下链接博客。   

             https://blog.csdn.net/qq_40452317/article/details/87988463

搭建测试链

          我们选择的Ganache(在此之前使用的是testrpc,Ganache属于它的升级版),一个图形化测试软件(也有命令行版本),可以一键在本地搭建以太坊区块链测试环境,并且将区块链的状态通过图形界面显示出来,Ganache的运行界面如下图所示.

 

创建智能合约

       以太坊官方在线编译器:

                     https://remix.ethereum.org

  1. pragma solidity ^0.4.21;
  2. contract InfoContract {
  3. string fName;
  4. uint age;
  5. function setInfo(string _fName, uint _age) public {
  6. fName = _fName;
  7. age = _age;
  8. }
  9. function getInfo() public constant returns (string, uint) {
  10. return (fName, age);
  11. }
  12. }

      编译器结构如下图,在没有错误的情况下,点击run,编译环境是web3  provider。会出现弹框,将其地址改为上图Ganache中的地址。

 

安装Web3

创建项目

使用 node.js 的包管理工具 npm 初始化项目,创建package.json 文件,其中保存了项目需要的相关依赖环境。

一路按回车直到项目创建完成。最后,运行下面命令安装web.js:

注意: 在实际安装过程中我发现web3在安装完成后并没有 /node_modules/web3/dist/we3.min.js 文件,这个问题在 issue#1041中有体现,但官方好像一直没解决。不过可以在这里下载所需的文件,解压后将dist文件夹的内容拷贝到 /node_modules/web3路径下。

创建 前端

创建index.html

     注意abi和合约地址。在代码中有相关备注

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <title>Document</title>
  8. <link rel="stylesheet" type="text/css" href="main.css">
  9. <script src="./node_modules/web3/dist/web3.min.js"></script>
  10. </head>
  11. <body>
  12. <div class="container">
  13. <h1>Info Contract</h1>
  14. <h2 id="info"></h2>
  15. <label for="name" class="col-lg-2 control-label">Name</label>
  16. <input id="name" type="text">
  17. <label for="name" class="col-lg-2 control-label">Age</label>
  18. <input id="age" type="text">
  19. <button id="button">Update Info</button>
  20. </div>
  21. <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
  22. <script>
  23. if (typeof web3 !== 'undefined') {
  24. web3 = new Web3(web3.currentProvider);
  25. } else {
  26. // set the provider you want from Web3.providers
  27. web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:7545"));
  28. }
  29. web3.eth.defaultAccount = web3.eth.accounts[0];
  30. //abi
  31. var infoContract = web3.eth.contract([
  32. {
  33. "constant": false,
  34. "inputs": [
  35. {
  36. "name": "_fName",
  37. "type": "string"
  38. },
  39. {
  40. "name": "_age",
  41. "type": "uint256"
  42. }
  43. ],
  44. "name": "setInfo",
  45. "outputs": [],
  46. "payable": false,
  47. "stateMutability": "nonpayable",
  48. "type": "function"
  49. },
  50. {
  51. "constant": true,
  52. "inputs": [],
  53. "name": "getInfo",
  54. "outputs": [
  55. {
  56. "name": "",
  57. "type": "string"
  58. },
  59. {
  60. "name": "",
  61. "type": "uint256"
  62. }
  63. ],
  64. "payable": false,
  65. "stateMutability": "view",
  66. "type": "function"
  67. }
  68. ]);
  69. var info = infoContract.at('0xb42fd1b7fe64aad7a7b00696f7f93be37de1d92e'); //合约地址
  70. info.getInfo(function(error, result){
  71. if(!error)
  72. {
  73. $("#info").html(result[0]+' ('+result[1]+' years old)');
  74. console.log(result);
  75. }
  76. else
  77. console.error(error);
  78. });
  79. $("#button").click(function() {
  80. info.setInfo($("#name").val(), $("#age").val());
  81. console.log($("#name").val(),$("#age").val());
  82. console.info(typeof($("#name").val()));
  83. console.info(typeof($("#age").val()));
  84. location.reload();
  85. $("#info").html(result[0]+' ('+result[1]+' years old)');
  86. });
  87. </script>
  88. </body>
  89. </html>

创建main.css

  1. body {
  2. background-color:#F0F0F0;
  3. padding: 2em;
  4. font-family: 'Raleway','Source Sans Pro', 'Arial';
  5. }
  6. .container {
  7. width: 50%;
  8. margin: 0 auto;
  9. }
  10. label {
  11. display:block;
  12. margin-bottom:10px;
  13. }
  14. input {
  15. padding:10px;
  16. width: 50%;
  17. margin-bottom: 1em;
  18. }
  19. button {
  20. margin: 2em 0;
  21. padding: 1em 4em;
  22. display:block;
  23. }
  24. #info {
  25. padding:1em;
  26. background-color:#fff;
  27. margin: 1em 0;
  28. }
  29. #loader {
  30. width: 100px;
  31. display:none;
  32. }

运行成功: 

 

          完整文件:

                                   

       相关资料在网上查找。

       关于其他知识在上篇博客中已经写完,可以参照一下链接博客。

                 https://blog.csdn.net/qq_40452317/article/details/87988463

 

 

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/667465
推荐阅读
相关标签
  

闽ICP备14008679号