如何在 Aptos 上發布第一個 ICO 範例

作者:師大科技系 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 找到。

例如,新幣需要的幾大功能:

  1. Minting: Creating new coins.
  2. Burning: Deleting coins.
  3. Freezing: Preventing an account from storing coins in CoinStore.
  4. Registering: Creating a CoinStore resource on an account for storing coins.
  5. 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 智能合約撰寫的技術教學文,請有興趣的各方同好們,持續追蹤關注連載。