CuEVM
python_utils.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <Python.h>
4 
5 #include <CuEVM/evm.cuh>
7 #include <unordered_set>
8 
9 #define GET_STR_FROM_DICT_WITH_DEFAULT(dict, key, default_value) \
10  (PyDict_GetItemString(dict, key) ? PyUnicode_AsUTF8(PyDict_GetItemString(dict, key)) : default_value)
11 namespace DefaultBlock {
12 constexpr char BaseFee[] = "0x0a";
13 constexpr char CoinBase[] = "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba";
14 constexpr char Difficulty[] = "0x020000";
15 constexpr char BlockNumber[] = "0x01";
16 constexpr char GasLimit[] = "0x05f5e100";
17 constexpr char TimeStamp[] = "0x03e8";
18 constexpr char PreviousHash[] = "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6";
19 } // namespace DefaultBlock
20 
21 void copy_dict_recursive(PyObject* read_root, PyObject* write_root);
22 static PyObject* print_dict(PyObject* self, PyObject* args);
23 
24 namespace python_utils {
25 
26 CuEVM::block_info_t* getBlockDataFromPyObject(PyObject* data);
27 
28 void print_dict_recursive(PyObject* dict, int indent_level);
29 
30 CuEVM::evm_transaction_t* getTransactionDataFromListofPyObject(PyObject* read_roots);
31 
32 CuEVM::state_t* getStateDataFromPyObject(PyObject* data);
33 void get_evm_instances_from_PyObject(CuEVM::evm_instance_t*& evm_instances, PyObject* read_roots,
34  uint32_t& num_instances);
35 
36 std::unordered_set<int> const bug_opcodes = {OP_ADD, OP_MUL, OP_SUB, OP_MOD, OP_EXP, OP_SELFDESTRUCT, OP_ORIGIN};
37 std::unordered_set<int> const call_opcodes = {OP_CALL, OP_CALLCODE, OP_DELEGATECALL}; // ignore static call for now
38 std::unordered_set<int> const comparison_opcodes = {OP_LT, OP_GT, OP_SLT, OP_SGT, OP_EQ};
39 std::unordered_set<int> const revert_opcodes = {OP_REVERT, OP_INVALID};
40 // OP_SSTORE
41 // OP_JUMPI
42 // OP_SELFDESTRUCT
43 
44 PyObject* pyobject_from_serialized_state(CuEVM::serialized_worldstate_data* serialized_worldstate_instance);
45 
51 PyObject* pyobject_from_evm_instances(CuEVM::evm_instance_t* instances, uint32_t num_instances);
52 } // namespace python_utils
Definition: python_utils.h:11
constexpr char TimeStamp[]
Definition: python_utils.h:17
constexpr char BlockNumber[]
Definition: python_utils.h:15
constexpr char BaseFee[]
Definition: python_utils.h:12
constexpr char GasLimit[]
Definition: python_utils.h:16
constexpr char CoinBase[]
Definition: python_utils.h:13
constexpr char PreviousHash[]
Definition: python_utils.h:18
constexpr char Difficulty[]
Definition: python_utils.h:14
Definition: python_utils.h:24
void print_dict_recursive(PyObject *dict, int indent_level)
Definition: python_utils.cu:34
std::unordered_set< int > const call_opcodes
Definition: python_utils.h:37
std::unordered_set< int > const revert_opcodes
Definition: python_utils.h:39
std::unordered_set< int > const bug_opcodes
Definition: python_utils.h:36
PyObject * pyobject_from_evm_instances(CuEVM::evm_instance_t *instances, uint32_t num_instances)
Definition: python_utils.cu:462
CuEVM::block_info_t * getBlockDataFromPyObject(PyObject *data)
Definition: python_utils.cu:9
void get_evm_instances_from_PyObject(CuEVM::evm_instance_t *&evm_instances, PyObject *read_roots, uint32_t &num_instances)
Definition: python_utils.cu:304
CuEVM::state_t * getStateDataFromPyObject(PyObject *data)
Definition: python_utils.cu:223
PyObject * pyobject_from_serialized_state(CuEVM::serialized_worldstate_data *serialized_worldstate_instance)
Definition: python_utils.cu:428
std::unordered_set< int > const comparison_opcodes
Definition: python_utils.h:38
CuEVM::evm_transaction_t * getTransactionDataFromListofPyObject(PyObject *read_roots)
Definition: python_utils.cu:97
void copy_dict_recursive(PyObject *read_root, PyObject *write_root)