前言
广大开发者应该对如何在区块链上部署合约有一定的了解,如果我们想在区块链上部署自己写好的程序,我们就需要一个编译器将自己写好的代码转换为机器操作码的形式,再将它放到区块链上,供系统执行。
一般来说,程序编译的时候需要在本地布置一个编译环境,把代码放到编译环境当中进行编译,但是这个建立编译环境的过程非常的复杂,往往对于初学者来说会在这一步深受困扰。
随着时代的发展,在线编译器逐渐成为市场上的主流趋势,它通过云端服务器的方式,提供了一个已经搭建好的编译环境,减少了初学者和程序员的使用门槛,提高了移动办公的可能性。
以太坊基金会投资了Remix作为它的在线编译器,也被大家所熟知,但是其实区块链的种类众多,编译方式也大相径庭,一个更加包容且操作方式更加简单的在线编译器是各位开发者梦寐以求的。
今天要介绍的,就是一款适用于以太坊、蚂蚁联盟链、IOST、Hyperledger等众多区块链的在线编译器——ChainIDE。
累加器合约
那么今天我们就从头到尾进行以太坊Solidity的一个合约部署教学。
一个智能合约就相当于一个类,里面可以有很多的变量、函数、结构体等等,可以通过不同的逻辑来构建简单或者复杂的服务。
为了教学演示直观一些,我们使用一个累加器作为示例,累加器的意思是智能合约内有一个初始的变量,我们通过向智能合约内的函数输入变量进行累加,通过调用函数可以查看累加的终值。
首先我们新建一个合约,名字就叫PlusContract,我先将合约的内容简单的介绍一下。
pragma solidity >=0.4.0 <0.7.0;
contract PlusContract {
uint Data;
string hello="Hello world!";
function plus(uint x) public {
Data = x + Data;
}
function get() public view returns (uint) {
return Data;
}
function helloworld() public view returns (string memory) {
return hello;
}
}
整个合约包含三个函数和两个变量,plus()函数是一个累加器,通过输入的变量和合约内的变量的相加来更改合约内变量的值,这个函数具有public属性,是所有人都可以调用的。
第二个函数get()是获取合约当中累加值Data,通过调用这个函数,可以得到累加值Data的大小,同样也是所有人都可以调用的,在函数后面加入view符号表示这个函数被调用是不需要gas的,类似于一种只读操作。
第三个函数helloworld()可以返回一个在合约内设定好的字符串hello,要注意的是这里的string变量后面需要加上memory标志,代表这个变量只保存在内存当中,字符串的内容可以自己设定,我这里写的是Hello world!,也希望各位开发者能像第一天写程序一样保持自己的初心。
合约写完之后进入部署。
合约的部署和调用
首先,我们点击右边的白色方框选取自己的要编译的合约,Solidity合约文件是以.sol作为结尾,选取完点击编译就会开始编译。
编译成功之后会弹出方框告知,同时在下部的调试框内也会出现编译成功的内容。
在编译成功之后就需要进行部署,部署需要用到Metamask钱包,关于metamask钱包安装使用以及如何获取测试币,可以通过这个教程来阅读。https://www.jianshu.com/p/38b64c84e394?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation
部署时注意更改Gas price的值,25是比较合适的,点击部署按钮,1分钟左右即可完成部署。
在下方的消息框内可以看到部署情况,部署过程可以点击上面那个链接查询,部署成功后就通过下面的链接查询部署情况。
接下来,我们就可以调用已经部署好的合约了:
通过点击合约的选项可以选择要调用的合约,get()和helloworld()是不需要参数以及gas fee的,可以直接点击调用,plus()需要输入一个uint256的变量。
首先通过plus函数输入两次变量的值,一次50,一次25。
然后通过get()函数进行调用,可以看到返回的值为75,代表合约的功能部署成功。
然后我们再调用一次helloworld(),可以看到返回值为Hello world!,同样也实现了想要的功能。
结语
到这里,我们就完成了合约的部署以及调用功能,能在区块链上实现一些简单的逻辑,如果想进行更多的调试和功能探索,可以多看一看样例模板,也许能给大家带来一些灵感。
ChainIDE同样提供了一些模板,就在目录当中,大家可以尝试部署并且调用一下它们,当中也包括了一些更高级的功能和更复杂的逻辑,希望能给你们带来帮助。