Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge MutableAccount and EVMAccount #5863

Merged
merged 6 commits into from
Sep 13, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@
import org.hyperledger.besu.ethereum.mainnet.feemarket.BaseFeeMarket;
import org.hyperledger.besu.ethereum.mainnet.feemarket.ExcessBlobGasCalculator;
import org.hyperledger.besu.ethereum.mainnet.feemarket.FeeMarket;
import org.hyperledger.besu.evm.account.EvmAccount;
import org.hyperledger.besu.evm.account.MutableAccount;
import org.hyperledger.besu.evm.worldstate.WorldUpdater;
import org.hyperledger.besu.plugin.services.exception.StorageException;
import org.hyperledger.besu.plugin.services.securitymodule.SecurityModuleException;
Expand Down Expand Up @@ -190,10 +190,10 @@ protected BlockCreationResult createBlock(

final List<BlockHeader> ommers = maybeOmmers.orElse(selectOmmers());

if (maybeParentBeaconBlockRoot.isPresent()) {
ParentBeaconBlockRootHelper.storeParentBeaconBlockRoot(
disposableWorldState.updater(), timestamp, maybeParentBeaconBlockRoot.get());
}
maybeParentBeaconBlockRoot.ifPresent(
bytes32 ->
ParentBeaconBlockRootHelper.storeParentBeaconBlockRoot(
disposableWorldState.updater(), timestamp, bytes32));

throwIfStopped();
final TransactionSelectionResults transactionResults =
Expand Down Expand Up @@ -466,9 +466,9 @@ boolean rewardBeneficiary(
.getBlockProcessor()
.getCoinbaseReward(blockReward, header.getNumber(), ommers.size());
final WorldUpdater updater = worldState.updater();
final EvmAccount beneficiary = updater.getOrCreate(miningBeneficiary);
final MutableAccount beneficiary = updater.getOrCreate(miningBeneficiary);

beneficiary.getMutable().incrementBalance(coinbaseReward);
beneficiary.incrementBalance(coinbaseReward);
for (final BlockHeader ommerHeader : ommers) {
if (ommerHeader.getNumber() - header.getNumber() > MAX_GENERATION) {
LOG.trace(
Expand All @@ -479,12 +479,12 @@ boolean rewardBeneficiary(
return false;
}

final EvmAccount ommerCoinbase = updater.getOrCreate(ommerHeader.getCoinbase());
final MutableAccount ommerCoinbase = updater.getOrCreate(ommerHeader.getCoinbase());
final Wei ommerReward =
protocolSpec
.getBlockProcessor()
.getOmmerReward(blockReward, header.getNumber(), ommerHeader.getNumber());
ommerCoinbase.getMutable().incrementBalance(ommerReward);
ommerCoinbase.incrementBalance(ommerReward);
}

updater.commit();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public class EntriesFromIntegrationTest {
public void shouldCollectStateEntries() {
final MutableWorldState worldState = createInMemoryWorldStateArchive().getMutable();
final WorldUpdater updater = worldState.updater();
MutableAccount account = updater.getOrCreate(Address.fromHexString("0x56")).getMutable();
MutableAccount account = updater.getOrCreate(Address.fromHexString("0x56"));
final Map<Bytes32, AccountStorageEntry> expectedValues = new TreeMap<>();
final int nodeCount = 100_000;
final Random random = new Random(42989428249L);
Expand All @@ -49,19 +49,19 @@ public void shouldCollectStateEntries() {
addExpectedValue(
account,
expectedValues,
UInt256.valueOf(Math.abs(random.nextLong())),
UInt256.valueOf(i * 10 + 1));
UInt256.valueOf(random.nextLong(Long.MAX_VALUE)),
UInt256.valueOf(i * 10 + 1L));
}
updater.commit();

// Add some changes on top that AbstractWorldUpdater.UpdateTrackingAccount will have to merge.
account = worldState.updater().getOrCreate(Address.fromHexString("0x56")).getMutable();
account = worldState.updater().getOrCreate(Address.fromHexString("0x56"));
for (int i = 0; i <= nodeCount; i++) {
addExpectedValue(
account,
expectedValues,
UInt256.valueOf(Math.abs(random.nextLong())),
UInt256.valueOf(i * 10 + 1));
UInt256.valueOf(random.nextLong(Long.MAX_VALUE)),
UInt256.valueOf(i * 10 + 1L));
}

final Map<Bytes32, AccountStorageEntry> values =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ private MessageFrame createMessageFrame(final Address address) {
.blockHeader(blockHeader)
.blockchain(blockchain)
.build();
worldStateUpdater.getOrCreate(address).getMutable().setBalance(Wei.of(1));
worldStateUpdater.getOrCreate(address).setBalance(Wei.of(1));
worldStateUpdater.commit();

return benchmarkFrame;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
import org.hyperledger.besu.ethereum.rlp.RLPOutput;
import org.hyperledger.besu.evm.ModificationNotAllowedException;
import org.hyperledger.besu.evm.account.AccountStorageEntry;
import org.hyperledger.besu.evm.account.EvmAccount;
import org.hyperledger.besu.evm.account.MutableAccount;
import org.hyperledger.besu.evm.worldstate.UpdateTrackingAccount;

Expand All @@ -41,9 +40,9 @@
import org.apache.tuweni.bytes.Bytes32;
import org.apache.tuweni.units.bigints.UInt256;

public class BonsaiAccount implements MutableAccount, EvmAccount, AccountValue {
public class BonsaiAccount implements MutableAccount, AccountValue {
private final BonsaiWorldView context;
private final boolean mutable;
private boolean mutable;

private final Address address;
private final Hash addressHash;
Expand Down Expand Up @@ -163,7 +162,7 @@ public long getNonce() {
@Override
public void setNonce(final long value) {
if (!mutable) {
throw new UnsupportedOperationException("Account is immutable");
throw new ModificationNotAllowedException();
}
nonce = value;
}
Expand All @@ -176,7 +175,7 @@ public Wei getBalance() {
@Override
public void setBalance(final Wei value) {
if (!mutable) {
throw new UnsupportedOperationException("Account is immutable");
throw new ModificationNotAllowedException();
}
balance = value;
}
Expand All @@ -192,7 +191,7 @@ public Bytes getCode() {
@Override
public void setCode(final Bytes code) {
if (!mutable) {
throw new UnsupportedOperationException("Account is immutable");
throw new ModificationNotAllowedException();
}
this.code = code;
if (code == null || code.isEmpty()) {
Expand Down Expand Up @@ -244,7 +243,7 @@ public void writeTo(final RLPOutput out) {
@Override
public void setStorageValue(final UInt256 key, final UInt256 value) {
if (!mutable) {
throw new UnsupportedOperationException("Account is immutable");
throw new ModificationNotAllowedException();
}
updatedStorage.put(key, value);
}
Expand All @@ -259,27 +258,23 @@ public Map<UInt256, UInt256> getUpdatedStorage() {
return updatedStorage;
}

@Override
public MutableAccount getMutable() throws ModificationNotAllowedException {
if (mutable) {
return this;
} else {
throw new ModificationNotAllowedException();
}
}

@Override
public Hash getStorageRoot() {
return storageRoot;
}

public void setStorageRoot(final Hash storageRoot) {
if (!mutable) {
throw new UnsupportedOperationException("Account is immutable");
throw new ModificationNotAllowedException();
}
this.storageRoot = storageRoot;
}

@Override
public void becomeImmutable() {
mutable = false;
}

@Override
public String toString() {
return "AccountState{"
Expand Down
Loading