I have a simple contract that contains a struct. First, I initialize it using certain values and at some point I want to change them, in this case with setCompleted
. However, the changes do not get stored permanently and completed
property is still stored as false
even after setting it to true
in setCompleted
function. What could be the issue?
pragma solidity ^0.4.15;
contract MyStructExample {
struct MyStruct {
address addr;
string description;
bool completed;
}
address owner;
mapping (address => mapping(string => MyStruct)) myStructs;
// MyStructExample.deployed().then(function(instance) {app=instance;})
function MyStructExample() {
owner = msg.sender;
}
// app.setMyStruct("0xe38d0b841dd19802b429b85c41d597e4c29d88e1", "Blah blah")
function setMyStruct(address _addr, string _description) {
MyStruct storage myStruct;
myStruct.addr = _addr;
myStruct.description = _description;
myStruct.completed = false;
myStructs[myStruct.addr][myStruct.description] = myStruct;
}
// app.getMyStruct.call("0xe38d0b841dd19802b429b85c41d597e4c29d88e1", "Blah blah")
function getMyStruct(address _addr, string _description) constant returns (address, string, bool) {
MyStruct memory myStruct = myStructs[_addr][_description];
return (myStruct.addr, myStruct.description, myStruct.completed);
}
// app.setCompleted.call("0xe38d0b841dd19802b429b85c41d597e4c29d88e1", "Blah blah")
function setCompleted(address _addr, string _description) onlyOwner returns (bool) {
myStructs[_addr][_description].completed = true;
return myStructs[_addr][_description].completed;
}
modifier onlyOwner() {
assert(msg.sender != owner);
_;
}
function kill() onlyOwner {
selfdestruct(owner);
}
}
.call
in setCompleted. Otherwise it only calls it in local EVM instead of sending a TX