智能合约
智能合约是在区块链上运行的程序,也可以说是用来实现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的编译器。

点击左上角的
+新建新的合约文件,然后在合约文件里输入代码。右边是编译智能合约的设置。如下所示,设置编译的版本号。
其中选择版本号需要比
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中对智能合约进行简单的测试。
