EOS智能合約案例解析(1)
照例,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 來獲得代幣。
//參數:接收新代幣賬戶,新增多少代幣,memo void issue( account_name to, asset quantity, string memo );
轉賬函數(action)
聲明 transfer 函數,這個函數用來轉賬,是代幣智能合約最常用的函數。
//發送賬戶 void transfer( account_name from, //接收賬戶 account_name to, //代幣數量 asset quantity, //memo string 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智能合約案例解析(1)
相關推薦
EOS智能合約案例解析(1)
EOS智能合約為了幫助大家熟悉 EOS 智能合約,EOS 官方提供了一個代幣(資產)智能合約 Demo —— eosio.token。eosio.token 智能合約目前還不是特別完善,個別功能還沒有完成。但這個示例合約給出了 EOS 官方智能合約開發的標準結構和開發方法,並且真正的 EOS 代幣也會借鑒這個
EOS 智能合約案例解析(2)
EOS 智能合約詳解 EOS 智能合約的 cpp 文件之前的文章介紹了 eosio.token 智能合約的 hpp 文件,這次向大家介紹 eosio.token.cpp 文件,cpp 文件即 C++ 代碼文件,智能合約所有的業務邏輯內容都是在 cpp 文件中實現的。eosio.token.cpp 文件地址:
EOS 智能合約案例解析(3)
EOS 智能合約詳解 EOS 智能合約的 abi 文件這次向大家介紹 eosio.token 智能合約的最後一個文件 —— abi文件。ABI 全稱 Application Binary Interface,中文名“應用程序二進制接口”,顧名思義是一個接口文件,描述了智能合約與上層應用之間的數據交換格式。ab
EOS智能合約授權限制和數據存儲
shu imageview author start clas strip -i eache 效果 EOS智能合約授權限制和數據存儲 在EOS合約中,調用合約需要來自賬戶的授權,同時還要指定需要調用的動作。當然,有的合約並不是所有賬戶都可以調用的,這就需要用到授權限制。接
EOS智能合約與DApp開發入門教程
EOS 智能合約 DApp 開發 入門 教程 EOS的是Block.One主導研發的一個區塊鏈底層公鏈系統,它專門為支撐商業去中心化應用(Decentralized Application)而設計,其代碼開源。 比特幣被稱為區塊鏈1.0,因為它開辟了數字
以太坊去中心化淘寶智能合約案例
安全 中國 重置 枚舉 是什麽 出現 功能 received 支付寶 篇文章我們來介紹一個簡易的區塊鏈電商系統的核心功能,10多年來,我們習慣了淘寶的電商模式,淘寶為電商在中國普及做出了突出貢獻,值得肯定,也完成了歷史使命。 淘寶模式的核心是什麽? 免
智能合約語言 Solidity 教程系列1 - 類型介紹
區塊鏈 智能合約 Solidity 現在的Solidity中文文檔,要麽翻譯的太爛,要麽太舊,決定重新翻譯下。尤其點名批評極客學院名為《Solidity官方文檔中文版》的翻譯,機器翻譯的都比它好,大家還是別看了。 寫在前面 Solidity是以太坊智能合約編程語言,閱讀本文前,你應該對以太坊、智能
OKEX智能合約交易平臺系統解析
company limited 企業 投資 穩定 個人 平時 多媒體 平臺 說到區塊鏈,首先不得不提的是比特幣,區塊鏈能夠在今天達到眾人皆知的地位,主要歸功於一個叫中本聰的老兄創造了比特幣,並賦予比特幣以金融價值,這才引得世人癲狂。你想想啊,前幾年的比特幣無人搭理,慢慢地能
通過一個案例精通以太坊智能合約和Solidity
perm 讀寫 編譯 nap utf-8 index listen eip 散列函數 作者介紹 Silver CEO 星際區塊鏈信息發展有限公司 項目組件 ??這個項目是一個構建在以太坊上的遊戲,感謝這個團隊給我們提供的案例:https://cryptozombies.io
區塊鏈入門(5)Truffle 項目實戰,Solidity IDE, 智能合約部署
第四章 margin 其中 exports nba 接口 ive 另一個 date 在上一張我們學習了Truffle項目的創建,部署等相關內容,今天我們就來實戰一下. 今天我們要做3件事: 1) 學習搭建一個Solidity IDE(Remix).
Solidity編程 四 之 智能合約的結構
以及 function imp class 以太坊 str end reat sender Solidity的智能合約和面向對象語言中的類很相似。每個智能合約可以包含的元素有:state變量的定義,方法,函數修改器,事件,結構類型以及枚舉類型。同時合約可以繼承於另外一個
使用Go語言與Ethereum智能合約進行交互
程序 nes ack 產生 back -a 可能 ner 進行 盡管最近出現了麻煩,但Ethereum仍然是區塊鏈空間中實現智能合約最重要的系統,而且這種情況似乎不太可能很快改變。 在我看來,技術本身具有很大的潛力,從學術的角度來看是非常有趣的,但正如前面提到的問題,之前展
CPS智能合約系統開發區塊鏈新思維
應用 參與 所有 平臺 虛擬機 框架類 lang c++ .net框架 經常有同學會在.NET、C#和ASP.NET這三者之間區別不清楚,到底它們之間有什麽聯系呢?在這裏我給大家歸納如下: 1、.NET是一個平臺,一個抽象的平臺的概念。 .
智能合約語言 Solidity 教程系列5 - 數組介紹
編程 class 參數 == logs erro arrays hang push 寫在前面 Solidity 是以太坊智能合約編程語言,閱讀本文前,你應該對以太坊、智能合約有所了解, 如果你還不了解,建議你先看以太坊是什麽 本文前半部分是參考Solidity官方文檔(當前
Hyperledger Fabric Chaincode是什麽,智能合約是什麽
eas https erl 應用 運行 支持 pos 編程語言 type 首先看下Blockchain結構,除了header指向下一個block的hash value外,block是由一組transaction構成, Transactions --> Blocks -
智能合約語言 Solidity 教程系列7 - 以太單位及時間單位
hal 技術交流 ont zab 變量 nic 我們 oracle variables 這是Solidity教程系列文章第7篇介紹以太單位及時間單位,系列帶你全面深入理解Solidity語言。 寫在前面 Solidity 是以太坊智能合約編程語言,閱讀本文前,你應該對以太
以太坊Crypto Countries加密國家火爆,區塊鏈遊戲成智能合約應用探索突破口
場景 好的 交換 系統 trie 發的 ebr 可用 tar 繼加密貓(CryptoKitties)之後,以太坊上又出現了幾款火爆的區塊鏈遊戲,它們是CryptoCountries,Crypto-All Stars,CryptoCelebrities和EtherBots。
以太坊私有鏈下智能合約部署
配置文件 臺電腦 問題: != 第一步 attribute int lock asc 上一篇文章實現了搭建私有鏈,以下進行智能合約的部署 一、 編寫合約 簡單的乘法例子: pragma solidity ^0.4.2; contract test { functio
預測市場,區塊鏈智能合約規模化應用的大市場?突破口?
預測市場隨著2018俄羅斯足球世界杯的日漸臨近,大家對足球的關註也越來越高。那麽,火熱的區塊鏈加上足球會怎樣?對區塊鏈預測項目來說,那是一個絕佳的推廣機會。日前何璽就註意到國內兩個基於區塊鏈智能合約“預言機”的應用項目又開始活躍起來,他們是OracleChain(歐鏈)和Delphy(天算)。一、Oracle
智能合約語言 Solidity 教程系列8 - Solidity API
set 深入 cal strong 結果 java 寫在前面 標識符 必須 這是Solidity教程系列文章第8篇介紹Solidity API,它們主要表現為內置的特殊的變量及函數,存在於全局命名空間裏。 寫在前面 Solidity 是以太坊智能合約編程語言,閱讀本文前,你