作者:師大科技系 PecuLab 蔡芸琤 (Pecu)
ICO (Initial Coin Offering) = 首次代幣發行
在每個公鏈上,都可使用該鏈上最基礎的智能合約去創造代幣,本文所使用的合約內容來自 https://github.com/aptos-labs/aptos-core/blob/main/aptos-move/move-examples/moon_coin/sources/MoonCoin.move。
依照【成為 Aptos 公鏈開發者的第一步】已完成了 aptos-core 專案下載,先重新連上 Docker 環境,前情提要可參考【使用 Move Module 進入 Aptos 智能合約開發的第一步】。
在預設的 Aptos 中的 devnet 測試鏈創建新帳號
cd ~/aptos-core/aptos-move/move-examples/moon_coin aptos init
取得新地址為78e1a3787f089fddfc294826765ee304f229f97da8a44cee3c0bdc698c5e78a8。
編譯範例 MoonCoin 合約
aptos move compile --named-addresses MoonCoin=78e1a3787f089fddfc294826765ee304f229f97da8a44cee3c0bdc698c5e78a8
發布合約至 Aptos 中的 devnet 測試鏈
aptos move publish --named-addresses MoonCoin=78e1a3787f089fddfc294826765ee304f229f97da8a44cee3c0bdc698c5e78a8
成功發布 MoonCoin 合約至 Aptos 的 devnet 測試鏈上。
檢查合約是否存在於測試鏈上
若要查詢此筆資料是否有順利上鏈,可透過瀏覽器,使用 Aptos Node API (以 RESTful API方式進行) 來查看。因為我的 account address 是 78e1a3787f089fddfc294826765ee304f229f97da8a44cee3c0bdc698c5e78a8,所以網址在 https://fullnode.devnet.aptoslabs.com/v1/accounts/ 後面接上我的 address (請讀者要自行更動為自己的 address)。
https://fullnode.devnet.aptoslabs.com/v1/accounts/78e1a3787f089fddfc294826765ee304f229f97da8a44cee3c0bdc698c5e78a8
因為,我執行了 publish 兩次,所以,看到的會是 sequence_number: "2"。
只是確定有發布了合約上鏈,但還沒看到合約細節。
若要看到合約細節,就要加上 transactions 的資訊,可參考 Aptos Node API 官方文件 https://fullnode.devnet.aptoslabs.com/v1/spec#/operations/get_account_transactions。
https://fullnode.devnet.aptoslabs.com/v1/accounts/78e1a3787f089fddfc294826765ee304f229f97da8a44cee3c0bdc698c5e78a8/transactions
成功看到 moon_coin 新幣合約已經在鏈上了。
以下解釋合約內容
合約內容 https://github.com/aptos-labs/aptos-core/blob/main/aptos-move/move-examples/moon_coin/sources/MoonCoin.move,裡面包含了MoonCoin 結構或類型。在將合約上鏈時,會透過物件建構元 init_module 來定義新幣。在這個範例中,新幣初始化,命名為 MoonCoin,並將幣種定為 ManagedCoin,由發行新幣者維護此合約。
//:!:>moon module MoonCoin::moon_coin { struct MoonCoin {} fun init_module(sender: &signer) { aptos_framework::managed_coin::initialize<MoonCoin>( sender, b"Moon Coin", b"MOON", 6, false, ); } } //<:!:moon
而合約調用的 aptos_framework 細節,可從 https://github.com/aptos-labs/aptos-core/blob/main/aptos-move/framework/aptos-framework/sources/coin.move 找到。
例如,新幣需要的幾大功能:
- Minting: Creating new coins.
- Burning: Deleting coins.
- Freezing: Preventing an account from storing coins in CoinStore.
- Registering: Creating a CoinStore resource on an account for storing coins.
- Transferring: Withdrawing and depositing coins into CoinStore.
相關的官方文件 https://aptos.dev/tutorials/your-first-coin 中文化介紹已可在 https://gushi10546.gitbook.io/aptos-kai-fa-zhe-wen-dang/kai-fa-zhe-jiao-cheng/di-yi-ge-dai-bi 找到,就不再此重新贅述。
截至目前為止,我已經提供了所有初學者要進入 Aptos 開發環境的基礎教學內容,下周開始,會開始進入 move 智能合約撰寫的技術教學文,請有興趣的各方同好們,持續追蹤關注連載。