Различия между Ethereum и Alpha Testnet
Существует ряд технических деталей, которые отличаются между EVM Ethereum mainnet и модифицированным дизайном scroll для zkEVM. Ниже вы можете увидеть эти различия в том виде, в котором они существуют сейчас.
Для участников проектов с открытым исходным кодом и разработчиков инфраструктуры, пожалуйста, свяжитесь с нашей командой для получения дополнительной поддержки.
Опкоды EVM
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