基本语法可参考如下博文:https://blog.csdn.net/super_lixiang/article/details/83049719
(msg.sender == chairPerson)
&& !voters[voter].voted
&& (voters[voter].weight == 0)
);
若 `require` 的入参判定为 `false`, 则终止函数,恢复所有对状态和以太币账户的变动,并且也不会消耗 gas 。
2、函数可见性分析----
3、函数的限制访问----
参见解决:这里就要说一下Solidity中的存储区了,详解了解亲参阅博客
memery与storage实例图
memery与storage错误实例
memery与storage解决错误实例
代码重用性(一个modifier方法可以被多处调用),多重modifier的执行顺序,很重要!!!
modifier用法实例
当一个合约继承自多个合约时,只会在区块链上创建单个合约,并将所有父合约中的代码复制到创建的合约中。
使用`is`继承另一个合约。 子合约可以访问所有非私有成员,包括内部函数和状态变量。不过,不能通过`this`来外部访问这些。
用public、internal、external(调用用this)的函数可被继承,private修饰的不能被继承。
多重继承,同时继承多个合约的时候,如果被继承的多个合约都有相同属性或者方法的时候,写在后面(father合约)的会覆盖前面的(mother合约),如多重继承图
多重继承图
权限修饰符图示
继承的重载
Solidity内置支持元组(tuple),也就是说支持一个可能的完全不同类型组成的一个列表,数量上是固定的(Tuple一般指两个,还有个Triple一般指三个)。
元组实例<一>
元组实例<二>
解决:必须要有一个供外部调用的函数,如下
function () payable external{ }
TypeError: Member "transfer" not found or not visible after argument-dependent lookup in contract addressBalance. Use "address(this).transfer" to access this address member.
解决:在新版本中,对地址的使用,不能用只this指代,修改如下:
3、TypeError: Data location must be "memory" for return parameter in function, but none was given.
不同数据类型的变量会有各自默认的存储位置,
-状态变量总是会存储在storage 中
-函数参数和返回值默认存放在 内存memory 中
-结构、数组或映射类型的局部变量,默认会放在 存储storage 中
-除结构、数组及映射类型之外的简单局部值变量,会储存在栈中
这里需要给返回值加上存储位置,修改如下:
转账时调用transfer2方法,如果日志提示转账失败信息:VM error: revert. revert The transaction has been reverted to the initial state. Note: The constructor should be payable if you send value
解决:添加一个方法即可外部可调用的payable方法即可
Transact to mappingtest.regiter errored:Error encoding arguments:SyntaxError:Unexpected token s in json at position address(this).send(10 ether);
解决:这个错误是因为调用方法传递参数是没有给参数加上双引号,或者双引号不是英文的
7、
承接区块链业务:
1.区块链服务器搭建(包含主链数据同步)
2.eth及erc20代币充提
3.btc及usdt充提