Skip to content

Commit

Permalink
Add charges for selfdestruct ETH recipient address reads
Browse files Browse the repository at this point in the history
  • Loading branch information
cgewecke committed Sep 28, 2020
1 parent 62eb4b8 commit c234a7b
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 3 deletions.
1 change: 1 addition & 0 deletions packages/vm/lib/evm/opcodes/functions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1193,6 +1193,7 @@ export const handlers: Map<number, OpHandler> = new Map([
runState.eei.useGas(new BN(runState._common.param('gasPrices', 'callNewAccount')))
}

accessAddressEIP2929(runState, selfdestructToAddress, 0)
return runState.eei.selfDestruct(selfdestructToAddressBuf)
},
],
Expand Down
7 changes: 4 additions & 3 deletions packages/vm/lib/evm/opcodes/util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,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))
}
}
Expand Down

0 comments on commit c234a7b

Please sign in to comment.