CrossSpaceCall
简介
CrossSpaceCall 合约为conflux中coreSpace与ESpace沟通的桥梁。该合约能够实现在coreSpace中的账户在ESpace中互相转账,部署合约,调用合约及查询与CoreSpace中账户相对应的ESpace中账户的的nonce与balance
前提概念
- 在conlux中有CoreSpace与ESpace两个域,对应着conflux与以太坊两条链;
- CoreSpace中的账户与ESpace中的账户有一一对应关系;
前置条件
- Conflux稳定运行
方法阐述
createEVM
概念
通过调用该方法,在espace中创建合约(合约地址可通过事件获得,也可通过解析call方法调用合约返回的数据来获得相应的合约地址)
注: 由于call方法不改变状态,且是将当前账户的nonce+1来作为生成合约地址的数据,因此需要先调用call方法获得合约地址,再去调用createEVM
来获得相应的合约地址
输入参数
- init 创建合约的字节码
输出参数
- 合约地址
transferEVM
概念
向PoW账户映射的Espace账户中转帐
前置条件
- conflux链稳定运行
输入参数
- to: PoW账户映射的Espace账户的地址
输出参数
- 转账信息
callEVM
概念
通过该方法调用ESpace下的合约(合约地址可通过事件获得,也可通过解析call方法调用合约返回的数据来获得相应的合约地址)
输入参数
- to: PoW账户映射的Espace账户的地址
- data: 调用合约所需要的参数encode后的数据
输出参数
- 调用合约成功信息
staticCallEVM
概念
通过该方法静态调用ESpace下的合约
输入参数
- to: CroeSpace账户映射的Espace账户的地址
- data: 调用合约所需要的参数encode后的数据
输出参数
- 调用合约成功信息
withdrawFromMapped
概念
从ESpace账户中收回相应的代币至其映射的CoreSpace账户
输入参数
- value: 回收的金额
输出参数
无
mappedBalance
概念
查询CoreSpace账户映射的CoreSpace账户的余额
输入参数
- address: CoreSpace账户的地址
输出参数
- 对应的余额
mappedNonce
概念
查询CoreSpace账户映射的CoreSpace账户的nonce
输入参数
- address: CoreSpace账户的地址
输出参数
- 对应的nonce
代码
// SPDX-License-Identifier: MIT
pragma solidity >=0.5.0;
interface CrossSpaceCall {
event Call(bytes20 indexed sender, bytes20 indexed receiver, uint256 value, uint256 nonce, bytes data);
event Create(bytes20 indexed sender, bytes20 indexed contract_address, uint256 value, uint256 nonce, bytes init);
event Withdraw(bytes20 indexed sender, address indexed receiver, uint256 value, uint256 nonce);
event Outcome(bool success);
function createEVM(bytes calldata init) external payable returns (bytes20);
function transferEVM(bytes20 to) external payable returns (bytes memory output);
function callEVM(bytes20 to, bytes calldata data) external payable returns (bytes memory output);
function staticCallEVM(bytes20 to, bytes calldata data) external view returns (bytes memory output);
function withdrawFromMapped(uint256 value) external;
function mappedBalance(address addr) external view returns (uint256);
function mappedNonce(address addr) external view returns (uint256);
}
No Comments