@@ -4,7 +4,6 @@ cimport libcmt
44
55cdef class Rollup:
66 cdef libcmt.cmt_rollup_t _c_rollup[1 ]
7- cdef libcmt.cmt_abi_address_t * app_address
87
98 def __cinit__ (self ):
109 libcmt.cmt_rollup_init(self ._c_rollup)
@@ -29,7 +28,6 @@ cdef class Rollup:
2928 err = libcmt.cmt_rollup_read_advance_state(self ._c_rollup, input )
3029 if err != 0 :
3130 raise Exception (f" Failed to read advance ({err})" )
32- self .app_address = & input [0 ].app_contract
3331 payload = input [0 ].payload.data[:input [0 ].payload.length]
3432 app_contract = input [0 ].app_contract.data[:libcmt.CMT_ABI_ADDRESS_LENGTH]
3533 msg_sender = input [0 ].msg_sender.data[:libcmt.CMT_ABI_ADDRESS_LENGTH]
@@ -106,3 +104,38 @@ cdef class Rollup:
106104 err = libcmt.cmt_rollup_emit_exception(self ._c_rollup, payload_ptr)
107105 if err != 0 :
108106 raise Exception (f" Failed to emit exception ({err})" )
107+
108+ cpdef load_merkle(self , str merkle_path):
109+ b_merkle_path = merkle_path.encode(' UTF-8' )
110+ cdef char * c_merkle_path = b_merkle_path
111+ err = libcmt.cmt_rollup_load_merkle(self ._c_rollup, c_merkle_path)
112+ if err != 0 :
113+ raise Exception (f" Failed to load merkle ({err})" )
114+
115+ cpdef save_merkle(self , str merkle_path):
116+ b_merkle_path = merkle_path.encode(' UTF-8' )
117+ cdef char * c_merkle_path = b_merkle_path
118+ err = libcmt.cmt_rollup_save_merkle(self ._c_rollup, c_merkle_path)
119+ if err != 0 :
120+ raise Exception (f" Failed to save merkle ({err})" )
121+
122+ cpdef reset_merkle(self ):
123+ err = libcmt.cmt_rollup_reset_merkle(self ._c_rollup)
124+ if err != 0 :
125+ raise Exception (f" Failed to reset merkle ({err})" )
126+
127+ cpdef object gio_request(self , int domain, bytes id ):
128+ cdef libcmt.cmt_gio_t req_ptr[1 ]
129+ req_ptr[0 ].domain = domain
130+ req_ptr[0 ].id = < void * > id
131+ req_ptr[0 ].id_length = len (id )
132+ err = libcmt.cmt_gio_request(self ._c_rollup, req_ptr)
133+ if err != 0 :
134+ raise Exception (f" Failed to request gio ({err})" )
135+ response = (< uint8_t * > req_ptr[0 ].response_data)[:req_ptr[0 ].response_data_length]
136+ ret = {
137+ " response_data_length" : req_ptr[0 ].response_data_length,
138+ " response_data" : response,
139+ " response_code" : req_ptr[0 ].response_code
140+ }
141+ return ret
0 commit comments