CIP 90 – A Space Fully EVM compatible
Tóm tắt đơn giản
Giới thiệu một không gian mới hoàn toàn tương thích với EVM.
Khái quát
CIP này nhằm mục đích giới thiệu một không gian hoàn toàn mới tương thích với EVM. Không gian mới được gọi là EVM Space, và không gian hiện tại được gọi là Native Space . EVM Space tuân theo quy tắc tương tự như EVM và hỗ trợ eth rpc như eth_getBalance
, vì vậy các công cụ từ ethereum economics có thể được sử dụng trực tiếp trên Conflux.
Các tài khoản trong 2 không gian được tách biệt. Một tài khoản Native space chỉ có thể tương tác với các tài khoản khác trong native space bằng loại giao dịch Conflux ban đầu. Một tài khoản EVM space chỉ có thể tương tác với các tài khoản khác trong EVM space với loại giao dịch Ethereum EIP-155. Một hợp đồng nội bộ mới sẽ được triển khai cho nội dung và dữ liệu trên cross-space. Không giống như các hoạt động cross-chain, các hoạt động cross-space là nguyên tử và với bảo mật layer 1
Sự thúc đẩy
Conflux có một virtual machine tương tự như EVM. Tuy nhiên, vẫn có một số khác biệt giữa Conflux VM và Ethereum VM. Conflux có một định dạng giao dịch khác và một quy tắc khác để tạo địa chỉ từ public keys. Điều này cản trở việc chuyển dApps tương thích EVM sang Conflux. CIP-72 và CIP-80 trước đây cố gắng giải quyết những trở ngại này. Nhưng điều đó sẽ ảnh hưởng đến các ứng dụng hiện tại. Vì vậy, CIP này giới thiệu một không gian mới để xây dựng một không gian hoàn toàn tương thích với EVM mà không làm thay đổi các tài khoản và giao dịch hiện có.
Mô tả cụ thể
Địa chỉ ví
Ở cấp độ người dùng, native space vẫn sử dụng địa chỉ định dạng base32 như cfx:aa...
và EVM space sử dụng địa chỉ hex checksum như 0xaAD8...
. Ở cấp độ hệ thống, cả native space và EVM space đều ở định dạng 160 bit. Một địa chỉ trong hai không gian là hai tài khoản khác nhau. Balances và nonces của chúng sẽ được tính riêng.
Khoá lưu trữ
Conflux sử dụng Delta MPT làm cấu trúc dữ liệu được xác thực cơ bản cho trạng thái sổ cái. Delta MPT cung cấp giao key-value cho virtual machine.
Khi tính toán khóa lưu trữ cho các tài khoản trong EVM space, chúng tôi tính khóa lưu trữ cho tài khoản có cùng địa chỉ trong không gian gốc và chèn byte 0x81
ở vị trí 20 (chỉ mục bắt đầu từ 0).
Khi tính toán khóa lưu trữ bộ delta (xem phần 3.2.2 để biết chi tiết) cho các tài khoản trong EVM space, chúng tôi tính khóa lưu trữ cho tài khoản có cùng địa chỉ trong không gian gốc và chèn byte 0x81
ở vị trí 32 (chỉ mục bắt đầu từ 0) .
Virtual Machine
* Hỗ trợ các hợp đồng được biên dịch trước trên Ethereum từ địa chỉ này 0x00..01
đến địa chỉ khác 0x00..08
.
* Mã NUMBER
opcode sẽ trả về số epoch.
* Mã BLOCKHASH
opcode chỉ có thể lấy NUMBER-1
làm đầu vào. (Không giống như Ethereum, lấy bất kỳ số nguyên nào NUMBER-256
làm NUMBER-1
đầu vào)
* Không refund gas trong SSTORE
opcode và SUICIDE
opcode.
* Các hoạt động giữ storage có chi phí gas khác nhau.
SSTORE
tốn 40000 gas (thay vì 20000 gas trong Ethereum) khi thay đổi mục nhập lưu trữ từ zero thành non-zero.
Khi triển khai một hợp đồng mới, mỗi byte tốn 400 gas (thay vì 200 gas trong Ethereum).
Khi tạo tài khoản mới bằng CALL
hoặc SUICIDE
, nó tiêu thụ 50000 gas (thay vì 25000 gas trong Ethereum).
Hoạt động Cross Space
Tài khoản phản chiếu
Mỗi tài khoản native space có một tài khoản phản chiếu trong EVM space. Địa chỉ của tài khoản phản chiếu là 160 bit cuối cùng của giá trị băm keccak của tài khoản gốc. Với giả định về tính bảo mật của hàm băm keccak, địa chỉ phản chiếu sẽ không bao giờ va chạm với các địa chỉ được tạo bởi các công cụ Ethereum. Tài khoản native space có thể rút số dư từ tài khoản phản chiếu.
Hợp đồng nội bộ
Một hợp đồng nội bộ mới được gọi là CrossSpace
hợp đồng sẽ được triển khai tại địa chỉ 0x0888000000000000000000000000000000000006
với các giao diện sau. Người dùng native space/hợp đồng có thể tương tác với các tài khoản trong EVM space và xử lý giá trị trả lại trong cùng một giao dịch. Vì vậy, các hoạt động cross-space có thể là nhân tố.
Khi thực hiện cross-space, chỉ có thể chuyển 1/10 gas có sẵn trong EVM space. Điều này nhằm hạn chế việc sử dụng gas trong một lần cross-space.
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 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);
}
Block gas limit
Chỉ block có block height là bội số của 5 mới có thể đóng gói giao dịch loại Ethereum. Tổng giới hạn gas của giao dịch này không được vượt quá một nửa block gas limit.
Cơ sở lý luận
Giới thiệu về khóa lưu trữ
Trong cách triển khai hiện tại, byte thứ 21 của khóa lưu trữ được mã hóa là một ký tự mã ascii hợp lệ. Vì vậy, đặt bit cao nhất của byte thứ 21 có thể phân biệt các khóa lưu trữ mới với các khóa hiện có.
Về giao diện của các hợp đồng nội bộ
Các hợp đồng nội bộ sử dụng loại bytes20
để chỉ ra một địa chỉ trong EVM space. Bởi vì địa chỉ EVM space có thể không hợp lệ trong Conflux space và bị từ chối bởi một số giao diện trong RPC.
Tương thích ngược
CIP này đang phá vỡ thông số kỹ thuật.
Các trường hợp kiểm tra
TBA.
Thực hiện
TBA.
Cân nhắc về Bảo mật
TBA.
Bản quyền
Bản quyền và các quyền liên quan được miễn trừ thông qua CC0 .