Web3.0学习树|4.Solidity基础 Ⅰ
November 25th, 2022

这是Web3.0学习的第二章Solidity基础,文内如出现知识性和理解性错误还请各位斧正,原创文章,完全开源,若能得转载不胜荣幸,推特会分享Coding学习,生活日常和NBA等内容。

目录

  • Remix介绍

  • 第一个智能合约

  • Solidity基础数据类型

Solidity是一门面向合约的,为实现智能合约而创建的高级编程语言,在EVM虚拟机上运行,语法整体类似于JavaScript,是目前最流行的智能合约语言,也是入门区块链与Web3所必须掌握的语言。

Solidity智能合约的开发往往无法直接通过一个IDE或本地环境进行方便的调试,而是需要与一个链上节点进行交互。

Remix介绍

Welcome to Remix.

第一个智能合约

Solidity是一个更新频率很高的语言,和别的语言相比,它总会有新版本,我们需要告诉代码,要用哪个版本,我们通过"pragma solidity"加上要用的版本号,来约定版本号。记得在我们开发的时候,根据我们的需求加上注释。在代码中留下注释,这样在回顾的时候可以最快了解当时的想法。

//这样写表示只使用0.8.7这个版本
pragma solidity 0.8.7;//最新版0.8.17,0.8.7被认为是一个稳定的版本


//这样写也可以使用比0.8.7更新的版本
//<- This means that this section is a comment!
pragma solidity ^0.8.7;//这样表示任何比0.8.7更新的版本都适用这段代码

//这样写可以使用某个范围内的版本
pragma solidity >=0.8.7 <0.9.0;//这样表示版本大于等于0.8.7,但是要小于0.9.0

在代码的最上方,我们可以加入SPDX-License-Identifier,尽管这个是可选的,但是没有的话,有些编译器会出现警告,这段代码会定义license(软件许可证)和代码分享规则。添加一个SPDX许可证标识符。

软件许可是创建和提供应用程序、基础源代码或相关产品的实体与其最终用户之间的合同。该许可证是一个文本文档,旨在保护软件开发人员的知识产权,并限制因使用该许可证而可能产生的针对他们的任何索赔。

软件许可证还为软件的分发和使用提供了具有法律约束力的定义。最终用户的权利,如安装、保证和责任,也经常在软件许可中明确说明,包括对开发者知识产权的保护。

//SPDX-License-Identifier:MIT//MIT是限制最少的License之一,我们会在大多数的代码中使用MIT协议

接着输入”contract“,开始定义智能合约,这会告诉Solidity,接下来的会是智能合约。可以把它看作Java里面类似"class"的关键字。

//SPDX-License-Identifier:MIT
pragma solidity ^0.8.8;

contract SimpleStorage {
    
}

Solidity基础数据类型

bytes:byte[]的缩写,分为固定大小数组和可变数组,通过byte1 a = 0xb5;来定义

变量通常是"0x"开头然后有一些随机的数字和字母

bytes32是最大的(32byte是bytes型变量被允许的分配的最多空间)。

boolean:布尔类型有true和false两种类型,可以通过bool public boo = true;来定义,默认值为false。

uint:定义无符号整数,表示这个数字只能是正数,uint比较特殊,我们可以决定给它分配的空间(其实就是有多少存储分配给了这个数字)

可以指定uint8,uint16,uint256,默认为uint256,通过uint8 public u8 = 1;来定义,默认值为0。

bits(位)和bytes(字节)是衡量计算机数据的单位,它是最小的数据形式,它基本上就像一个开关,它可以是0或1。16位=2个字节

uint8,就是分配了8个bit;这个数字可以一直分配到uint256,如果你不知道被赋值的数字多大,默认就是uint256,最小设置uint8(因为8bit是一个byte,我们按照byte为单位步长来增加空间)

通常把分配空间显式的写出来是一个好习惯。

int:整数类型,可以指定int8到int256,默认为int256,通过int public int = 0;来定义,默认值为0,还可以通过type(int).min和type(int).max来查看类型最小和最大值。

address:地址类型,可以通过address public addr = 0xCA35b7d915458EF540aDe2F44E8fa733c;来定义,默认值为0x000000000000000000。

表示地址,就像在MetaMask中看到的一样

string:代表一个词,可以通过双引号表达它们,它可以是一个词,一个短语或者任何其他组合。

string其实是一种bytes,但是只能存储文本

Enum是枚举类型,可以通过以下语法来定义

enum Status {
	UnKnown,
	Start,
	End,
	Pause
}

并通过以下语法来进行更新与初始化

//实例化枚举类型
Status public status;

//更新枚举值
function pause() {
	status = Status.Pause;
}

//初始化枚举值
function reset() public{
	delete status;
}
//SPDX-License-Identifier:MIT
pragma solidity ^0.8.8;

contract SimpleStorage {
    bool hasFavoriteNumber = true;
    uint256 favoriteNumber = 5;
    string favoriteNumberInText = "Five";
    int256 favoriteInt = -5;
    address myAddress = 0x3563c97491114E4F87389446E7f48d77c9220789;
    bytes32 favoriteBytes = "cat";//cat是一个string,但是可以自动转化为bytes
}

在Solidity中,如果我不给变量赋值,它会有一个默认值,默认值是null的值,在Solidity中是0,所以声明一个uint256变量但不赋值,就相当于声明变量然后赋值为0,因为它初始化的时候就是0.

我们通过这些基础数据类型,定义不同的变量,变量是用来存储不同的数值的

Subscribe to 链上巫师
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.
More from 链上巫师

Skeleton

Skeleton

Skeleton