public string GenerateClass(FunctionABI functionABI)
        {
            var header = "";

            if (_functionABIModel.IsMultipleOutput(functionABI))
            {
                header = $@"{SpaceUtils.OneTab}[Function(""{functionABI.Name}"", typeof({_functionOutputDTOModel.GetFunctionOutputTypeName(functionABI)}))]";
            }

            if (_functionABIModel.IsSingleOutput(functionABI))
            {
                header = $@"{SpaceUtils.OneTab}[Function(""{functionABI.Name}"", ""{_functionABIModel.GetSingleAbiReturnType(functionABI)}""))]";
            }

            if (_functionABIModel.HasNoReturn(functionABI))
            {
                header = $@"{SpaceUtils.OneTab}[Function(""{functionABI.Name}""]";
            }

            return($@"{header}
{SpaceUtils.OneTab}public class {_functionCQSMessageModel.GetFunctionMessageTypeName(functionABI)}:ContractMessage
{SpaceUtils.OneTab}{{
{_parameterABIFunctionDTOTemplate.GenerateAllProperties(functionABI.InputParameters)}
{SpaceUtils.OneTab}}}");
        }
        public string GenerateClass(ConstructorABI constructorABI, string byteCode, string contractName)
        {
            var typeName = _contractDeploymentCQSMessageModel.GetContractDeploymentMessageTypeName(contractName);

            return
                ($@"{SpaceUtils.OneTab}public class {typeName}:ContractDeploymentMessage
{SpaceUtils.OneTab}{{
{SpaceUtils.TwoTabs}
{SpaceUtils.TwoTabs}public static string BYTECODE = ""{byteCode}"";
{SpaceUtils.TwoTabs}
{SpaceUtils.TwoTabs}public {typeName}():base(BYTECODE)
{SpaceUtils.TwoTabs}{{
{SpaceUtils.TwoTabs}}}
{SpaceUtils.TwoTabs}
{SpaceUtils.TwoTabs}public {typeName}(string byteCode):base(byteCode)
{SpaceUtils.TwoTabs}{{
{SpaceUtils.TwoTabs}}}
{SpaceUtils.TwoTabs}
{_parameterABIFunctionDTOTemplate.GenerateAllProperties(constructorABI.InputParameters)}
{SpaceUtils.OneTab}}}");
        }