Skip to content

Commit

Permalink
Most up-to-date code upload
Browse files Browse the repository at this point in the history
  • Loading branch information
nikitaeverywhere committed Mar 23, 2018
1 parent 748de88 commit dbb8182
Show file tree
Hide file tree
Showing 6 changed files with 443 additions and 203 deletions.
47 changes: 0 additions & 47 deletions contracts/libraries/SafeMath.sol

This file was deleted.

69 changes: 45 additions & 24 deletions contracts/storage/TeamsStorageController.sol
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ import "../storage/StorageInterface.sol";
*/
contract TeamsStorageController {

address public db;

/**
* Storage enumeration for keys readability. Never change an order of the items here when applying to a deployed storage!
*/
Expand All @@ -34,60 +36,65 @@ contract TeamsStorageController {
* getUint(Storage.teams, TEAM_ID, MEMBER_INDEX, Member.agreementMinutes) = 20160 (number of minutes of agreement)
* getUint(Storage.teams, TEAM_ID, MEMBER_INDEX, Member.agreementValue) = 50 (number of tokens stashed)
* getUint(Storage.teams, TEAM_ID, MEMBER_INDEX, Member.payoutDate) = 1519987450 (date when user can receive payout, unix timestamp IN SECONDS)
* getUint(Storage.teams, TEAM_ID, MEMBER_INDEX) = 10500 (member contract ID)
* getBool(Storage.teams, TEAM_ID, MEMBER_INDEX) = false (whether to remove player on payout)
*/

function storageGetNumberOfTeams (address db) internal view returns(uint) {
function getNumberOfTeams () public view returns(uint) {
return StorageInterface(db).getUint(keccak256(Storage.teams));
}

function storageGetTeamMemberIndexByAddress (address db, uint teamId, address memberAddress) internal view returns(uint) {
uint i = 0;
address addr;
function storageGetTeamMemberIndexByContractId (uint teamId, uint contractId) internal view returns(int) {
int i = 0;
uint cid;
do {
addr = StorageInterface(db).getAddress(keccak256(Storage.teams, teamId, i));
if (addr == memberAddress)
cid = StorageInterface(db).getUint(keccak256(Storage.teams, teamId, i));
if (cid == contractId)
return i;
if (addr == 0x0)
return 0x0;
if (cid == 0)
return -1;
++i;
} while (true);
}

function storageGetTeamMemberAgreementValue (address db, uint teamId, uint memberIndex) internal view returns(uint) {
function storageGetTeamMemberAgreementValue (uint teamId, uint memberIndex) internal view returns(uint) {
return StorageInterface(db).getUint(keccak256(Storage.teams, teamId, memberIndex, Member.agreementValue));
}

function storageGetTeamMemberAgreementMinutes (address db, uint teamId, uint memberIndex) internal view returns(uint) {
function storageGetTeamMemberAgreementMinutes (uint teamId, uint memberIndex) internal view returns(uint) {
return StorageInterface(db).getUint(keccak256(Storage.teams, teamId, memberIndex, Member.agreementMinutes));
}

function storageGetTeamMemberPayoutDate (address db, uint teamId, uint memberIndex) internal view returns(uint) {
function storageGetTeamMemberPayoutDate (uint teamId, uint memberIndex) internal view returns(uint) {
return StorageInterface(db).getUint(keccak256(Storage.teams, teamId, memberIndex, Member.payoutDate));
}

function storageGetTeamMemberAddress (address db, uint teamId, uint memberIndex) internal view returns(address) {
function storageGetTeamMemberAddress (uint teamId, uint memberIndex) internal view returns(address) {
return StorageInterface(db).getAddress(keccak256(Storage.teams, teamId, memberIndex));
}

function storageGetNumberOfMembers (address db, uint teamId) internal view returns(uint) {
function storageGetMemberContractId (uint teamId, uint memberIndex) internal view returns(uint) {
return StorageInterface(db).getUint(keccak256(Storage.teams, teamId, memberIndex));
}

function storageGetNumberOfMembers (uint teamId) internal view returns(uint) {
return StorageInterface(db).getUint(keccak256(Storage.teams, teamId));
}

function storageGetTeamMemberSingleTermAgreement (address db, uint teamId, uint memberIndex) internal view returns(bool) {
function storageGetTeamMemberSingleTermAgreement (uint teamId, uint memberIndex) internal view returns(bool) {
return StorageInterface(db).getBoolean(keccak256(Storage.teams, teamId, memberIndex));
}

function storageGetTeamBalance (address db, uint teamId) internal view returns(uint) {
function storageGetTeamBalance (uint teamId) internal view returns(uint) {
return StorageInterface(db).getUint(keccak256(Storage.balance, teamId));
}

function storageSetTeamMemberPayoutDate (address db, uint teamId, uint memberIndex, uint date) internal {
function storageSetTeamMemberPayoutDate (uint teamId, uint memberIndex, uint date) internal {
StorageInterface(db).setUint(keccak256(Storage.teams, teamId, memberIndex, Member.payoutDate), date);
}

// Gas refund applies here for clearing storage
function storageDeleteTeamMember (address db, uint teamId, uint memberIndex) internal {
function storageDeleteTeamMember (uint teamId, uint memberIndex) internal {
uint numOfMembers = StorageInterface(db).getUint(keccak256(Storage.teams, teamId)) - 1;
require(memberIndex <= numOfMembers);
StorageInterface(db).setAddress(
Expand All @@ -110,6 +117,11 @@ contract TeamsStorageController {
StorageInterface(db).getUint(keccak256(Storage.teams, teamId, numOfMembers, Member.payoutDate))
);
StorageInterface(db).setUint(keccak256(Storage.teams, teamId, numOfMembers, Member.payoutDate), 0);
StorageInterface(db).setUint(
keccak256(Storage.teams, teamId, memberIndex),
StorageInterface(db).getUint(keccak256(Storage.teams, teamId, numOfMembers))
);
StorageInterface(db).setUint(keccak256(Storage.teams, teamId, numOfMembers), 0);
StorageInterface(db).setBoolean(
keccak256(Storage.teams, teamId, memberIndex),
StorageInterface(db).getBoolean(keccak256(Storage.teams, teamId, numOfMembers))
Expand All @@ -118,21 +130,21 @@ contract TeamsStorageController {
StorageInterface(db).setUint(keccak256(Storage.teams, teamId), numOfMembers);
}

function storageAddTeam (address db, address teamOwnerAccount) internal returns(uint) {
function storageAddTeam (address teamOwnerAccount) internal returns(uint) {
uint teamId = StorageInterface(db).getUint(keccak256(Storage.teams));
StorageInterface(db).setUint(keccak256(Storage.teams), teamId + 1);
StorageInterface(db).setAddress(keccak256(Storage.teamOwner, teamId), teamOwnerAccount);
return teamId;
}

function storageIncTeamBalance (address db, uint teamId, uint toAdd) internal {
function storageIncTeamBalance (uint teamId, uint toAdd) internal {
StorageInterface(db).setUint(
keccak256(Storage.balance, teamId),
StorageInterface(db).getUint(keccak256(Storage.balance, teamId)) + toAdd
);
}

function storageDecTeamBalance (address db, uint teamId, uint toSub) internal {
function storageDecTeamBalance (uint teamId, uint toSub) internal {
require(StorageInterface(db).getUint(keccak256(Storage.balance, teamId)) >= toSub);
StorageInterface(db).setUint(
keccak256(Storage.balance, teamId),
Expand All @@ -141,12 +153,12 @@ contract TeamsStorageController {
}

function storageAddTeamMember (
address db,
uint teamId,
address memberAccount,
uint agreementMinutes,
uint agreementValue,
bool singleTermAgreement
bool singleTermAgreement,
uint contractId // id of the contract with team member
) internal returns(uint)
{
// require(teamId < StorageInterface(db).getUint(keccak256(Storage.teams)));
Expand All @@ -164,19 +176,24 @@ contract TeamsStorageController {
keccak256(Storage.teams, teamId, numOfMembers, Member.payoutDate),
now + (agreementMinutes * 60) // now + agreementSeconds
);
StorageInterface(db).setUint(
keccak256(Storage.teams, teamId, numOfMembers),
contractId
);
if (singleTermAgreement)
StorageInterface(db).setBoolean(keccak256(Storage.teams, teamId, numOfMembers), true);
StorageInterface(db).setUint(keccak256(Storage.teams, teamId), numOfMembers + 1);
}

function storageGetTeam (address db, uint teamId) internal view returns(
function getTeam (uint teamId) public view returns(
address[] memberAccounts,
uint[] payoutDate,
uint[] agreementMinutes,
uint[] agreementValue,
bool[] singleTermAgreement,
uint teamBalance,
address teamOwner
address teamOwner,
uint[] contractIds
) {
uint numOfMembers = StorageInterface(db).getUint(keccak256(Storage.teams, teamId));
memberAccounts = new address[](numOfMembers);
Expand All @@ -186,6 +203,7 @@ contract TeamsStorageController {
singleTermAgreement = new bool[](numOfMembers);
teamBalance = StorageInterface(db).getUint(keccak256(Storage.balance, teamId));
teamOwner = StorageInterface(db).getAddress(keccak256(Storage.teamOwner, teamId));
contractIds = new uint[](numOfMembers);
for (
uint memberIndex = 0;
memberIndex < numOfMembers;
Expand All @@ -206,6 +224,9 @@ contract TeamsStorageController {
singleTermAgreement[memberIndex] = StorageInterface(db).getBoolean(
keccak256(Storage.teams, teamId, memberIndex)
);
contractIds[memberIndex] = StorageInterface(db).getUint(
keccak256(Storage.teams, teamId, memberIndex)
);
}
}

Expand Down
Loading

0 comments on commit dbb8182

Please sign in to comment.