前言
這是新年特別企劃的第四篇,我們的目標是在過年前學習寫自己的第一個智能合約並發行自己的加密貨幣,可以作為紅包發送給親友,或是想想自己幣的用途,打造一個貨幣的經濟模型,拿去大割韭菜大賺一票,所以如果你一篇都還沒看過的話,第一篇的連結在
這裡。
經過前面文章,我們已經撰寫了程式碼並順利的發佈自己的智能合約,發佈的當下合約會將100%加幣貨幣供給量發送到我們的錢包,不過這都是在本機上的操作,當你換個瀏覽器或是把智能合約刪掉,它就不見了,所以本篇我們會操作一翻,讓智能合約部屬在以太坊測試網上,雖然說測試網上的錢都是假的,但是它仍是一個正常運作的區塊鏈,不論是你換個瀏覽器、換個電腦或是去其他國家使用,我們發佈的幣將永遠存留在區塊鏈上!
另外還會討論為什麼在合約發佈後,我們要將程式碼貼在Etherscan上並進行驗證,這樣做又有什麼好處。
那就開始吧,雖然我在第一篇寫過如何領取測試網上的ETH做為發佈智能合約以及轉帳用的手續費,但是在這邊還是會再寫一次。
以太坊 Kovan測試網 免費Ether領取
Metamask切換至Kovan測試網路的兩步驟:
1. 在Metamask中點選「以太坊 主網路」的下拉選單
**如果你的錢包並未出現Kovan 測試網路的話,請優先將Kovan測試網路加到Metamask中,一樣是兩步驟完成:
1. 在Metamask中點選「以太坊 主網路」的下拉選單並按下新增網路(Add Network)
為了方便複製避免輸入錯誤,這裡會將四個項目寫下來,可以直接從這裡複製貼上哦:
Network Name: Kovan Test Network
New RPC URL: https://kovan.poa.network
Chain ID: 42
Currency Symbol: ETH
新增完畢後,記得回去做切換至Kovan測試網路的兩步驟,先將錢包切換到Kovan測試網路哦!
左側的Network顯示為以太訪的測試網路Kovan,當然你可以點開下拉選單,轉換一下不同的測試網路,不過我們這次開發會在Kovan上,所以只要領Kovan測試網的ETH就好,右側輸入錢包地址,按下我不是機器人並Sand request。
按下之後,這個水龍頭就會發送交易,將ETH以及LINK幣鏈上轉帳給我們,看到”Waiting for confirmation”表示這些資產正在上鏈中可以稍等一下,直到變成”Request complete”就成功了!趕快回去打開Metamask錢包就能看到剛剛被發送的10顆Kovan LINK以及0.1顆Kovan ETH,再次強調,這裡的錢只是玩具鈔,就算你有100,000,000顆ETH,它的資產價值也是0哦!
在Kovan發佈智能合約
要把程式碼發佈到區塊鏈上,就像轉帳交易一樣都需要上區塊鏈,這件事情本身就會需要Gas fee,也就是上鏈的手續費,所以才需要先去領取免費的ETH,領到之後就可以開始發佈啦!要能夠在Kovan上發佈,就需要先將環境改到測試網上,先去檢查Metamask錢包是否設定在Kovan測試網路,接著在 “DEPLOY & RUN TRANSACTIONS” 的第一個欄位 “ENVIRONMENT” 切換到 “Injected Web3″,這時Matamask會跳出來問你要不要跟Remix連線,點選連線後,ENVIROMNT就會顯示Koven (42) network:
如果你的Metamask是在其他主網、L2、側鏈或測試網上,底下就不會顯示 “Koven (42) network” 哦。
接著就是老樣子,Deploy我們的代幣,但是這次不一樣的是你的Metamask會跳出小視窗請你確認一筆在Kovan測試網路上建立新合約:
以此例而言,可以看到如果要將這個智能合約發佈到Kovan測試網路,需要付出0.0015顆ETH,但是這裡的ETH是我們剛剛領取到的免費Kovan ETH (KETH),KETH與真正交易所買到的ETH不一樣,它是沒有價值的。
添加程式碼至Etherscan
成功發佈後,需要把程式碼貼到鏈上以供任何人瀏覽,但是這樣做似乎像是多此一舉,因為我們已經自行驗證過程式碼是可以轉帳的嘛!所以在這裡稍微解釋一下可能會出現的疑惑點。
《一些可能的疑問》
Q:為什麼需要把程式碼放上去呢?
首先你應該要知道,電腦只看得懂0和1組成的數據,並不能直接看懂人類的語言以及人類撰寫出來的程式碼,所有你現在所用的軟體服務,背後都是0和1組合而成的語言。回想一下我們如何發佈一個智能合約的,在程式寫完後要先到 “SOLIDITY COMPILER” 進行編譯,這個編譯的步驟就像是一個語言翻譯的過程,將人類寫的程式碼轉換成電腦看得懂的語言。
在發佈的過程,只是將電腦看得懂的語言放上去而已,事實上電腦語言沒有能夠100%還原成原本程式碼的能力,例如程式碼中不會被執行的註解就無從還原,於是在Etherscan上就有 Verify and Publish 的功能讓我們將原始代碼放上去做驗證。
Q:放程式碼上去有什麼好處嗎?為什麼要這麼做?
既然發佈了智能合約,那我們一定會希望有人使用吧!這種感覺就像是在巷口放置一台自動販賣機,希望被更多人使用一樣。但是一般使用者幾乎不可能會認識身為發佈者的我們,這時候他根本無從得知我們的幣或是提供的服務(如:轉帳)是否可以被信任,所以我們應該要把程式碼放上去,至少讓用戶有機會自己審核代碼,透過瀏覽程式碼去判斷準備要使用的合約背後的程式是否確實按照開發者所說的會那樣執行。
《添加程式碼》
於 “DEPLOY & RUN TRANSACTIONS” 往下滑找到 “Deployed Contracts” 欄位,右邊有個複製的icon:
這個TOKEN AT 0X….就是我們發佈的合約,合約在創建時也會有個地址,這個例子而言,我們發的幣就是0x9E開頭,未來想要追蹤這個幣的任何紀錄都要透過這個地址做查詢,現在將地址複製起來,接下來就是去Etherscan上找到剛剛發佈的合約內容,並添加合約的程式碼。
搜尋後就會找到剛剛在Remix上發佈的合約,可以看到Creator的錢包地址就會是你發佈合約的那個地址哦!
接下來點擊下方的 Contract,就會看到一堆像亂碼的東西,這個東西就是給電腦閱讀的語言,也可以被稱作「Byte Code」,點擊 Verify and Publish。
進到 Verify & Publish Contract Source Code 頁面後,分別要輸入錢包地址、要編譯的程式語言、程式語言版本以及License,這個License就是程式碼授權的程度,當初我們在寫的時候放在第一行的東西。
再來把完整的程式碼複製貼上到 “Enter the Solidity Contract Code below” 中,按Verify and Publish 就完成程式碼的上傳了。
上傳完成後,回到合約的頁面就會發現Contract右邊多了一個綠勾勾,表示這個合約附上了程式碼,且被EVM驗證過了。
到這裡為止,就是完整的完成智能合約的發佈了,再來我們來實際使用這個幣看看,你會需要開第二個錢包作為收款錢包哦。
轉帳
再來我們會做跟上一篇文章一樣的事情就是實際轉帳看看,由於大部分過程都一模一樣,我就簡單帶過了,忘記的話可以
回顧上一篇再重新看一下。
由於我們發行的加密貨幣確實運行在區塊鏈上了,所以選擇回到Remix上或是直接用Metamask進行轉帳都可以,這邊還是以Remix做示範,在 “DEPLOY & RUN TRANSACTIONS” 中輸入另一個錢包的地址與匯出的數量做transfer:
Metamask會請你確認是否要發送這筆交易,由於交易需要上區塊鏈,就會需要ETH作為手續費,這張圖可以看出預計的手續費是0.000131 ETH,匯出的金額是0.0000000000000001顆 FTB (因為我們在 _value 中填了100, _value 的最小單位稱作wei,wei表示10e-18顆):
確認後等待這筆交易紀錄成功上鏈,就會跑出小狐狸的小視窗:
像上次一樣使用我們在Remix上寫的 balanceOf 來查詢兩個錢包的加密貨幣餘額,由於匯出了100 wei 顆加密貨幣,一邊會扣100 一邊會加100:
Etherscan上查詢轉帳紀錄
最上面的第一筆就是我們剛剛轉帳出去的那筆紀錄,想看更詳細的內容就要點擊 Txn Hash 0xbd開頭的Hash,點進去會看到這筆紀錄的詳細資料:
在這裡可以明明白白地看到誰(From)呼叫哪個智能合約(Interacted With),給了誰(To) 多少(For)顆加密貨幣(Fa Tsai Bee, FTB),手續費花了多少ETH (Transaction Fee)。
完整程式碼
裡面放的主要就是過去這四篇文章的程式碼,包含 First.sol, TransferToken.sol。
而其中的
FaTsaiBee.sol 是完整版的程式碼,未來如果有機會再來談談這裏面的allowance和approval是什麼,以及它所衍生的資安議題。
小彩蛋
如果沒意外過年期間我會再發一篇文章,主旨就是我在Polygon上發行了自己的科技幣 (IT Coin, ITC),到時候會有空投免費的 ITC 幣獎勵做為讀者回饋,持幣者接下來會有一些特殊福利哦!
目前規劃會在我的FB粉專、Line社群以及Telegram群組分別發放空投名額,空投名額有限先搶先贏,詳細資訊請持續關注之後的文章,所以歡迎優先加入或追蹤以下三個平台,掌握第一手資訊:
FB粉專連結:ITechNote 科技隨筆
Line社群:科技隨筆 場外休息區
Telegram群組:ITechNote 科技隨筆 交流社群
延伸閱讀
最後,謝謝你在百忙之中願意抽空來花時間來看我的文章,如果還喜歡這些內容的話希望能獲得你的追蹤及支持,也歡迎
點此連結在其他平台找到我。
下次見嚕 o((>ω< ))o~