以太坊智能合约开发学习02 -- Solidity语言

以太坊官方推荐的智能合约开发语言
是一门静态的,支持继承,类库以及复杂的自定义类型特征的高级语言

Solidity 文件结构

Solidity合约源文件使用的扩展名为.sol

智能合约主要结构:

  • 版本声明
pragma solidity ^0.5.10
  • 引入源文件
import "文件名字"
  • 合约

    • 状态变量
      uint storedData
      
    • 函数
      function bid() public payable{
      		...
      }
      
    • 函数修改器
      // 声明一个修改器
      modifier onlySeller(){
      	...
      }
      // 修改器的使用
      function abort() public onlySeller{
      	...
      }
      
    • 事件
      // 事件是EVM日志基础设施提供的接口,用于获取当前发生的事件
      // 定义事件
      event HighestBidIncreased(address bidder, uint amount);
      //触发事件
      emit HighestBidIncreased(msg.sender,msg.value)
      
    • 结构类型
      struct Voter{
      	  uint weight;
      	  bool voted;
      }
      
    • 枚举类型
      enum State{ Created , Locked , Inactive }
      
  • 注释

      /// 
      /**....*/
Solidity数据类型

两类:值类型和应用类型

值类型: 布尔类型(Bool)、整型(int8,int16,int32)、定长浮点型(ufixed32x1)、定长字节数组(byte,bytes1,bytes2)、有理数和整型常量、字符串常量、十六进制常量(hex)、枚举(enum)、函数类型、地址类型(address)、地址常量
引用类型:数组(Array)、结构体(Struct)、映射(Mapping)

函数类型:

  • 内部函数(internal):只能在当前合约内被调用,不会创建一个EVM消息调用,访问方式 f()
  • 外部函数(external):通过EVM消息调用,由之地和函数方法签名两部分组成,访问方式this.f()

internal和external既表示调用方式也表明了其可见性,在写智能合约是要特别注意,如果一个使用internal,却使用了external,很容易引发安全问题,同时增加gas的消耗

public函数和external函数?
public函数时,会立即复制参数到内存,而external函数是从calldata读取,public函数可能会被内部调用,而external函数是不允许内部调用的,省去了复制的过程
确认仅仅只是外部访问,则使用external函数

以上仅为个人学习笔记,谨慎参考

你可能感兴趣的:(以太坊智能合约,以太坊智能合约)