【新年企劃】人生第一顆發財幣 | 智能合約開發計劃 #2

2022/01/13閱讀時間約 11 分鐘

前言

這是新年特別企劃的第二篇,所以如果你還沒看過前一篇的話,連結在這裡
我們的目標是在過年前學習寫自己的第一個智能合約並發行自己的加密貨幣,可以作為紅包發送給親友,或是想想自己幣的用途。
這篇文章會開始寫一些程式,我會盡量嘗試解釋程式碼,但是如果看不懂真的放棄的話,可以直接將我的程式碼複製起來貼到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程式,以及如何編譯、發佈智能合約。在發佈之後怎麼看剛剛設定的參數都成功被執行了。
但你會發現這樣的貨幣甚麼事都做不了…好歹也要能夠轉帳吧!
所以下一次我們會聊聊要怎麼讓自己的加密貨幣能夠轉帳,敬請期待!

最後,謝謝你在百忙之中願意抽空來花時間來看我的文章,如果還喜歡這些內容的話希望能獲得你的追蹤及支持,也歡迎點此連結在其他平台找到我
下次見嚕 o((>ω< ))o~
為什麼會看到廣告
ITechNote 科技隨筆
ITechNote 科技隨筆
科技隨筆中,不只有科技! 在這裡,我會隨筆記下科技閱讀、程式語言、理財規劃、音樂饗宴以及生活雜談等等內容。 邀請您在過程中與我一同分享也一同成長。 讓我們在人生的旅途中不斷學習,努力成為更棒的人吧~ 歡迎在其他平臺追蹤與我互動! linkby.tw/itechnote.co
留言0
查看全部
發表第一個留言支持創作者!