我们的学习方式是基于项目的,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
尽量在最后一步再部署到测试网上,作为实际搭建应用的最后一步,因为会等待很长时间文章来源:https://www.toymoban.com/news/detail-819427.html
CTRL+S的compile是在EVM(以太坊虚拟机:Ethereum Virtual Machine)上编译的。文章来源地址https://www.toymoban.com/news/detail-819427.html
到了这里,关于Solidity基础的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!