【新年企划】人生第一颗发财币| 智能合约开发计划#2

科技隨筆
·
·
IPFS
·
在本文中,我们会开始写一些程式,让读者了解如何利用Remix开发环境来撰写Solidity程式,以及如何编译、发布智能合约。还有在发布之后怎么看刚刚设定的参数是否都成功被执行了,一起实作发出人生第一颗发财币吧!

前言

这是新年特别企划的第二篇,所以如果你还没看过前一篇的话,连结在这里

我们的目标是在过年前学习写自己的第一个智能合约并发行自己的加密货币,可以作为红包发送给亲友,或是想想自己币的用途。

这篇文章会开始写一些程式,我会尽量尝试解释程式码,但是如果看不懂真的放弃的话,可以直接将我的程式码复制起来贴到Remix里面,除了程式码外,我们也会练习如何在Remix上编译并进行智能合约的发布哦!

就不啰嗦了,直接打开上次介绍的Remix开始开发吧!网址是https://remix.ethereum.org/ ,至于浏览器的部分,需要使用有安装Metamask钱包扩充套件的浏览器,如果你的Metamask安装在Chrome上的话就用Chrome开发吧,因为后续当我们要将智能合约发至测试网时,就需要它里面的测试币来支付链上手续费。

启航

第一次打开,它或许会跳出小视窗显示”Help us to improve Remix”,就看你要不要同意了,意思是当程式发生一些例外状况时,会将当下这个状况回报给以太坊基金会的开发者,帮助他们发现问题进而优化系统。

就像使用一般档案总管那样,我们先点开contracts的资料夹,并点选上方折一角的纸张icon,在contracts资料夹中建立一个新的.sol档,例如abcd.sol、FaTsaiB.sol(发财币??),.sol就是solidity程式语言的副档名。

 // SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;

最开始我们需要给一个”SPDX”许可标示符号,这个符号的意思就是这个程式码要不要开源授权给他人使用,开源的程度就与不同的许可有关系,”// SPDX-License-Identifier: MIT”代表MIT开源许可;”// SPDX-License-Identifier: unlicensing”代表不开源,想要使用其他不同许可可以去SPDX看看详细内容。

pragma solidity 就是指定solidity的版本,在这篇文章中我们会使用当下最新的Solidity 0.8.11版本,由于Solidity仍是一个非常新更新非常频繁的程式语言,若未来当你看到这篇文章,已经有更新版本的Solidity,而你执行发现程式码有点问题,不妨试着将版本降回0.8.11再执行看看。

第一个试作品| 如何撰写、编译、发布智能合约

我将其命名为First.sol ,你也可以取个自己喜欢的名字,但是副档名必须是.sol。

先写一段最简单的,然后先尝试在本机端编译、发布智能合约就好,确定可以发布,也能查询加密货币的名称、代号及总供应量就表示成功了。

First.sol

 // SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;

contract Token {

    string public name = "Fa Tsai Bee";
    string public symbol = "FTB";
    uint256 public decimals = 18;
    uint256 public totalSupply = 1000000000000000000000000000000;
}

contract的意思就是合约,Token则是我们帮这个合约取的名字,要注意智能合约的名称与未来我们要发的加密货币的名称没有关系哦!

在这个合约中我们定义了四个参数,分别是加密货币的名称(name)、加密货币的代号(symbol)、加密货币可被分割的最小小数点(decimals)以及总供应量(totalSupply)。

名称(name)跟代号(symbol)很直觉应该不用多说,以比特币为例就是”Bitcoin”与”BTC”;以雪崩为例就是”Avalanche”与”AVAX”。

decimals指的是最小位数的小数点,以太币当初被设计时的最小单位就是18,意思是以太币可以被分割为0.000000000000000001颗,而这个最小单位就是我们在链上操作时常常在Gas Price上面看到的wei,一直看到的Gwei,G是Giga,就是10的9次方,所以假设Gas Price是100Gwei,等于100,000,000,000 wei,等于100Nano颗ETH,等于0.0000001颗ETH。 (希望我的0放的数量都是对的,弄到眼花了)

totalSupply则是指总供给量,但是由于我们前面设定的最小单位是小数点后18位数,这边的总供给量就要把18位补满哦,假设我的总发行量要是100颗的话,totalSupply就必须是100乘上10的18次方,而在本例中总发行量设为一兆颗,所以是10的12次方程式10的18次方,总共30个0。

我们的第一个智能合约First.sol就这么简单四个参数设一设而已,因为更重要的是要先尝试如何将智能合约编译与发布,这是两个动作不要搞混了。

智能合约编译

程式写完以后,我们要先做编译,点选最左侧由上往下数的第三个icon,点了之后原本在右侧的档案总管就会变成”SOLIDITY COMPILER”:

最上面的COMPILER要对应到我们写的solidity版本,就是0.8.11+commit….. 接着下面的参数应该不用动即可,往下滑看到一个Compile First.sol的蓝色按纽就点下去,如果程式没有出现什么红红橘橘的错误,那就是编译成功了,接着我们要来发布这个编译好的档案。

智能合约发布

编译完成后,点选最左侧由上往下数的第四个icon,点了之后原本在右侧的”SOLIDITY COMPILER”就会变成”DEPLOY & RUN TRANSACTIONS”:

这里的ENVIRONMENT指的是环境,由于我们单纯只是要先在本机跑,选择JavaScript VM就好,London或Berlin都可以。

ACCOUNT点开可以看到里面有十个0x开头的钱包地址,每个地址都有100ETH,但是很可惜那是玩具钞,不是你发财了。

那些GAS与VALUE的设定都不用动,直接跳到CONTRACT的部分,下拉选单选择刚刚编译好的Token – contracts/First.sol,下面有个橘色的Deploy按钮按下去就发布成功了。

在程式码区块最底下有一笔链上纪录,这一笔纪录是在说我们的地址发布了一个智能合约,而智能合约本身就是这个代币哦!

左侧”DEPLOY & RUN TRANSACTIONS”区块往下滑,会看到Deployed Contracts,就是刚刚已经发布的合约,点开可以看到四个蓝色按纽,都去点点看,这个合约就能够显示我们刚刚定义的四个参数了。

做到这里,我们就成功发布了第一个智能合约了。

所以总结一下,需要做的三个步骤:
1. 先写好程式码。
2. 切换到“SOLIDITY COMPILER” 进行程式码的编译。
3. 切换到“DEPLOY & RUN TRANSACTIONS” 发布自己的智能合约。

完成后,总供应量(totalSupply)个币会直接送入发布这个智能合约的地址中。

如果成功了,我们就把原本的程式码稍微做些改良。

第二个试作品| 改良版智能合约

加密货币初始参数客制化

之前是直接把代币的名称、小数位数、总发行量等资讯直接写在程式码中,但是这样在程式编译之后就不能改动了,所以如果要发许多不同的币,就要重新更改程式码、重新编译再发布合约太麻烦了。

这里我们继续使用First.sol来做修改,要做的就是把四个参数的值去掉,改成发布合约之前才要填参数,这样就只需要编译一次,程式码也不用再改来改去了,新版本看起来会像这样:

 // SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;

contract Token {

	string public name;
	string public symbol;
	uint256 public decimals;
	uint256 public totalSupply;
	
	constructor(string memory _name, string memory _symbol, uint _decimals, uint _totalSupply){
	    name = _name;
	    symbol = _symbol;
	    decimals = _decimals;
	    totalSupply = _totalSupply;
	    balanceOf[msg.sender] = totalSupply;
	}
}

这里所谓的constructor,与一般function的差别是在初次部属智能合约时,会先执行的地方,而且只能被执行一次,所以在我的理解中,constructor是一种设定程式初始参数的概念。

以此例而言在部属前要先自行输入_name, _symbol, _decimals, _totalSupply 四个参数,部属当下智能合约就会将这四个参数分别写入name, symbol, decimals, totalSupply当中。

将原本的程式码改为这样以后一样切换到“SOLIDITY COMPILER”重新编译,编译后回到“DEPLOY & RUN TRANSACTIONS”,这时候要发布前Deploy的右边会多出一个框框,框框的再右边有一个往下的箭头,箭头点开就会发现刚刚在constructor中定义的四个参数,在发布智能合约前需要输入才能发布成功,否则程式执行时不知道_name, _symbol, _decimals, _totalSupply分别是什么就会出错了。

这里的参数可以填跟第一个试作品一样的内容,例如:
_NAME: “Fa Tsai Bee”
_SYMBOL: “FTB”
_DECIMALS: 18
_TOTALSUPPLY: 100000000000000000000

输入完按transact 就完成部属了,也就是说,未来我们要发其他的货币时,直接输入发布就好了,不需要再重新改程式码与编译。

结语

本篇文章主要是让读者了解如何利用Remix开发环境撰写Solidity程式,以及如何编译、发布智能合约。在发布之后怎么看刚刚设定的参数都成功被执行了。

但你会发现这样的货币什么事都做不了…好歹也要能够转帐吧!

所以下一次我们会聊聊要怎么让自己的加密货币能够转帐,敬请期待!

延伸阅读

上一篇: 【新年企划】过年就包红包币| 智能合约开发计划#1



谢谢你在百忙之中愿意抽空来花时间来看我的文章,如果还喜欢这些内容的话希望能获得你的追踪及支持,也欢迎点此连结在其他平台找到我

下次见噜o((>ω< ))o~

原文连结ITechNote 科技随笔

CC BY-NC-ND 2.0 授权

喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!

logbook icon
科技隨筆| 科技閱讀 | 程式語言 | 理財規劃 | 工具推薦 | 音樂盛宴 | 生活雜談 | 科技隨筆中,不只有科技! 在這裡,我會隨筆記下科技閱讀、程式語言、理財規劃、音樂饗宴以及生活雜談等等內容。 邀請您在過程中與我一同分享也一同成長。 讓我們在人生的旅途中不斷學習,努力成為更棒的人吧~ 在其他平臺關注我: https://linkby.tw/itechnote.co
  • 来自作者
  • 相关推荐

【音樂月報 #13】2022年10月號

【音樂月報 #12】2022年9月號

【音樂月報 #11】2022年8月號