Skip to content

Commit

Permalink
0.1.8
Browse files Browse the repository at this point in the history
  • Loading branch information
e11io committed Apr 26, 2018
1 parent 4e5ac9c commit 8e12003
Show file tree
Hide file tree
Showing 207 changed files with 123,679 additions and 44,600 deletions.
10 changes: 10 additions & 0 deletions CHANGELOG.md
@@ -1,5 +1,15 @@
# Changelog

0.1.8 / 2018-04-26
==================

* Units Creation
* Small improvements on cards design
* Improvements on the internal ngrx core
* Changes on how we display and manage the requirements
* Upgraded contracts to solidity 0.4.23
* Small improvements on the UI

0.1.7 / 2018-03-20
==================

Expand Down
30 changes: 15 additions & 15 deletions README.md
Expand Up @@ -20,41 +20,41 @@ Please check the [documentation](https://e11-io.github.io/crypto-wars-solidity/)
npm install -g truffle
npm install -g ethereumjs-testrpc # or ganache-cli
truffle version
# Truffle v4.1.0 (core: 4.1.0)
# Solidity v0.4.19 (solc-js)
# Truffle v4.1.7 (core: 4.1.7)
# Solidity v0.4.23 (solc-js)
```

2. Install dependencies.
```shell
npm i # or yarn
```

3. Run testrpc on a separate terminal
```shell
npm run rpc
```

4. Compile the contracts.
3. Compile the contracts.
```shell
truffle compile
```

5. Run the tests.
4. Run the tests.
```shell
truffle test
npm run test
```

6. Compile the docs.
5. Compile the docs.
```shell
npm run doxity init
npm run docs
```

7. Run test coverage.
6. Run test coverage.
```shell
npm run coverage
```

7. Run local testrpc.
```shell
npm run rpc
```

8. Migrate the contracts.
```shell
truffle migrate
Expand All @@ -64,6 +64,7 @@ Please check the [documentation](https://e11-io.github.io/crypto-wars-solidity/)
```shell
npm run start # to use your local RPC network
# Open http://localhost:4200 on your favorite web3 browser
# Remember to switch your network on Metamask to localhost 8545
```

9b. To run the web app with the PoA e11 (311) network.
Expand All @@ -76,6 +77,7 @@ Please check the [documentation](https://e11-io.github.io/crypto-wars-solidity/)
- Console 2:
```shell
npm run start:poa # this will start the angular server with the PoA environment.
# Remember to switch your network on Metamask to http://localhost:8311
```

Lastly open http://localhost:4200 and on Metamask connect to http://localhost:8311
Expand All @@ -91,9 +93,7 @@ Please check the [documentation](https://e11-io.github.io/crypto-wars-solidity/)

- `truffle migrate --network=e11` # Console 3

- Update contract addresses on `src/environments/environment.poa`

- Update ExperimentalToken address on `scripts/send-testnet-tokens.js`
- Update contract addresses on `scripts/contracts.json`

- Copy `build/contracts` folder and paste it on `src/assets/contracts`

Expand Down
35 changes: 24 additions & 11 deletions contracts/AssetsRequirements.sol
@@ -1,9 +1,10 @@
pragma solidity ^0.4.18;
pragma solidity ^0.4.23;

import 'zeppelin-solidity/contracts/ownership/NoOwner.sol';
import './Versioned.sol';
import './BuildingsData.sol';
import './BuildingsQueue.sol';
import './UnitsData.sol';
import './UserBuildings.sol';

/**
Expand Down Expand Up @@ -46,6 +47,7 @@ contract AssetsRequirements is NoOwner, Versioned {
AssetsRequirements previousAssetsRequirements;
BuildingsData buildingsData;
BuildingsQueue buildingsQueue;
UnitsData unitsData;
UserBuildings userBuildings;

// Mapping of uint (buildings id) -> uint[] (buildings ids).
Expand All @@ -56,7 +58,7 @@ contract AssetsRequirements is NoOwner, Versioned {
* @notice Constructor: Instantiate Assets Requirements contract.
* @dev Constructor function.
*/
function AssetsRequirements() public {
constructor() public {
}

/*
Expand All @@ -80,7 +82,7 @@ contract AssetsRequirements is NoOwner, Versioned {
setVersion(_version);
}

/**
/*
* @notice Instantiate Buildings Data contract.
* @dev Function to provide Buildings Data address and instantiate it.
* @param _buildingsData the address of Buildings Data contract. (address)
Expand Down Expand Up @@ -110,6 +112,16 @@ contract AssetsRequirements is NoOwner, Versioned {
userBuildings = _userBuildings;
}

/*
* @notice Instantiate Buildings Data contract.
* @dev Function to provide Buildings Data address and instantiate it.
* @param _buildingsData the address of Buildings Data contract. (address)
*/
function setUnitsData(UnitsData _unitsData) external onlyOwner {
require(_unitsData.isUnitsData());
unitsData = _unitsData;
}

/*
* @notice Add new asset with requirements
* @dev This method create a new Asset Requirement definition that can be used on the game.
Expand All @@ -123,7 +135,7 @@ contract AssetsRequirements is NoOwner, Versioned {
uint[] _requirements) external onlyOwner {

require(_id > 0);
require(buildingsData.checkBuildingExist(_id));
require(buildingsData.checkBuildingExist(_id) || unitsData.checkUnitExist(_id));
require(_requirements.length > 0);
require(requirements[_id].length == 0);

Expand All @@ -133,7 +145,7 @@ contract AssetsRequirements is NoOwner, Versioned {

requirements[_id] = _requirements;

SetAssetRequirements(_id, _requirements);
emit SetAssetRequirements(_id, _requirements);
}

/*
Expand All @@ -159,7 +171,7 @@ contract AssetsRequirements is NoOwner, Versioned {

requirements[_id].push(_requirement);

AddedAssetRequirement(_id, _requirement);
emit AddedAssetRequirement(_id, _requirement);
}

/*
Expand All @@ -186,7 +198,7 @@ contract AssetsRequirements is NoOwner, Versioned {

require(shiftRequirement(_id, i));

RemovedAssetRequirement(_id, _requirement);
emit RemovedAssetRequirement(_id, _requirement);
}

/*
Expand Down Expand Up @@ -214,7 +226,7 @@ contract AssetsRequirements is NoOwner, Versioned {

require(updated);

UpdatedAssetRequirement(_id, _oldRequirement, _newRequirement);
emit UpdatedAssetRequirement(_id, _oldRequirement, _newRequirement);
}

/*
Expand Down Expand Up @@ -251,7 +263,7 @@ contract AssetsRequirements is NoOwner, Versioned {

/*
* @title Get User Buildings Ids
* @dev This method is used to get the buildings in User Buildings that are valid to check requirements.
* @dev This method is used to get the buildings in User Buildings that are valid to check requirements.
* @param _user (address)
*/
function getUserBuildingsIds(address _user) internal view returns (uint userBuildingsLength, uint[] userBuildingsIds) {
Expand Down Expand Up @@ -336,8 +348,9 @@ contract AssetsRequirements is NoOwner, Versioned {
*/
function validateRequirement(uint _id, uint _requirement) internal view returns (bool valid) {
require(_requirement > 0);
// Require to have a different type id
require((_id % 1000 != _requirement % 1000));

// Require to be a unit or to have a different type id
require(_id < 1000 || (_id % 1000 != _requirement % 1000));
require(buildingsData.checkBuildingExist(_requirement));
return true;
}
Expand Down
20 changes: 13 additions & 7 deletions contracts/BuildingsData.sol
@@ -1,4 +1,4 @@
pragma solidity ^0.4.18;
pragma solidity ^0.4.23;

import 'zeppelin-solidity/contracts/ownership/NoOwner.sol';
import './Versioned.sol';
Expand Down Expand Up @@ -52,7 +52,7 @@ contract BuildingsData is NoOwner, Versioned {
* @notice Constructor: Instantiate Buildings Data contract.
* @dev Constructor function.
*/
function BuildingsData() public {
constructor() public {
}

/*
Expand Down Expand Up @@ -94,6 +94,8 @@ contract BuildingsData is NoOwner, Versioned {
* attack (int)
* goldCapacity (int)
* crystalCapacity (int)
* goldRate (int)
* crystalRate (int)
* price (int)
* resource (int)
* blocks (int)
Expand Down Expand Up @@ -133,7 +135,7 @@ contract BuildingsData is NoOwner, Versioned {
stats[10],
stats[11]);
buildingIds.push(id);
AddBuilding(id, name);
emit AddBuilding(id, name);
}

/*
Expand All @@ -146,6 +148,8 @@ contract BuildingsData is NoOwner, Versioned {
* attack (int)
* goldCapacity (int)
* crystalCapacity (int)
* goldRate (int)
* crystalRate (int)
* price (int)
* resource (int)
* blocks (int)
Expand All @@ -160,7 +164,7 @@ contract BuildingsData is NoOwner, Versioned {
updateBuildingBasicsA(id, name, stats);
updateBuildingBasicsB(id, stats);

UpdateBuilding(id, name);
emit UpdateBuilding(id, name);
}

/*
Expand All @@ -175,6 +179,8 @@ contract BuildingsData is NoOwner, Versioned {
* attack (int)
* goldCapacity (int)
* crystalCapacity (int)
* goldRate (int)
* crystalRate (int)
* price (int)
* resource (int)
* blocks (int)
Expand Down Expand Up @@ -211,6 +217,8 @@ contract BuildingsData is NoOwner, Versioned {
* attack (int)
* goldCapacity (int)
* crystalCapacity (int)
* goldRate (int)
* crystalRate (int)
* price (int)
* resource (int)
* blocks (int)
Expand Down Expand Up @@ -251,8 +259,7 @@ contract BuildingsData is NoOwner, Versioned {
* @return A boolean that indicates if the building exists or not.
*/
function checkBuildingExist(uint _id) external view returns (bool) {
require(keccak256(buildings[_id].name) != keccak256(""));
return true;
return keccak256(buildings[_id].name) != keccak256("");
}

/*
Expand All @@ -264,7 +271,6 @@ contract BuildingsData is NoOwner, Versioned {
*/
function checkUpgrade(uint _id, uint _idOfUpgrade) external view returns (bool) {
require(buildings[_idOfUpgrade].previousLevelId == int32(_id));

return true;
}

Expand Down
30 changes: 16 additions & 14 deletions contracts/BuildingsQueue.sol
@@ -1,4 +1,4 @@
pragma solidity ^0.4.18;
pragma solidity ^0.4.23;

import 'zeppelin-solidity/contracts/math/SafeMath.sol';
import 'zeppelin-solidity/contracts/ownership/NoOwner.sol';
Expand Down Expand Up @@ -75,7 +75,7 @@ contract BuildingsQueue is NoOwner, Versioned {
* @notice Constructor: Instantiate Buildings Queue contract.
* @dev Constructor function to provide User Buildings address and instantiate it.
*/
function BuildingsQueue() public {
constructor() public {
}

/*
Expand Down Expand Up @@ -177,11 +177,11 @@ contract BuildingsQueue is NoOwner, Versioned {
uint64(endBlock)
));

AddNewBuildingToQueue(msg.sender,
_id,
uint(index),
startBlock,
endBlock);
emit AddNewBuildingToQueue(msg.sender,
_id,
uint(index),
startBlock,
endBlock);
}

/*
Expand All @@ -194,20 +194,22 @@ contract BuildingsQueue is NoOwner, Versioned {
*/
function updateQueue(address _user) public {
require(_user != address(0));
require(userBuildingsQueue[_user].length > 0);
if (userBuildingsQueue[_user].length == 0) {
return;
}

uint length = userBuildingsQueue[_user].length;
uint i = 0;

while (i < length && userBuildingsQueue[_user][i].endBlock <= block.number) {
while (i < length && userBuildingsQueue[_user][i].endBlock < block.number) {
i++;
}

uint[] memory finishedIds = new uint[](i);
uint[] memory finishedIndexes = new uint[](i);

if (i == 0) {
UpdateQueue(_user, finishedIds, finishedIndexes);
emit UpdateQueue(_user, finishedIds, finishedIndexes);
return;
}

Expand All @@ -221,7 +223,7 @@ contract BuildingsQueue is NoOwner, Versioned {

require(shiftUserBuildings(_user, i));

UpdateQueue(_user, finishedIds, finishedIndexes);
emit UpdateQueue(_user, finishedIds, finishedIndexes);
}

/*
Expand Down Expand Up @@ -251,7 +253,7 @@ contract BuildingsQueue is NoOwner, Versioned {
consumeResources(msg.sender, price, resourceType);

if (buildingIsInQueue) {
require(userBuildingsQueue[msg.sender][buildingIndexInQueue].endBlock <= block.number);
require(userBuildingsQueue[msg.sender][buildingIndexInQueue].endBlock < block.number);
updateQueue(msg.sender);
}

Expand All @@ -264,7 +266,7 @@ contract BuildingsQueue is NoOwner, Versioned {
uint32(_idOfUpgrade), uint32(_index), uint64(startBlock), uint64(endBlock)
));

UpgradeBuilding(_idOfUpgrade, _index, startBlock, endBlock);
emit UpgradeBuilding(_idOfUpgrade, _index, startBlock, endBlock);
}

/*
Expand Down Expand Up @@ -550,7 +552,7 @@ contract BuildingsQueue is NoOwner, Versioned {

require(userBuildings.updateBuildingStatus(msg.sender, _id, _index));

RemoveBuilding(msg.sender, _id, _index);
emit RemoveBuilding(msg.sender, _id, _index);

}

Expand Down

0 comments on commit 8e12003

Please sign in to comment.