Skip to content

Commit

Permalink
Pass accessList in extenal EVM calls
Browse files Browse the repository at this point in the history
  • Loading branch information
dzajkowski committed Sep 28, 2021
1 parent a0bdfe5 commit 109345e
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 4 deletions.
1 change: 0 additions & 1 deletion src/main/scala/io/iohk/ethereum/extvm/VMClient.scala
Expand Up @@ -125,7 +125,6 @@ class VMClient(externalVmConfig: VmConfig.ExternalConfig, messageHandler: Messag
Nil,
resultMsg.gasRefund,
if (resultMsg.error) Some(OutOfGas) else None,
// FIXME handle accessed addresses and storage in extVM
accessedResultTuple._1,
accessedResultTuple._2
)
Expand Down
21 changes: 18 additions & 3 deletions src/main/scala/io/iohk/ethereum/extvm/VMServer.scala
Expand Up @@ -24,6 +24,8 @@ import com.typesafe.config.ConfigFactory
import io.iohk.ethereum.domain.Address
import io.iohk.ethereum.domain.BlockHeader
import io.iohk.ethereum.extvm.Implicits._
import io.iohk.ethereum.extvm.msg.AccessListData
import io.iohk.ethereum.extvm.msg.StorageEntry
import io.iohk.ethereum.utils._
import io.iohk.ethereum.vm.BlockchainConfigForEvm
import io.iohk.ethereum.vm.EvmConfig
Expand Down Expand Up @@ -106,6 +108,7 @@ class VMServer(messageHandler: MessageHandler) extends Logger {
messageHandler.close()
}

// scalastyle:off method.length
private def constructContextFromMsg(contextMsg: msg.CallContext): ProgramContext[World, Storage] = {
import ByteString.{empty => irrelevant} // used for irrelevant BlockHeader fields

Expand Down Expand Up @@ -136,6 +139,10 @@ class VMServer(messageHandler: MessageHandler) extends Logger {
val recipientAddr: Option[Address] =
Option(contextMsg.recipientAddr).filterNot(_.isEmpty).map(bytes => Address(bytes: ByteString))

val (warmAddresses: Set[Address], warmStorage: Set[(Address, BigInt)]) = contextMsg.extraData.accessList
.map(extractWarmAccessList)
.getOrElse((Set.empty[Address], Set.empty[(Address, BigInt)]))

ProgramContext(
callerAddr = contextMsg.callerAddr,
originAddr = contextMsg.callerAddr,
Expand All @@ -152,11 +159,19 @@ class VMServer(messageHandler: MessageHandler) extends Logger {
initialAddressesToDelete = Set(),
evmConfig = vmConfig,
originalWorld = world,
// TODO ETCM-1202 use access list from CallContext
warmAddresses = Set.empty,
warmStorage = Set.empty
warmAddresses = warmAddresses,
warmStorage = warmStorage
)
}
// scalastyle:on method.length

private def extractWarmAccessList(ald: AccessListData): (Set[Address], Set[(Address, BigInt)]) = {
val warmAddresses: Set[Address] = ald.addresses.toSet.map((bs: GByteString) => Address(bs: ByteString))
val warmStorage: Set[(Address, BigInt)] = ald.storageLocations.toSet.map { (se: StorageEntry) =>
(Address(se.address: ByteString), se.storageLocation: BigInt)
}
(warmAddresses, warmStorage)
}

private def buildResultMsg(result: ProgramResult[World, Storage]): msg.CallResult = {

Expand Down

0 comments on commit 109345e

Please sign in to comment.