国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

EOS 智能合約測試框架 eosfactory

CoorChice / 1557人閱讀

摘要:最近筆者在寫完智能合約,想要寫一些測試案例,但是自帶的單元測試用起來不是很方便。是基于的智能合約測試框架,它的實(shí)現(xiàn)方式其實(shí)就是去調(diào)用來與端進(jìn)行交互,利用的單元測試工具來做測試,的使用讀者可以自行去了解哈,這里筆者就不贅述了。

最近筆者在寫完智能合約,想要寫一些測試案例,但是 eos 自帶的單元測試用起來不是很方便。平常用 cleos 測試的體驗(yàn)感其實(shí)挺不錯(cuò),所以筆者設(shè)想有一種是用 cleos 作為與 nodeos 端互動(dòng)的測試框架,去 github 上找了找, 還真有。https://github.com/tokenika/e... 。 基本能滿足大致的需求,但還不是很完善,例如筆者需要用到其他索引,不只是主鍵索引,但是該測試框架不支持,所以做些了改動(dòng),已經(jīng)提交PR, 還有其他一些小細(xì)節(jié),讀者可以考慮從我先使用我改動(dòng)的版本: https://github.com/superoneio...

安裝步驟
1.首先 裝完 python 3.6 版本的環(huán)境,git clone url, 將代碼拉取到本地。
2.執(zhí)行 install.sh 腳本。填入 eosio 源碼目錄,以及智能合約目錄就行了。
本章以 dice 合約作為例子來介紹 eosfactory 在本地測試環(huán)境的使用。

eosfactory 是基于 python 的 EOS 智能合約測試框架,它的實(shí)現(xiàn)方式其實(shí)就是 python 去調(diào)用 cleos 來與 nodeos 端進(jìn)行交互,利用 python 的 unittest 單元測試工具來做測試,unittest 的使用讀者可以自行去了解哈,這里筆者就不贅述了。

測試智能合約所需要的幾個(gè)基本功能:創(chuàng)建賬號,執(zhí)行action, 查看數(shù)據(jù)表。下面我們通過 dice 合約的單元測試代碼來了解這一系列操作。

進(jìn)行本地環(huán)境的初始化操作
# 重置鏈,即 delete-all-blocks
reset()
# 首先獲取 eosio 賬號的,這里的 master 指向的就是 eosio 賬號。
 create_master_account("master”);
system_contract_path = "/Users/wuyuan/Documents/study/eos/build/contracts/“
# 創(chuàng)建系統(tǒng)賬號
create_account("et",master,"eosio.token")
create_account("em",master,"eosio.msig")
create_account("er",master,"eosio.ram")
create_account("erf",master,"eosio.ramfee")
create_account("es",master,"eosio.stake”)
# 部署 token 和 msig 合約
et_contract = Contract(et,system_contract_path + "eosio.token","eosio.token.abi","eosio.token.wasm")
et_contract.deploy();
em_contract = Contract(em,system_contract_path + "eosio.msig","eosio.msig.abi","eosio.msig.wasm")
        em_contract.deploy();
// 創(chuàng)建 EOS 代幣
et.push_action("create",{"issuer":"eosio","maximum_supply":"100000000000.0000 EOS"},permission=(et,Permission.ACTIVE))
et.push_action("issue",{"to":"eosio","quantity":"100000000.0000 EOS","memo":"haha"},permission=(master,Permission.ACTIVE))

# 部署系統(tǒng)合約
contract = Contract(master,"/Users/wuyuan/Documents/study/eos/build/contracts/eosio.system","eosio.system.abi","eosio.system.wasm”)
contract.deploy()

# 創(chuàng)建 dice 合約需要的賬號
create_account("dice",master,"dice","","","1000","1000",None,"10000")
create_account("alice",master,"alice","","","1000","1000",None,"1000")
create_account("bob",master,"bob","","","1000","1000",None,"1000")

# 賦予代幣
et.push_action("transfer",{"from":"eosio","to":"alice","quantity":"10000.0000 EOS","memo":"hi"},permission=("eosio",Permission.ACTIVE))
et.push_action("transfer",{"from":"eosio","to":"bob","quantity":"10000.0000 EOS","memo":"hi"},permission=("eosio",Permission.ACTIVE))
環(huán)境的初始化已經(jīng)完成了,接下來部署 dice 合約以及進(jìn)行游戲操作。
# init dice contract
self.deploy_contract()

# 將 alice 和 bob 賬號的 eosio.code 權(quán)限付給 dice 賬號
self.updateauth(alice.name)
self.updateauth(bob.name)

# 充值游戲幣
self.deposit(alice.name,"100.0000 EOS")
self.deposit(bob.name,"100.0000 EOS”)

# 獲取 account 表信息。
account = self.get_account()
print(account)

# 開始游戲
source1 = "28349b1d4bcdc9905e4ef9719019e55743c84efa0c5e9a0b077f0b54fcd84905"
commitment1 = "d533f24d6f28ddcef3f066474f7b8355383e485681ba8e793e037f5cf36e4883"
source2 = "15fe76d25e124b08feb835f12e00a879bd15666a33786e64b655891fba7d6c12"
commitment2 = "50ed53fcdaf27f88d51ea4e835b1055efe779bb87e6cfdff47d28c88ffb27129"
self.offerbet("3.0000 EOS",alice.name,commitment1)
offer = self.get_offer_by_commitment(commitment1)
print(offer)

self.offerbet("3.0000 EOS",bob.name,commitment2)
offer2 = self.get_offer_by_commitment(commitment2)
print(offer2)

game = self.get_game_by_id(offer2["gameid"])
print(game)

self.reveal(commitment1,source1,alice.name)
game = self.get_game_by_id(offer2["gameid"])
print(game)

self.reveal(commitment2,source2,bob.name)

# 查看 account 表信息,看看是否贏了錢
account = self.get_account()
print(account)

# show global value
print(self.get_global_dice())
OK ,上面說了獲取表信息,接下來介紹如何獲取表數(shù)據(jù)
# account_object 賬戶類,無需傳入, table_name 表名, scope , binary 是否顯示二進(jìn)制數(shù)據(jù), limit 篩選條數(shù), key 目前無作用, lower 篩選下限,upper 篩選上限, index 索引名 默認(rèn)主鍵, key_type 索引類型
table(account_object, table_name, scope="", binary=False, limit=10, key="", lower="", upper="",index="first",key_type="i64")
1.直接獲取, table( [ 表名 ],[ scope ],[ 條數(shù),默認(rèn)為10 ])
def get_account(self):
   try:
       account = dice.table("account”,dice.name,100).json["rows"]
       return account
   except errors.Error as e:
       print("except errors.Error as e: ",e)
   return None

2.通過 lower_bound 和主鍵索引篩選
def get_offer_by_id(self, id):
    try:
        offer = dice.table("offer",dice.name,False,1,"",id).json["rows"]
        if len(offer) != 0:
            self.assertEqual( offer[0]["id"] , id, "not this game id")
            return offer[0]
    except errors.Error as e:
        print("except errors.Error as e: ",e)
    return None

3.通過 lower_bound 和 非主鍵索引篩選
def get_offer_by_commitment(self, commitment):
    try:
        # ter 表示 第三個(gè)索引 索引類型為 sha256
        offer = dice.table("offer",dice.name,False,1,"",commitment,"","ter","sha256").json["rows"]
        if len(offer) != 0:
        self.assertEqual( offer[0]["commitment"] , commitment, "not this game id")
        return offer[0]
    except errors.Error as e:
        print("except errors.Error as e: ",e)
    return None

從代碼我們可以看出,其實(shí)就是跟我們平時(shí)用 cleos 差不多,只是它將其封裝起來供我們調(diào)用,這樣可以節(jié)約我們不少時(shí)間,也方便我們調(diào)試,寫自動(dòng)化測試腳本。

文中的例子: https://github.com/superoneio...

大家如果以后遇到更好用的測試框架,請務(wù)必介紹給我哈。

轉(zhuǎn)載請注明來源: https://eos.live/detail/17418

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/24405.html

相關(guān)文章

  • EOS 智能合約測試框架 eosfactory

    摘要:最近筆者在寫完智能合約,想要寫一些測試案例,但是自帶的單元測試用起來不是很方便。是基于的智能合約測試框架,它的實(shí)現(xiàn)方式其實(shí)就是去調(diào)用來與端進(jìn)行交互,利用的單元測試工具來做測試,的使用讀者可以自行去了解哈,這里筆者就不贅述了。 最近筆者在寫完智能合約,想要寫一些測試案例,但是 eos 自帶的單元測試用起來不是很方便。平常用 cleos 測試的體驗(yàn)感其實(shí)挺不錯(cuò),所以筆者設(shè)想有一種是用 cl...

    Corwien 評論0 收藏0
  • 以太坊、EOS和Hyperledger等不同區(qū)塊鏈的比較

    摘要:以太坊背后的主要人物是。以太坊通過在區(qū)塊鏈上引入智能合約,徹底改變了加密世界。以太坊使用名為以太坊虛擬機(jī)的虛擬機(jī)執(zhí)行其智能合約。以太坊最終將利用協(xié)議轉(zhuǎn)向權(quán)益證明。截至目前,以太坊在可擴(kuò)展性方面都失敗了。 不同的區(qū)塊鏈智能合約和區(qū)塊鏈技術(shù)現(xiàn)在風(fēng)靡一時(shí)。越來越多的人出于某種原因試圖進(jìn)入這個(gè)神奇的世界。如果你是這項(xiàng)技術(shù)的新手并正在尋找基于區(qū)塊鏈的開發(fā)平臺的快速入門,那么本指南非常適合你。我們...

    harriszh 評論0 收藏0
  • EOS內(nèi)存即RAM如何買賣

    摘要:多索引數(shù)據(jù)庫是中的一種數(shù)據(jù)結(jié)構(gòu),它根據(jù)范圍的定義方式提供存儲(chǔ)數(shù)據(jù)的靈活性。例如,每個(gè)帳戶已存儲(chǔ)在合約中定義的多索引數(shù)據(jù)庫中的數(shù),該合約由定義范圍的每個(gè)帳戶的一小塊組成。 對于EOS RAM的來說什么最重要呢?我們經(jīng)常在每天的數(shù)字貨幣和區(qū)塊鏈相關(guān)新聞中看到EOS旁邊的RAM這個(gè)詞,但是無論如何我們應(yīng)該關(guān)注它的價(jià)格,為什么要關(guān)注它的價(jià)格,即使是那些只想深入了解智能合約開發(fā)的人也需要這樣嗎?...

    ShevaKuilin 評論0 收藏0
  • EOS DApp開發(fā)入門(二): 智能合約探究

    摘要:在看啟動(dòng)腳本輸出的時(shí)候,發(fā)現(xiàn)了這兩樣輸出設(shè)置和智能合約,以及安裝合約開發(fā)工具。合約開發(fā)工具是的工具鏈和一組工具,用于促進(jìn)平臺的合同編寫。系統(tǒng)智能合約,可以進(jìn)行很多系統(tǒng)級別的操作,比如用戶投票將用戶注冊成為生產(chǎn)者。 Previously 在EOS DApp開發(fā)入門(一)中,通過docker image的方式架起了本地的eos區(qū)塊鏈,使Note chain DApp與本地區(qū)塊鏈進(jìn)行交互,成...

    Honwhy 評論0 收藏0
  • FIBOS 簡介

    摘要:簡介是一個(gè)結(jié)合以及的的運(yùn)行平臺,它使得提供可編程性,并允許使用編寫智能合約。編寫的合約可以通過打包腳本,壓縮文件極大的降低部署發(fā)布成本。的合約使用編寫并且全部開源,方便社區(qū)審計(jì),迅速形成共識。 FIBOS 簡介 FIBOS 是一個(gè)結(jié)合 FIBJS 以及 EOS 的 JavaScript 的運(yùn)行平臺,它使得 EOS 提供可編程性,并允許使用 JavaScript 編寫智能合約。 Jav...

    Caicloud 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<