SolidityModifier CreateAddressGuard() { //Initialize the modifier using the generated name SolidityModifier addressGuard = new SolidityModifier(ConversionTemplates.AddressGuardModifierName(GetElementCallName())); addressGuard.AddParameters(processConverter.GetIdentifiersAsParameters()); //Address is force assigned if (userTaskElement.Assignee.Address != null) { SolidityStatement requireStatement = new SolidityStatement($"require(msg.sender=={GetAssigneeAddress()})"); addressGuard.AddToBody(requireStatement); } //Address is not force assigned, it will be assigned to the first caller of the first task method containing this assignee else if (userTaskElement.Assignee.Name != null) { var addressPosition = $"{ConverterConfig.ADDRESS_MAPPING_VAR_NAME}[\"{userTaskElement.Assignee.Name}\"]"; var ifElseBlock = new SolidityIfElse(); //Assigns the address, if address has not been been yet assigned to the assignee ifElseBlock.AddConditionBlock($"{addressPosition} == address(0x0)", new SolidityStatement($"{addressPosition} = msg.sender")); //Checks whether the sender has the required address SolidityStatement requireStatement = new SolidityStatement($"require(msg.sender=={addressPosition})"); addressGuard.AddToBody(ifElseBlock); addressGuard.AddToBody(requireStatement); } return(addressGuard); }
SolidityModifier CreateStateGuard() { SolidityModifier stateGuard = new SolidityModifier("is" + GetTaskName() + "State"); SolidityStatement requireStatement = new SolidityStatement( "require(" + ProcessConverter.IS_STATE_ACTIVE_FUNCTION_NAME + "(\"" + GetTaskName() + "\")==true)"); stateGuard.AddToBody(requireStatement); return(stateGuard); }
public void EmptyModifierTest() { SolidityModifier modifier = new SolidityModifier("isEnabled"); var actual = modifier.ToString(); var expected = "modifier isEnabled{\n" + "\t_;\n}\n"; Assert.Equal(expected, actual); }
public void ModifierWithBodyTest() { SolidityModifier modifier = new SolidityModifier("isEnabled"); modifier.AddToBody(new SolidityStatement("a = b")); var actual = modifier.ToString(); var expected = "modifier isEnabled{\n" + "\ta = b;\n" + "\t_;\n}\n"; Assert.Equal(expected, actual); }
public override void ConvertElementLogic() { /* * if (IsAddressGuardRequired()) * addressGuard = CreateAddressGuard(); */ stateGuard = CreateStateGuard(); mainFunction = CreateElementMainFunction(); if (userTaskElement.InstanceType != InstanceType.Single) { multiInstanceCounter = CreateMultiInstanceCounterDefinition(); } }
SolidityModifier CreateStateGuard() { SolidityModifier stateGuard = new SolidityModifier(ConversionTemplates.StateGuardModifierName(GetElementCallName())); stateGuard.AddParameters(processConverter.GetIdentifiersAsParameters()); var activeStateFunctionName = ConversionTemplates.ActiveStatesFunctionName(processConverter.Id); var callParameters = processConverter.GetIdentifierNames(); if (callParameters.Length > 0) { callParameters += ","; } callParameters += $"\"{GetElementCallName()}\""; SolidityStatement requireStatement = new SolidityStatement($"require({activeStateFunctionName}({callParameters}) == true)"); stateGuard.AddToBody(requireStatement); return(stateGuard); }
SolidityModifier CreateAddressGuard() { SolidityModifier addressGuard = new SolidityModifier("is" + GetTaskName() + "Authorized"); if (userTask.Assignee.Address != null) { SolidityStatement requireStatement = new SolidityStatement("require(msg.sender==" + GetAssigneeAddress() + ")"); addressGuard.AddToBody(requireStatement); } else if (userTask.Assignee.Name != null) { var addressPosition = Helpers.ADDRESS_MAPPING_VAR_NAME + "[\"" + userTask.Assignee.Name + "\"]"; var ifElseBlock = new SolidityIfElse(); ifElseBlock.AddConditionBlock(addressPosition + " == address(0x0)", new SolidityStatement(addressPosition + " = msg.sender")); SolidityStatement requireStatement = new SolidityStatement("require(msg.sender==" + addressPosition + ")"); addressGuard.AddToBody(ifElseBlock); addressGuard.AddToBody(requireStatement); } return(addressGuard); }