成都网站建设设计

将想法与焦点和您一起共享

Solidity的基础特性是什么

这篇文章主要讲解了“Solidity的基础特性是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Solidity的基础特性是什么”吧!

创新互联成立与2013年,先为沙湾等服务建站,沙湾等地企业,进行企业商务咨询服务。为沙湾企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

智能合约代码结构

任何编程语言都有其规范的代码结构,用于表达在一个代码文件中如何组织和编写代码,Solidity也一样。

本节,我们将通过一个简单的合约示例,来了解智能合约的代码结构。 智能合约编写阶段将从Solidity基础特性、高级特性、设计模式以及编程攻略分别展开,带读者认识Solidity并掌握其运用,更好地进行智能合约开发。

Solidity的基础特性是什么

和java不同的是,构造函数不支持重载,只能指定一个构造函数。

函数

函数被用来读写状态变量。对变量的修改将会被包含在交易中,经区块链网络确认后才生效。生效后,修改会被永久的保存在区块链账本中。

函数签名定义了函数名、输入输出参数、访问修饰符、自定义修饰符。

function setState(uint value) public onlyAdmin;

函数还可以返回多个返回值:

Solidity的基础特性是什么

如果在view函数中尝试修改状态变量,或者在pure函数中访问状态变量,编译器均会报错。

事件

事件类似于日志,会被记录到区块链中,客户端可以通过web3订阅这些事件。

定义事件

event SetState(uint value);

构造事件

emit SetState(value);

这里有几点需要注意:

  • 事件的名称可以任意指定,不一定要和函数名挂钩,但推荐两者挂钩,以便清晰地表达发生的事情.

  • 构造事件时,也可不写emit,但因为事件和函数无论是名称还是参数都高度相关,这样操作很容易笔误将事件写成函数调用,因此不推荐。

Solidity的基础特性是什么

值得注意的是,定义在修饰符中的下划线“_”,表示函数的调用,指代的是开发者用修饰符修饰的函数。在本例中,表达的是setState函数调用的意思。

智能合约的运行

了解了上述的智能合约示例的结构,就可以直接上手运行,运行合约的方式有多种,大家可以任意采取其中一种:

  • 方法一:可以使用FISCO BCOS控制台的方式来部署合约

  • 方法二:使用FISCO BCOS开源项目WeBASE提供的在线ide WEBASE-front运行

  • 方法三:通过在线ide remix来进行合约的部署与运行

本例中使用remix作为运行示例。

编译

首先,在remix的文件ide中键入代码后,通过编译按钮来编译。成功后会在按钮上出现一个绿色对勾:

Solidity的基础特性是什么

setState

合约部署后,我们来调用setState(4)。在执行成功后,会产生一条交易收据,里面包含了交易的执行信息。

Solidity的基础特性是什么

getState

调用getState后,可以直接看到所得到的值为4,正好是我们先前setState所传入的值:

Solidity的基础特性是什么

定长bytes系列

Solidity提供了bytes1到bytes32的类型,它们是固定长度的字节数组。

用户可以读取定长bytes的内容。

Solidity的基础特性是什么

这里有一个关键细节,Solidity采取大端序编码,高地址存的是整数的小端。例如,b[0]是低地址端,它存整数的高端,所以值为0;取b[31]才是1。

Solidity的基础特性是什么

要注意的是,当将string转换成bytes时,数据内容本身不会被拷贝,如上文中,str和b变量指向的都是同一个字符串abc。

address

address表示账户地址,它由私钥间接生成,是一个20字节的数据。同样,它也可以被转换为bytes20。

Solidity的基础特性是什么

数组

如果数组是状态变量,那么支持push等操作:

Solidity的基础特性是什么

struct

Solidity允许开发者自定义结构对象。结构体既可以作为状态变量存储,也可以在函数中作为局部变量存在。

全局变量

示例合约代码的构造函数中,包含msg.sender。它属于全局变量。在智能合约中,全局变量或全局方法可用于获取和当前区块、交易相关的一些基本信息,如块高、块时间、合约调用者等。

比较常用的全局变量是msg变量,表示调用上下文,常见的全局变量有以下几种:

  • msg.sender:合约的直接调用者。

由于是直接调用者,所以当处于 用户A->合约1->合约2 调用链下,若在合约2内使用msg.sender,得到的会是合约1的地址。如果想获取用户A,可以用tx.origin.

  • tx.origin:交易的"始作俑者",整个调用链的起点。

  • msg.calldata:包含完整的调用信息,包括函数标识、参数等。calldata的前4字节就是函数标识,与msg.sig相同。

  • msg.sig:msg.calldata的前4字节,用于标识函数。

  • block.number:表示当前所在的区块高度。

  • now:表示当前的时间戳。也可以用block.timestamp表示。

感谢各位的阅读,以上就是“Solidity的基础特性是什么”的内容了,经过本文的学习后,相信大家对Solidity的基础特性是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!


网页题目:Solidity的基础特性是什么
URL链接:http://chengdu.cdxwcx.cn/article/jggcss.html