区块链入门HiBlock区块链社区

如何升级Truffle到v5.0.0使用Solidity v0.

2018-12-20  本文已影响1人  笔名辉哥

1, 摘要

本文介绍如何升级Truffle到v5.0.0的方法便于编译使用Solidity v0.5.0,同时也介绍了一下Solidity v0.5.0新特性。

2,操作步骤

2.1 查看TRUFFLE版本并卸载

之前一直在用TRUFFLE 4.0版本,最近使用REMIX编译时发现Solidity 已升级到v0.5.0了。为了使用Solidity v0.5.0新特性,TRUFFLE的版本也要配套升级了。
先查看版本,然后卸载truffleV4.1.11旧版本。

duncanwang@ubuntu:~/work/dapp-guide-pet-shop$ truffle version
Truffle v4.1.11 (core: 4.1.11)
Solidity v0.4.24 (solc-js)

duncanwang@ubuntu:~/work/dapp-guide-pet-shop$ sudo npm uninstall -g truffle
[sudo] password for duncanwang: 
removed 81 packages in 1.852s

2.2 升级truffle到5.0版本

在npm中安装固定的版本号package,只需要在其后加 ‘@版本号’。

npm install -g truffle@5.0.0

安装时存在错误提示,暂时不用管,不影响使用。

duncanwang@ubuntu:~/work/dapp-guide-pet-shop$ sudo npm install -g truffle@5.0.0
/usr/bin/truffle -> /usr/lib/node_modules/truffle/build/cli.bundled.js

> keccak@1.4.0 install /usr/lib/node_modules/truffle/node_modules/keccak
> npm run rebuild || echo "Keccak bindings compilation fail. Pure JS implementation will be used."


> keccak@1.4.0 rebuild /usr/lib/node_modules/truffle/node_modules/keccak
> node-gyp rebuild

gyp ERR! configure error 
gyp ERR! stack Error: EACCES: permission denied, mkdir '/usr/lib/node_modules/truffle/node_modules/keccak/build'
gyp ERR! System Linux 4.13.0-46-generic
gyp ERR! command "/usr/bin/node" "/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /usr/lib/node_modules/truffle/node_modules/keccak
gyp ERR! node -v v9.11.1
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok 
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! keccak@1.4.0 rebuild: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the keccak@1.4.0 rebuild script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/duncanwang/.npm/_logs/2018-12-20T05_33_47_253Z-debug.log
Keccak bindings compilation fail. Pure JS implementation will be used.
+ truffle@5.0.0
added 89 packages from 305 contributors in 22.714s

查看版本,发现已经切换为V5.0.0版本了。

duncanwang@ubuntu:~/work/dapp-guide-pet-shop$ truffle version
{ mnemonic_ropsten: 'mosquito electric slim hybrid craft change shrimp digital car wonder term oven',
  mnemonic_mainnet: '' }
Truffle v5.0.0 (core: 5.0.0)
Solidity v0.5.0 (solc-js)
Node v9.11.1

2.3 智能合约.sol文件可以使用新版本

关键字:

pragma solidity ^0.5.0;

3, Solidity 0.5.0新特性

Solidity 0.5.0 于11月13日正式发布, 此版本中包含了许多重要更新。

3.1 Solidity 0.5.0 新增语法

3.2 Solidity 0.5.0 丢弃/禁止使用的特性

3.3 continue在do-while中的行为

当遇到循环体中的continue时,0.5.0中下一步会检查while中的条件,而之前则跳回执行循环体。0.5.0的行为与其他编程语言的处理保持一致。


solidity 0.5.0中返回3,0.4.x 版本返回4

3.4 有符号数的算术右移

之前Solidity中的算术右移是用除法实现,所以对负数做右移时,效果为向0靠拢,但在其他编程语言中表现为向负无穷靠拢。在0.5.0中,此操作的行为与其他语言保持一致。


上述代码,0.5.0返回-1,而0.4.x返回0

3.5 call/staticcall/delegatecall

这三个函数如果只给定一个bytes类型的参数,不进行任何pad操作。

pure/view操作码(opcode)改为STATICCALL

声明为view的函数不修改状态。修改状态的行为包括

声明为pure的函数既不读取状态也不修改状态。读取状态的行为包括:

在 0.5.0 之前,pure/view函数中可以使用非法的类型转换绕过对pure/view的语义限制,而在新版本中,使用STATICCALL在EVM层面保证了语义安全。

3.6 外部函数调用

从Tangerine Whistle起,调用外部函数时,该外部函数共享所有可用gas。

3.7 显式要求

已经不合法,需要显式指明x的存储类型,比如

image

再比如

image

也不合法,需要指明参数x的存储类型

注意external类型的函数需要参数的数据存储类型为calldata

4,参考

(1)NPM安装命令和版本
(2)首发| Solidity 0.5.0安全迁移指南(一)

上一篇 下一篇

猜你喜欢

热点阅读