Skip to main content

Transferring Funds Across Spaces

ConfluxHub

The easiest way to transfer assets between Core Space and eSpace is to use ConfluxHub. We recommend that you set up two wallets: Fluent for Core Space and MetaMask for eSpace.

Locale Dropdown

Follow these steps to make a cross-space transfer:

  • Start by clicking on Connect Wallet to connect your Fluent and MetaMask wallets to ConfluxHub.
  • To: Conflux eSpace at the top shows that you are making a transfer from Core Space to eSpace. If you would like to make a transfer in the other direction, click on the arrow next to this text.
  • In the Conflux eSpace Destination Address field, type in your eSpace address or click the MetaMask icon on the right to fill this field automatically.
  • Next, select the token that you want to transfer and enter the transfer amount.
  • If the button on the bottom says Approve, click on it to submit an ERC20 token approval first.
  • Once the button on the bottom says Transfer, click on it to make the transfer.

Making a cross-space transfer from eSpace to Core Space follows a similar process but it has two main steps: First, transfer the token to the bridge on eSpace. Second, withdraw the token from the bridge on Core Space. Please follow the site’s instructions.

⚠️ When making a cross-space transfer, always double check your addresses to avoid accidental asset loss.

Cross-Space Transfers for Developers

Below we will discuss how to make cross-space transfers programmatically.

Internal Contract

CIP-90 introduced the concept of two spaces running on one blockchain, and defined a new internal contract to connect the two. This contract is available under the address cfx:aaejuaaaaaaaaaaaaaaaaaaaaaaaaaaaa2sn102vjv (hex: 0x0888000000000000000000000000000000000006) on Core Space.

interface CrossSpace {
/* methods for cross-space CFX transfers */

function transferEVM(bytes20 to) external payable returns (bytes memory output);

function withdrawFromMapped(uint256 value) external;

function mappedBalance(address addr) external view returns (uint256);

/* methods for other cross-space operations */

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);

// ...
}