examples: Use evmc_bytes32 in the Host example

This commit is contained in:
Paweł Bylica 2018-09-07 00:08:13 +02:00
parent 60cfde98af
commit 1ab90eb80a
No known key found for this signature in database
GPG Key ID: 7A0C037434FE77EF
2 changed files with 14 additions and 16 deletions

View File

@ -18,13 +18,13 @@ bool operator<(const evmc_address& a, const evmc_address& b)
return std::memcmp(a.bytes, b.bytes, sizeof(a)) < 0; return std::memcmp(a.bytes, b.bytes, sizeof(a)) < 0;
} }
/// The comparator for std::map<evmc_uint256be, ...>. /// The comparator for std::map<evmc_bytes32, ...>.
bool operator<(const evmc_uint256be& a, const evmc_uint256be& b) bool operator<(const evmc_bytes32& a, const evmc_bytes32& b)
{ {
return std::memcmp(a.bytes, b.bytes, sizeof(a)) < 0; return std::memcmp(a.bytes, b.bytes, sizeof(a)) < 0;
} }
bool operator==(const evmc_uint256be& a, const evmc_uint256be& b) bool operator==(const evmc_bytes32& a, const evmc_bytes32& b)
{ {
return std::memcmp(a.bytes, b.bytes, sizeof(a)) == 0; return std::memcmp(a.bytes, b.bytes, sizeof(a)) == 0;
} }
@ -33,8 +33,8 @@ struct account
{ {
evmc_uint256be balance = {}; evmc_uint256be balance = {};
size_t code_size = 0; size_t code_size = 0;
evmc_uint256be code_hash = {}; evmc_bytes32 code_hash = {};
std::map<evmc_uint256be, evmc_uint256be> storage; std::map<evmc_bytes32, evmc_bytes32> storage;
}; };
struct example_host_context : evmc_context struct example_host_context : evmc_context
@ -52,10 +52,10 @@ static bool account_exists(evmc_context* context, const evmc_address* address)
return host->accounts.find(*address) != host->accounts.end(); return host->accounts.find(*address) != host->accounts.end();
} }
static bool get_storage(evmc_uint256be* result, static bool get_storage(evmc_bytes32* result,
evmc_context* context, evmc_context* context,
const evmc_address* address, const evmc_address* address,
const evmc_uint256be* key) const evmc_bytes32* key)
{ {
example_host_context* host = static_cast<example_host_context*>(context); example_host_context* host = static_cast<example_host_context*>(context);
auto it = host->accounts.find(*address); auto it = host->accounts.find(*address);
@ -69,8 +69,8 @@ static bool get_storage(evmc_uint256be* result,
static enum evmc_storage_status set_storage(evmc_context* context, static enum evmc_storage_status set_storage(evmc_context* context,
const evmc_address* address, const evmc_address* address,
const evmc_uint256be* key, const evmc_bytes32* key,
const evmc_uint256be* value) const evmc_bytes32* value)
{ {
example_host_context* host = static_cast<example_host_context*>(context); example_host_context* host = static_cast<example_host_context*>(context);
auto accountIt = host->accounts.find(*address); auto accountIt = host->accounts.find(*address);
@ -118,9 +118,7 @@ static bool get_code_size(size_t* result, evmc_context* context, const evmc_addr
return false; return false;
} }
static bool get_code_hash(evmc_uint256be* result, static bool get_code_hash(evmc_bytes32* result, evmc_context* context, const evmc_address* address)
evmc_context* context,
const evmc_address* address)
{ {
example_host_context* host = static_cast<example_host_context*>(context); example_host_context* host = static_cast<example_host_context*>(context);
auto it = host->accounts.find(*address); auto it = host->accounts.find(*address);
@ -171,7 +169,7 @@ static evmc_tx_context get_tx_context(evmc_context* context)
return result; return result;
} }
static bool get_block_hash(evmc_uint256be* result, evmc_context* context, int64_t number) static bool get_block_hash(evmc_bytes32* result, evmc_context* context, int64_t number)
{ {
example_host_context* host = static_cast<example_host_context*>(context); example_host_context* host = static_cast<example_host_context*>(context);
int64_t current_block_number = host->tx_context.block_number; int64_t current_block_number = host->tx_context.block_number;
@ -179,7 +177,7 @@ static bool get_block_hash(evmc_uint256be* result, evmc_context* context, int64_
if (number >= current_block_number || number < current_block_number - 256) if (number >= current_block_number || number < current_block_number - 256)
return false; return false;
evmc_uint256be example_block_hash{}; evmc_bytes32 example_block_hash{};
*result = example_block_hash; *result = example_block_hash;
return true; return true;
} }
@ -188,7 +186,7 @@ static void emit_log(evmc_context* context,
const evmc_address* address, const evmc_address* address,
const uint8_t* data, const uint8_t* data,
size_t data_size, size_t data_size,
const evmc_uint256be topics[], const evmc_bytes32 topics[],
size_t topics_count) size_t topics_count)
{ {
(void)context; (void)context;

View File

@ -12,7 +12,7 @@
// Compile time checks: // Compile time checks:
static_assert(sizeof(evmc_uint256be) == 32, "evmc_uint256be is too big"); static_assert(sizeof(evmc_bytes32) == 32, "evmc_bytes32 is too big");
static_assert(sizeof(evmc_address) == 20, "evmc_address is too big"); static_assert(sizeof(evmc_address) == 20, "evmc_address is too big");
static_assert(sizeof(evmc_result) <= 64, "evmc_result does not fit cache line"); static_assert(sizeof(evmc_result) <= 64, "evmc_result does not fit cache line");
static_assert(sizeof(evmc_instance) <= 64, "evmc_instance does not fit cache line"); static_assert(sizeof(evmc_instance) <= 64, "evmc_instance does not fit cache line");