区块链学习笔记04-Solidity基础语法随手记

本文是学习solidity语法中随手记录的一些注意点,杂乱无章,不合适学习使用,仅供自己参考!

1.变量的定义和使用

2.Memory与storage存储数据的区别

3.函数的声明和使用

注意:新语法中public或private 属性必须要写,否则报错!

4.Fallback函数(回退函数):

一个没有定义一个回退函数的合约。如果接收ether,会触发异常,并返还ether(solidity v0.4.0开始)。所以合约要接收ether,必须实现回退函数。

注意:必须制定类型为external !

5.内置函数

①错误处理尽量使用requite,失败会返回gas。

 function getUser()public view returns(string){
        //         错误处理
        // assert(bool condition):  如果条件不满足,则抛出 - 用于内部错误。 
        // require(bool condition): 如果条件不满足,则抛出 - 用于输入或外部组件中的错误。 
        // revert():                中止执行并恢复状态更改
        
        //方法一:(这种会消耗gas)
        // if(msg.sender!=manager){
        //     throw;
        // }
        
        //方法二:require   一般地,尽量使用 require 函数
        require(msg.sender==manager);
        
        //方法三:assert(这种会消耗gas)
        //assert(msg.sender==manager);
        
        //方法四:revert
        if(msg.sender!=manager){
            revert();
        }
        return "我们3213665";
    }

②this:

需要显示调用: address(this) ,当前合约地址。

address(this) .balance 余额。

③销毁合约:selfdestruct(msg.sender)

④数学计算:

addmod(int a,int b,int c): 计算(a+b)%c 的值。(%是取模)

mulmod(int a,int b,int c): 计算(a*b)%c 的值。(%是取模)

keccak256:散列运算。用来获取随机数.

(keccak256(now,msg.sender,a)  新版本报错,不知何故!?

6.关于付款转账

①合约中必须有下面函数,否则报错

 function()external payable{
  
 }
    

②通过合约地址转账

The address type was split into address and address payable, where only address payable provides the transfer function.

大意是:address类型包括 into address和 address payable类型,只有address payable类型可以完成transfer或send操作。

因此,需要声明成 address payable 类型才可。

7.事件 event

当定义的事件触发时,我们可以将事件存储到EVM的交易日志中,日志是区块链中的一种特殊数据结构。日志与合约关联,与合约的存储合并存入区块链中。只要某个区块可以访问,其相关的日志就可以访问。

event transfer(address indexed _from, address indexed _to, uint indexed value);

Indexed属性

可以在事件参数上增加indexed属性,最多可以对三个参数增加这样的属性。加上这个属性,可以允许你在web3.js中通过对加了这个属性的参数进行值过滤,方式如下[event]:

var event = myContract.transfer({value: "100"});

上面实现的是对value值为100的日志,过滤后的返回。

8.web3.js中send和call区别

记住:call是调用remix环境中红色函数的,send是调用remix环境中蓝色函数的!

获取返回值的时候用call,否则用send。send返回的是一个交易的hash。

猜你喜欢

转载自blog.csdn.net/q187543/article/details/85075232