From 4f1a28d14e7f3c091af7a0f5c611ea6c23ef0cc3 Mon Sep 17 00:00:00 2001 From: cgewecke Date: Mon, 28 Sep 2020 09:21:19 -0700 Subject: [PATCH] Add charges for selfdestruct ETH recipient address reads --- packages/vm/lib/evm/opFns.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/vm/lib/evm/opFns.ts b/packages/vm/lib/evm/opFns.ts index e4fcba004bb..4765065cb38 100644 --- a/packages/vm/lib/evm/opFns.ts +++ b/packages/vm/lib/evm/opFns.ts @@ -1197,6 +1197,7 @@ export const handlers: Map = new Map([ runState.eei.useGas(new BN(runState._common.param('gasPrices', 'callNewAccount'))) } + accessAddressEIP2929(runState, selfdestructToAddress, 0) return runState.eei.selfDestruct(selfdestructToAddressBuf) }, ], @@ -1278,13 +1279,14 @@ function accessAddressEIP2929(runState: RunState, address: BN | Buffer, baseFee? runState.accessedAddresses.add(addressStr) // CREATE, CREATE2 opcodes have the address warmed for free. - if (baseFee) { + // selfdestruct beneficiary address reads are charged an *additional* cold access + if (baseFee !== undefined) { runState.eei.useGas( new BN(runState._common.param('gasPrices', 'coldaccountaccess') - baseFee), ) } - // Warm - } else if (baseFee) { + // Warm: (selfdestruct beneficiary address reads are not charged when warm) + } else if (baseFee !== undefined && baseFee > 0) { runState.eei.useGas(new BN(runState._common.param('gasPrices', 'warmstorageread') - baseFee)) } }