def create_code_params_script_builder(param_list: [], builder: ParamsBuilder): length = len(param_list) for j in range(length): i = length - 1 - j if isinstance(param_list[i], bytearray) or isinstance(param_list[i], bytes): builder.emit_push_byte_array(param_list[i]) elif isinstance(param_list[i], str): builder.emit_push_byte_array(bytes(param_list[i].encode())) elif isinstance(param_list[i], int): builder.emit_push_integer(param_list[i]) elif isinstance(param_list[i], bool): builder.emit_push_bool(param_list[i]) elif isinstance(param_list[i], dict): builder.emit_push_byte_array(BuildParams.get_map_bytes(dict(param_list[i]))) elif isinstance(param_list[i], list): BuildParams.create_code_params_script_builder(param_list[i], builder) builder.emit_push_integer(len(param_list[i])) builder.emit(PACK) return builder.to_array()
def push_param(param, builder: ParamsBuilder): if isinstance(param, bytearray) or isinstance(param, bytes): builder.emit_push_bytearray(param) elif isinstance(param, str): builder.emit_push_bytearray(bytes(param.encode())) elif isinstance(param, bool): builder.emit_push_bool(param) elif isinstance(param, int): builder.emit_push_int(param) elif isinstance(param, dict): # builder.emit_push_byte_array(BuildParams.get_map_bytes(dict(param))) BuildParams.push_map(param, builder) elif isinstance(param, list): BuildParams.create_code_params_script_builder(param, builder) builder.emit_push_int(len(param)) builder.emit(PACK) elif isinstance(param, Struct): BuildParams.push_struct(param, builder) else: raise SDKException( ErrorCode.other_error('parameter type is error'))
def get_map_bytes(param_dict: dict): builder = ParamsBuilder() builder.emit(BuildParams.Type.dict_type.value) builder.emit(utils.big_int_to_neo_bytearray(len(param_dict))) for key, value in param_dict.items(): builder.emit(BuildParams.Type.bytearray_type.value) builder.emit_push_bytearray(str(key).encode()) if isinstance(value, bytearray) or isinstance(value, bytes): builder.emit(BuildParams.Type.bytearray_type.value) builder.emit_push_bytearray(bytearray(value)) elif isinstance(value, str): builder.emit(BuildParams.Type.bytearray_type.value) builder.emit_push_bytearray(value.encode()) elif isinstance(value, bool): builder.emit(BuildParams.Type.bool_type.value) builder.emit_push_bool(value) elif isinstance(value, int): builder.emit(BuildParams.Type.int_type.value) builder.emit_push_int(int(value)) else: raise Exception("param error") return builder.to_bytes()