记录智能合约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文件生成搞定. ...
随机推荐
- 写博客常用MarkDown语法
目录 前言 1. 制作目录 2. 命令格式: 3. 超链接 4.上标和下标 5.引用 6.分割线 7.给图片添加图注 参考 前言 自己记性不是很好,导致每次写MarkDown文本时总是忘了一些重要 ...
- CF1139E Maximize Mex
题目地址:CF1139E Maximize Mex 这其实是一个二分图匹配匈牙利算法的巧妙运用 考虑倒序回答 则由原来的删除改为添加 把 potential 值作为左部,则一共有编号为 \(0~m\) ...
- Max Area of Island
Given a non-empty 2D array grid of 0's and 1's, an island is a group of 1's (representing land) conn ...
- vs 快捷操作
1. 选中所需行 增加缩进 tab 减少缩进 shift+tab 2.附加调试:ctrl+alt+p: 全部用快捷键操作看起来真的很6
- JAVA中的栈和堆【转】
原文链接 https://www.cnblogs.com/ibelieve618/p/6380328.html JAVA在程序运行时,在内存中划分5片空间进行数据的存储.分别是:1:寄存器.2:本地方 ...
- 【原创】运维基础之Nginx(1)简介、安装、使用
官方:http://nginx.org nginx [engine x] is an HTTP and reverse proxy server, a mail proxy server, and a ...
- 初识C语言(一)
C语言的结构体 一个C程序就是由多个头文件和函数组成 #include<stdio.h> /* 包含头文件*/ int main() { printf('"hello world ...
- 爬虫高性能 asyncio库 twisted库 tornado库
一 背景知识 爬虫的本质就是一个socket客户端与服务端的通信过程,如果我们有多个url待爬取,只用一个线程且采用串行的方式执行,那只能等待爬取一个结束后才能继续下一个,效率会非常低. 需要强调的是 ...
- 2018年冬季寒假作业4--PTA 打印沙漏
1.实验代码: #include<stdio.h> int main() { int i,j,k,s,t,l,n,res; char a; ]={,,,}; ;i<;i++) { s ...
- js单元测试
最近研究了js的单元测试,分享一下心得. 说起单元测试以前还真是不太了解,这次索性了解一番,测试有很多包含单元测试,性能测试,安全测试和功能测试等几方面,本次只介绍一下单元测试. 前端进行单元测试主要 ...