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

閱讀時間約 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~
為什麼會看到廣告
《科技隨筆 | 智能合約開發計畫》 智能合約開發計畫會深入淺出,從認識以太坊的協議開始出發,慢慢從最簡單的代幣到發行 NFT ,甚至是開發一些去中心化應用程式(Dapps),並做一些簡單的使用者介面讓任何人可以透過瀏覽器開啟 Web3.0 的大門。
留言0
查看全部
發表第一個留言支持創作者!
2022年的農曆新年在一月底就要登場了!說到新年或多或少一定免不了要家族團聚吃個團圓飯,又到了這個時間了,身為社畜的你想好今年要包多少紅包給家人了嗎?這次過年就逼親戚下載錢包,直接把你設計的發財幣、紅包幣、坐以待幣、大學延幣通通在過年的時候射給他們吧!
2022年的農曆新年在一月底就要登場了!說到新年或多或少一定免不了要家族團聚吃個團圓飯,又到了這個時間了,身為社畜的你想好今年要包多少紅包給家人了嗎?這次過年就逼親戚下載錢包,直接把你設計的發財幣、紅包幣、坐以待幣、大學延幣通通在過年的時候射給他們吧!
你可能也想看
Google News 追蹤
Thumbnail
本專欄將提供給您最新的市場資訊、產業研究、交易心法、精選公司介紹,以上內容並非個股分析,還請各位依據自身狀況作出交易決策。歡迎訂閱支持我,獲得相關內容,也祝您的投資之路順遂! 每年 $990 訂閱方案👉 https://reurl.cc/VNYVxZ 每月 $99 訂閱方案👉https://re
Thumbnail
2023年我只設了一個大目標"穩定發文",最後挑戰成功了!然因去年底的身體警訊,今(2024)年我得同時挑戰兩個"大目標"--健康與發文兼顧! 且兩個大目標下,還有各有4個"子目標"願景..我花了1-2月這兩個月的時間,進行了各種資料收集與"先期挑戰",最終我的具體目標和預計的執行路徑會是什麼呢?
Thumbnail
農曆新年快樂,餃子有元寶的寓意,一起迎向豐盛之路。 靜心深呼吸3次,選一份與你有連結的餃子,看看如何開啟今年的豐盛之路。 透過情感與情緒的流動帶領內在的能量流動,並附有相關精油療癒與正面語句的建議,一起開啟豐盛之路。
Thumbnail
元気寿司「外賣新年盛」,令親戚們開開心心齊歎最愛人氣壽司美食,加上人氣高企的「風生水起有撈起」,全家人新一年一定越「撈」越旺,風生水起,齊齊「元気」爆燈!期待已久的元気外賣新年盛現已登陸「元気寿司外賣自取網上訂購」平台(https://order.genkisushi.com.hk/cny.html
Thumbnail
熱血沸騰的BWF年終賽彷彿昨天才剛剛結束,新年度賽季緊接從1月9日起,由超級1000等級的馬來西亞公開賽揭開序幕。本賽事作為奧運積分週期下半場的第一項大賽,各路高手齊聚。籤表一公布,各分項首輪已出現許多堪稱決賽規格的對決。
Thumbnail
亞企味屋 AJIYA 西湖店,位在捷運西湖站步行約九分鐘的距離 餐廳位置在轉角內,有點隱密需張大眼睛仔細找一下~ 亞企味屋 AJIYA 西湖店,環境挑高擺放許多電視,一邊用餐一邊看電視不怕無聊~ 座位區下方有插座可以充電,不怕手機臨時滑到沒電! 裝潢走一個溫色調,隨著耶誕節即將來臨,店內精心
    八年過去了,以前公司的紛紛擾擾對我來說就是一個八卦,終於,阿姨累了,不去上班了,
Thumbnail
看完松本大洋的乒乓,漫畫中有提到一名選手佐久間學,苦練多年雖然擊敗了當時的宿敵月本誠,但最後卻不敵星野裕,讓他喪失信心最終退社,放下了乒乓,這樣殘酷的事情,讓我突然想起過往的一段往事,一段跨越2012、2013年的往事。 2012年當時台灣女足寄望能有新血重振過往強大的木蘭軍,過往的木蘭女足曾在第二
Thumbnail
這是我在2018年2月28日人生第一房產交屋後,自己寫給自己記錄的開箱文。 自己調到日本部門已經五年了,自己累積幫客戶圓夢置產的經驗也超過240間,看過那麼多的日本新屋規劃,自己卻至今仍沒有去住過日本新屋,只有住過很舊的套房。因為這次是我自己人生第一間買的房屋,很開心也很珍惜,所以決定這次狠下心,在
Thumbnail
收過芭樂票嗎,就是一張開著支票金額但是不會兌現的支票,在從業22年中遇到過各式各樣詭異的事情,或是被詐騙的事情,今天我就來先說一個我人生收到的第一張”芭樂票”,我沒記錯當時我剛剛入行不到兩年,每天白天上班,晚上上課追學歷,薪水一
Thumbnail
本專欄將提供給您最新的市場資訊、產業研究、交易心法、精選公司介紹,以上內容並非個股分析,還請各位依據自身狀況作出交易決策。歡迎訂閱支持我,獲得相關內容,也祝您的投資之路順遂! 每年 $990 訂閱方案👉 https://reurl.cc/VNYVxZ 每月 $99 訂閱方案👉https://re
Thumbnail
2023年我只設了一個大目標"穩定發文",最後挑戰成功了!然因去年底的身體警訊,今(2024)年我得同時挑戰兩個"大目標"--健康與發文兼顧! 且兩個大目標下,還有各有4個"子目標"願景..我花了1-2月這兩個月的時間,進行了各種資料收集與"先期挑戰",最終我的具體目標和預計的執行路徑會是什麼呢?
Thumbnail
農曆新年快樂,餃子有元寶的寓意,一起迎向豐盛之路。 靜心深呼吸3次,選一份與你有連結的餃子,看看如何開啟今年的豐盛之路。 透過情感與情緒的流動帶領內在的能量流動,並附有相關精油療癒與正面語句的建議,一起開啟豐盛之路。
Thumbnail
元気寿司「外賣新年盛」,令親戚們開開心心齊歎最愛人氣壽司美食,加上人氣高企的「風生水起有撈起」,全家人新一年一定越「撈」越旺,風生水起,齊齊「元気」爆燈!期待已久的元気外賣新年盛現已登陸「元気寿司外賣自取網上訂購」平台(https://order.genkisushi.com.hk/cny.html
Thumbnail
熱血沸騰的BWF年終賽彷彿昨天才剛剛結束,新年度賽季緊接從1月9日起,由超級1000等級的馬來西亞公開賽揭開序幕。本賽事作為奧運積分週期下半場的第一項大賽,各路高手齊聚。籤表一公布,各分項首輪已出現許多堪稱決賽規格的對決。
Thumbnail
亞企味屋 AJIYA 西湖店,位在捷運西湖站步行約九分鐘的距離 餐廳位置在轉角內,有點隱密需張大眼睛仔細找一下~ 亞企味屋 AJIYA 西湖店,環境挑高擺放許多電視,一邊用餐一邊看電視不怕無聊~ 座位區下方有插座可以充電,不怕手機臨時滑到沒電! 裝潢走一個溫色調,隨著耶誕節即將來臨,店內精心
    八年過去了,以前公司的紛紛擾擾對我來說就是一個八卦,終於,阿姨累了,不去上班了,
Thumbnail
看完松本大洋的乒乓,漫畫中有提到一名選手佐久間學,苦練多年雖然擊敗了當時的宿敵月本誠,但最後卻不敵星野裕,讓他喪失信心最終退社,放下了乒乓,這樣殘酷的事情,讓我突然想起過往的一段往事,一段跨越2012、2013年的往事。 2012年當時台灣女足寄望能有新血重振過往強大的木蘭軍,過往的木蘭女足曾在第二
Thumbnail
這是我在2018年2月28日人生第一房產交屋後,自己寫給自己記錄的開箱文。 自己調到日本部門已經五年了,自己累積幫客戶圓夢置產的經驗也超過240間,看過那麼多的日本新屋規劃,自己卻至今仍沒有去住過日本新屋,只有住過很舊的套房。因為這次是我自己人生第一間買的房屋,很開心也很珍惜,所以決定這次狠下心,在
Thumbnail
收過芭樂票嗎,就是一張開著支票金額但是不會兌現的支票,在從業22年中遇到過各式各樣詭異的事情,或是被詐騙的事情,今天我就來先說一個我人生收到的第一張”芭樂票”,我沒記錯當時我剛剛入行不到兩年,每天白天上班,晚上上課追學歷,薪水一