LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 币圈百科 > 如何实现在EOS网络上运行以太坊智能合约?

如何实现在EOS网络上运行以太坊智能合约?

2020-05-14 BOSCore 来源:火星财经

01

主持人介绍

大家好,我是 BOSCore 的房佳,也是今天的主持人,今天很开心邀请到 BOSCore 的核心开发者 Deadlock 给我们分享。

Deadlock 是知名区块链架构师,负责 BOS 底层架构和技术方案,曾任职新加坡国立大学研究员,互联网公司架构师,有丰富的科研经验和十年的开发经验,欢迎 Deadlock~

02

嘉宾分享

Q1:什么是EOS-EVM?能简单直白的解释一下吗?

A1:EVM 是英文 Ethereum Virtual Machine 的缩写,是以太坊虚拟机的意思。EOS EVM 意思是开发人员在 EOSIO 智能合约中运行以太坊 solidity 智能合约。

Q2:EVM如何实现在EOS网络上运行以太坊智能合约的?

A2:我们用 EOS 的 smart contract 实现了 EVM 的逻辑, 遵守以太坊黄皮书的要求,同时结合 EOS 的特性,实现了可以在 EOS 上运行 EVM 环境, 在 EVM 环境上执行 EVM 智能合约。

他们之间的关系可以类比为在 MAC 电脑上运行 windows 虚拟机打 windows 的游戏,MAC 相当于 EOS 链上的智能合约, windows 虚拟机相当于 EVM, 游戏相当于 EVM 的 smart contract。

如果要技术一点的回答的话, 就是下面这个图这样:

交易提交的时候是 eos trx 的格式包裹着 eth trx。

详细查看:

https://github.com/eosiosg/eos-challenge/blob/master/use_case_discussion.md

Q3:EOS-EVM 和以太坊 EVM 有什么不同之处?

A3:除了不收取 Gas 费用和一些特性之外(比如 gasprice 强制为0, difficulty 为0等)之外, 运行效果是完全一样的。

关于 Gas 费不一致是因为考虑到 EOS 的特性, CPU/NET 是通过质押获取的,不应该在收取了 CPU/NET 费用后再额外收取一遍 Gas 费。但 Gas 的计算逻辑是保留了的,如果有需要的话,随时可以开启。

Q4:为什么参加 EOSIO 挑战赛?

A4:参加这个挑战赛的原因有三:

第一,我们很早之前就已经实现了 IBC 跨链技术,我们有技术积累,可以轻松完成挑战。 第二是发起这个挑战赛时 BM 呼吁说要打造惠及所有人的区块链,这跟我们BOSCore 要做区块链的自由港,目前已经做到了 BOS IBC HUB,也就是区块链的高速公路,这一点跟我们的目标是非常契合的。 第三,我们参加这个活动的原因也是为了让社区人员知道,我们一直本着方便开发者和用户的初心在努力创造和钻研,并且有所获得。Q5:BOSCore 目前参与 EOSIO 挑战赛的进度如何?希望 EOS 达到什么样的高度?A5:目前我们已经提交了所有的挑战赛所要求的资料,剩下的就等 Block One 对于挑战赛的进度处理了。

我们参加这个挑战赛的原因也很简单,一切都是为了技术追求,与世界上众多的开发人员一起寻找能够通过 EOSIO 智能合约构建区块链技术的未来,并将开发者社区凝聚在一起,这样在 EOS 高性能的基础上,整合整个区块链的资源,而并非区块链的孤岛,这跟我们 BOS 要做区块链自由港的初衷不谋而合。

Q6:什么是 Gas?能普及下 Gas、GasLimit、GasPrice 参数的定义和关系吗?

A6:以下为 Gas、GasLimit、GasPrice 三者的定义:

Gas 是在以太坊网络中进行转账和智能合约交互的一个单位。 GasLimit 是以太坊用户愿意为成功执行某笔交易逻辑所支付的最大 Gas 数量。 GasPrice 是用户愿意为每个 Gas 支付的价格,单位是 Gwei 。 形象的说 Gas 就是多少升汽油, GasPrice 就是油价, 最终用户执行交易要付的 Gasfee 就是油价乘以数量 = Gas * GasPrice。

不好理解的地方通常是认为 Gas 是指价格,即要花费多少 ETH,其实 Gas 是 xxx 升, GasPrice 是 ETH /升 ,乘起来才是最终花费的 ETH。

Q7:Gas 费用已计算但未计费是指执行交易不需要 Gas 费吗?会不会影响交易确认速度?

A7:执行交易需要支付 CPU/NET, 这是 EOS 链要求的。

已计算未收费是指在逻辑上计算了应该收取多少 Gas,但是并没有实际扣除这部分费用。Gas 和 CPU 这两种资源模型需要取舍, 如果能有一种巧妙的方式把两者结合起来的话,就可以打开这部分功能。

交易速度确认不会影响。共识是针对 block 来的, 模拟 EVM 本质上是一个复杂的、执行时间较长的交易, 不会对确认速度造成影响。

Q8:EOS-EVM 解决方案是否支持以太坊RPC接口?

A8:基本功能是支持的,但有部分因为特性限制没有支持,比如获取 hashrate, difficulty 在 EOS-EVM 里没有意义。我们特别定制了一个接口叫做 simulate, 这个接口可以执行任意一个交易返回结果,但在最终会强制让这个交易失败,以此来达到不上链的效果。这个接口可以用来做很多 RPC 的功能,比如 get balance, get storage。

之前有另一个思路是做一个专门的 plugin 来支持 RPC, 但是扩展性上会有问题, 不能假设所有的全节点都默认开启这个 plugin。所以最终选择了 simulate 接口这个方案。

03

自由问答

以下为自由问答精彩节选(篇幅原因有删减)

Q1:众所周知,以太坊智能合约存在不安全因素,在 EOS 运行以太坊智能合约会不会影响 EOS 安全性,如何进行解决?

A1:简短的答案是不影响,细说的话是指安全级别一致。我们先理解下运行以太坊智能合约,这个本质上是一个复杂的 EOS 智能合约, 如果不考虑他复杂的逻辑恰好和 EVM 一致的话, 他和任何 EOS 的智能合约都是一样的,不会降低现有的安全级别, 因为所有的逻辑实现都是在智能合约层面, 没有改动 VM 层面。

而 EOS-EVM 本身作为 EVM Simulator 的安全级别又是和以太坊的 VM 一致的, 这保证了运行在 EOS-EVM 中的以太坊智能合约的安全性是和运行在 ETH 链上是一致的。所以这两个层面保证了 EOS 链的安全和 EVM Smart Contract的安全。

Q2:区块链的去中心化性质运用到企业中,有些信息企业不想对外公开,怎么处理这个痛点?

A2:有两种方式, 一种是用联盟链, 另一种是用公链。但是数据加密一般选取区块链作为信息载体,看重的是不可篡改性。需要多方监督,链的不可篡改性才有意义。那么就有两种情况, 一种是大公司, 需要跨部门合作的,或者几个公司合作的, 这种适合自己做联盟链, 数据不对外公开,需要访问权限才可以获取数据。

Q3:在 EOS 网络上运行以太坊智能合约 EOS-EVM 能够给 BOS 带来哪些机会和好处?

A3:这个带来的好处有很多,比较明显的就是社区间的交流,比如可以更方便的和以太坊优秀的开发资源进行对接合作, 引入更多的优秀项目,一次开发多链运营对于项目方来说还是有一定吸引力的。另一方面从链发展的角度出发,技术特性更多元化, 未来有可能可以和 EVM2.0 进行对接,形成进一步的互补。

Q4:在 EOS 上执行 ETH 合约会不会出现交易超时的问题,如果出现了,又是怎么解决的呢?

A4:这个问题很好, 这是一个先天限制, EOS 默认的 trx 时间是 30ms(毫秒), 这个是由各个 BP 决定的,也是初始默认值,这一点是无法突破的。

在 EOS 上执行 ETH 合约会出现交易超时的问题如果出现的话这个交易只能强制失败。但因为 30ms 是一个非常长的交易了, 所以在大多数情况下, 这个问题其实不是一个很大的问题;但是如果是类似 fomo3d 这种执行时间可能会很长的交易, 直接移植是不适合的, 最好是修改合约逻辑,想办法绕开这个限制。

Q5:BOS 是如何处理跨合约调用的问题的呢?

A5:EVM 的合约调用就是对目标合约发送一笔转账, 所以可以是在用户 Alice 发送交易给合约 A, 然后合约 A 收到交易后, 执行逻辑, 再发送交易给合约 B,天然就是支持的。

我们倒是有一个 issue 是关于权限问题,权限校验是在合约自己的逻辑里实现的。

https://github.com/eosiosg/eos-challenge-contract/issues/39

本文来源:BOSCore
原文标题:如何实现在EOS网络上运行以太坊智能合约?

—-

编译者/作者:BOSCore

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

知识 以太坊
LOADING...
LOADING...