
注:阅读此文需要您有一定的CPU硬件知识。
虚拟机是实现智能合约系统最为关键和核心的技术,智能坊虚拟采用虚拟成熟的8051处理器的方案满足了系统的需求,同时可以直接使用成熟稳定的商业编译器(iar for 8051 、keil for 8051 ),为系统的开发节省了大量时间。
下面我们就来揭开其神秘的面纱,为满足智能合约特定的需求,对系统进行了一些改造如图:

8051是哈弗结构的处理器,虚拟机把用不到的中断等功能去掉,只留下数据运算和处理部分,每一个应用开始运行前都需要加载到虚拟机ROM里,其数据结构必须如上图所示,否则虚拟机将直接判应用非法,强制退出。
首先看代码实现(官方代码是在IAR for 8051 上开发,不同的编译器可能写法不一样)
__root __code static const char version[]@0×0004 = ;
__root __code static const char exitcall[]@0×0008 = ;
__root __code static const char apicall[]@0×0012 = ;
__root __xdata __no_init static unsigned char Communicate[4*1024]@0xEFFF;
__root __xdata __no_init static unsigned char Result[2]@0xEFFD;
0000h LJMP 指令虚拟机复位后直接从0000h开始执行,读取LJMP后的地址直接跳转到app入口,由编译器自动生成。
0004H version解说 :
存放app编译时SDK 版本号,主要是为未来可能升级,做版本识别。
0008H 应用退出地址解说:
传统8051没有exit接口,但是在我们虚拟机必需要有,而且需要异常恶化正常两种退出方式。
Exit 实现原理:
应用把退出code写入Result@0xEFFD 后直接call 0×0008, 虚拟机检测到PC指针指向00×0008后就中断应用的运行。
应用sdk代码片段:
__noreturn void __VmExit(EXIT_CODE tep) {
Result[0] = tep;
((void (*)(void)) (0×0008))();
}
虚拟机代码片段:
if (Sys.PC == 0×0008) {
INT8U result = GetExRam(0xEFFD);
if (result == 0×01) {
return step;
}
return 0;
}
0012H API调用地址解说:
应用需要调用系统的一些功能时,需要调用此接口,如查询某个账户余额。
应用每次调用API时需要把API 编码存放于Result@0xEFFD,API需要传给系统的参数存放于缓存区Communicate[4*1024]@0xEFFF,然后call 0×0012
sdk代码片段:
__root void __CallApi(CALL_API_FUN tep) {
Result[0] = (unsigned char) (tep & 0xFF);
Result[1] = (unsigned char) ((tep >> 8) & 0xFF);
((void (*)(void)) (0×0012))();
}
虚拟机代码片段:
if (Sys.PC == 0×0012) {
INT16U methodID = ((INT16U) GetExRam(VM_FUN_CALL_ADDR) | ((INT16U) GetExRam(VM_FUN_CALL_ADDR+1) << 8));
unsigned char *ipara = (unsigned char *) GetExRamAddr(VM_SHARE_ADDR);
RET_DEFINE retdata = CallExternalFunc(methodID, ipara, pVmEvn);
}
Code区存放可执行代码。
更多细节,请前往代码仓库 github: https://github.com/SoyPay/dacrs
作者:智能坊创始人 ranger
Astar生态多虚拟机借贷中心SiO2 Finance预计将于2022年Q3推出代币
Optimism:EVM Equivalence 完全符合以太坊虛擬機規范,將成為 L2 下一個通用標準
为什么需要虚拟机?
智能坊:白皮书更新
Algorand 将更新虚拟机:支持复杂合约逻辑和更多开发语言
Darwinia Crab 发布 Kusama 卡槽竞拍计划
以太坊基金会 AMA 讨论了这些焦点:ETH 2.0、Rollup、EIP-1559...
波卡生态项目 Moonbeam 计划在波卡上重建以太坊
数据:RenVM 单日交易量创历史新高,达 1900 万美元
去中心化资产跨链解决方案 Ren 的虚拟机 RenVM 上线两周,交易量达 100 万美元
Nervos 首席架构师 Jan:智能合约开发者仍属小众群体,应该拥抱「传统」开发者
量子链研发全新虚拟机中间件技术 Neutron,计划今年晚些时候上线
以太坊 Layer 2 扩容方案 Optimistic Rollup 发布虚拟机 OVM 的 Alpha 版本
区块链开放协议 Ren 虚拟机 RenVM 测试网上线,旨在帮助开发者实现多链兼容的 DeFi 应用
Aion Network 推出首款基于 Java 的区块链虚拟机 AVM



