A method for executing a smart contract, comprising: after deploying bytecodes of the smart contract, respectively starting, by a first blockchain node and a second blockchain node, to compile the bytecodes of the smart contract into machine codes through a Just-In-Time, JIT, Compiler and store the machine codes; when executing the deployed smart contract, executing (S623a), by the first blockchain node, the machine codes if the machine codes of the smart contract are locally stored; determining, by the second blockchain node, whether execution results of the machine codes and the bytecodes are consistent by: comparing test results of the machine codes and the bytecodes in at least one verification scenario, wherein consistency of the test results indicates that the execution results of the machine codes and the bytecodes are consistent; and/or performing formal verification for the machine codes and the bytecodes, wherein consistency of verification results indicates that the execution results of the machine codes and the bytecodes are consistent; and when executing the deployed smart contract, performing (S623b), by the second blockchain node, interpretation execution for the bytecodes, in response to determining that the execution results of the machine codes and the bytecodes of the smart contract are consistent, if the machine codes of the smart contract are not locally stored. after deploying bytecodes of the smart contract, respectively starting, by a first blockchain node and a second blockchain node, to compile the bytecodes of the smart contract into machine codes through a Just-In-Time, JIT, Compiler and store the machine codes; when executing the deployed smart contract, executing (S623a), by the first blockchain node, the machine codes if the machine codes of the smart contract are locally stored; determining, by the second blockchain node, whether execution results of the machine codes and the bytecodes are consistent by: comparing test results of the machine codes and the bytecodes in at least one verification scenario, wherein consistency of the test results indicates that the execution results of the machine codes and the bytecodes are consistent; and/or performing formal verification for the machine codes and the bytecodes, wherein consistency of verification results indicates that the execution results of the machine codes and the bytecodes are consistent; and comparing test results of the machine codes and the bytecodes in at least one verification scenario, wherein consistency of the test results indicates that the execution results of the machine codes and the bytecodes are consistent; and/or performing formal verification for the machine codes and the bytecodes, wherein consistency of verification results indicates that the execution results of the machine codes and the bytecodes are consistent; and when executing the deployed smart contract, performing (S623b), by the second blockchain node, interpretation execution for the bytecodes, in response to determining that the execution results of the machine codes and the bytecodes of the smart contract are consistent, if the machine codes of the smart contract are not locally stored.