|
| 1 | +// evmone: Fast Ethereum Virtual Machine implementation |
| 2 | +// Copyright 2023 The evmone Authors. |
| 3 | +// SPDX-License-Identifier: Apache-2.0 |
| 4 | + |
| 5 | +#include <gtest/gtest.h> |
| 6 | +#include <test/state/host.hpp> |
| 7 | + |
| 8 | +using namespace evmc; |
| 9 | +using namespace evmc::literals; |
| 10 | +inline constexpr auto addr = evmone::state::compute_new_account_address; |
| 11 | + |
| 12 | +inline constexpr uint64_t nonces[] = {0, 1, 0x80, 0xffffffffffffffff}; |
| 13 | +inline constexpr address senders[] = { |
| 14 | + 0x00_address, 0x01_address, 0x8000000000000000000000000000000000000000_address}; |
| 15 | +inline const bytes init_codes[] = {bytes{}, bytes{0xFE}}; |
| 16 | +inline constexpr bytes32 salts[] = { |
| 17 | + 0x00_bytes32, 0xe75fb554e433e03763a1560646ee22dcb74e5274b34c5ad644e7c0f619a7e1d0_bytes32}; |
| 18 | + |
| 19 | +TEST(state_new_account_address, create) |
| 20 | +{ |
| 21 | + for (const auto& ic : init_codes) // Init-code doesn't affect CREATE. |
| 22 | + { |
| 23 | + auto s = senders[0]; |
| 24 | + EXPECT_EQ(addr(s, nonces[0], {}, ic), 0xbd770416a3345f91e4b34576cb804a576fa48eb1_address); |
| 25 | + EXPECT_EQ(addr(s, nonces[3], {}, ic), 0x1262d73ea59d3a661bf8751d16cf1a5377149e75_address); |
| 26 | + |
| 27 | + s = senders[1]; |
| 28 | + EXPECT_EQ(addr(s, nonces[0], {}, ic), 0x522b3294e6d06aa25ad0f1b8891242e335d3b459_address); |
| 29 | + EXPECT_EQ(addr(s, nonces[1], {}, ic), 0x535b3d7a252fa034ed71f0c53ec0c6f784cb64e1_address); |
| 30 | + EXPECT_EQ(addr(s, nonces[2], {}, ic), 0x09c1ef8f55c61b94e8b92a55d0891d408a991e18_address); |
| 31 | + EXPECT_EQ(addr(s, nonces[3], {}, ic), 0x001567239734aeadea21023c2a7c0d9bb9ae4af9_address); |
| 32 | + |
| 33 | + s = senders[2]; |
| 34 | + EXPECT_EQ(addr(s, nonces[0], {}, ic), 0x3cb1045aee4a06f522ea2b69e4f3d21ed3c135d1_address); |
| 35 | + EXPECT_EQ(addr(s, nonces[3], {}, ic), 0xe1aa03e4a7b6991d69aff8ece53ceafdf347082e_address); |
| 36 | + |
| 37 | + const auto beacon_deposit_address = |
| 38 | + addr(0xb20a608c624Ca5003905aA834De7156C68b2E1d0_address, 0, {}, ic); |
| 39 | + EXPECT_EQ(beacon_deposit_address, 0x00000000219ab540356cbb839cbe05303d7705fa_address); |
| 40 | + } |
| 41 | +} |
| 42 | + |
| 43 | +TEST(state_new_account_address, create2) |
| 44 | +{ |
| 45 | + for (const auto n : nonces) // Nonce doesn't affect CREATE2. |
| 46 | + { |
| 47 | + EXPECT_EQ(addr(senders[0], n, salts[0], init_codes[0]), |
| 48 | + 0xe33c0c7f7df4809055c3eba6c09cfe4baf1bd9e0_address); |
| 49 | + |
| 50 | + EXPECT_EQ(addr(senders[2], n, salts[0], init_codes[1]), |
| 51 | + 0x3517dea701ed18fc4a99dc111c5946e1f1541dad_address); |
| 52 | + |
| 53 | + EXPECT_EQ(addr(senders[1], n, salts[1], init_codes[0]), |
| 54 | + 0x7be1c1cb3b8298f21c56add66defce03e2d32604_address); |
| 55 | + |
| 56 | + EXPECT_EQ(addr(senders[2], n, salts[1], init_codes[1]), |
| 57 | + 0x8f459e65c8f00a9c0c0493de7b0c61c3c27f7384_address); |
| 58 | + } |
| 59 | +} |
0 commit comments