Skip to content

Commit

Permalink
Migration towards split contract (data and logic)
Browse files Browse the repository at this point in the history
  • Loading branch information
jtomes123 committed May 1, 2018
1 parent 1de8270 commit 561df35
Showing 1 changed file with 90 additions and 29 deletions.
119 changes: 90 additions & 29 deletions Backend/Dogtags.sol
Original file line number Diff line number Diff line change
@@ -1,6 +1,30 @@
pragma solidity ^0.4.19;

contract Dogtags {
contract DogtagsDataStorage {
address owner;
address currentContract;

function DogtagsDataStorage(address newContract) public {
owner = msg.sender;
currentContract = newContract;
}

modifier onlyAuthorized {
require(msg.sender == owner || msg.sender == currentContract);
_;
}
modifier onlyOwner {
require(msg.sender == owner);
_;
}

function setOwner(address newOwner) public onlyOwner {
owner = newOwner;
}
function setContract(address newContract) public onlyAuthorized {
currentContract = newContract;
}

struct Dogtag {
string name;
string content;
Expand All @@ -10,52 +34,93 @@ contract Dogtags {

address verifier;
}

mapping (address => Dogtag) dogtags;

mapping (address => mapping(string => string)) strings;
function getString(address user, string key) view public returns(string) {
return strings[user][key];
}
function setString(address user, string key, string value) public onlyAuthorized {
strings[user][key] = value;
}

mapping (address => mapping(string => bool)) bools;
function getBool(address user, string key) view public returns(bool) {
return bools[user][key];
}
function setBool(address user, string key, bool value) public onlyAuthorized {
bools[user][key] = value;
}

mapping (address => mapping(string => address)) addresses;
function getAddress(address user, string key) view public returns(address) {
return addresses[user][key];
}
function setAddress(address user, string key, address value) public onlyAuthorized {
addresses[user][key] = value;
}

mapping (address => mapping(string => uint)) ints;
function getInt(address user, string key) view public returns(uint) {
return ints[user][key];
}
function setInt(address user, string key, uint value) public onlyAuthorized {
ints[user][key] = value;
}
}
contract Dogtags {
DogtagsDataStorage data;
address owner;

function Dogtags() public {
owner = msg.sender;
}

modifier onlyOwner {
require(msg.sender == owner);
_;
}

function setDataStorageContract(address newContract) public onlyOwner {
data = DogtagsDataStorage(newContract);
}
//Getters
function GetDogtagContent(address adr) public constant returns(string) {
return dogtags[adr].content;
return data.getString(adr, "content");
}
function GetDogtagName(address adr) public constant returns(string) {
return dogtags[adr].name;
return data.getString(adr, "name");
}
function GetVerifier(address adr) public constant returns(address) {
return dogtags[adr].verifier;
return data.getAddress(adr, "verifier");
}
function IsVerifier(address adr) public constant returns(bool) {
return dogtags[adr].canVerify || dogtags[adr].isAdmin || (adr == owner);
return data.getBool(adr, "isVerifier") || data.getBool(adr, "isAdmin") || (adr == owner);
}
function IsVerified(address adr) public constant returns(bool) {
return dogtags[adr].verified;
return data.getBool(adr, "isVerified");
}
function IsAdmin(address adr) public constant returns(bool) {
return dogtags[adr].isAdmin || (adr == owner);
return data.getBool(adr, "isAdmin") || (adr == owner);
}
function IsOwner(address adr) public constant returns(bool) {
return (adr == owner);
}
function GetContractBalance() public constant returns(uint) {
return this.balance;
return address(this).balance;
}

//Setters
function SetDogtag(string name, string content) public payable {
dogtags[msg.sender].name = name;
dogtags[msg.sender].content = content;
dogtags[msg.sender].verified = false;
data.setString(msg.sender, "name", name);
data.setString(msg.sender, "content", content);
data.setBool(msg.sender, "isVerified", false);
}
function SetDogtagContent(string content) public payable {
dogtags[msg.sender].content = content;
data.setString(msg.sender, "content", content);
}
function SetDogtagName(string name) public payable {
dogtags[msg.sender].name = name;
dogtags[msg.sender].verified = false;
data.setString(msg.sender, "name", name);
data.setBool(msg.sender, "isVerified", false);
}
function SetNewOwner(address adr) public {
if(msg.sender == owner) {
Expand All @@ -64,8 +129,8 @@ contract Dogtags {
}
function SetAdminStatus(address adr, bool status) public {
if (msg.sender == owner) {
if (dogtags[adr].isAdmin != status) {
dogtags[adr].isAdmin = status;
if (data.getBool(adr, "isAdmin") != status) {
data.setBool(adr, "isAdmin", status);
} else {
revert();
}
Expand All @@ -74,21 +139,17 @@ contract Dogtags {
}
}
function SetVerificationStatus(address adr, bool status) public {
if (dogtags[msg.sender].canVerify || msg.sender == owner) {
if (dogtags[adr].verified != status) {
dogtags[adr].verified = status;
dogtags[adr].verifier = msg.sender;
} else {
revert();
}
if (data.getBool(msg.sender, "isVerifier") || msg.sender == owner) {
data.setBool(adr, "isVerified", status);
data.setAddress(adr, "verifier", msg.sender);
} else {
revert();
}
}
function SetVerifierStatus(address adr, bool status) public {
if (msg.sender == owner || dogtags[msg.sender].isAdmin) {
if (dogtags[adr].canVerify != status) {
dogtags[adr].canVerify = status;
if (msg.sender == owner || data.getBool(msg.sender, "isAdmin")) {
if (data.getBool(msg.sender, "isVerifier") != status) {
data.setBool(adr, "isVerifier", status);
} else {
revert();
}
Expand All @@ -98,7 +159,7 @@ contract Dogtags {
}
function Withdraw(uint amount) public {
if (msg.sender == owner) {
if (this.balance - amount > this.balance / 10) {
if (address(this).balance - amount > address(this).balance / 10) {
owner.transfer(amount);
}
}
Expand Down

0 comments on commit 561df35

Please sign in to comment.