Solidity基础

我们的学习方式是基于项目的,remix是我们写代码的地方.Remix - Ethereum IDE

在你的智能合约中你总是要做的第一件事情就是告诉Solidity,你正在使用哪个版本的solidity,并且加上SPDX许可。

接下来创建你的contract并为他命名(类似于其他语言的class)

第一个程序

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.8;//稳定的版本,^表示比0.8.7更高的版本都适用以下代码,也可以使用>=,<,>,<=来确定范围

contract SimpleStorage{
    //boolean,uint,int,address,bytes
    
    bool hasFavouritenum = true;
    uint256 Favouritenum = 5;//uint后面不加数字就是默认分配256bit,x数字表示分配xbit,但是显示的分配是个好习惯
    string FavouritenumInText = "Five";//string是一种特殊的bytes,只能存储文本
    address MyAddress = 0x5Beba6a653De36a74b681216457e0511e3615CE9;
    bytes32 FavouriteBytes = "cats";//通常是0x123456789,32是bytes被允许的分配的最多的空间

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

}

每个合约都有一个地址 just like 每个账户都有一个地址。

原本中的基本数据是private,可以加上public来查看,删除旧合约只是在面板上删除而已,因为区块链是不可更改的(测试环境在某种程度上可以改)。

变量前的描述:

public :内部外部都可见,会创建storage 和 state 变量的getter函数,实际上加上public就是创建getter函数来返回该值,public会自动获得一个view函数,也就是蓝色按钮

private:只对合约内部可见,在storage中,表明该合约是唯一可以调用favoriteNumber函数的合约

external:只对合约外部可见,

(默认)internal:只有这个合约和继承他的合约可以读取

做更多的操作,消耗更多的gas

view和pure关键字会改变按钮的颜色(黄色到蓝色),

调用该俩函数不需要支付gas(但是你在消耗gas的函数中调用它就需要付费),记住!,只有在更改状态的时候才支付gas

view函数不允许修改任何状态。只能读取这个合约的状态

pure函数不允许修改任何状态。也不允许去读区块链数据,一般用于常用的方法,或者某个不需要读取数据的算法。

第二个程序

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.8;//稳定的版本,^表示比0.8.7更高的版本都适用以下代码,也可以使用>=,<,>,<=来确定范围

contract SimpleStorage{
    
    //会以0初始化变量
    uint256 public Favourite;
    
    function store(uint256 _Favourite) public {
        Favourite = _Favourite;
        
    }
    function retrieve() public view returns(uint256){
        return Favourite;
    }
    function add() public pure returns (uint256){
        return 1+1;
    } 
}
// 0xd9145CCE52D386f254917e481eB44e9943F39138

目前,再Solidity中有6种方式可以存储数据

1.Stack

2.memory:能修改的临时变量

3.storage:永久存在

4.calldata:不能更改的临时变量

5.code

6.logs

数组array,结构struct,映射mapping在Solidity中被认为是特殊的类型,需要给定一个memory或calldata关键字,solidity知道uint256仅仅存在于内存之中,string的背后其实是一个bytes数组

mapping映射(也可以叫做python中的字典)

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.8;//稳定的版本,^表示比0.8.7更高的版本都适用以下代码,也可以使用>=,<,>,<=来确定范围

contract SimpleStorage{
    
    uint256 public favouriteNumber;

    // uint256[3] public favouriteNumberList;//静态数组
    People[] public people;//动态数组
    
    
    People public person1 = People(1,"lbx1");
    People public person2 = People({FavouriteNumber:2 ,name:"lbx2"});

    mapping(string => uint256) public nameToFavouriteNumber;


    struct People{
        uint256 FavouriteNumber; 
        string name;
    }
    
    function store(uint256 _FavouriteNumber) public {
        favouriteNumber = _FavouriteNumber;
        
    }
    function retrieve() public view returns(uint256){
        return favouriteNumber;
    }
    function addPerson(uint256  _favouriteNumber,string memory _name) public {
        // 等价people.push(People(_favouriteNumber,_name)); 
        People memory newperson = People(_favouriteNumber,_name);
        people.push(newperson);
 
        nameToFavouriteNumber[_name] = _favouriteNumber;
        
    }
   
}
// 0xd9145CCE52D386f254917e481eB44e9943F39138

怎么把合约部署到测试网络或者真实网络上

ENVIRONMENT 选择Injected Provide

尽量在最后一步再部署到测试网上,作为实际搭建应用的最后一步,因为会等待很长时间

CTRL+S的compile是在EVM(以太坊虚拟机:Ethereum Virtual Machine)上编译的。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>