From 29fac4caeb815a9db4235af9ca60b082d7a40bce Mon Sep 17 00:00:00 2001 From: wborgeaud Date: Thu, 18 May 2023 14:37:54 +0200 Subject: [PATCH] Check balance in create (#1046) --- evm/src/cpu/kernel/asm/core/create.asm | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/evm/src/cpu/kernel/asm/core/create.asm b/evm/src/cpu/kernel/asm/core/create.asm index b5079f3c..afea0b07 100644 --- a/evm/src/cpu/kernel/asm/core/create.asm +++ b/evm/src/cpu/kernel/asm/core/create.asm @@ -71,7 +71,8 @@ global create_common: DUP1 %insert_accessed_addresses_no_return // TODO: Check call stack depth. - // TODO: Check balance of caller first. + // stack: address, value, code_offset, code_len, kexit_info + DUP2 %selfbalance LT %jumpi(create_insufficient_balance) // Increment the sender's nonce. %address %increment_nonce @@ -86,7 +87,7 @@ global create_common: // stack: status, address, value, code_offset, code_len, kexit_info %jumpi(fault_exception) // stack: address, value, code_offset, code_len, kexit_info - DUP2 DUP2 %address %transfer_eth %jumpi(fault_exception) + DUP2 DUP2 %address %transfer_eth %jumpi(panic) // We checked the balance above, so this should never happen. DUP2 DUP2 %address %journal_add_balance_transfer // Add journal entry for the balance transfer. %create_context @@ -186,6 +187,11 @@ after_constructor_failed: %stack (success, leftover_gas, new_ctx, address, kexit_info) -> (leftover_gas, success, address, kexit_info) %jump(after_constructor_contd) +create_insufficient_balance: + // stack: address, value, code_offset, code_len, kexit_info + %stack (address, value, code_offset, code_len, kexit_info) -> (kexit_info, 0) + EXIT_KERNEL + %macro set_codehash %stack (addr, codehash) -> (addr, codehash, %%after) %jump(set_codehash)