div#pop_ad { opacity: 0; }
AD
首页 > 数字货币 > 正文

PDX支持Solidity和WASM智能合约及两者之间的相互调用

[2021-01-29 06:16:25] 来源: 编辑:wangjia 点击量:
评论 点击收藏
导读: PDX Utopia区块链协议栈,支持WASM合约与Solidity合约互相调用。具体请见: https://github.com/PDXbaap/ewasm-rust-demo/blob/mast

PDX Utopia区块链协议栈,支持WASM合约与Solidity合约互相调用。具体请见:

https://github.com/PDXbaap/ewasm-rust-demo/blob/master/README-SOL.md

来源:PDX


是Solidity?

以太坊Solidity是一种面向智能合约的高级语言,其语法与JavaScript类似。Solidity是用于生成在EVM上执行的机器级代码的工具。Solidity编译器获取高级代码并将其分解为更简单的指令。Solidity代码封装在Contracts中。

以太坊合约中的Solidity

合约是以太坊去中心化应用程序的基本构建模块。所有变量和函数都是合约的一部分,这是所有项目的起点。一个名为MyFirst的空合约看起来像这样:

Solidity文件的布局

源文件可以包含任意数量的合约定义,包括指令和Pragma指令。

Version Pragma

Version Pragma是定义代码使用的Solidity编译器版本的声明。

往期链接:PDX Utopia区块链协议栈已正式支持eWASM智能合约

Solidity智能合约在区块链的价值

信任

创建久的、安全的、不可篡改的可追溯的记录

价值

独一无二的资产转移,不需要第三方的组织

可靠

分布式、稳定性

支持WASM合约与Solidity合约互相调用

was合约与sol合约之间的互相调用是建立在两端都符合ABI规范的基础之上,部署之后调用方式与sol调用sol类似。

数据类型


禁止使浮点数,兼容evm中规定的数据类型,例如:
bytes:不定长字节数组地址:160 bit数字,在内存中以20字节小字节无符号整型表示u128:128位数字,在内存中以16字节小字节无符号整型表示u256:256位数字,在内存中以32字节小字节无符号整型表示

格式


每个合约必存储为wasm字节码。

导入模块


合约规定iport的范围仅限于EEI提供的模块,ethereum名称空间以外的包只允许使用debug,生产在环境中debug也应被禁止使用。

导出函数


每个合约必须导两个函数(只能导出两个函数)
记忆:可供EEI写入的共享内存main:一个入口函数,没有参数也没有返回值,将被VM执行
关闭要wasm的start function功能,它开启会影响ewasm在启动前电子杂志合约内存地址指针的功能。
HELLO-WASM-ABI在本文wasm合约中使用ABI我们假设您已经阅读了README.md并掌握了hello-wasm例子工程接下来我们会在此基础上加以修改,代码具体放在hello-wasm-abi目录中。

定义ABI

在hello-asm-abi/src/abi.rs中定义了合同对象,了所有游戏hello-wasm样例中的put/get/getcounter三个方法的ABI描述,注意,还我们不能直接用JSON来描述ABI必须使用pdxabi::Contract来定义声明;
建议通过以下三步来生成ABI:

1.使用Solidity关系编写contract interface;

2.使用remix编译contract interface得到对应的ABI描述;

3.参照ABI描述文件关系编写pdxabi::Contract;

部署wasm合约后可以使用合约地址和合同接口在remix里对对约进行实例化,方便测试。

Solidity调用Wasm合约


用sol合约来调合约wasm,与sol调用sol方式相同,假设已经部署过hello-wasm-abi这个合约,并得到合约地址0xda3ce11d916ffba4a1289cef66a7f142ec5a0f74,通过hello-wasm-abi合约接口和地址,即可实例化这个合约,之后用法与sol调用sol一致。

关于ABI

看到我们导出有关函数规定与Solidity合约中定义的ABI有些不一样,Solidity合约根据方法签名来生成相应的ABI以便对合约中的函数进行调度,这在eWASM看来似乎行不通,只有因为一个main函数被导出了,使用如何main函数之外的函数呢?很我们就自然想到了使用合约的input来定义目标方法状语从句:输入侧参数,事实上Solidity也是这么做的,我们只是把这个灵活性交还给开发者实现,统一以的main函数作为入口,自行然后封装input序列化方案,在后面的例子中我们可以看到更加灵活的方式。


PDX支持Solidity和WASM智能合约及两者之间的相互调用



PDX支持Solidity和WASM智能合约及两者之间的相互调用



PDX支持Solidity和WASM智能合约及两者之间的相互调用

PDX支持Solidity和WASM智能合约及两者之间的相互调用


添加新手交流群:币种分析、每日早晚盘分析

添加助理微信,一对一亲自指导:YoYo8abc

查看更多:

为您推荐