记录学习pet-shop的一些坑

Posted 云灬沙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记录学习pet-shop的一些坑相关的知识,希望对你有一定的参考价值。

pet-shop是一个比较好的小项目用来熟悉truffle以及以太坊开发流程。
首先最大的坑肯定是环境的问题,我的配置:

Truffle v5.3.4 (core: 5.3.4)
Solidity v0.5.16 (solc-js)
Node v14.17.0
Web3.js v1.3.5
ganache-cli@6.12.2 
ubuntu16.04

如果有很多小伙伴出现问题实在解决不了,可以考虑换一下环境

npm uninstall truffle 
npm intsall -g truffle@5.3.4//-g是全局安装,不需要配置环境

首先说一下具体的流程

1.安装truffle和ganache-cli
2.创建文件目录
3.进入之后truffle unbox pet-shop,这时候就有了文件目录和架构以及基本配置文件
4.进入contracts目录下创建和编写智能合约
5.进行合约编译truffle compile,编译完成后会生成build/contracts文件
6.启动ganache-cli
7.在migrate目录下创建部署脚本
8.进行合约部署truffle migrate//这里部署都是在ganache搭建的测试链上,所以区块链必须连接成功才可以继续运行
9.智能合约测试,写合约
10.进行测试truffle test
11.编写js与前端页面进行交互

  • 初始化web3
  • 初始化合约
  • 获取领养的宠物并更新界面
  • 处理adopt()方法

12.配置matemask
13.启动页面npm run dev
14.进行交互

错误集锦及解决方案

  • 1.编写合约时,getAdopters()时需要返回值,教程写的是address[16],solidity版本升级之后,需要标注存储的位置,所以需要在后面加上memory,不需要再使用storage存到链上
  • 2.编写测试合约时,address expected =this;会报错,不可以隐式地转变为地址类型,所以需要进行强转address expected =address(this);
  • 3.前端页面不显示图片,这是因为index.html调用的jquery链接加载不出来,替换源
原来的:<script  src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
新的:<script src="http://libs.baidu.com/jquery/2.1.1/jquery.min.js"></script>
  • 4.连不上metamask,这个是最难受的,一直提示invalid address,调试了半天,出在了js那里,要获取账户地址var account =accounts[0],但是往控制台上输出结果是undefined,所以根本没有获取到账户,检查了之后发现Ganache没有问题,所以尝试了直接将地址传进去,但是发现不能识别,说是必须是以太坊类型的地址。之后,网页提示说是可能currentProvider不再支持,所以想到应该是js初始化web3出来问题,所以换了一个写法。
initWeb3: async function() {
      /*
       * Replace me...
       */
      if(window.ethereum){
          App.web3Provider =window.ethereum;
         try{

            await window.ethereum.enable();
         }catch(error){
             console.error("User dennied account access")
         }
      }
      else if (window.web3){
          App.web3Provider =window.web3.currentProvider;
      }
      else{
          App.web3Provider=new Web3.providers.HttpProvider('http://127.0.0.1:8545');
      }
      web3= new Web3(App.web3Provider);
      return App.initContract();
    },

新的调用方法。终于成功了!
在这里插入图片描述
很深的一个感触:solidity发展的很快,几乎是几周一更新,编译器和工具都跟不上节奏,很多问题只能看英文,中文学习资料太少了,还在学习区块链的同学可以一起努力!加了很多的交流群,虽然人太多了但是没有几个人在聊技术,所以面向学生新建了一个小群:194180460

以上是关于记录学习pet-shop的一些坑的主要内容,如果未能解决你的问题,请参考以下文章

源码学习成功运行RDAA代码及踩坑记录 - Pytorch版

源码学习成功运行RESD代码及踩坑记录 - Pytorch版

记录学习Appium踩过的一些坑(持续更新)

记录iOS踩的一些坑

以太坊——运用truffle框架部署第一个DAPP ---- Pet-Shop

记录Spring Boot小项目的一些坑