【许晓笛】 EOS智能合约案例解析(1)
詳解 EOS 智能合約的 hpp 文件
為了幫助大家熟悉 EOS 智能合約,EOS 官方提供了一個代幣(資產)智能合約 Demo —— eosio.token。eosio.token 智能合約目前還不是特別完善,個別功能還沒有完成。但這個示例合約給出了 EOS 官方智能合約開發的標準結構和開發方法,并且真正的 EOS 代幣也會借鑒這個示例合約的邏輯,是 EOS 智能合約入門的經典案例。
照例,eosio.token 合約由三個文件(cpp,hpp,abi)文件組成,本篇文章將為大家講解 eosio.token.hpp 文件。原文件地址:https://github.com/EOSIO/eos/tree/master/contracts/eosio.token
預處理指令 & 頭文件
代碼的開頭聲明了頭文件,主要是 eos 智能合約的 API 庫。
//預處理指令,防止文件被重復包含 #pragma once//eos 資產(asset)頭文件 #include <eosiolib/asset.hpp> //eos 智能合約 API 庫 #include <eosiolib/eosio.hpp>構造函數
智能合約的類名可以與智能合約名不同,智能合約的名字是其賬戶名。構造函數為空,參數為智能合約賬戶名。
//每個智能合約類都要繼承 contract 類class token : public contract {public://類構造函數token( account_name self ):contract(self){}創建代幣函數(action)
聲明 create 函數,這個函數用來新建一種代幣,并輸入代幣的各種屬性,同時 create 函數也是一個 action。action 是 eos 智能合約的接口函數,定義外界可以對智能合約做什么動作。
//參數:發幣者void create( account_name issuer,//資產最大數目asset maximum_supply,//資產是否可以凍結uint8_t issuer_can_freeze,//資產是否可以召回uint8_t issuer_can_recall,//資產是否可以設置白名單uint8_t issuer_can_whitelist );增發代幣函數(action)
聲明 issue 函數,這個函數用來增發代幣,eosio.token 合約并不是新建了代幣就會得到代幣,新建的代幣只是存儲了資料,發幣者要想獲取代幣,需要調用 issue action 來獲得代幣。
//參數:接收新代幣賬戶,新增多少代幣,memovoid issue( account_name to, asset quantity, string memo );轉賬函數(action)
聲明 transfer 函數,這個函數用來轉賬,是代幣智能合約最常用的函數。
//發送賬戶void transfer( account_name from,//接收賬戶account_name to,//代幣數量asset quantity,//memostring memo );私有數據結構
智能合約需要存儲每種代幣的資料,還要存儲每個賬戶持有每種代幣的數量。
private://account 結構體,單個記錄賬戶存儲單個代幣的情況struct account {//資產余額asset balance;//賬戶是否凍結bool frozen = false;//賬戶是否在白名單bool whitelist = true;//設置賬戶主鍵為代幣名稱uint64_t primary_key()const { return balance.symbol.name(); }};//currency_stats 結構體,記錄當代幣狀態信息struct currency_stats {//流通量asset supply;//最大可流通量asset max_supply;//發幣者account_name issuer;//是否可以凍結bool can_freeze = true;//是否可以召回bool can_recall = true;//是否可以設置白名單bool can_whitelist = true;//是否已經凍結bool is_frozen = false;//是否已經設置白名單bool enforce_whitelist = false;//設置主鍵為代幣名稱uint64_t primary_key()const { return supply.symbol.name(); }};//設置一個multi_index類型,存儲 account 結構體typedef eosio::multi_index<N(accounts), account> accounts;//設置一個multi_index類型,存儲 currency_stats 結構體typedef eosio::multi_index<N(stat), currency_stats> stats;私有函數
合約公有兩個私有函數,分別是給賬戶增加某種資產,和給賬戶減少某種資產。
//增加資產函數:賬戶,增加數量,代幣狀態結構體void sub_balance( account_name owner, asset value, const currency_stats& st );//減少資產函數:賬戶,減少數量 ,代幣狀態結構體void add_balance( account_name owner, asset value, const currency_stats& st,//ram 資源支付者account_name ram_payer );相關文章和視頻推薦
【許曉笛】 EOS 智能合約案例解析(2) 【許曉笛】 EOS 智能合約案例解析(3)
圓方圓學院匯集大批區塊鏈名師,打造精品的區塊鏈技術課程。 在各大平臺都長期有優質免費公開課,歡迎報名收看。
公開課地址:https://ke.qq.com/course/345101
轉載于:https://my.oschina.net/u/4028262/blog/2877710
總結
以上是生活随笔為你收集整理的【许晓笛】 EOS智能合约案例解析(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小白带你学安卓——初识android
- 下一篇: 一个功能超全的「登录认证」神器!