记录智能合约solidity编译的坑
在Linux环境下入门写一段solidity编译遇到error和warning,经过一番研究后才得其缘由,下面以一段demo总结一下。
pragma solidity ^0.5.; // 指定所需的编译器版本 contract clac{
function multiply(uint a, uint b) returns (uint){
return a + b;
}
}
看似很正常的一段两数相加代码,可惜编译出错:
出现了一段error和一段warning
$ solc --bin testContract.sol testContract.sol::: Error: No visibility specified. Did you intend to add "public"?
function multiply(uint a, uint b) returns (uint)
^ (Relevant source part starts here and spans across multiple lines). testContract.sol::: Warning: Function state mutability can be restricted to pure
function multiply(uint a, uint b) public returns (uint) {
^ (Relevant source part starts here and spans across multiple lines).
原因是public声明和puer没有处理好。
public声明
No visibility specified. Defaulting to “public”。 -> 未指定可见性,采用默认public可见范围。
- public:智能合约外部和内部都可使用的方法;
- internal:智能合约(包括派生合约)内部可用调用的方法;
- external:可通过其他合约和交易进行调用的方法;
- private:只有在定义的合约中才可以调用,即使派生的合约也无法调用;
错误在于提醒开发者,你未指定当前function的可见范围,合约会默认采用public,有一定的风险存在。特别针对一些不可对外公开访问的智能合约,需要注意此提示。消除此警告的方法只需在方法中添加public声明即可。修改之后的代码如下:
pragma solidity ^0.5.; // 指定所需的编译器版本 contract clac{
function multiply(uint a, uint b) public returns (uint){
return a + b;
}
}
pure限制词
Function state mutability can be restricted to pure。 -> 功能状态可变性可以限制为pure
在之前的版本中我们经常使用constant来限制一个方法的制度性,当用constant修饰之后,此方法在被调用时不会进行存储的变更,同样不会产生交易和gas花费。而pure正是constant的替代品,逐渐的在替代constant的功能。
修改后代码如下:
pragma solidity ^0.5.; // 指定所需的编译器版本 contract clac{
function multiply(uint a, uint b) public pure returns (uint){
return a + b;
}
}
记录智能合约solidity编译的坑的更多相关文章
- 以太坊智能合约 Solidity 的常用数据类型介绍
目录 目录 1.数组 1.1.对数组的增删改查操作. 2.String.Bytes.Mapping的使用 3.Enums 和 Structs 的简单应用 4.Ether 单位和 Time 单位 5.A ...
- 区块链之智能合约 solidity踩坑 --上篇
概述 最近在写合约时遇到一些坑,做一下总结: 介绍主要分一下三个方面: 对区块链的简单描述 结合业务场景,编写简单智能合约,时遇到的坑(上篇) assembly 的使用说明(下篇) 正文 进入正题之前 ...
- 智能合约 solidity 开发的环境基本搭建
以太坊Dapp开发快速入门 以太坊为开源社区,虽然设计东西都很优秀,但是组件十分的杂乱,因此下面首先简单介绍下以太坊的一些常用组件以及各种工具介绍 Geth Geth是由以太坊基金会提供的官方客户端软 ...
- 第一行代码:以太坊(2)-使用Solidity语言开发和测试智能合约
智能合约是以太坊的核心之一,用户可以利用智能合约实现更灵活的代币以及其他DApp.不过在深入讲解如何开发智能合约之前,需要先介绍一下以太坊中用于开发智能合约的Solidity语言,以及相关的开发和测试 ...
- solidity 智能合约之间的调用
智能合约之间的调用 在区块链上,有些功能往往无法通过一个智能合约完成,此时便会用到智能合约之间的调用.本篇文章带大家通过具体示例来了解一下智能合约之间的调用. 在智能合约的编译过程中,有两种情况:调用 ...
- 基于Fisco-Bcos的区块链智能合约-简单案例实践
一.智能合约介绍 智能合约是指把合同/协议条款以代码的形式电子化地放到区块链网络上.FISCO BCOS平台支持两种智能合约类型:Solidity智能合约与预编译智能合约 Solidity与Java类 ...
- Go语言打造以太坊智能合约测试框架(level1)
传送门: 柏链项目学院 Go语言打造以太坊智能合约测试框架 前言 这是什么? 这是一个基于go语言编写的,自动化测试以太坊智能合约的开发框架,使用此框架,可以自动化的部署合约,自动测试合约内的功能函数 ...
- Go语言打造以太坊智能合约测试框架(level3)
传送门: 柏链项目学院 第三课 智能合约自动化测试 之前课程回顾 我们之前介绍了go语言调用exec处理命令行,介绍了toml配置文件的处理,以及awk处理文本文件获得ABI信息.我们的代码算是完成了 ...
- Go语言打造以太坊智能合约测试框架(level2)
传送门: 柏链项目学院 第二课 智能合约自动化编译 前期内容回顾 之前我们的介绍的是如何通过solc编译智能合约,并且调用智能合约,本节我们继续实践,将智能合约的代码自动化编译以及abi文件生成搞定. ...
随机推荐
- CF1139C Edgy Trees
题目地址:CF1139C Edgy Trees 红黑树 \(ans\) 应该等于总数(\(n^k\))减去不含黑色边的序列数量 不含黑色边就意味着一个序列只能在一个红色联通块中 一个红色联通块中的序列 ...
- Lnmp下pureftpd新建FTP账户权限不足解决方法
解决办法: 登录服务器.执行以下命令 chattr -i /home/wwwroot/default/.user.ini chown www:www -R /home/wwwroot/你的lnmp安 ...
- JS 禁用鼠标右键
oncontextmenu="window.event.returnValue=false" style="overflow-y: hidden; overflow-x: ...
- 阿里云服务器Ubuntu 14.04.2和centos7.5实现nfs挂载
前提条件,确保两个ip可以正常通信 确认服务端是否安装nfs-utils和rpcbind[root@localhost /]# rpm -qa|grep "nfs"nfs4-acl ...
- python第10天(下)
https://www.cnblogs.com/zingp/p/6863170.html 一:IO模型介绍 IO发生时涉及的对象和步骤 对于一个网络IO(network IO),它会涉及到两个系统对 ...
- Linux 查看负载内存
负载 内存 1.作用 top命令用来显示执行中的程序进程,使用权限是所有用户. 2.格式 top [-] [d delay] [q] [c] [S] [s] [i] [n] 3.主要参数 ...
- beta冲刺6/7
目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:beta冲刺(6/7) 团队部分 后敬甲(组长) 过去两天完成了哪些任务 ppt制作 视频拍摄 接下来的计划 准备答辩 ...
- 【Android】webview javascript 注入方法
Android中向webview注入js代码可以通过webview.loadUrl("javascript:xxx")来实现,然后就会执行javascript后面的代码. 但是当需 ...
- BZOJ4827 [Hnoi2017]礼物 多项式 FFT
原文链接http://www.cnblogs.com/zhouzhendong/p/8823962.html 题目传送门 - BZOJ4827 题意 有两个长为$n$的序列$x$和$y$,序列$x,y ...
- Codeforces 947F. Public Service 构造
原文链接https://www.cnblogs.com/zhouzhendong/p/CF947F.html 近5K码量构造题,CF血腥残暴! 题解 这里先定义 $FT(k)$ 表示一个菊花树多 k ...