智能合约开发-Solidity学习1


2. 编程开发

Solidity语言学习
// >=0.8.7 < 0.9.0  高于0.8.7小于0.9.0
// 分号; 结尾

pragma solidity 0.8.8; 

1. 基础数据类型
   // contract 关键字,告诉编译器后面的代码是来定义智能合约的
   contract SimpleStorage{
    // 数据类型
    // boolean ,uint ,int,address,bytes
    // uint 无符号整数,不是可正可负,只能是正数
    // address 表示地址
    bool hasFavoriteNumber = false;
    uint256 favoriteNumber = 5 ;
    string  favoriteNumberInText = "Five";
    int256 favoriteInt = 5 ;
    // 钱包地址
    // address myAddress = 
    // bytes 被分配的最大空间 32
    bytes32 favoriteBytes = 'cat'; //0x
    //   会以0初始化变量
    uint256 favoriteNumber;

}

2. 函数
   contract SimpleStorage{

//   会以0初始化变量
  uint256 favoriteNumber;

//   function 方法关键字
// store函数会接受一个参数,然后将参数赋值给 favoriteNumber
  function store(uint256 _favoriteNumber) public{
      favoriteNumber = _favoriteNumber;
  }

}
//标识符
contract SimpleStorage{

//   会以0初始化变量
  uint256  public favoriteNumber;

//   function 方法关键字
// store函数会接受一个参数,然后将参数赋值给 favoriteNumber
//函数和变量有4种可见度标识符,public ,private,external internal 
  function store(uint256 _favoriteNumber) public{
      favoriteNumber = _favoriteNumber;
      favoriteNumber = favoriteNumber + 1;
      uint256 testVar = 5;
  }
//   testVar并不能被something函数获取,当你创建一个变量时,它只有在这个作用域才可见
// 作用域,可以看花括号
  function something() public{
      testVar = 6;
  }

}
//  retrieve 相当于   uint256  public favoriteNumber;  public变量在程序创建geter函数
// Solidity中有两个关键字,标识函数的调用不需要消耗gas  view 和 pure、
//因为只是读取区块链数据,只有更改状态的时候才支付gas;点击蓝色按钮,我们不发送交易,只是在链下读取数值
// 如果一个要改变区块链状态的函数状态的函数(也就是在消耗gas的函数)调用了类似 retrieve 这种view或者pure函数才会消耗gas ,23471 gas (Cost only applies when called by a contract) 
// view 只读 
  function retrieve()public view returns(uint256){
      return favoriteNumber;
  }
//   pure 类似于这种,常用的方法,或者不需要读取数据的算法
   function add() public pure returns(uint256){
       return (1+1) ;
   }

3.数组和结构体 
pragma solidity 0.8.8;

contract SimepleStorage {
    uint256 favoriteNumber;
    
    // 结构体
    struct People{
        uint256 favoriteNumber;
        string name;

    }
    // People public people = People({favoriteNumber:2,name:"pott"});
    // People public p = People(3,'joi');
    //数组,[] 动态数组,可以加任何数量的人进入
    People[] public people;
   // 如何通过名字找他最喜欢的数字,映射  
    // string 映射到 uint256
    mapping(string => uint256) public nameToFavoriteNumber;

    function store(uint256 _favoriteNumber) public {
        favoriteNumber = _favoriteNumber;
    }
    function retrieve() public view returns(uint256){
        return favoriteNumber;
    }
    // 添加人  
    //存储有两种方式 memory ,storage 
    // memory 关键字 ,存储在内存,只会被存储在函数执行的过程中,
    //storage  存储在外存,数据会持久化
    // string 并不是值类型,严格来说是一种特殊类型的数组,是一个object,必须决定其在那里存储
    function addPerson(string memory _name ,uint256 _favoriteNumber) public{
        // people.push(People({_favoriteNumber:_name}));
        people.push(People(_favoriteNumber,_name));
        nameToFavoriteNumber[_name] = _favoriteNumber;
    }


}

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/289021.html

(0)
上一篇 2022年9月12日
下一篇 2022年9月12日

相关推荐

发表回复

登录后才能评论