Overview
There are several zappify errors when using the struct constructor syntax.
Tasks
Describe which contracts are affected
// SPDX-License-Identifier: CC0
pragma solidity ^0.8.0;
contract Assign {
secret uint256 private a;
secret uint256 private b;
struct MyStruct {
uint256 prop1;
bool prop2;
}
MyStruct public x;
function add( secret MyStruct memory value) public {
MyStruct memory localStruct = MyStruct({prop1: 7, prop2: false});
known a += value.prop1 + localStruct.prop1;
x.prop2 = true;
}
function remove( secret MyStruct memory value) public {
add(value);
known b += value.prop1;
x.prop2 = true;
}
}
Describe the bug that should be fixed
The errors:
TypeError: Cannot destructure property 'name' of '(intermediate value)(intermediate value)(intermediate value)' as it is null.
at publicInputsVisitor (file:///Users/lydiagarms/starlight/built/transformers/visitors/toCircuitVisitor.js:252:11)
at traversePathsFast (file:///Users/lydiagarms/starlight/built/traverse/traverse.js:159:5)
at NodePath.traversePathsFast (file:///Users/lydiagarms/starlight/built/traverse/NodePath.js:114:9)
at Object.enter (file:///Users/lydiagarms/starlight/built/transformers/visitors/toCircuitVisitor.js:1116:22)
at traverse (file:///Users/lydiagarms/starlight/built/traverse/traverse.js:47:17)
at NodePath.traverse (file:///Users/lydiagarms/starlight/built/traverse/NodePath.js:111:9)
at traverse (file:///Users/lydiagarms/starlight/built/traverse/traverse.js:78:25)
at NodePath.traverse (file:///Users/lydiagarms/starlight/built/traverse/NodePath.js:111:9)
at traverse (file:///Users/lydiagarms/starlight/built/traverse/traverse.js:78:25)
at NodePath.traverse (file:///Users/lydiagarms/starlight/built/traverse/NodePath.js:111:9)
and
TypeError: Cannot read properties of undefined (reading 'expression')
at Object.enter (file:///Users/lydiagarms/starlight/built/transformers/visitors/toCircuitVisitor.js:1140:77)
at traverse (file:///Users/lydiagarms/starlight/built/traverse/traverse.js:47:17)
at NodePath.traverse (file:///Users/lydiagarms/starlight/built/traverse/NodePath.js:111:9)
at traverse (file:///Users/lydiagarms/starlight/built/traverse/traverse.js:78:25)
at NodePath.traverse (file:///Users/lydiagarms/starlight/built/traverse/NodePath.js:111:9)
at traverse (file:///Users/lydiagarms/starlight/built/traverse/traverse.js:78:25)
at NodePath.traverse (file:///Users/lydiagarms/starlight/built/traverse/NodePath.js:111:9)
at traverse (file:///Users/lydiagarms/starlight/built/traverse/traverse.js:65:29)
at NodePath.traverse (file:///Users/lydiagarms/starlight/built/traverse/NodePath.js:111:9)
at traverse (file:///Users/lydiagarms/starlight/built/traverse/traverse.js:78:25)
Definition of done
When is this task complete?
Test contracts both public and secret structs being created via the constructor syntax, ensure this is working correctly.
Overview
There are several zappify errors when using the struct constructor syntax.
Tasks
Describe which contracts are affected
// SPDX-License-Identifier: CC0
pragma solidity ^0.8.0;
contract Assign {
secret uint256 private a;
secret uint256 private b;
struct MyStruct {
uint256 prop1;
bool prop2;
}
MyStruct public x;
function add( secret MyStruct memory value) public {
MyStruct memory localStruct = MyStruct({prop1: 7, prop2: false});
known a += value.prop1 + localStruct.prop1;
x.prop2 = true;
}
function remove( secret MyStruct memory value) public {
add(value);
known b += value.prop1;
x.prop2 = true;
}
}
Describe the bug that should be fixed
The errors:
TypeError: Cannot destructure property 'name' of '(intermediate value)(intermediate value)(intermediate value)' as it is null.
at publicInputsVisitor (file:///Users/lydiagarms/starlight/built/transformers/visitors/toCircuitVisitor.js:252:11)
at traversePathsFast (file:///Users/lydiagarms/starlight/built/traverse/traverse.js:159:5)
at NodePath.traversePathsFast (file:///Users/lydiagarms/starlight/built/traverse/NodePath.js:114:9)
at Object.enter (file:///Users/lydiagarms/starlight/built/transformers/visitors/toCircuitVisitor.js:1116:22)
at traverse (file:///Users/lydiagarms/starlight/built/traverse/traverse.js:47:17)
at NodePath.traverse (file:///Users/lydiagarms/starlight/built/traverse/NodePath.js:111:9)
at traverse (file:///Users/lydiagarms/starlight/built/traverse/traverse.js:78:25)
at NodePath.traverse (file:///Users/lydiagarms/starlight/built/traverse/NodePath.js:111:9)
at traverse (file:///Users/lydiagarms/starlight/built/traverse/traverse.js:78:25)
at NodePath.traverse (file:///Users/lydiagarms/starlight/built/traverse/NodePath.js:111:9)
and
TypeError: Cannot read properties of undefined (reading 'expression')
at Object.enter (file:///Users/lydiagarms/starlight/built/transformers/visitors/toCircuitVisitor.js:1140:77)
at traverse (file:///Users/lydiagarms/starlight/built/traverse/traverse.js:47:17)
at NodePath.traverse (file:///Users/lydiagarms/starlight/built/traverse/NodePath.js:111:9)
at traverse (file:///Users/lydiagarms/starlight/built/traverse/traverse.js:78:25)
at NodePath.traverse (file:///Users/lydiagarms/starlight/built/traverse/NodePath.js:111:9)
at traverse (file:///Users/lydiagarms/starlight/built/traverse/traverse.js:78:25)
at NodePath.traverse (file:///Users/lydiagarms/starlight/built/traverse/NodePath.js:111:9)
at traverse (file:///Users/lydiagarms/starlight/built/traverse/traverse.js:65:29)
at NodePath.traverse (file:///Users/lydiagarms/starlight/built/traverse/NodePath.js:111:9)
at traverse (file:///Users/lydiagarms/starlight/built/traverse/traverse.js:78:25)
Definition of done
When is this task complete?
Test contracts both public and secret structs being created via the constructor syntax, ensure this is working correctly.