Различия между Ethereum и Alpha Testnet

Существует ряд технических деталей, которые отличаются между EVM Ethereum mainnet и модифицированным дизайном scroll для zkEVM. Ниже вы можете увидеть эти различия в том виде, в котором они существуют сейчас.

Для участников проектов с открытым исходным кодом и разработчиков инфраструктуры, пожалуйста, свяжитесь с нашей командой для получения дополнительной поддержки.

Для обычных разработчиков Solidity эти детали не повлияют на ваш опыт разработки.

Опкоды EVM

Opcode
Solidity equivalent
Ethereum Behavior
Scroll Behavior

BLOCKHASH

block.blockhash

Input: blockNumber from top of the stack, and the valid range is [NUMBER-256, NUMBER-1].

Output: hash of the given block number, or 0 if the block number is not in the valid range.

Matches Ethereum, but limits the range of input blockNumber to be NUMBER-1.

COINBASE

block.coinbase

In Ethereum Clique, the eth address of the signer.

Returns the pre-deployed fee vault contract address. See Alpha Testnet Contracts.

DIFFICULTY / PREVRANDAO

block.difficulty

After PoS, the previous block’s randao value.

Returns 0.

SELFDESTRUCT

selfdestruct

Disabled in the sequencer. Runtime error, same behavior as the INVALID opcode. Will change to adopt Ethereum’s solution in the future.

State Account

Дополнительные поля

Мы добавили два поля в текущий объект StateAccount: PoseidonCodehash и CodeSize.

type StateAccount struct {
	Nonce    uint64
	Balance  *big.Int
	Root     common.Hash // merkle root of the storage trie
	KeccakCodeHash []byte // still the Keccak codehash
	// added fields
	PoseidonCodeHash []byte // the Poseidon codehash
	CodeSize uint64
}

CodeHash

В связи с этим мы поддерживаем два типа codehash для каждого байткода контракта: Keccak-хэш и Poseidon-хэш.

KeccakCodeHash сохраняется для поддержания совместимости с EXTCODEHASH. PoseidonCodeHash используется для проверки корректности байткодов, загруженных в zkEVM, где хэширование Poseidon намного эффективнее.

CodeSize

При проверке EXTCODESIZEзагружать все данные контракта в zkEVM довольно дорого. Вместо этого мы храним размер контракта в памяти во время создания контракта. Таким образом, нам не нужно загружать код - достаточно доказательства хранения для проверки этого опкода.

Block Time

Alpha Testnet стремится к постоянному времени блока на уровне 3 секунд. Это более короткое и последовательное время, чем 12 секунд, используемые в Ethereum в идеальных условиях.

Этот показатель был выбран по двум причинам:

  • Более быстрое, постоянное время блока приводит к более быстрой обратной связи и лучшему пользовательскому опыту.

  • Поскольку мы оптимизируем схемы zkEVM в наших тестовых сетях, даже если мы поддерживаем меньший лимит газа на блок или пакет, мы все равно сможем достичь более высокой пропускной способности, чем Ethereum.

Будущие EIPs

Мы внимательно следим за всеми появляющимися EIP, принятыми Ethereum, и принимаем их, когда это целесообразно. Если вас интересует более подробная информация, обращайтесь на нашем комьюнити форуме или в Discord Scroll.

Address Aliasing

Основания для address aliasing

Из-за того, как функционирует опкод CREATE, можно создавать контракты с одинаковым адресом, но разным байткодом в разных сетях.

Это нарушает некоторые предположения о доверии, поскольку контракт, который выглядит надежным на L2, может иметь вредоносный аналог на L1.

Чтобы предотвратить это, значения msg.sender и tx.origin могут меняться в зависимости от того, как был вызван тот или иной контракт. (С L2 напрямую или через мост).

Если контракт вызывается из контракта на L2 или из EOA, функциональность остается такой же, как и на Ethereum.

  • Значение msg.sender и значение tx.origin будут одинаковыми на верхнем уровне транзакции (первый контракт, который вызывается в цепочке вызовов).

  • Значение tx.origin будет адресом вызывающей стороны.

Если контракт вызывается из смарт-контракта на L1 через мост, то он обрабатывается по-другому.

  • Значение tx.origin будет вычислено следующим образом::

    • tx.origin = L1ContractAddress + offset

    • Где offset=0x1111000000000000000000000000000000001111

Last updated