1. 程式人生 > >如何在PyEos上整合一種新的智慧合約VM

如何在PyEos上整合一種新的智慧合約VM

在PyEos上整合一種新的虛擬機器非常的簡單。PyEos在程式碼中實現了VM介面層,新的VM可以很方便的接進來。接入一款新的VM只需要實現以下5個函式就可以了。

五個重要函式

void vm_init(struct vm_api* api) ;
void vm_deinit();
int vm_setcode(uint64_t account) ;
int vm_apply(uint64_t receiver, uint64_t account, uint64_t act);
int vm_call(uint64_t account, uint64_t func);

其中必須實現的函式為:vm_setcode和vm_apply
在libraries/vm/vm_example目錄下是一個最簡單的例子,可以拷貝來作為專案開始的初始程式碼。
下面對這五個函式作一一的介紹:

vm_init

初始化vm的程式碼,這個函式會傳遞一個vm_api結構體進來
struct vm_api結構是一個很重要的函式,所有的智慧合約的介面函式以及VM需要用到的函式都在這個結構裡。這個結構體定義在下面的標頭檔案中。

contracts/eosiolib_native/vm_api.h

vm_deinit

在解除安裝VM模組的時候被呼叫,在升級VM模組的時候會用到,在裡面可以作一些清理VM的工作。

vm_setcode

這是一個很重要的函式,在處理eosio系統合約的setcode action中會被呼叫, 在這裡可以作一些智慧合約程式碼的初始化工作。

vm_apply

是實現智慧合約VM中最重要的一個函式。在這個函式裡要實現智慧合約的程式碼的呼叫。

vm_call

這個函式用於實現跨智慧合約程式碼呼叫

關於vm_manager

這是智慧合約VM的管理器,程式碼路徑如下:

libraries/vm_manager/vm_manager.cpp

這個類的目的是根據不同的虛擬機器程式碼來呼叫相應的VM來執行程式碼。
VM的五個介面實現好以後,必須將VM加入到這個管理器來進行管理。加入的方式也很簡單。
以接入lua虛擬機器為例,要做的事如下:
指定lua 虛擬機器動態庫的路徑:

static const char *vm_lua = "../libs/libvm_lua" DYLIB_SUFFIX;

在bool vm_manager::init(struct vm_api* api)中加入如下的程式碼:

load_vm_from_path(VM_TYPE_LUA, vm_lua);

編譯VM程式碼:

修改如下的CMakeLists.txt,將VM程式碼的目錄包含進去。

libraries/vm/CMakeLists.txt

測試

請參考/programs/pyeos/tests目錄下的hello測試用例

相關推薦

如何在PyEos整合智慧合約VM

在PyEos上整合一種新的虛擬機器非常的簡單。PyEos在程式碼中實現了VM介面層,新的VM可以很方便的接進來。接入一款新的VM只需要實現以下5個函式就可以了。 五個重要函式 void vm_init(struct vm_api* api) ; void vm_

發表在 Science 聚類演算法

今年 6 月份,Alex Rodriguez 和 Alessandro Laio 在 Science 上發表了一篇名為《Clustering by fast search and find of density peaks》的文章,為聚類演算法的設計提供了一種新的思路。雖

2018-3-23論文的群智慧演算法--狼群演算法(框架結構+感想點點)

一.文章的總體的結構中文摘要:  總體的說提出了一種演算法,並應用與15個基準函式---得出結論英文摘要:0     引言------ 各個群智慧演算法的列舉+解釋群智慧演算法的好處,本質1    狼群系統分析   ---說明狼的捕食行為,以及群內部的分工(頭狼,探狼,猛狼)

kotlin, 的android平臺一級開發語言

程序 16px 語法 jvm ava lin 使用 ide 擁有 最近看到一則科技新聞, 大致內容是google將kotlin語言作為android應用開發的一級語言, 與java並駕齊驅, 這是一個開發界的大事件大新聞, 連google的親兒子go語言也沒有這

【HLSDK系列】怎麽增加實體

sta fun class 使用 pen 關聯 creat bsp cnblogs 你平常肯定接觸到很多比如 info_player_start hostage info_target 之類的實體,這裏就解釋一下怎麽創建一種新的實體。 首先建立一個新的 .h 文件(當然你寫

SaltStack介紹——SaltStack是的基礎設施管理方法開發軟件,簡單易部署,可伸縮的足以管理成千上萬的服務器,和足夠快的速度控制,與他們交流

con mar stack 通信 class 交流 ast 集中 速度 SaltStack介紹和架構解析 簡介 SaltStack是一種新的基礎設施管理方法開發軟件,簡單易部署,可伸縮的足以管理成千上萬的服務器,和足夠快的速度控制,與他們交流,以毫秒為單位。S

QProcess::startDetached(5.10有了的方式)

add rep set rpath pos ppr sed int rtai From Qt 5.10 on, there is a new way how to start detached processes with QProcess. Of course you

VMware vSAN中小企業應用案例,嘗試的教學方式

1年 配置 vsphere 掌握 blog 編輯 初學者 延伸 ima 各位朋友,大家好!我是王春海,很高興你能閱讀我寫的文章。許多朋友知道我,可能是看我的博客,可能是看我的文章,或者看我寫作出版的圖書。你們的認可,是我繼續學習、持續創作的動力! 這些年我寫的一些文章主要

如何實現智慧合約的遷移

    雖然相比其他網際網路技術,智慧合約等區塊鏈技術相對安全,但是並非絕對安全,即使是零漏洞的合約也有可能被竊取的私鑰劫持。先前的Bancor 和 KICKICO黑客事件表明:攻擊者可以損害智慧合約錢包。在這些攻擊中,即使合約具備可升級性機制,也可能無法修復已部署的智慧合約。唯

從實驗室走向世界:HSP90抑制劑,的癌症藥物

熱休克蛋白90(HSP90)是細胞內一種普遍存在的、十分保守的以及有高度活性的蛋白質,它在腫瘤細胞內的含量要比正常細胞多。作為一種分子伴侶,HSP90協助不同種類的癌蛋白(即HSP90的服務蛋白)進行摺疊並使之變得穩定、成熟,而HSP90的服務蛋白中擁有大量的諸如激酶和轉錄因子等訊號轉導分子,這些分子對於腫瘤

的python區域性除錯手法

我們都知道,python裡面可以用pdb來除錯程式碼。但是pdb往往不大好用。有時候除錯程式碼往往在多重條件裡面,直接用pdb需要下條件斷點,設定複雜的條件。 一個簡單的辦法就是這麼幹。 __import__('pdb').set_trace() 但是有的時候,連這個出現的條件都不滿足。例如,程式碼必須

.net 的傳參方式作為傳參的參考,很可能在實際專案中使用

<asp:LinkButton ID="LinkButton1" runat="server" OnClientClick='<%# String.Format("return checkreturn(\"turnpost\",\"{0}

Filenet:ipfs網路激勵層的解決方案

人有不當好人的權利,可是如果別人想當好人,我們起碼不要去做洩氣的旁觀者。 ----考慮到Filecoin在當下的影響,中立的表達對新激勵層的看法   今年慢熊市,大家對挖礦都失去了信心,不過有兩樣東西是共識的熱點,一是EOS超級節點,另一個就是IPFS。 我們知道,第一批挖

的自動化 UI 測試解決方案 Airtest Project

今天分享一個自動化UI測試工具airtest——一款網易出品的基於影象識別面向遊UI測試的工具,也支援原生Android App基於元素識別的UI自動化測試。主要包含了三部分:Airtest IDE、Airtest(用截圖寫指令碼)和 Poco(用介面UI元素來寫指令碼)。 來自google的評價:

for迴圈的的使用方法

在使用Qt過程中,看到有人使用一種新的for迴圈,感覺很方便,就記錄下來了。 vector<QString> vStrList; vStrList.push_back("A"); vStrList.push_back("B"); vStrLis

遠端連線連不伺服器解決方法

允許123的使用者使用密碼123來進行遠端登入  GRANT ALL PRIVILEGES ON *.* TO '123'@'%' IDENTIFIED BY '123' WITH GRANT OPTION; 允許123的使用者在ip為192.168.0.1的主機上使用密碼123來

Appium在ios下獲取頁面元素的思路

p.p1 { margin: 0.0px 0.0px 16.5px 0.0px; text-align: justify; font: 22.0px "PingFang SC Semibold"; color: #000000 } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px;

【問鏈-EOS公開課】第十課 EOS 智慧合約相互呼叫

EOS中合約之間是可以相互呼叫的,主要通過inline action完成合約之間的呼叫。 譬如在擲骰子游戲中,存在兩個玩家先下注資金,然後比較骰子大小後決定勝負,贏的那一方將獲得所有的下注資金。在eosio原始碼eos/build/contract/dice 智

熵:的世界觀

一位名叫麥克斯·格拉克曼的人類學家曾經說:“科學是一門學問,它能使這一代的傻瓜超越上一代的天才。”熱力學第一定律與第二定律早已編入物理學基礎教程,它們所表達的內容現在看來不過是簡單明瞭的常識而已。然而將它們最終明白無誤地表達出來,卻經過了一段曲折的路程;許多天才為之嘔心瀝血,提出過大量複雜的理論。奇

的進入容器的方式: WebSocket + Docker Remote API

眾所周知,容器是基於作業系統核心的一種輕量級的虛擬化技術。其可以類比於虛擬機器,但其本身並不是虛擬機器。在傳統的虛擬機器使用場景中,每個使用者都會通過堡壘機,根據自己被分配的許可權,登入某些機器的某些賬號。當應用部署逐漸轉移到基於容器技術的PaaS平臺上後,讓使用者進入容器進行觀察、除錯應用已經成