区块链的应用日趋广泛,智能合约现阶段也在金融、供应链等领域快速发展,让许多流程高效率自动化,同时资安管控品质也大幅提升。以下将会有五篇教学文章,让有或没有程式背景的读者都能先撰写基础智能合约,以便继续深造或参与区块链相关项目之商业开发案时能顺利沟通。
Solidity是以太坊上编写智能合约的主要程式语言。它是一种契约编写的程式语言,也就是说,智能合约可以储存、交易与编写在区块链上。Solidity与JavaScript、Python和C ++类似,都是有一定难度的程式语言,它是被用来在Ethereum Virtual Machine(EVM)上运行,且会储存在各个全节点上面,并在上面运行,简而言之,学会Solidity就足够让我们在区块链网络上建立一个智能合约与应用。
- 我们首先要用Remix 来打程式码。那什么是Remix?Remix 是用来编写Solidity 的Web IDE,也就是浏览器的开发环境,可以用来储存、编译我们所写的程式码、智能合约等,当然还有很多其他很好用的功能这边就不多赘述,所以我们使用Remix当做这次开发智能合约的开发环境。【教学完会提供完整程式码提供对照】
- 请大家开启一个新的标签页或视窗,打开Remix,以便跟上这次的教学。( Remix链结 )
- 在Remix页面中的左手边,点击browser旁加号,可以打开一个新的文件夹来编写Solidity。
- 接着我们开启一个新的资夹命名为「MyContract.sol」。
- 在程式码的第一行当中,我们要先写下要使用的Solidity的版本,因为Soldility会随着时间而更新里面的工具,尽管主要内容不变,但大家还是要注意看看版本为何。
pragma solidity ^0.4.24;
- 接着我们宣称智能合约如下 :
pragma solidity ^0.4.24;
contract MyContract {
// …
}
这边要先解释几件事情,以便后的执行。
- 智能合约是在以太坊区块链上执行的一段程式码
- 以太坊区块链上的程式码都是公开且开源的,也就是说任何人都可以查看你在智能合约里的程式码,同样地,你也可以查询其他人的程式码
- 接着我们希望可以编写一个可以「储存」的程式码而这段程式码的功能可以「储存」及「检验」。
- 为了在Solidity里面要做到可以「储存」及「检验」,我们先将一个变数命名为value。因为Solidity是一个静态程式语言,在宣称变数之前,所以要先指定资料型态如下(ex. string为字串意思,指定资料为文字型态时用):
pragma solidity ^0.4.24;
contract MyContract {
string value;
}
- 这个变数是一个「储存变数」,它会将数据储存到区块链当中,只要我们给定一个数值、数据,它就会储存到区块链当中。
*数值是会储存到储存空间当中,而不是记忆体。
*整个智能合约都可以访问这个变数,并解改变里面得数值,然而有些变数只能被部分的访问函数里面的值,而且无法直接更动里面的值。
- 接着,建立一个函数以从存储的数据中读取该值。我们首先使用一个名为「get()」的函数:
function get() {
// …
}
- 现在,将使用”return”将储存变量返回值,return就像是把我们刚刚所储存的变数吐出来,所以当我们需要取得刚刚的值时就会乎叫get函数,如下图所示:
function get() {
return value;
}
- 我们将此功能的「能见度」设置为公开,以便连接到区块链的任何人都可以呼叫它(不仅仅是从智能合约程式码本身内)
function get() public view {
return value;
}
- 最后,我们将为函数指定返回数值字串:
function get() public view returns(string) {
return value;
}
这样我们就可以从智能合约能取数值。
- 这边先介绍从智能合约外部变更数值的方法。我们将创建一个set函数,如下所示:
function set(string _value) public {
// …
}
- 我们建立一个可以接受字串类型参数的函数。而且该功能也是公开的,因此连接到区块链的任何人都可以呼叫它。现在,让我们实际更改智能合约的数值,如下所示:
function set(string _value) public {
value = _value;
}
- 我们设置一个数值给储存变数。底线开头表示为一个局部变数,在很多语言当中,包函Solidity都是如此表示
- 我们可以先设置一个预设值给我们设定的储存变数。操作如下:
constructor() public {
value = “myValue”;
}
- 我们先使宣称Constructor这个函数。每当我们部署智能合约时,它只能运行一次且公开可信的。
- 以上我们就完成了一个程式码。完整的程式码如下,小心顺序以及逻辑,新手要注意括弧的位置。
pragma solidity ^0.4.24;
contract MyContract {
string value;
constructor() public {
value = “myValue”;
}
function get() public view returns(string) {
return value;
}
function set(string _value) public {
value = _value;
}
}
再来,我们要编译和部署此智能合约。首先,在浏览器的左侧点开下面的插头符号。并搜寻compiler以及run并点选Activate启用这两个插件(上图)
,启用后就会多出下面两个符号
接着,点击左方的循环图示,选择版本0.4.25来编译代码(版本会不断更新,不同版本会有些微差异),记得勾选「Auto Compile」并点击蓝色按键「Compile」。
再来,让我们选择测试环境,选取左列清单第三个。我们选择JavaScript虚拟机,因为它可以在浏览器中提供一个模拟的区块链,也就是类似将智能合约部署后的样子。
那为什么不直接部署呢?因为部署到真正的区块链上要花费以太币,也需要时间等候,而Remix给予我们一个较快速且模拟部署后的样子。这也是我们选择Remix的原因。
只要点击按钮即可部署智能合约!!
部署完成后,要如何与智能合约进行互动呢?
我们可以呼叫智能合约里面的函数,而这些函数在Remix中的介面中已经产生好给我们了,如下图 :
点击get()。可以看到在函数中设置的预设值“ myValue”
我们使用set()更新值。在表格当中添加一个新值,只需确保将其用引号引起来即可,例如:“New Value”。因为这样才可以表示他是一个字串,接着运行它!智能合约会读取该值并更改为“New Value”
- 在编译器的下方为交易纪录,这是虚拟区块链上所有交易的完整列表。
- 因为区块链是由区块所记录与组成,而些记录被“链”在一起,以成为公开式帐本。
- 区块链的基本单位为交易,可以点击箭头向下查询更多详细的交易
以上我们就完成一个以太坊的智能合约,在下一个阶段我们会用以上刚写完的智能合约程式码为基础再进行下一步的教学。
原创文章,作者:惊蛰财经,如若转载,请注明出处:http://www.xmlm.net/bi/31854.html