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