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与前端页面进行交互
adopt()
方法
12.配置matemask
13.启动页面npm run dev
14.进行交互
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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)