1. 程式人生 > >如何建立和部署自己的EOS代幣

如何建立和部署自己的EOS代幣

本文我們將弄清楚什麼是EOS代幣以及如何自己建立和部署EOS代幣。

與以太坊相反,EOS帶有即插即用的代幣智慧合約。以太坊擁有ERC20智慧合約,EOS擁有eosio.token智慧合約。Eosio.token智慧合約允許你通過提供最大代幣供應數量和代幣的書面定義,通過向帳戶發放代幣以及在帳戶之間轉移代幣來建立你自己的代幣。EOS區塊鏈上的EOS代幣使用相同的智慧合約簽發。

cleos --url https://api.main.alohaeos.com:443 get currency stats eosio.token EOS
{
  "EOS": {
    "supply": "1003605574.9616 EOS",
    "max_supply": "10000000000.0000 EOS",
    "issuer": "eosio"
  }
}

url引數指定你連線的哪一個節點。你可以在官方網站上檢視更多提供API的節點。

安裝Cleos

Cleos是一個命令列工具,它與nodeos公開的REST API進行互動。我們需要cleos來執行所有命令來與EOS區塊鏈進行互動。你可以使用Docker,AWS Image或編譯原始碼來安裝cleos。安裝的最終結果必須在你的終端中是可用的。

cleos
ERROR: RequiredError: Subcommand required
Command Line Interface to EOSIO Client
Usage: cleos [OPTIONS] SUBCOMMAND

Options:
  -h,--help                   Print this help message and exit
  -u,--url TEXT=http://localhost:8888/
                              the http/https URL where nodeos is running
  --wallet-url TEXT=http://localhost:8900/
                              the http/https URL where keosd is running
  -r,--header                 pass specific HTTP header; repeat this option to pass multiple headers
  -n,--no-verify              don't verify peer certificate when using HTTPS
  -v,--verbose                output verbose actions on error
  --print-request             print HTTP request to STDERR
  --print-response            print HTTP response to STDERR
Subcommands:
  version                     Retrieve version information
  create                      Create various items, on and off the blockchain
  get                         Retrieve various items and information from the blockchain
  set                         Set or update blockchain state
  transfer                    Transfer EOS from account to account
  net                         Interact with local p2p network connections
  wallet                      Interact with local wallet
  sign                        Sign a transaction
  push                        Push arbitrary transactions to the blockchain
  multisig                    Multisig contract commands
  system                      Send eosio.system contract action to the blockchain.

建立錢包

錢包是儲存可能與一個或多個帳戶的許可權相關聯金鑰的客戶端。理想情況下,錢包具有受高熵密碼保護的鎖定(加密)和解鎖(解密)狀態。EOSIO/eos儲存庫捆綁了一個名為cleos的命令列介面客戶端,它與一個名為keosd的lite客戶端連線在一起,它們展示了這種模式。

讓我們建立一個名為“treasure”的東西。

cleos wallet create --name treasure
Creating wallet: treasure
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
"PW5J2DTM7kpPaihUH35pLTJrvhjgZ11SY4FqxYbo6geWvEH4SNvMC"

你必須將密碼儲存在安全的地方,因為如果它丟失了,則無法恢復錢包內的所有金鑰。

現在我們需要為所有者和活動許可權生成兩對金鑰。之後,我們將它們匯入我們的錢包。

cleos create key #owner
Private key: 5HsrZsLeUoDvBCFT2JSvgg3KrfwE7BXAJkUBSwnTwX27Cgabumj
Public key: EOS8VMwRNWWHwov4vyzJiq9uTEyzcny8QKXv7CJxGQAwjSTncyv51

cleos create key #active
Private key: 5JtrJNbJPfzm8XPMddANGYT9yzaqo8gwTEpmSrgQNhtoPXL9Ynd
Public key: EOS8CCRKHAbhBim6LimdvhhzhEYiKNnLRhuMD1Zqx5Cut52moBRmH

cleos wallet import 5HsrZsLeUoDvBCFT2JSvgg3KrfwE7BXAJkUBSwnTwX27Cgabumj --name treasure #owner
imported private key for: EOS8VMwRNWWHwov4vyzJiq9uTEyzcny8QKXv7CJxGQAwjSTncyv51

cleos wallet import 5JtrJNbJPfzm8XPMddANGYT9yzaqo8gwTEpmSrgQNhtoPXL9Ynd --name treasure #owner
imported private key for: EOS8CCRKHAbhBim6LimdvhhzhEYiKNnLRhuMD1Zqx5Cut52moBRmH

建立帳號

要在EOS區塊鏈中執行任何操作,你需要擁有一個帳戶。

帳戶是儲存在區塊鏈中的我們可以看明白的名稱。它可以由一個人或一些人擁有,具體取決於許可權配置。需要一個帳戶來將交易轉移或推送到區塊鏈。

帳戶本質上是一些公共或私有金鑰,是一個唯一的名稱。金鑰存放在錢包中。帳戶儲存在EOS區塊鏈中。

在本地建立帳戶很容易,你只需執行cleos create account命令,因為你擁有預設的eosio帳戶,這在Mainnet上顯然不是這樣。要在Mainnet上建立帳戶,你需要已經擁有它的人的幫助,例如zeoseos-account-creator,這需要花錢。此外,你只能建立12個符號的帳戶,並且僅包含a-z小寫,1-5個數字。在我看來,這是非常嚴格的限制。要獲得名稱較短的帳戶,你必須進行競價。考慮到(雙關的語意)你可以轉售EOS帳戶,搶注量是非常巨大的。考慮到所有這些,我們將使用Testnet來節省金錢和時間。

EOS Jungle Tesnet在儘可能模擬主網。轉到jungle.cryptolions.io並點選Create Account連結。它會詢問你的帳戶名稱和兩個金鑰。使用之前生成的公鑰。

確認後賬號會被建好。

cleos --url https://jungle.eosio.cr:443 get account ylvdeveloper
permissions: 
     owner     1:    1 EOS8VMwRNWWHwov4vyzJiq9uTEyzcny8QKXv7CJxGQAwjSTncyv51
        active     1:    1 EOS8CCRKHAbhBim6LimdvhhzhEYiKNnLRhuMD1Zqx5Cut52moBRmH
memory: 
     quota:     161.4 KiB    used:     3.365 KiB  

net bandwidth: 
     staked:        100.0000 EOS           (total stake delegated from account to self)
     delegated:       0.0000 EOS           (total staked delegated to account from others)
     used:                 0 bytes
     available:        19.12 MiB  
     limit:            19.12 MiB  

cpu bandwidth:
     staked:        100.0000 EOS           (total stake delegated from account to self)
     delegated:       0.0000 EOS           (total staked delegated to account from others)
     used:                 0 us   
     available:        3.826 sec  
     limit:            3.826 sec  

producers:     <not voted>

現在我們需要為我們的帳戶購買一些RAM,因為我們要釋出我們的智慧合約。在EOS區塊鏈中,RAM市場上有鯨魚玩公牛,這是另一個有錢的人投機機會。使用EOS Jungle Testnet Faucet將一些EOS代幣放入你的帳戶。

之後執行cleos system buyram命令購買帶有EOS代幣的RAM。

cleos --url https://jungle.eosio.cr:443 system buyram ylvdeveloper ylvdeveloper "10 EOS"
3481816ms thread-0   main.cpp:429                  create_action        ] result: {"binargs":"7055a5516d9576f47055a5516d9576f4a08601000000000004454f5300000000"} arg: {"code":"eosio","action":"buyram","args":{"payer":"ylvdeveloper","receiver":"ylvdeveloper","quant":"10.0000 EOS"}} 
executed transaction: 8eb30f6cfced6845e02b134946c7b6d623558f0c1a5ceff135b7e98007da692f  128 bytes  5094 us
#         eosio <= eosio::buyram                {"payer":"ylvdeveloper","receiver":"ylvdeveloper","quant":"10.0000 EOS"}
#   eosio.token <= eosio.token::transfer        {"from":"ylvdeveloper","to":"eosio.ram","quantity":"9.9500 EOS","memo":"buy ram"}
#  ylvdeveloper <= eosio.token::transfer        {"from":"ylvdeveloper","to":"eosio.ram","quantity":"9.9500 EOS","memo":"buy ram"}
#     eosio.ram <= eosio.token::transfer        {"from":"ylvdeveloper","to":"eosio.ram","quantity":"9.9500 EOS","memo":"buy ram"}
#   eosio.token <= eosio.token::transfer        {"from":"ylvdeveloper","to":"eosio.ramfee","quantity":"0.0500 EOS","memo":"ram fee"}
#  ylvdeveloper <= eosio.token::transfer        {"from":"ylvdeveloper","to":"eosio.ramfee","quantity":"0.0500 EOS","memo":"ram fee"}
#  eosio.ramfee <= eosio.token::transfer        {"from":"ylvdeveloper","to":"eosio.ramfee","quantity":"0.0500 EOS","memo":"ram fee"}
warning: transaction executed locally, but may not be confirmed by the network yet

建立合約

首先,我們必須將我們的合約上傳到區塊鏈。Cleos命令set contract通過以下位置引數執行:

* account — the account to publish a contract for.
* contract-dir — contract directory.
* wast-file — the file containing the contract WAST or WASM.
* abi-file — the ABI of the contract.

如你所見,我們需要指定wastabi檔案。如果你通過原始碼構建EOS,可以在./build/contracts/eosio.token/資料夾中找到它們。為方便起見,我上傳了他們兩個 wast/abi。 我們用自己的帳戶和檔案呼叫set contract命令。因為我們的wast/abi檔案與目錄名稱是相同,所以我們可以跳過這些引數。

cleos --url https://jungle.eosio.cr:443 set contract ylvdeveloper ./contracts/eosio.token
Reading WAST/WASM from ./contracts/eosio.token/eosio.token.wasm...
Using already assembled WASM...
Publishing contract...
executed transaction: 3fa704e4c1c72050e61882460bf0acd3b200df087d86a157d3d60ec1c439ba65  8104 bytes  3178 us
#         eosio <= eosio::setcode               {"account":"ylvdeveloper","vmtype":0,"vmversion":0,"code":"0061736d01000000017e1560037f7e7f0060057f7...
#         eosio <= eosio::setabi                {"account":"ylvdeveloper","abi":"0e656f73696f3a3a6162692f312e30010c6163636f756e745f6e616d65046e616d6...
warning: transaction executed locally, but may not be confirmed by the network yet

讓我們檢查程式碼是否已使用get code ylvdeveloper命令上傳。

cleos --url https://jungle.eosio.cr:443 get code ylvdeveloper
code hash: 641f336aa1d08526201599c3c0ddb7a646e5ac8f9fd2493f56414d0422a0f957

建立代幣

最後,我們可以建立和釋出我們的令牌。我們將使用cleos push action命令利用我們的智慧合約的建立和釋出,該命令採用以下引數:

* contract — the account providing the contract to execute.
* action — the action to execute on the contract.
* data — the arguments to the contract.

讓我們建立YLV代幣併發出一些代幣。

cleos --url https://jungle.eosio.cr:443 push action ylvdeveloper transfer '{"from":"ylvdeveloper", "to":"ylvio", "quantity":"100.00 YLV", "memo":"gift"}' -p ylvdeveloper
executed transaction: 32abee7e426d9e5653f67a7b492c17ca62aeeef97ff1a86037f58f2dd1459452  136 bytes  1639 us
#  ylvdeveloper <= ylvdeveloper::transfer       {"from":"ylvdeveloper","to":"ylvio","quantity":"100.00 YLV","memo":"gift"}
#         ylvio <= ylvdeveloper::transfer       {"from":"ylvdeveloper","to":"ylvio","quantity":"100.00 YLV","memo":"gift"}

檢查下餘額:

cleos --url https://jungle.eosio.cr:443 get table ylvdeveloper ylvdeveloper accounts
{
  "rows": [{
      "balance": "900.00 YLV"
    }
  ],
  "more": false
}
Bytezilla:build iYalovoy$ cleos --url https://jungle.eosio.cr:443 get table ylvdeveloper ylvio accounts
{
  "rows": [{
      "balance": "100.00 YLV"
    }
  ],
  "more": false
}

按預期完成了我們的工作,很完美。

總結下

我們從安裝cleos和了解eosio.token智慧合約再到擁有我們自己的代幣並將代幣轉移到其他帳戶的全部過程。我們使用EOS Jungle Testnet完成了所有這一切,它幾乎與Mainnet相同。相同的步驟適用於Mainnet,你只需使用不同的API節點併為你的帳戶和RAM支付相應的費用。

  • EOS代幣是一個智慧合約。
  • Cleos是用於與錢包和節點互動的命令列實用程式。
  • EOS Jungle Testnet可用於開發。
  • 你可以使用eosio.token智慧合約建立,釋出和傳送你自己的代幣。

======================================================================

分享一些以太坊、EOS、比特幣等區塊鏈相關的互動式線上程式設計實戰教程:

  • EOS教程,本課程幫助你快速入門EOS區塊鏈去中心化應用的開發,內容涵蓋EOS工具鏈、賬戶與錢包、發行代幣、智慧合約開發與部署、使用程式碼與智慧合約互動等核心知識點,最後綜合運用各知識點完成一個便籤DApp的開發。
  • java以太坊開發教程,主要是針對java和android程式設計師進行區塊鏈以太坊開發的web3j詳解。
  • python以太坊,主要是針對python工程師使用web3.py進行區塊鏈以太坊開發的詳解。
  • php以太坊,主要是介紹使用php進行智慧合約開發互動,進行賬號建立、交易、轉賬、代幣開發以及過濾器和交易等內容。
  • 以太坊入門教程,主要介紹智慧合約與dapp應用開發,適合入門。
  • 以太坊開發進階教程,主要是介紹使用node.js、mongodb、區塊鏈、ipfs實現去中心化電商DApp實戰,適合進階。
  • C#以太坊,主要講解如何使用C#開發基於.Net的以太坊應用,包括賬戶管理、狀態與交易、智慧合約開發與互動、過濾器和交易等。
  • java比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈儲存、去中心化共識機制、金鑰與指令碼、交易與UTXO等,同時也詳細講解如何在Java程式碼中整合比特幣支援功能,例如建立地址、管理錢包、構造裸交易等,是Java工程師不可多得的比特幣開發學習課程。
  • php比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈儲存、去中心化共識機制、金鑰與指令碼、交易與UTXO等,同時也詳細講解如何在Php程式碼中整合比特幣支援功能,例如建立地址、管理錢包、構造裸交易等,是Php工程師不可多得的比特幣開發學習課程。
  • tendermint區塊鏈開發詳解,本課程適合希望使用tendermint進行區塊鏈開發的工程師,課程內容即包括tendermint應用開發模型中的核心概念,例如ABCI介面、默克爾樹、多版本狀態庫等,也包括代幣發行等豐富的實操程式碼,是go語言工程師快速入門區塊鏈開發的最佳選擇。

匯智網原創翻譯,轉載請標明出處。這裡是原文如何建立和部署自己的EOS代幣