[智能合约]:solidity初体验
智能合约
智能合约是在区块链上运行的程序,也可以说是用来实现DAPP的。详细的内容可以查看Solidity官方文档。
一个简单的例子
pragma solidity ^0.5.0;
contract Hello {
address owner;
string hello = "Hello World!";
uint num;
constructor() public {
owner = msg.sender;
}
function sayHello() view public returns(string memory){
if (owner == msg.sender) {
return hello;
}
}
function setNum(uint n) public {
num = n;
}
function getNum() view public returns(uint){
return num;
}
}
上述智能合约的构成:
-
1.
pragma solidity ^0.5.0;
,solidity
的版本声明,0.5.0
指的是版本号,^
指的是向上兼容,意味者此智能合约在0.5.0~0.6.0
之间是兼容使用的(不包括0.6.0
)。 -
2.
contract Hello{...}
,智能合约的主体,一个合约,类似于其他语言中的class
。合约可以继承。 -
3.
address owner;
,string hello = "Hello World!";
和uint num;
都是状态变量。address
,地址类型,20个字节。string
,字符串类型。uint
,整型,uint256
的缩写。 -
4.
constructor() public { owner = msg.sender; }
。constructor()
为构造函数,即在创建此合约的时候执行的函数。所有的合约都可以用constructor()
表示构造函数,在以前的版本中,使用的是与合约同名的函数名来表示。
owner = msg.sender;
中,msg.sender
表示消息的发送方,也就是调用此函数的人的地址。由于是在构造函数中,消息的发送方为创建合约的人的地址。 -
5.其他的函数为合约的成员函数,用来执行需要涉及的操作。比如说,用
setNum
和getNum
来设置和获取状态变量num
。
执行智能合约
编译
将上述的代码在Remix中执行,Remix是一个网页版的solidity的编译器。
点击左上角的
+
新建新的合约文件,然后在合约文件里输入代码。右边是编译智能合约的设置。如下所示,设置编译的版本号。compile
其中选择版本号需要比
pragma solidity ^0.5.0;
中的版本号一致或是更新,因为是向上兼容的。
执行
需要先在右边的设置里,点开Run
分页。
-
1.
Environment
,环境的选择,remix
里提供了三种环境,分别是JavaScript VM
,Injected Web3
,Web3 Provider
。-
JavaScript VM
是JS虚拟机,也就是remix
提供的虚拟的环境,不需要连接到区块链的网络中,存在于内存中。 -
Injected Web3
,用于使用浏览器插件MetaMask
的环境。具体可以查看MetaMask
的使用。 -
Web3 Provider
,用于在remix
中连接到区块链,需要输入URL。比如说,你有一个运行的本地节点,通过它的ip和端口号连接到该节点。
-
-
2.
Account
,选择JavaScript VM
的情况下,默认提供5个以太坊的测试账号(地址),也就是给我们用来测试合约的地址。 -
3.
Deploy
,部署合约。部署成功后会在下方出现可以进行交互的合约。 -
4.与合约进行交互。
在n
后输入数值100,点击transact
,即可将num
的值设置为100。点击getNum
会得到num
的值100。点击sayHello
会得到hello
字符串的内容。如下所示:
总结
- 智能合约是在区块链上运行的程序,可以在remix中对智能合约进行简单的测试。