智能合约-语法基础2

183 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

1、合约的一些重要关键字:

public	        公有,任何人(拥有以太坊账户的)都可以调用	
private	        私有, 只有智能合约内部可以调用	
external	仅合约外部可以调用,合约内部需使用this调用	
internal	仅合约内部和继承的合约可以调用	
view/constant	函数会读取但是不会修改任何contract的状态变量	
pure(纯净的)    函数不使用任何智能合约的状态变量	
payable	       调用函数需要付钱,钱付给了智能合约的账户	
returns        返回值函数声明中使用	//含s

2、先创建一个合约

// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.0;

contract SimpleStorage {  
//这样我们就创建了一个名为SimpleStorage的空合约
   
}

3、我们可以在这个合约里声明一些变量。

// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.0;

contract SimpleStorage {  
   uint   a    ;            //声明一个无符号整型 a 默认为uint256
   int    b    ;          //声明一个无符号整型 b 默认为int256
   bool   c    ;        //声明一个bool类型
  string  d    ;      //声明一个字符串类型
  address f    ;    //声明一个地址,通过地址校验和测试的十六进制字面常量
  ixed    g    ;  // 定长浮点型,有的符号的固定位浮点数
  uixed   h    ;//定长浮点型,无符号固定位浮点数
  enum weekday{sun,mon,tue,wed,the,fri,sat};  //枚举
  
}

3、我们再声明一个方法

// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.0;

contract SimpleStorage {  
 address f    ; 

function getBalance(address people) public view returns (uint){
    return address(people).balance; //获取余额
}

}

4、再来一个映射

// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.0;

contract SimpleStorage {  
 address f    ; 

mapping (uint => address) public addressData;

function getBalance(address people ,unit b) public view returns (uint){
    people=addressData[b]
    return address(people).balance; //获取余额
}

}

5、可以讲讲solidity的专属变量address

以太坊中的地址的长度为`20字节``一字节等于8位`,一共`160位`,所以`address`其实亦可以用`uint160`来声明。

类型转换:`address payable`可以隐式转换为简单的`address`类型,这表示你可以将`address payable`分配给`address`类型,而无需显式转换。