摘要:構(gòu)造函數(shù)為空,參數(shù)為智能合約賬戶名。每個(gè)智能合約類都要繼承類類構(gòu)造函數(shù)創(chuàng)建代幣函數(shù)聲明函數(shù),這個(gè)函數(shù)用來新建一種代幣,并輸入代幣的各種屬性,同時(shí)函數(shù)也是一個(gè)。
詳解 EOS 智能合約的 hpp 文件
為了幫助大家熟悉 EOS 智能合約,EOS 官方提供了一個(gè)代幣(資產(chǎn))智能合約 Demo —— eosio.token。eosio.token 智能合約目前還不是特別完善,個(gè)別功能還沒有完成。但這個(gè)示例合約給出了 EOS 官方智能合約開發(fā)的標(biāo)準(zhǔn)結(jié)構(gòu)和開發(fā)方法,并且真正的 EOS 代幣也會(huì)借鑒這個(gè)示例合約的邏輯,是 EOS 智能合約入門的經(jīng)典案例。
照例,eosio.token 合約由三個(gè)文件(cpp,hpp,abi)文件組成,本篇文章將為大家講解 eosio.token.hpp 文件。原文件地址:https://github.com/EOSIO/eos/tree/master/contracts/eosio.token
預(yù)處理指令 & 頭文件代碼的開頭聲明了頭文件,主要是 eos 智能合約的 API 庫。
//預(yù)處理指令,防止文件被重復(fù)包含 #pragma once //eos 資產(chǎn)(asset)頭文件 #include構(gòu)造函數(shù)//eos 智能合約 API 庫 #include
智能合約的類名可以與智能合約名不同,智能合約的名字是其賬戶名。構(gòu)造函數(shù)為空,參數(shù)為智能合約賬戶名。
//每個(gè)智能合約類都要繼承 contract 類 class token : public contract { public: //類構(gòu)造函數(shù) token( account_name self ):contract(self){}創(chuàng)建代幣函數(shù)(action)
聲明 create 函數(shù),這個(gè)函數(shù)用來新建一種代幣,并輸入代幣的各種屬性,同時(shí) create 函數(shù)也是一個(gè) action。action 是 eos 智能合約的接口函數(shù),定義外界可以對智能合約做什么動(dòng)作。
//參數(shù):發(fā)幣者 void create( account_name issuer, //資產(chǎn)最大數(shù)目 asset maximum_supply, //資產(chǎn)是否可以凍結(jié) uint8_t issuer_can_freeze, //資產(chǎn)是否可以召回 uint8_t issuer_can_recall, //資產(chǎn)是否可以設(shè)置白名單 uint8_t issuer_can_whitelist );增發(fā)代幣函數(shù)(action)
聲明 issue 函數(shù),這個(gè)函數(shù)用來增發(fā)代幣,eosio.token 合約并不是新建了代幣就會(huì)得到代幣,新建的代幣只是存儲(chǔ)了資料,發(fā)幣者要想獲取代幣,需要調(diào)用 issue action 來獲得代幣。
//參數(shù):接收新代幣賬戶,新增多少代幣,memo void issue( account_name to, asset quantity, string memo );轉(zhuǎn)賬函數(shù)(action)
聲明 transfer 函數(shù),這個(gè)函數(shù)用來轉(zhuǎn)賬,是代幣智能合約最常用的函數(shù)。
//發(fā)送賬戶 void transfer( account_name from, //接收賬戶 account_name to, //代幣數(shù)量 asset quantity, //memo string memo );私有數(shù)據(jù)結(jié)構(gòu)
智能合約需要存儲(chǔ)每種代幣的資料,還要存儲(chǔ)每個(gè)賬戶持有每種代幣的數(shù)量。
private: //account 結(jié)構(gòu)體,單個(gè)記錄賬戶存儲(chǔ)單個(gè)代幣的情況 struct account { //資產(chǎn)余額 asset balance; //賬戶是否凍結(jié) bool frozen = false; //賬戶是否在白名單 bool whitelist = true; //設(shè)置賬戶主鍵為代幣名稱 uint64_t primary_key()const { return balance.symbol.name(); } }; //currency_stats 結(jié)構(gòu)體,記錄當(dāng)代幣狀態(tài)信息 struct currency_stats { //流通量 asset supply; //最大可流通量 asset max_supply; //發(fā)幣者 account_name issuer; //是否可以凍結(jié) bool can_freeze = true; //是否可以召回 bool can_recall = true; //是否可以設(shè)置白名單 bool can_whitelist = true; //是否已經(jīng)凍結(jié) bool is_frozen = false; //是否已經(jīng)設(shè)置白名單 bool enforce_whitelist = false; //設(shè)置主鍵為代幣名稱 uint64_t primary_key()const { return supply.symbol.name(); } }; //設(shè)置一個(gè)multi_index類型,存儲(chǔ) account 結(jié)構(gòu)體 typedef eosio::multi_index私有函數(shù)accounts; //設(shè)置一個(gè)multi_index類型,存儲(chǔ) currency_stats 結(jié)構(gòu)體 typedef eosio::multi_index stats;
合約公有兩個(gè)私有函數(shù),分別是給賬戶增加某種資產(chǎn),和給賬戶減少某種資產(chǎn)。
//增加資產(chǎn)函數(shù):賬戶,增加數(shù)量,代幣狀態(tài)結(jié)構(gòu)體 void sub_balance( account_name owner, asset value, const currency_stats& st ); //減少資產(chǎn)函數(shù):賬戶,減少數(shù)量 ,代幣狀態(tài)結(jié)構(gòu)體 void add_balance( account_name owner, asset value, const currency_stats& st, //ram 資源支付者 account_name ram_payer );
【許曉笛】 EOS 智能合約案例解析(2)
【許曉笛】 EOS 智能合約案例解析(3)
圓方圓學(xué)院匯集大批區(qū)塊鏈名師,打造精品的區(qū)塊鏈技術(shù)課程。 在各大平臺(tái)都長期有優(yōu)質(zhì)免費(fèi)公開課,歡迎報(bào)名收看。
公開課地址:https://ke.qq.com/course/345101
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/24420.html
摘要:文件地址智能合約文件由部分組成定義類型的別名各個(gè)類型的數(shù)據(jù)結(jié)構(gòu)智能合約的數(shù)據(jù)結(jié)構(gòu)體李嘉圖條款注格式不支持注釋,上面的雙斜線大家理解就好。是李嘉圖合約,剛剛被加入到智能合約中,官方還沒有進(jìn)一步說明。 詳解 EOS 智能合約的 abi 文件 這次向大家介紹 eosio.token 智能合約的最后一個(gè)文件 —— abi文件。ABI 全稱 Application Binary Interfac...
摘要:相關(guān)文章和視頻推薦許曉笛智能合約案例解析許曉笛智能合約案例解析圓方圓學(xué)院匯集大批區(qū)塊鏈名師,打造精品的區(qū)塊鏈技術(shù)課程。 詳解 EOS 智能合約的 cpp 文件 之前的文章介紹了 eosio.token 智能合約的 hpp 文件,這次向大家介紹 eosio.token.cpp 文件,cpp 文件即 C++ 代碼文件,智能合約所有的業(yè)務(wù)邏輯內(nèi)容都是在 cpp 文件中實(shí)現(xiàn)的。 eosio.t...
摘要:相關(guān)文章和視頻推薦許曉笛智能合約案例解析圓方圓學(xué)院匯集大批區(qū)塊鏈名師,打造精品的區(qū)塊鏈技術(shù)課程。 Daniel Larimer 在他的博客介紹了EOS新的智能合約架構(gòu)(EOS團(tuán)隊(duì)的開發(fā)速度實(shí)在是太嚇人,根本追不上)。他給出了最簡單的一個(gè)新幣種的智能合約代碼,僅有49行就能完成一個(gè)新幣種的開發(fā),一個(gè)新的愛息歐就誕生了。讓我們一步一步實(shí)現(xiàn)吧。 首先實(shí)現(xiàn)私有成員,建立一個(gè) account 結(jié)...
摘要:為了解決這個(gè)問題,采取了三步用戶賬戶自定義分級(jí)權(quán)限。用戶權(quán)限與智能合約之間的映射。圖中不難看出,權(quán)限是賬戶最高權(quán)限,可以執(zhí)行權(quán)限。如果沒有發(fā)現(xiàn)任何符合的映射,會(huì)直接檢查本次執(zhí)行是否滿足了權(quán)限,若不足,會(huì)檢查。 到底什么叫智能合約? 名詞解釋:本篇文章出現(xiàn)很多 Action 和 Active,Action (動(dòng)作)為 EOS 中賬戶可以接受的動(dòng)作,也就是別人可以對你做什么;Active ...
摘要:對于很多沒有中間語言的字節(jié)碼的編程語言來說,根本不存在解釋執(zhí)行與編譯執(zhí)行的選項(xiàng),比如傳統(tǒng)只能編譯執(zhí)行,直接將代碼編譯成為可執(zhí)行的二進(jìn)制機(jī)器碼,我們電腦上文件就是編譯的成果。 Daniel Larimer 在最近的博客中透露,EOS 新增了官方的 WebAssembly 解釋器,用來解釋執(zhí)行 WebAssembly 智能合約,加上之前的編譯執(zhí)行,EOS 智能合約有了兩種執(zhí)行方式。 對于很...
閱讀 3565·2021-09-24 09:48
閱讀 1087·2021-09-10 10:51
閱讀 3267·2019-08-30 13:03
閱讀 3315·2019-08-30 12:51
閱讀 1387·2019-08-30 11:22
閱讀 1051·2019-08-29 18:38
閱讀 2035·2019-08-29 16:41
閱讀 3182·2019-08-29 15:32