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

更新 發佈閱讀 12 分鐘
raw-image

前言

這是新年特別企劃的第二篇,所以如果你還沒看過前一篇的話,連結在這裡

我們的目標是在過年前學習寫自己的第一個智能合約並發行自己的加密貨幣,可以作為紅包發送給親友,或是想想自己幣的用途。

這篇文章會開始寫一些程式,我會盡量嘗試解釋程式碼,但是如果看不懂真的放棄的話,可以直接將我的程式碼複製起來貼到Remix裡面,除了程式碼外,我們也會練習如何在Remix上編譯並進行智能合約的發佈哦!

就不囉嗦了,直接打開上次介紹的Remix開始開發吧!網址是https://remix.ethereum.org/,至於瀏覽器的部分,需要使用有安裝Metamask錢包擴充套件的瀏覽器,如果你的Metamask安裝在Chrome上的話就用Chrome開發吧,因為後續當我們要將智能合約發至測試網時,就需要它裡面的測試幣來支付鏈上手續費。

啟航

第一次打開,它或許會跳出小視窗顯示”Help us to improve Remix”,就看你要不要同意了,意思是當程式發生一些例外狀況時,會將當下這個狀況回報給以太坊基金會的開發者,幫助他們發現問題進而優化系統。

raw-image

就像使用一般檔案總管那樣,我們先點開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”:

raw-image

最上面的COMPILER要對應到我們寫的solidity版本,就是0.8.11+commit….. 接著下面的參數應該不用動即可,往下滑看到一個Compile First.sol 的藍色按紐就點下去,如果程式沒有出現甚麼紅紅橘橘的錯誤,那就是編譯成功了,接著我們要來發佈這個編譯好的檔案。


智能合約發佈

編譯完成後,點選最左側由上往下數的第四個icon,點了之後原本在右側的”SOLIDITY COMPILER”就會變成”DEPLOY & RUN TRANSACTIONS”:

raw-image

這裡的ENVIRONMENT指的是環境,由於我們單純只是要先在本機跑,選擇JavaScript VM就好,London或Berlin都可以。

ACCOUNT點開可以看到裡面有十個0x開頭的錢包地址,每個地址都有100ETH,但是很可惜那是玩具鈔,不是你發財了。

那些GAS與VALUE的設定都不用動,直接跳到CONTRACT的部分,下拉選單選擇剛剛編譯好的Token – contracts/First.sol,下面有個橘色的Deploy按鈕按下去就發佈成功了。

raw-image

在程式碼區塊最底下有一筆鏈上紀錄,這一筆紀錄是在說我們的地址發佈了一個智能合約,而智能合約本身就是這個代幣哦!

raw-image

左側”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分別是什麼就會出錯了。

raw-image

這裡的參數可以填跟第一個試作品一樣的內容,例如:
_NAME: “Fa Tsai Bee”
_SYMBOL: “FTB”
_DECIMALS: 18
_TOTALSUPPLY: 100000000000000000000

輸入完按transact就完成部屬了,也就是說,未來我們要發其他的貨幣時,直接輸入發佈就好了,不需要再重新改程式碼與編譯。

結語

本篇文章主要是讓讀者瞭解如何利用Remix開發環境撰寫Solidity程式,以及如何編譯、發佈智能合約。在發佈之後怎麼看剛剛設定的參數都成功被執行了。

但你會發現這樣的貨幣甚麼事都做不了…好歹也要能夠轉帳吧!

所以下一次我們會聊聊要怎麼讓自己的加密貨幣能夠轉帳,敬請期待!


最後,謝謝你在百忙之中願意抽空來花時間來看我的文章,如果還喜歡這些內容的話希望能獲得你的追蹤及支持,也歡迎點此連結在其他平台找到我

下次見嚕 o((>ω< ))o~

原文連結 ITechNote 科技隨筆

留言
avatar-img
留言分享你的想法!
avatar-img
ITechNote 科技隨筆的沙龍
27會員
42內容數
《科技隨筆 | 智能合約開發計畫》 智能合約開發計畫會深入淺出,從認識以太坊的協議開始出發,慢慢從最簡單的代幣到發行 NFT ,甚至是開發一些去中心化應用程式(Dapps),並做一些簡單的使用者介面讓任何人可以透過瀏覽器開啟 Web3.0 的大門。
2022/06/09
這篇會是端午節 NFT 系列的最後一篇文,同時也是這個系列中最核心的部分,我們終於要來實際鑄造產生 NFT,並在 OpenSea 上看看結果了,有興趣的話就繼續看下去吧。
Thumbnail
2022/06/09
這篇會是端午節 NFT 系列的最後一篇文,同時也是這個系列中最核心的部分,我們終於要來實際鑄造產生 NFT,並在 OpenSea 上看看結果了,有興趣的話就繼續看下去吧。
Thumbnail
2022/06/03
開發 NFT 專案無非三個步驟:寫程式 → 編譯程式碼 → 發佈智能合約,除了這三個步驟以外,我們還將介紹如何使用 OpenZeppelin 做為專案開發的根基,想要打造車子不再需要從輪子開始造起了,大幅增加開發專案的效率。
Thumbnail
2022/06/03
開發 NFT 專案無非三個步驟:寫程式 → 編譯程式碼 → 發佈智能合約,除了這三個步驟以外,我們還將介紹如何使用 OpenZeppelin 做為專案開發的根基,想要打造車子不再需要從輪子開始造起了,大幅增加開發專案的效率。
Thumbnail
2022/05/26
介紹 NFT 的 Metadata、JSON 格式是甚麼,如何去客製化我們的 NFT,它的規格標準怎麼透過 Metadata 來設定的,目前最大的 NFT 二級市場 OpenSea 又提供哪些 Metadata 可以使用。
Thumbnail
2022/05/26
介紹 NFT 的 Metadata、JSON 格式是甚麼,如何去客製化我們的 NFT,它的規格標準怎麼透過 Metadata 來設定的,目前最大的 NFT 二級市場 OpenSea 又提供哪些 Metadata 可以使用。
Thumbnail
看更多
你可能也想看
Thumbnail
  Soildity是一種風格類似JavaScript的強型別高階語言,專門用來進行智能合約的開發及編程。本文敘述solidity的獨特之處。   
Thumbnail
  Soildity是一種風格類似JavaScript的強型別高階語言,專門用來進行智能合約的開發及編程。本文敘述solidity的獨特之處。   
Thumbnail
本篇章會以實際的程式碼來說明開發Solidity的組成脈絡與重要的區塊,讓我們不再害怕閱讀艱澀難懂的程式碼,並且具備基礎知識以後也能看懂外面的合約。 開源程式碼常常會面臨到法律的問題,因此License的宣告就變得非常重要,而Solidity也考慮到這一塊,因此特別規劃了一塊License宣告的區塊
Thumbnail
本篇章會以實際的程式碼來說明開發Solidity的組成脈絡與重要的區塊,讓我們不再害怕閱讀艱澀難懂的程式碼,並且具備基礎知識以後也能看懂外面的合約。 開源程式碼常常會面臨到法律的問題,因此License的宣告就變得非常重要,而Solidity也考慮到這一塊,因此特別規劃了一塊License宣告的區塊
Thumbnail
上一篇我們介紹了智能合約的基本概念,而在開發智能合約之前, 建議先對智能合約具備基礎的概念, 往後進行開發時較容易融會貫通, 還沒閱讀的朋友可以參閱此篇「【開發智能合約 — Solidity系列】 淺談智能合約」。 理解完「智能合約」之後,相信大家已經開始手癢了吧! 應該很想開始動手完成第一個自己專
Thumbnail
上一篇我們介紹了智能合約的基本概念,而在開發智能合約之前, 建議先對智能合約具備基礎的概念, 往後進行開發時較容易融會貫通, 還沒閱讀的朋友可以參閱此篇「【開發智能合約 — Solidity系列】 淺談智能合約」。 理解完「智能合約」之後,相信大家已經開始手癢了吧! 應該很想開始動手完成第一個自己專
Thumbnail
Step1 : 過Compile Compile就類似debug,要確認這個合約是可以執行的才可以選擇deploy Step2 :選擇部屬環境跟合約位置 ENVIROMMENT 選 Injected Web3 CONTRACT 選你剛在本地寫的 .sol 專案(我的是 ASC_ver1.sol -
Thumbnail
Step1 : 過Compile Compile就類似debug,要確認這個合約是可以執行的才可以選擇deploy Step2 :選擇部屬環境跟合約位置 ENVIROMMENT 選 Injected Web3 CONTRACT 選你剛在本地寫的 .sol 專案(我的是 ASC_ver1.sol -
Thumbnail
這次的 NFT 開發,希望讓讀者們在實作時,盡量用最少的程式碼也能夠完成你的 NFT 作品,而這篇文章可以當做是一個暖身,我們會大致瀏覽本次開發 NFT 所需要用到的一些工具與小知識,大概整理之後暫時先分為六大主題...
Thumbnail
這次的 NFT 開發,希望讓讀者們在實作時,盡量用最少的程式碼也能夠完成你的 NFT 作品,而這篇文章可以當做是一個暖身,我們會大致瀏覽本次開發 NFT 所需要用到的一些工具與小知識,大概整理之後暫時先分為六大主題...
Thumbnail
此篇文是在練習並熟悉solidity與remix的操作
Thumbnail
此篇文是在練習並熟悉solidity與remix的操作
Thumbnail
這是新年企劃的最終章,在這個月我們花了四篇文章的篇幅,慢慢討論如何利用Remix撰寫最簡單的Solidity智能合約,期望大家真的都能順利發行自己的加密貨幣,並在過年期間發送給親友們,讓他們體驗一下甚麼是錢包,並領取他們人生中第一顆加密貨幣。
Thumbnail
這是新年企劃的最終章,在這個月我們花了四篇文章的篇幅,慢慢討論如何利用Remix撰寫最簡單的Solidity智能合約,期望大家真的都能順利發行自己的加密貨幣,並在過年期間發送給親友們,讓他們體驗一下甚麼是錢包,並領取他們人生中第一顆加密貨幣。
Thumbnail
本文延續上一次的程式碼,並增加錢包餘額查詢以及轉帳功能,完成後將會嘗試轉帳,若測試與查詢的結果都沒有問題的話,恭喜你完成一個可以被轉帳交易的加密貨幣,今年過年就靠它讓你在親戚朋友之間成為被眾人討論的紅人了!
Thumbnail
本文延續上一次的程式碼,並增加錢包餘額查詢以及轉帳功能,完成後將會嘗試轉帳,若測試與查詢的結果都沒有問題的話,恭喜你完成一個可以被轉帳交易的加密貨幣,今年過年就靠它讓你在親戚朋友之間成為被眾人討論的紅人了!
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News