diff --git a/src/boilerplate/orchestration/javascript/raw/boilerplate-generator.ts b/src/boilerplate/orchestration/javascript/raw/boilerplate-generator.ts index 52b28fb5..507b2a9e 100644 --- a/src/boilerplate/orchestration/javascript/raw/boilerplate-generator.ts +++ b/src/boilerplate/orchestration/javascript/raw/boilerplate-generator.ts @@ -114,6 +114,7 @@ class BoilerplateGenerator { ${stateName}_newOwnerPublicKey = ${newOwnerStatment} ${stateVarIds.join('\n')} \n + ${structProperties.map(sp => `let ${stateName}_${sp}_newCommitmentValue = generalise(0);\n`).join('')} `]; return [` \n\n// read preimage for incremented state diff --git a/src/codeGenerators/orchestration/nodejs/toOrchestration.ts b/src/codeGenerators/orchestration/nodejs/toOrchestration.ts index 39f83510..6d163a2a 100644 --- a/src/codeGenerators/orchestration/nodejs/toOrchestration.ts +++ b/src/codeGenerators/orchestration/nodejs/toOrchestration.ts @@ -126,14 +126,16 @@ export default function codeGenerator(node: any, options: any = {}): any { if (node.incrementsSecretState && (node.interactsWithSecret || node.expression?.internalFunctionInteractsWithSecret)){ let privateStateName = node.privateStateName.replace(/\./g, '_'); - let increments = codeGenerator(node.expression.rightHandSide); - if (typeof node.increments === 'object' && node.increments !== null) { - if (node.expression.leftHandSide.nodeType === 'MemberAccess'){ - let propName = node.expression.leftHandSide.memberName; - return `\n${privateStateName}_newCommitmentValue = generalise(${node.increments[propName]});\n`; - } - }; - return `\n${privateStateName}_newCommitmentValue = generalise(parseInt(${privateStateName}_newCommitmentValue.integer, 10) + ${increments});\n`; + let increments; + if (node.expression.operator === '+='){ + increments = codeGenerator(node.expression.rightHandSide); + return `\n${privateStateName}_newCommitmentValue = generalise(parseInt(${privateStateName}_newCommitmentValue.integer, 10) + ${increments});\n`; + } + if (node.expression.operator === '='){ + increments = codeGenerator(node.expression.rightHandSide); + increments = increments.replace(new RegExp(privateStateName, 'g'), `${privateStateName}_newCommitmentValue`); + return `\n${privateStateName}_newCommitmentValue = generalise(${increments});\n`; + } } if (!node.interactsWithSecret) diff --git a/test/contracts/KnownUnknown.zol b/test/contracts/KnownUnknown.zol index 8f399cec..65975229 100644 --- a/test/contracts/KnownUnknown.zol +++ b/test/contracts/KnownUnknown.zol @@ -13,11 +13,11 @@ contract Assign { function add( uint256 value ) public { - unknown b += value +a; + unknown b = b + value +a; unknown x.prop1 += value + a; unknown x.prop2 += value; unknown b += value; - unknown x.prop1 += value; + unknown x.prop1 += a; a+= value; }