以太坊 day(7)
一、truffle
1.1 truffle概念
他是以太坊的开放框架
1.2 安装truffle
npm install truffle -g
1.3 搭建truffle空项目
- mkdir project
- truffle init
1.4 truffle文件目录
1.5 修改truffle-config.js
compilers: {
solc: {
version: "0.4.26",
}
}
二、truffle操作文件
2.1 编译文件
- truffle compile
- 编译后生成.json文件
2.2 部署文件
需要自己写部署脚本,2_initial-migration.js
const Hello = artifacts.require("hello");
module.exports = function (deployer) {
deployer.deploy(Hello);
};
2.3 配置网络,solc版本
- truffle-config.js
module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 8545,
network_id: "*"
}
},
compilers: {
solc: {
version: "^0.4.26"
}
}
};
2.4 进行部署
truffle migrate --network ganacheNet
2.5 部署完成后,hello.json文件的变化
2.5 使用truffle自带环境编译部署集合
- truffle develop
- compile
- migrate
2.6 与合约交互
- truffle-contract
2.7 测试合约
- 修改合约后,要重新进行编译,不然会一直报错
pragma solidity ^0.4.26;
import 'truffle/Assert.sol';
import 'truffle/DeployedAddresses.sol';
import '../contracts/Hello.sol';
//测试合约的Test是大写的
contract TestHello{
//测试方法的test是小写的
function testSetGet() public{
Hello hh = Hello(DeployedAddresses.Hello());
hh.setMsg("jack");
string memory res = hh.getMsg();
Assert.equal(res, "jack", "结果应该是jack");
}
}
三、react框架
3.1 安装react
-
npm install -g ethereumjs-testrpc
-
truffle unbox react
3.2 未完待续
四、遇到的问题
4.1 Win10修改编辑文件无法保存怎么办
4.2 truffle test出错,rpc,找不到client
- 进入truffle develop
- 然后test
4.3 部署失败
- 在truffle控制台中,migrate --reset,会重新不是一遍
- 如果还失败,rm -rf build,删除编译好的文件
五、新版本web3
5.1 三种方式获取accounts
//获取用户的地址
let Web3 = require('web3')
let web3 = new Web3('http://127.0.0.1:7545');
//console.log(web3)
web3.eth.getAccounts((err, res) =>{
console.log(res)
if(err){
console.log(err)
}
})
web3.eth.getAccounts().then(res =>{
console.log(res)}).catch(err =>{
console.log(err)
})
let f = async () =>{
try{
let accounts = await web3.eth.getAccounts();
console.log(accounts)
}catch (e) {
console.log(e)
}
}
f()
5.2 不使用合约就可以转账
//获取用户的地址
let Web3 = require('web3')
let web3 = new Web3('http://127.0.0.1:7545');
let f = async () =>{
try{
let accounts = await web3.eth.getAccounts();
//console.log(accounts)
//不需要合约就可以转账
let res = await web3.eth.sendTransaction({
from:accounts[0],
to:accounts[1],
value:web3.utils.toWei('10', 'ether')
})
}catch (e) {
console.log(e)
}
}
f()
5.3 bigNumber
- bignumber.js
npm install bignumber.js -g
let bigNumber = require('bignumber.js')
let num1 = new bigNumber('12134144444444433')
let num2 = new bigNumber('1000')
let num3 = new bigNumber('1000')
console.log(num1.plus(num2).toString())
console.log(num1.minus(num2).toString())
console.log(num1.times(num2).toString())
console.log(num1.div(num2).toString())
console.log(num2.eq(num3).toString())
- web3.util.toBN的使用
let Web3 = require('web3')
let web3 = new Web3()
let num1 = web3.utils.toBN('2000000000')
let num2 = web3.utils.toBN('22')
console.log(num1.add(num2).toString())
5.4 简单的util类型转换api
let Web3 = require('web3')
let web3 = new Web3()
//wei转成ether
let res = web3.utils.fromWei('1', 'ether')
console.log(res)
//转成16进制
let res1 = web3.utils.toHex('jack')
console.log(res1)