Skip to main content

CrossSpaceCall

简介

CrossSpaceCall 合约为conflux中coreSpace与ESpace沟通的桥梁。该合约能够实现在coreSpace中的账户在ESpace中互相转账,部署合约,调用合约及查询与CoreSpace中账户相对应的ESpace中账户的的nonce与balance

前提概念

  1. 在conlux中有CoreSpace与ESpace两个域,对应着conflux与以太坊两条链;
  2. 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);
}