Новое предложение по улучшению Conflux. CIP 90

Номер cip: 90

Название: Новое пространство, полностью совместимое с EVM (A Space Fully EVM compatible)

Авторы: Фан Лонг (Fan Long) [email protected] Ченьсин Ли (Chenxing Li) [email protected]

Статус: Черновик

Кратное описание

Этот CIP направлен на внедрение нового полностью совместимого с EVM пространства. Новое пространство будет называться “Пространство EVM” (EVM Space), а текущее пространство назовем “Нативным пространством” (Native Space). “Пространство EVM” наследует правила существующие в EVM и поддерживает ETH rpc методы, такие как “eth_getBalance”, поэтому инструменты из ethereum economics можно использовать напрямую в сети Conflux.

Учетные записи из двух пространств разделены между собой. Учетная запись из нативного пространства может взаимодействовать только с другими учетными записями нативного пространства с использованием транзакций типа conflux. Учетная запись пространства EVM может взаимодействовать только с другими учетными записями EVM пространства с использованием только транзакций типа Ethereum EIP-155. Будет создан новый специальный внутренний контракт для обмена между учетными записями из разных пространств. В отличие от кросс-чейн операций, “кросс-пространственные” операции являются атомарными и имеют 1 уровень безопасности.

Мотивация

У Conflux есть схожая с EVM виртуальная машина. Однако, между ними существуют некоторые различия. Conflux имеет другой формат транзакций и использует другое правило для генерации адресов из открытых ключей. Это препятствует переносу приложений, совместимых с EVM, на Conflux. Предыдущие CAP-72 и CIP-80 пытались решить эту проблему, но они оказывали влияние на уже существующие приложения. Данный CIP позволяет решить эту проблему созданием нового пространство, полностью совместимого с EVM, без внесения изменений в существующие учетные записи и транзакции.

Спецификация

Адреса

На уровне пользователя в нативном пространстве по-прежнему используется адрес формата base32 (“cfx:aa…”), а в пространстве EVM используется адрес шестнадцатеричной контрольной суммы (0xaAD8…). На системном уровне как нативное пространство, так и пространство EVM имеют адрес состоящий из 160 бит, но одинаковый адрес в двух разных пространствах - это две разные учетные записи. Их балансы и порядковые номера транзакций будут учитываться отдельно.

storage key

Conflux использует Delta MPT в качестве базовой структуры аутентифицированных данных для хранения ключей сопоставления. Delta MPT предоставляет интерфейс ключ-значение для виртуальной машины.

При вычислении storage key для учетных записей в пространстве EVM мы вычисляем storage key для учетной записи с тем же адресом в нативном пространстве и вставляем байт 0x81 в позицию 20 (индекс начинается с 0).

При вычислении “delta set storage key” (подробнее см. раздел 3.2.2) для учетных записей в пространстве EVM мы вычисляем storage key для учетной записи с тем же адресом в нативном пространстве и вставляем байт 0x81 в позицию 32 (индекс начинается с 0).

Виртуальная машина

  • Поддержка предварительно скомпилированных контрактов на Ethereum с адреса "0x00…01` до адреса “0x00…08”.

  • Код операции NUMBER вернет номер эпохи.

    • Код операции BLOCKHASH может принимать только NUMBER-1 в качестве входных данных. (В отличие от Ethereum, который принимает любое целое число от NUMBER-256 до NUMBER-1 в качестве входных данных)
    • Нет возврата газа в коде операции SSTORE и коде операции SUICIDE.
    • Разные затраты на газ при изменении storage entry с нуля на ненулевое значение с использованием кода операции SSTORE. (Решение по данному изменению пока не принято)

Кросс-пространственные операции

Сопоставленный аккаунтов

Каждая учетная запись в нативном пространстве имеет сопоставленную учетную запись из пространства EVM. Адрес сопоставленной учетной записи - это последние 160 бит хэш-функции keccak от исходной учетной записи. С учетом предположения о безопасности хэш-функции keccak сопоставленный адрес никогда не будет пересекаться с адресами, сгенерированными в сети Ethereum. Учетная запись из нативного пространства может вывести остаток средств с сопоставленной учетной записи.

Внутренний контракт

Новый внутренний контракт будет назваться CrossSpace и будет развернут по адресу 0x088800000000000000000000000000000006. Пользователь/контракт из нативного пространства может взаимодействовать с учетными записями в пространстве EVM и обрабатывать возвращаемое значение в одной и той же транзакции. Таким образом, операции между пространствами могут быть атомарными.

При совершении межпространственного вызова может быть использовано только 1/20 доступного газа в пространстве EVM. Это направлено на ограничение использования газа при межпространственном вызове. (Решение по данному изменению пока не принято)

Код контракта:


pragma solidity >=0.5.0;

interface CrossSpace {    

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);    function createEVM(bytes calldata init) external payable returns (bytes20);    

function create2EVM(bytes calldata init, bytes32 salt) 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;    f

unction mappedBalance(address addr) external view returns (uint256);    f

unction mappedNonce(address addr) external view returns (uint256);}

Лимит газа

Только блок, высота блока которого кратна 10, может упаковать транзакцию типа Ethereum. Общий лимит газа в этих транзакциях не может превышать половины лимита газа в блоке

О storage key

В текущей реализации 21-й байт закодированного storage key является допустимым символом ascii. Таким образом, установка старшего бита 21-го байта в значение 1 позволяет отличать новые storage key от существующих.

Об интерфейсе внутренних контрактов

Во внутренних контрактах для указания адреса в пространстве EVM используется тип bytes20. Поскольку адрес пространства EVM может быть недействительным в пространстве Conflux и отклоняться некоторыми интерфейсами в RPC.

Оригинал статьи: https://github.com/Conflux-Chain/CIPs/commit/af30a70a98ee87e1ec4006377b19399c64cd536b

1 Like