diff --git a/README.md b/README.md
index dede6d7b..8845a88a 100644
--- a/README.md
+++ b/README.md
@@ -48,22 +48,11 @@ yarn coverage
```
## [Roles](contracts/roles)
-To understand the SDK, it's important to understand the 4 fundamental roles on the network:
+There are generally 4 different roles on the platform. The `Investor`, the `AssetManager`, the `Operator`, and the `PlatformOwners`. `Investors` can contribute ETH or Erc20 tokens to invest in new asset crowdsales. The continued functioning of the asset is ensured by the `AssetManager`, who receives a fee for his work and escrows tokens as collateral to investors. The `Operator` receives funds from the crowdsale and produces and installs the asset. `PlatformOwners` can choose how assets are governed, and whether or not a contract upgrade should happen. The platform owner can be a single account or a contract governed by many accounts.
-#### Investor
-Investors can contribute ETH or ERC20 tokens to invest in asset orders, receiving asset-tokens in return. To invest they must approve the burner contract.
-#### AssetManager
-The assets are managed and created by the AssetManager, who receives a fee for his work and escrows tokens as collateral to investors. The AssetManager must approve the burner contract to burn platform tokens.
-#### Operator
-The Operator is responsible for producing and installing the asset. They receive 99% of the crowdsale income as a fee for doing so. Platform owners must approve each Operator.
-
-#### Platform Owner(s)
-Platform owners can choose how assets are governed, and whether or not a contract upgrade should happen. The platform owner can be a single account or a contract governed by many accounts. Platform owners receive 1% of crowdsale income as a fee.
-
-
-## Setting Up The Platform
+## Contract overview
Before creating assets, certain variables and parameters have to be set:
* All contracts must be registered in ContractManager before writing to database
* All users must approve the current contract state, which changes everytime a contract is added/updated in ContractManager
@@ -71,12 +60,14 @@ Before creating assets, certain variables and parameters have to be set:
* Platform wallet and platform token must be set
* Operators must be registered and choose which currencies they wish to accept
-Basic functionality for these critical operations are outlined below. All contracts are found [here](contracts)
+Basic functionality for these critical operations are outlined below.
+
+All contracts are found [here](contracts)
### [Database](contracts/database)
Contracts in the SDK store all long-term data in a database contract, which allows for contracts to be upgraded without losing valuable data. The Database stores all data using a bytes32 type, which is often the keccak256 hash of the variableName, ID, address that make up that variable.
-Storing an unsigned integer looks like this:
+Storing an integer looks like this:
```javascript
database.setUint(keccak256(abi.encodePacked("fundingDeadline", assetID)), 20000000);
```
@@ -121,7 +112,7 @@ To give a contract write access to the database, you must call `addContract(cont
}
```
-Everytime a contract is added or updated the contract state will change, requiring approval from users before they interact with the platform. Users can also choose to ignore future state changes. This can be done by calling the following function:
+Every time a contract is added or updated the contract state will change, requiring approval from users before they interact with the platform. Users can also choose to ignore future state changes. This can be done by calling the following function:
```javascript
function setContractStatePreferences(bool _acceptCurrentState, bool _ignoreStateChanges)
@@ -180,7 +171,7 @@ Before assets can be funded the platform owners must set the `platform token` an
emit LogPlatformWallet(_walletAddress);
}
```
-:heavy_plus_sign:
+AND
```javascript
// @notice
diff --git a/accounts.json b/accounts.json
index 1954395e..ff9763a5 100644
--- a/accounts.json
+++ b/accounts.json
@@ -1,12 +1,12 @@
[
- "0xeed17b217b1e0c63b1b525d8d2e59cad0546432d",
- "0x0ec0e59bd4faf0a136c2ee638f3fcff19972a304",
- "0xe273d3d13d69f82b8071365e110e13c0fbde0c59",
- "0x4cbe9306228ff003fe5a47fe66f2e3d3162f0f37",
- "0x0dcea99d96046de44f1ab2a4bf9b3e21f3ac2924",
- "0x8bd581cca82af7cfff8ab46591803fe2f2061218",
- "0xd6a41e3da4bdc4a27d5707b08612925347f5934f",
- "0xd0702a4258c574ff15df4e65000dbb16843cbd24",
- "0xc3dda1fc00ba83300b9ad2d00faa30166fabc657",
- "0x45543e02e26442e6c95e3145f7d30a53b284f418"
+ "0x83ab44a76fc2e7238fca811e38e41845ed1a9fb3",
+ "0xbcccfb280ff402bc5a593dfce2b3dc736e17e7ba",
+ "0x6d929ebae40bbf96f52e3f82bd831c2891a0d75d",
+ "0x9916ebeef94abca7564ce7dabcbacd434f4015cd",
+ "0xf89f0b05980fb8c7b3d985206707f20a6189c5de",
+ "0x87460046866e93e99273a9f8a94d1e5764774dc9",
+ "0x65a67881065abe61de49c13c44f55a7916c252ae",
+ "0x557f883a3a7b4609ca1251c60253c79e275ba1a6",
+ "0x310ddb0d62b77fb195dcaebfadcebaf3978c198f",
+ "0x4449f9fcc41cf2275fd3631e044e3cf9d603efc2"
]
\ No newline at end of file
diff --git a/addresses.json b/addresses.json
index de12e952..9617d672 100644
--- a/addresses.json
+++ b/addresses.json
@@ -1,18 +1,18 @@
{
- "MyBit": "0x82e8ed40b49fa4682d58807e99eaed6daf20b1d4",
- "ERC20Burner": "0xfa3066aa522b18e0243f7c098e9c72fa85c89ae2",
- "Database": "0xf3a985536aa63fcc5e0732fef35a9d6e0881682c",
- "ContractManager": "0x8397e224cc3f2560d6c989bc29bb6800517d6f97",
- "API": "0x94e839af9b8ec45da92d8a76e0acd1ca45b710c5",
- "SingleOwned": "0x6df2e96b18b909e6127137a4a8ddf40eb259b610",
- "Pausible": "0xbea6ba1b1aa691fc07a5b722bc491df03f4c280a",
- "AccessHierarchy": "0xe4f4aeefd5087eababbd73bdd4c8188cbd008ebb",
- "PlatformFunds": "0x7bd53d17ebee6c87d9937c8cb4fb04297cdc83c2",
- "Operators": "0x54ae7cc1c7ec065a84b84ea7f9e33a14cf3d95e6",
- "AssetManagerEscrow": "0x860b672a9fcb0f12c156cc9c233cfc3ed18fc202",
- "CrowdsaleETH": "0x8af6ac104c639a9011b83f3baf789271e6df6198",
- "CrowdsaleGeneratorETH": "0xeed31156aa0eeb2ebf473cd16faf70d2bf463137",
- "CrowdsaleERC20": "0x03a685558ffd806ca2c44ab5f2ebe84688b82d57",
- "CrowdsaleGeneratorERC20": "0xede40300bea9631bddbf1ab91ca286b5cd591d14",
- "AssetExchange": "0x57bff4f318c5fb88e742d89627ad0b3ee62ab536"
+ "MyBit": "0x8a36b3e2b97fceadb96f42975f6b2fd5af1cadd2",
+ "ERC20Burner": "0xedc8486aebbaeed27a2d14a0cb5f01586828cff4",
+ "Database": "0xacabd45a26baf228a6f753f63c75730edc377cea",
+ "ContractManager": "0xaa0a3786966d598686ba95897577b5443e76f4f3",
+ "API": "0x02ee482c286dfd1ae43d3bd3315dec0f6ee4ee6f",
+ "SingleOwned": "0x8e43584cbfdfe8a646b901363c810087574594cb",
+ "Pausible": "0xd1f82620bbd1f8eaa329c3250b6edc1db9515ae3",
+ "AccessHierarchy": "0xd96a07f8e1c81b5fec25d5b49a92030a2dfcab6f",
+ "PlatformFunds": "0xc01dc119cc3791a7e0cf2dd08eef3e143577794c",
+ "Operators": "0xdb17f66f6d536b092a72177311c45a31e59bc8e5",
+ "AssetManagerEscrow": "0x96e5fafbb47ff3a9f9d261d549b720e9f2120b84",
+ "CrowdsaleETH": "0xb85c21e4afdaa416c068ebf1e74e24e7a2e446c2",
+ "CrowdsaleGeneratorETH": "0x3e1553ae089cf495418786a5ffeb314bcdfef205",
+ "CrowdsaleERC20": "0xacd78e2db9c77e2242f74d47438c5824cf6e02ce",
+ "CrowdsaleGeneratorERC20": "0x1d96b9640ef47e5e8e6161bf30a1cb798ab9e7ef",
+ "AssetExchange": "0xf93210ea71bbd541b2362c4e1b1ff3ff5c3cfb5c"
}
\ No newline at end of file
diff --git a/contracts/database/API.sol b/contracts/database/API.sol
index 2595e0f8..3d96f44b 100644
--- a/contracts/database/API.sol
+++ b/contracts/database/API.sol
@@ -27,6 +27,7 @@ contract API {
using SafeMath for uint256;
DBView private database;
+ uint constant scalingFactor = 10e32;
constructor(address _database)
public {
@@ -69,7 +70,7 @@ contract API {
view
returns (uint) {
uint totalVotes = getTotalVotes(_executionID);
- return (totalVotes * 100) / TokenView(_assetToken).totalSupply();
+ return ( ( (totalVotes * 100) * scalingFactor) / TokenView(_assetToken).totalSupply() / scalingFactor);
}
function getAssetManagerParameterHash(bytes32 _assetID, address _oldAssetManager, address _newAssetManager, uint _amount, bool _burn)
diff --git a/contracts/ownership/AssetGovernance.sol b/contracts/ownership/AssetGovernance.sol
index e9cf0e95..73a4c899 100644
--- a/contracts/ownership/AssetGovernance.sol
+++ b/contracts/ownership/AssetGovernance.sol
@@ -21,6 +21,8 @@ contract AssetGovernance {
DB public database;
+ uint public consensus = 66; // TODO: sub the assetmanager portion of tokens, since they can't be voted with
+ uint constant scalingFactor = 10e32;
constructor(address _database)
public {
@@ -39,7 +41,7 @@ contract AssetGovernance {
bytes32 investorVotesID = keccak256(abi.encodePacked("investorVotes", executionID, msg.sender));
uint256 numVotes = database.uintStorage(numVotesID);
uint256 investorVotes = database.uintStorage(investorVotesID);
- require(lockTokens(_assetID, msg.sender, _amountToLock));
+ require(lockTokens(_assetID, msg.sender, _amountToLock), "unable to lock tokens");
database.setUint(numVotesID, numVotes.add(_amountToLock));
database.setUint(investorVotesID, investorVotes.add(_amountToLock));
return true;
@@ -54,7 +56,7 @@ contract AssetGovernance {
returns (bool) {
bytes32 executionID = keccak256(abi.encodePacked(_executingContract, _assetID, _methodID, _parameterHash));
bytes32 voteTotalID = keccak256(abi.encodePacked("voteTotal", executionID));
- bytes32 investorVotesID = keccak256(abi.encodePacked("investorVotes", executionID));
+ bytes32 investorVotesID = keccak256(abi.encodePacked("investorVotes", executionID, msg.sender));
uint investorVotes = database.uintStorage(investorVotesID);
uint totalVotes = database.uintStorage(voteTotalID);
require(investorVotes <= _amountToUnlock); // 1 vote = 1 token
@@ -67,7 +69,7 @@ contract AssetGovernance {
// Public Functions
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // @notice Checks that 1/3 or more of token holders agreed on function call
+ // @notice Checks that 2/3 or more of token holders agreed on function call
function isConsensusReached(address _executingContract, bytes32 _assetID, bytes4 _methodID, bytes32 _parameterHash)
public
view
@@ -76,7 +78,7 @@ contract AssetGovernance {
bytes32 executionID = keccak256(abi.encodePacked(_executingContract, _assetID, _methodID, _parameterHash));
bytes32 numVotesID = keccak256(abi.encodePacked("voteTotal", executionID));
uint256 numTokens = assetToken.totalSupply();
- return database.uintStorage(numVotesID).mul(100).div(numTokens) >= 33;
+ return database.uintStorage(numVotesID).mul(scalingFactor).mul(100).div(numTokens).div(scalingFactor) >= consensus;
}
@@ -101,12 +103,6 @@ contract AssetGovernance {
// Modifiers
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // @notice add this modifer to functions that you want multi-sig requirements for
- // @dev function can only be called after at least n >= quorumLevel owners have agreed to call it
- modifier hasConsensus(bytes32 _assetID, bytes4 _methodID, bytes32 _parameterHash) {
- require(isConsensusReached(address(this), _assetID, _methodID, _parameterHash)); // owners must have agreed on function + parameters
- _;
- }
// @notice reverts if the asset does not have a token address set in the database
modifier validAsset(bytes32 _assetID) {
@@ -114,4 +110,5 @@ contract AssetGovernance {
_;
}
+ event LogConsensus(bytes32 votesID, uint votes, uint tokens, bytes32 executionID, uint quorum);
}
diff --git a/contracts/roles/AssetManagerEscrow.sol b/contracts/roles/AssetManagerEscrow.sol
index a4cd7158..f79a488e 100644
--- a/contracts/roles/AssetManagerEscrow.sol
+++ b/contracts/roles/AssetManagerEscrow.sol
@@ -15,6 +15,8 @@
DBInterface public database;
+ uint public consensus = 66;
+
// @notice constructor: initializes database
// @param: the address for the database contract used by this platform
constructor(address _database)
@@ -27,17 +29,12 @@
function lockEscrow(bytes32 _assetID, uint _amount)
public
returns (bool) {
- require(database.addressStorage(keccak256(abi.encodePacked("assetManager", _assetID))) == address(0));
- bytes32 assetManagerEscrowID = keccak256(abi.encodePacked(_assetID, msg.sender));
- address tokenAddress = database.addressStorage(keccak256(abi.encodePacked("platformToken")));
- require(BurnableERC20(tokenAddress).transferFrom(msg.sender, address(this), _amount));
- database.setUint(keccak256(abi.encodePacked("assetManagerEscrow", assetManagerEscrowID)), _amount);
- database.setAddress(keccak256(abi.encodePacked("assetManager", _assetID)), msg.sender);
- emit LogEscrowLocked(_assetID, assetManagerEscrowID, msg.sender, _amount);
+ require(lockEscrowInternal(msg.sender, _assetID, _amount));
return true;
}
+
// @notice assetManager can unlock his escrow here once funding fails or asset returns sufficient ROI
// @dev asset must have fundingDeadline = 0 or have ROI > 25%
// @dev returns escrow according to ROI. 25% ROI returns 25% of escrow, 50% ROI returns 50% of escrow etc...
@@ -73,23 +70,22 @@
// @notice investors can vote to call this function for the new assetManager to then call
// @dev new assetManager must approve this contract to transfer in and lock _ amount of platform tokens
- function becomeAssetManager(bytes32 _assetID, address _oldAssetManager, uint _amount, bool _burn)
+ function becomeAssetManager(bytes32 _assetID, address _oldAssetManager, uint256 _amount, bool _burn)
external
hasConsensus(_assetID, msg.sig, keccak256(abi.encodePacked(_assetID, _oldAssetManager, msg.sender, _amount, _burn)))
returns (bool) {
address currentAssetManager = database.addressStorage(keccak256(abi.encodePacked("assetManager", _assetID)));
require(currentAssetManager != msg.sender && currentAssetManager == _oldAssetManager);
- bytes32 assetManagerEscrowID = keccak256(abi.encodePacked(_assetID, _oldAssetManager));
- uint oldEscrowRemaining = database.uintStorage(keccak256(abi.encodePacked("assetManagerEscrow", assetManagerEscrowID))).sub(database.uintStorage(keccak256(abi.encodePacked("escrowRedeemed", assetManagerEscrowID))));
+ bytes32 oldAssetManagerEscrowID = keccak256(abi.encodePacked(_assetID, _oldAssetManager));
+ uint oldEscrowRemaining = database.uintStorage(keccak256(abi.encodePacked("assetManagerEscrow", oldAssetManagerEscrowID))).sub(database.uintStorage(keccak256(abi.encodePacked("escrowRedeemed", oldAssetManagerEscrowID))));
BurnableERC20 token = BurnableERC20(database.addressStorage(keccak256(abi.encodePacked("platformToken"))));
- require(removeAssetManager(_assetID, assetManagerEscrowID));
+ require(removeAssetManager(_assetID, oldAssetManagerEscrowID));
if (_burn) { require(token.burn(oldEscrowRemaining)); }
else { require(token.transfer(_oldAssetManager, oldEscrowRemaining)); }
- require(lockEscrow(_assetID, _amount));
+ require(lockEscrowInternal(msg.sender, _assetID, _amount));
return true;
}
-
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Internal Functions
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -105,6 +101,21 @@
}
+ function lockEscrowInternal(address _assetManager, bytes32 _assetID, uint _amount)
+ internal
+ returns (bool) {
+ require(database.addressStorage(keccak256(abi.encodePacked("assetManager", _assetID))) == address(0));
+ bytes32 assetManagerEscrowID = keccak256(abi.encodePacked(_assetID, _assetManager));
+ address tokenAddress = database.addressStorage(keccak256(abi.encodePacked("platformToken")));
+ require(BurnableERC20(tokenAddress).transferFrom(_assetManager, address(this), _amount));
+ database.setUint(keccak256(abi.encodePacked("assetManagerEscrow", assetManagerEscrowID)), _amount);
+ database.setAddress(keccak256(abi.encodePacked("assetManager", _assetID)), _assetManager);
+ emit LogEscrowLocked(_assetID, assetManagerEscrowID, _assetManager, _amount);
+ return true;
+ }
+
+
+
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Modifiers
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -114,11 +125,12 @@
modifier hasConsensus(bytes32 _assetID, bytes4 _methodID, bytes32 _parameterHash) {
bytes32 numVotesID = keccak256(abi.encodePacked("voteTotal", keccak256(abi.encodePacked(address(this), _assetID, _methodID, _parameterHash))));
uint256 numTokens = DivToken(database.addressStorage(keccak256(abi.encodePacked("tokenAddress", _assetID)))).totalSupply();
- require(database.uintStorage(numVotesID).mul(100).div(numTokens) >= 33);
+ emit LogConsensus(numVotesID, database.uintStorage(numVotesID), numTokens, keccak256(abi.encodePacked(address(this), _assetID, _methodID, _parameterHash)), database.uintStorage(numVotesID).mul(100).div(numTokens));
+ require(database.uintStorage(numVotesID).mul(100).div(numTokens) >= consensus, 'Consensus not reached');
_;
}
-
+ event LogConsensus(bytes32 votesID, uint votes, uint tokens, bytes32 executionID, uint quorum);
event LogEscrowBurned(bytes32 indexed _assetID, address indexed _assetManager, uint _amountBurnt);
event LogEscrowLocked(bytes32 indexed _assetID, bytes32 indexed _assetManagerEscrowID, address indexed _assetManager, uint _amount);
diff --git a/coverage.json b/coverage.json
new file mode 100644
index 00000000..3b71eaea
--- /dev/null
+++ b/coverage.json
@@ -0,0 +1 @@
+{"contracts/access/AccessHierarchy.sol":{"l":{"16":4,"27":3,"28":2,"29":2,"30":2,"39":2,"40":2,"41":2,"42":2,"50":3,"51":2,"56":5,"57":4,"62":13,"63":10,"68":5,"69":4},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/access/AccessHierarchy.sol","s":{"1":4,"2":3,"3":2,"4":2,"5":2,"6":2,"7":2,"8":3,"9":2,"10":5,"11":13,"12":5},"b":{"1":[2,1],"2":[2,1],"3":[4,1],"4":[10,3],"5":[4,1]},"f":{"1":4,"2":3,"3":2,"4":3,"5":5,"6":13,"7":5},"fnMap":{"1":{"name":null,"line":14,"loc":{"start":{"line":14,"column":2},"end":{"line":15,"column":11}}},"2":{"name":"approveUser","line":22,"loc":{"start":{"line":22,"column":2},"end":{"line":26,"column":18}}},"3":{"name":"removeUser","line":35,"loc":{"start":{"line":35,"column":2},"end":{"line":38,"column":18}}},"4":{"name":"setUpperAccessLevel","line":47,"loc":{"start":{"line":47,"column":2},"end":{"line":49,"column":13}}},"5":{"name":"noEmptyAddress","line":55,"loc":{"start":{"line":55,"column":2},"end":{"line":55,"column":41}}},"6":{"name":"onlyOwner","line":61,"loc":{"start":{"line":61,"column":2},"end":{"line":61,"column":20}}},"7":{"name":"onlyPlatform","line":67,"loc":{"start":{"line":67,"column":2},"end":{"line":67,"column":23}}}},"statementMap":{"1":{"start":{"line":16,"column":4},"end":{"line":16,"column":33}},"2":{"start":{"line":27,"column":4},"end":{"line":27,"column":71}},"3":{"start":{"line":29,"column":4},"end":{"line":29,"column":48}},"4":{"start":{"line":30,"column":4},"end":{"line":30,"column":15}},"5":{"start":{"line":39,"column":4},"end":{"line":39,"column":92}},"6":{"start":{"line":41,"column":4},"end":{"line":41,"column":43}},"7":{"start":{"line":42,"column":4},"end":{"line":42,"column":15}},"8":{"start":{"line":50,"column":4},"end":{"line":50,"column":37}},"9":{"start":{"line":51,"column":4},"end":{"line":51,"column":36}},"10":{"start":{"line":56,"column":4},"end":{"line":56,"column":32}},"11":{"start":{"line":62,"column":4},"end":{"line":62,"column":82}},"12":{"start":{"line":68,"column":4},"end":{"line":68,"column":85}}},"branchMap":{"1":{"line":27,"type":"if","locations":[{"start":{"line":27,"column":4},"end":{"line":27,"column":4}},{"start":{"line":27,"column":4},"end":{"line":27,"column":4}}]},"2":{"line":50,"type":"if","locations":[{"start":{"line":50,"column":4},"end":{"line":50,"column":4}},{"start":{"line":50,"column":4},"end":{"line":50,"column":4}}]},"3":{"line":56,"type":"if","locations":[{"start":{"line":56,"column":4},"end":{"line":56,"column":4}},{"start":{"line":56,"column":4},"end":{"line":56,"column":4}}]},"4":{"line":62,"type":"if","locations":[{"start":{"line":62,"column":4},"end":{"line":62,"column":4}},{"start":{"line":62,"column":4},"end":{"line":62,"column":4}}]},"5":{"line":68,"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":68,"column":4}},{"start":{"line":68,"column":4},"end":{"line":68,"column":4}}]}}},"contracts/access/ERC20Burner.sol":{"l":{"20":6,"21":6,"22":6,"33":40,"34":39,"35":39,"47":15,"48":15,"49":15,"57":1,"66":15,"67":15,"72":45,"73":43,"78":43,"79":43,"80":40},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/access/ERC20Burner.sol","s":{"1":6,"2":6,"3":6,"4":40,"5":39,"6":39,"7":15,"8":15,"9":1,"10":15,"11":45,"12":43,"13":43},"b":{"1":[6,0],"2":[39,1],"3":[15,0],"4":[43,2],"5":[40,3]},"f":{"1":6,"2":40,"3":15,"4":1,"5":15,"6":45,"7":43},"fnMap":{"1":{"name":null,"line":18,"loc":{"start":{"line":18,"column":2},"end":{"line":19,"column":10}}},"2":{"name":"burn","line":28,"loc":{"start":{"line":28,"column":2},"end":{"line":32,"column":18}}},"3":{"name":"setFee","line":42,"loc":{"start":{"line":42,"column":2},"end":{"line":45,"column":18}}},"4":{"name":null,"line":54,"loc":{"start":{"line":54,"column":2},"end":{"line":56,"column":11}}},"5":{"name":"onlyOwner","line":65,"loc":{"start":{"line":65,"column":2},"end":{"line":65,"column":20}}},"6":{"name":"onlyPlatformContracts","line":71,"loc":{"start":{"line":71,"column":2},"end":{"line":71,"column":49}}},"7":{"name":"acceptedState","line":77,"loc":{"start":{"line":77,"column":2},"end":{"line":77,"column":43}}}},"statementMap":{"1":{"start":{"line":20,"column":4},"end":{"line":20,"column":36}},"2":{"start":{"line":21,"column":4},"end":{"line":21,"column":95}},"3":{"start":{"line":22,"column":4},"end":{"line":22,"column":40}},"4":{"start":{"line":33,"column":4},"end":{"line":33,"column":49}},"5":{"start":{"line":34,"column":4},"end":{"line":34,"column":56}},"6":{"start":{"line":35,"column":4},"end":{"line":35,"column":15}},"7":{"start":{"line":48,"column":4},"end":{"line":48,"column":58}},"8":{"start":{"line":49,"column":4},"end":{"line":49,"column":15}},"9":{"start":{"line":57,"column":4},"end":{"line":57,"column":11}},"10":{"start":{"line":66,"column":4},"end":{"line":66,"column":82}},"11":{"start":{"line":72,"column":4},"end":{"line":72,"column":82}},"12":{"start":{"line":78,"column":4},"end":{"line":78,"column":94}},"13":{"start":{"line":79,"column":4},"end":{"line":79,"column":172}}},"branchMap":{"1":{"line":22,"type":"if","locations":[{"start":{"line":22,"column":4},"end":{"line":22,"column":4}},{"start":{"line":22,"column":4},"end":{"line":22,"column":4}}]},"2":{"line":33,"type":"if","locations":[{"start":{"line":33,"column":4},"end":{"line":33,"column":4}},{"start":{"line":33,"column":4},"end":{"line":33,"column":4}}]},"3":{"line":66,"type":"if","locations":[{"start":{"line":66,"column":4},"end":{"line":66,"column":4}},{"start":{"line":66,"column":4},"end":{"line":66,"column":4}}]},"4":{"line":72,"type":"if","locations":[{"start":{"line":72,"column":4},"end":{"line":72,"column":4}},{"start":{"line":72,"column":4},"end":{"line":72,"column":4}}]},"5":{"line":79,"type":"if","locations":[{"start":{"line":79,"column":4},"end":{"line":79,"column":4}},{"start":{"line":79,"column":4},"end":{"line":79,"column":4}}]}}},"contracts/access/Expirable.sol":{"l":{"27":1,"28":1,"29":1,"30":1,"40":1,"41":1,"42":1,"51":1,"52":1,"53":1},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/access/Expirable.sol","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1},"b":{"1":[1,0],"2":[1,0]},"f":{"1":1,"2":1,"3":1,"4":1},"fnMap":{"1":{"name":null,"line":14,"loc":{"start":{"line":14,"column":2},"end":{"line":14,"column":65}}},"2":{"name":"approveTemporaryUser","line":22,"loc":{"start":{"line":22,"column":2},"end":{"line":26,"column":18}}},"3":{"name":"removeTemporaryUser","line":36,"loc":{"start":{"line":36,"column":2},"end":{"line":39,"column":18}}},"4":{"name":"changeExpirationLength","line":48,"loc":{"start":{"line":48,"column":2},"end":{"line":50,"column":13}}}},"statementMap":{"1":{"start":{"line":27,"column":4},"end":{"line":27,"column":47}},"2":{"start":{"line":28,"column":4},"end":{"line":28,"column":32}},"3":{"start":{"line":30,"column":4},"end":{"line":30,"column":15}},"4":{"start":{"line":40,"column":4},"end":{"line":40,"column":29}},"5":{"start":{"line":42,"column":4},"end":{"line":42,"column":15}},"6":{"start":{"line":51,"column":4},"end":{"line":51,"column":40}},"7":{"start":{"line":52,"column":4},"end":{"line":52,"column":42}},"8":{"start":{"line":53,"column":4},"end":{"line":53,"column":68}}},"branchMap":{"1":{"line":27,"type":"if","locations":[{"start":{"line":27,"column":4},"end":{"line":27,"column":4}},{"start":{"line":27,"column":4},"end":{"line":27,"column":4}}]},"2":{"line":40,"type":"if","locations":[{"start":{"line":40,"column":4},"end":{"line":40,"column":4}},{"start":{"line":40,"column":4},"end":{"line":40,"column":4}}]}}},"contracts/access/KYC.sol":{"l":{"17":1,"18":1,"25":1},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/access/KYC.sol","s":{"1":1},"b":{},"f":{"1":1,"2":1,"3":1},"fnMap":{"1":{"name":null,"line":11,"loc":{"start":{"line":11,"column":2},"end":{"line":11,"column":65}}},"2":{"name":"approveKYC","line":14,"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":12}}},"3":{"name":"revokeKYC","line":22,"loc":{"start":{"line":22,"column":2},"end":{"line":24,"column":13}}}},"statementMap":{"1":{"start":{"line":18,"column":4},"end":{"line":18,"column":42}}},"branchMap":{}},"contracts/crowdsale/CrowdsaleERC20.sol":{"l":{"23":2,"24":2,"39":5,"40":5,"41":5,"42":5,"43":5,"44":3,"45":3,"46":3,"47":3,"48":3,"49":3,"52":2,"53":2,"55":4,"56":4,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"90":3,"91":3,"92":3,"93":3,"94":2,"95":2,"96":2,"97":2,"98":2,"99":2,"106":0,"107":0,"108":0,"115":0,"116":0,"130":3,"131":3,"132":3,"133":3,"142":0,"143":0,"148":9,"149":8,"154":5,"155":5,"160":9,"161":9,"166":7,"167":6,"172":2,"173":1,"178":7,"179":6},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/crowdsale/CrowdsaleERC20.sol","s":{"1":2,"2":2,"3":5,"4":5,"5":5,"6":5,"7":5,"8":3,"9":3,"10":3,"11":3,"12":3,"13":3,"14":2,"15":2,"16":4,"17":4,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":3,"25":3,"26":3,"27":3,"28":2,"29":2,"30":2,"31":2,"32":0,"33":0,"34":0,"35":0,"36":3,"37":0,"38":9,"39":5,"40":9,"41":7,"42":2,"43":7},"b":{"1":[3,2],"2":[3,0],"3":[3,0],"4":[3,0],"5":[3,0],"6":[3,0],"7":[2,1],"8":[2,0],"9":[2,0],"10":[1,0],"11":[2,1],"12":[0,0],"13":[8,1],"14":[5,0],"15":[9,0],"16":[6,1],"17":[1,1],"18":[6,1]},"f":{"1":2,"2":5,"3":1,"4":3,"5":0,"6":0,"7":3,"8":0,"9":9,"10":5,"11":9,"12":7,"13":2,"14":7},"fnMap":{"1":{"name":null,"line":21,"loc":{"start":{"line":21,"column":2},"end":{"line":22,"column":9}}},"2":{"name":"buyAssetOrderERC20","line":32,"loc":{"start":{"line":32,"column":2},"end":{"line":38,"column":18}}},"3":{"name":"refund","line":62,"loc":{"start":{"line":62,"column":2},"end":{"line":68,"column":18}}},"4":{"name":"payoutERC20","line":86,"loc":{"start":{"line":86,"column":2},"end":{"line":89,"column":18}}},"5":{"name":"recoverTokens","line":103,"loc":{"start":{"line":103,"column":2},"end":{"line":105,"column":12}}},"6":{"name":"destroy","line":112,"loc":{"start":{"line":112,"column":2},"end":{"line":114,"column":12}}},"7":{"name":"finalizeCrowdsale","line":126,"loc":{"start":{"line":126,"column":2},"end":{"line":129,"column":18}}},"8":{"name":"onlyOwner","line":141,"loc":{"start":{"line":141,"column":2},"end":{"line":141,"column":20}}},"9":{"name":"whenNotPaused","line":147,"loc":{"start":{"line":147,"column":2},"end":{"line":147,"column":24}}},"10":{"name":"burnRequired","line":153,"loc":{"start":{"line":153,"column":2},"end":{"line":153,"column":23}}},"11":{"name":"validAsset","line":159,"loc":{"start":{"line":159,"column":2},"end":{"line":159,"column":39}}},"12":{"name":"beforeDeadline","line":165,"loc":{"start":{"line":165,"column":2},"end":{"line":165,"column":43}}},"13":{"name":"afterDeadline","line":171,"loc":{"start":{"line":171,"column":2},"end":{"line":171,"column":42}}},"14":{"name":"notFinalized","line":177,"loc":{"start":{"line":177,"column":2},"end":{"line":177,"column":41}}}},"statementMap":{"1":{"start":{"line":23,"column":6},"end":{"line":23,"column":38}},"2":{"start":{"line":24,"column":6},"end":{"line":24,"column":106}},"3":{"start":{"line":39,"column":4},"end":{"line":39,"column":141}},"4":{"start":{"line":40,"column":4},"end":{"line":40,"column":109}},"5":{"start":{"line":41,"column":4},"end":{"line":41,"column":100}},"6":{"start":{"line":42,"column":4},"end":{"line":42,"column":69}},"7":{"start":{"line":43,"column":4},"end":{"line":43,"column":1944}},"8":{"start":{"line":44,"column":6},"end":{"line":44,"column":83}},"9":{"start":{"line":45,"column":6},"end":{"line":45,"column":190}},"10":{"start":{"line":46,"column":6},"end":{"line":46,"column":41}},"11":{"start":{"line":47,"column":6},"end":{"line":47,"column":58}},"12":{"start":{"line":48,"column":6},"end":{"line":48,"column":40}},"13":{"start":{"line":49,"column":6},"end":{"line":49,"column":50}},"14":{"start":{"line":52,"column":6},"end":{"line":52,"column":75}},"15":{"start":{"line":53,"column":6},"end":{"line":53,"column":50}},"16":{"start":{"line":55,"column":4},"end":{"line":55,"column":57}},"17":{"start":{"line":56,"column":4},"end":{"line":56,"column":15}},"18":{"start":{"line":69,"column":4},"end":{"line":69,"column":95}},"19":{"start":{"line":71,"column":4},"end":{"line":71,"column":104}},"20":{"start":{"line":72,"column":4},"end":{"line":72,"column":75}},"21":{"start":{"line":73,"column":4},"end":{"line":73,"column":109}},"22":{"start":{"line":74,"column":4},"end":{"line":74,"column":46}},"23":{"start":{"line":77,"column":4},"end":{"line":77,"column":15}},"24":{"start":{"line":90,"column":4},"end":{"line":90,"column":109}},"25":{"start":{"line":91,"column":4},"end":{"line":91,"column":96}},"26":{"start":{"line":92,"column":4},"end":{"line":92,"column":98}},"27":{"start":{"line":93,"column":4},"end":{"line":93,"column":66}},"28":{"start":{"line":94,"column":4},"end":{"line":94,"column":50}},"29":{"start":{"line":95,"column":4},"end":{"line":95,"column":54}},"30":{"start":{"line":98,"column":4},"end":{"line":98,"column":52}},"31":{"start":{"line":99,"column":4},"end":{"line":99,"column":15}},"32":{"start":{"line":106,"column":4},"end":{"line":106,"column":39}},"33":{"start":{"line":107,"column":4},"end":{"line":107,"column":60}},"34":{"start":{"line":115,"column":4},"end":{"line":115,"column":58}},"35":{"start":{"line":116,"column":4},"end":{"line":116,"column":27}},"36":{"start":{"line":133,"column":6},"end":{"line":133,"column":17}},"37":{"start":{"line":142,"column":4},"end":{"line":142,"column":82}},"38":{"start":{"line":148,"column":4},"end":{"line":148,"column":87}},"39":{"start":{"line":154,"column":4},"end":{"line":154,"column":110}},"40":{"start":{"line":160,"column":4},"end":{"line":160,"column":104}},"41":{"start":{"line":166,"column":4},"end":{"line":166,"column":97}},"42":{"start":{"line":172,"column":4},"end":{"line":172,"column":96}},"43":{"start":{"line":178,"column":4},"end":{"line":178,"column":96}}},"branchMap":{"1":{"line":43,"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":43,"column":4}},{"start":{"line":43,"column":4},"end":{"line":43,"column":4}}]},"2":{"line":44,"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":44,"column":6}},{"start":{"line":44,"column":6},"end":{"line":44,"column":6}}]},"3":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":6},"end":{"line":45,"column":6}},{"start":{"line":45,"column":6},"end":{"line":45,"column":6}}]},"4":{"line":46,"type":"if","locations":[{"start":{"line":46,"column":6},"end":{"line":46,"column":6}},{"start":{"line":46,"column":6},"end":{"line":46,"column":6}}]},"5":{"line":47,"type":"if","locations":[{"start":{"line":47,"column":6},"end":{"line":47,"column":6}},{"start":{"line":47,"column":6},"end":{"line":47,"column":6}}]},"6":{"line":48,"type":"if","locations":[{"start":{"line":48,"column":6},"end":{"line":48,"column":6}},{"start":{"line":48,"column":6},"end":{"line":48,"column":6}}]},"7":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":6},"end":{"line":49,"column":6}},{"start":{"line":49,"column":6},"end":{"line":49,"column":6}}]},"8":{"line":52,"type":"if","locations":[{"start":{"line":52,"column":6},"end":{"line":52,"column":6}},{"start":{"line":52,"column":6},"end":{"line":52,"column":6}}]},"9":{"line":53,"type":"if","locations":[{"start":{"line":53,"column":6},"end":{"line":53,"column":6}},{"start":{"line":53,"column":6},"end":{"line":53,"column":6}}]},"10":{"line":69,"type":"if","locations":[{"start":{"line":69,"column":4},"end":{"line":69,"column":4}},{"start":{"line":69,"column":4},"end":{"line":69,"column":4}}]},"11":{"line":93,"type":"if","locations":[{"start":{"line":93,"column":4},"end":{"line":93,"column":4}},{"start":{"line":93,"column":4},"end":{"line":93,"column":4}}]},"12":{"line":142,"type":"if","locations":[{"start":{"line":142,"column":4},"end":{"line":142,"column":4}},{"start":{"line":142,"column":4},"end":{"line":142,"column":4}}]},"13":{"line":148,"type":"if","locations":[{"start":{"line":148,"column":4},"end":{"line":148,"column":4}},{"start":{"line":148,"column":4},"end":{"line":148,"column":4}}]},"14":{"line":154,"type":"if","locations":[{"start":{"line":154,"column":4},"end":{"line":154,"column":4}},{"start":{"line":154,"column":4},"end":{"line":154,"column":4}}]},"15":{"line":160,"type":"if","locations":[{"start":{"line":160,"column":4},"end":{"line":160,"column":4}},{"start":{"line":160,"column":4},"end":{"line":160,"column":4}}]},"16":{"line":166,"type":"if","locations":[{"start":{"line":166,"column":4},"end":{"line":166,"column":4}},{"start":{"line":166,"column":4},"end":{"line":166,"column":4}}]},"17":{"line":172,"type":"if","locations":[{"start":{"line":172,"column":4},"end":{"line":172,"column":4}},{"start":{"line":172,"column":4},"end":{"line":172,"column":4}}]},"18":{"line":178,"type":"if","locations":[{"start":{"line":178,"column":4},"end":{"line":178,"column":4}},{"start":{"line":178,"column":4},"end":{"line":178,"column":4}}]}}},"contracts/crowdsale/CrowdsaleETH.sol":{"l":{"23":2,"24":2,"39":5,"40":5,"41":5,"42":5,"44":3,"45":3,"46":3,"47":3,"48":3,"49":3,"52":2,"54":5,"55":5,"68":2,"69":2,"70":2,"71":2,"72":2,"73":2,"74":2,"81":0,"82":0,"83":0,"90":1,"91":1,"98":1,"112":3,"113":3,"114":3,"115":3,"116":3,"117":3,"118":3,"119":3,"120":3,"128":3,"129":3,"130":3,"131":3,"142":8,"143":8,"148":2,"149":1,"154":5,"155":5,"160":3,"161":2,"166":10,"167":10,"172":8,"173":5,"178":2,"179":2,"184":7,"185":7},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/crowdsale/CrowdsaleETH.sol","s":{"1":2,"2":2,"3":5,"4":5,"5":5,"6":5,"7":3,"8":3,"9":3,"10":3,"11":3,"12":2,"13":5,"14":5,"15":2,"16":2,"17":2,"18":2,"19":0,"20":0,"21":1,"22":1,"23":1,"24":3,"25":3,"26":3,"27":3,"28":3,"29":3,"30":3,"31":3,"32":8,"33":2,"34":5,"35":3,"36":10,"37":8,"38":2,"39":7},"b":{"1":[3,2],"2":[3,0],"3":[3,0],"4":[3,0],"5":[3,0],"6":[3,0],"7":[2,0],"8":[2,0],"9":[3,0],"10":[8,0],"11":[1,1],"12":[5,0],"13":[2,1],"14":[10,0],"15":[5,3],"16":[2,0],"17":[7,0]},"f":{"1":2,"2":5,"3":2,"4":0,"5":1,"6":1,"7":3,"8":3,"9":8,"10":2,"11":5,"12":3,"13":10,"14":8,"15":2,"16":7},"fnMap":{"1":{"name":null,"line":21,"loc":{"start":{"line":21,"column":4},"end":{"line":22,"column":12}}},"2":{"name":"buyAssetOrderETH","line":30,"loc":{"start":{"line":30,"column":4},"end":{"line":38,"column":20}}},"3":{"name":"refund","line":61,"loc":{"start":{"line":61,"column":4},"end":{"line":67,"column":20}}},"4":{"name":"recoverTokens","line":78,"loc":{"start":{"line":78,"column":4},"end":{"line":80,"column":14}}},"5":{"name":"destroy","line":87,"loc":{"start":{"line":87,"column":4},"end":{"line":89,"column":14}}},"6":{"name":null,"line":95,"loc":{"start":{"line":95,"column":4},"end":{"line":97,"column":13}}},"7":{"name":"payoutETH","line":109,"loc":{"start":{"line":109,"column":4},"end":{"line":111,"column":20}}},"8":{"name":"finalizeCrowdsale","line":125,"loc":{"start":{"line":125,"column":4},"end":{"line":127,"column":20}}},"9":{"name":"requiresEther","line":141,"loc":{"start":{"line":141,"column":4},"end":{"line":141,"column":26}}},"10":{"name":"onlyOwner","line":147,"loc":{"start":{"line":147,"column":4},"end":{"line":147,"column":20}}},"11":{"name":"burnRequired","line":153,"loc":{"start":{"line":153,"column":4},"end":{"line":153,"column":23}}},"12":{"name":"whenNotPaused","line":159,"loc":{"start":{"line":159,"column":4},"end":{"line":159,"column":24}}},"13":{"name":"validAsset","line":165,"loc":{"start":{"line":165,"column":4},"end":{"line":165,"column":39}}},"14":{"name":"beforeDeadline","line":171,"loc":{"start":{"line":171,"column":4},"end":{"line":171,"column":43}}},"15":{"name":"afterDeadline","line":177,"loc":{"start":{"line":177,"column":4},"end":{"line":177,"column":42}}},"16":{"name":"notFinalized","line":183,"loc":{"start":{"line":183,"column":4},"end":{"line":183,"column":41}}}},"statementMap":{"1":{"start":{"line":23,"column":8},"end":{"line":23,"column":40}},"2":{"start":{"line":24,"column":8},"end":{"line":24,"column":108}},"3":{"start":{"line":39,"column":6},"end":{"line":39,"column":143}},"4":{"start":{"line":40,"column":6},"end":{"line":40,"column":102}},"5":{"start":{"line":41,"column":6},"end":{"line":41,"column":71}},"6":{"start":{"line":42,"column":6},"end":{"line":42,"column":1638}},"7":{"start":{"line":44,"column":8},"end":{"line":44,"column":191}},"8":{"start":{"line":45,"column":8},"end":{"line":45,"column":43}},"9":{"start":{"line":46,"column":8},"end":{"line":46,"column":60}},"10":{"start":{"line":47,"column":8},"end":{"line":47,"column":42}},"11":{"start":{"line":48,"column":8},"end":{"line":48,"column":50}},"12":{"start":{"line":52,"column":8},"end":{"line":52,"column":54}},"13":{"start":{"line":54,"column":6},"end":{"line":54,"column":61}},"14":{"start":{"line":55,"column":6},"end":{"line":55,"column":17}},"15":{"start":{"line":68,"column":6},"end":{"line":68,"column":97}},"16":{"start":{"line":71,"column":6},"end":{"line":71,"column":143}},"17":{"start":{"line":72,"column":6},"end":{"line":72,"column":48}},"18":{"start":{"line":74,"column":6},"end":{"line":74,"column":17}},"19":{"start":{"line":81,"column":6},"end":{"line":81,"column":41}},"20":{"start":{"line":82,"column":6},"end":{"line":82,"column":62}},"21":{"start":{"line":90,"column":6},"end":{"line":90,"column":60}},"22":{"start":{"line":91,"column":6},"end":{"line":91,"column":29}},"23":{"start":{"line":98,"column":6},"end":{"line":98,"column":13}},"24":{"start":{"line":112,"column":6},"end":{"line":112,"column":105}},"25":{"start":{"line":113,"column":6},"end":{"line":113,"column":100}},"26":{"start":{"line":114,"column":6},"end":{"line":114,"column":75}},"27":{"start":{"line":115,"column":6},"end":{"line":115,"column":52}},"28":{"start":{"line":116,"column":6},"end":{"line":116,"column":56}},"29":{"start":{"line":119,"column":6},"end":{"line":119,"column":61}},"30":{"start":{"line":120,"column":6},"end":{"line":120,"column":17}},"31":{"start":{"line":131,"column":8},"end":{"line":131,"column":19}},"32":{"start":{"line":142,"column":6},"end":{"line":142,"column":27}},"33":{"start":{"line":148,"column":6},"end":{"line":148,"column":84}},"34":{"start":{"line":154,"column":6},"end":{"line":154,"column":112}},"35":{"start":{"line":160,"column":6},"end":{"line":160,"column":89}},"36":{"start":{"line":166,"column":6},"end":{"line":166,"column":106}},"37":{"start":{"line":172,"column":6},"end":{"line":172,"column":99}},"38":{"start":{"line":178,"column":6},"end":{"line":178,"column":98}},"39":{"start":{"line":184,"column":6},"end":{"line":184,"column":98}}},"branchMap":{"1":{"line":42,"type":"if","locations":[{"start":{"line":42,"column":6},"end":{"line":42,"column":6}},{"start":{"line":42,"column":6},"end":{"line":42,"column":6}}]},"2":{"line":44,"type":"if","locations":[{"start":{"line":44,"column":8},"end":{"line":44,"column":8}},{"start":{"line":44,"column":8},"end":{"line":44,"column":8}}]},"3":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":8},"end":{"line":45,"column":8}},{"start":{"line":45,"column":8},"end":{"line":45,"column":8}}]},"4":{"line":46,"type":"if","locations":[{"start":{"line":46,"column":8},"end":{"line":46,"column":8}},{"start":{"line":46,"column":8},"end":{"line":46,"column":8}}]},"5":{"line":47,"type":"if","locations":[{"start":{"line":47,"column":8},"end":{"line":47,"column":8}},{"start":{"line":47,"column":8},"end":{"line":47,"column":8}}]},"6":{"line":48,"type":"if","locations":[{"start":{"line":48,"column":8},"end":{"line":48,"column":8}},{"start":{"line":48,"column":8},"end":{"line":48,"column":8}}]},"7":{"line":52,"type":"if","locations":[{"start":{"line":52,"column":8},"end":{"line":52,"column":8}},{"start":{"line":52,"column":8},"end":{"line":52,"column":8}}]},"8":{"line":68,"type":"if","locations":[{"start":{"line":68,"column":6},"end":{"line":68,"column":6}},{"start":{"line":68,"column":6},"end":{"line":68,"column":6}}]},"9":{"line":114,"type":"if","locations":[{"start":{"line":114,"column":6},"end":{"line":114,"column":6}},{"start":{"line":114,"column":6},"end":{"line":114,"column":6}}]},"10":{"line":142,"type":"if","locations":[{"start":{"line":142,"column":6},"end":{"line":142,"column":6}},{"start":{"line":142,"column":6},"end":{"line":142,"column":6}}]},"11":{"line":148,"type":"if","locations":[{"start":{"line":148,"column":6},"end":{"line":148,"column":6}},{"start":{"line":148,"column":6},"end":{"line":148,"column":6}}]},"12":{"line":154,"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":154,"column":6}},{"start":{"line":154,"column":6},"end":{"line":154,"column":6}}]},"13":{"line":160,"type":"if","locations":[{"start":{"line":160,"column":6},"end":{"line":160,"column":6}},{"start":{"line":160,"column":6},"end":{"line":160,"column":6}}]},"14":{"line":166,"type":"if","locations":[{"start":{"line":166,"column":6},"end":{"line":166,"column":6}},{"start":{"line":166,"column":6},"end":{"line":166,"column":6}}]},"15":{"line":172,"type":"if","locations":[{"start":{"line":172,"column":6},"end":{"line":172,"column":6}},{"start":{"line":172,"column":6},"end":{"line":172,"column":6}}]},"16":{"line":178,"type":"if","locations":[{"start":{"line":178,"column":6},"end":{"line":178,"column":6}},{"start":{"line":178,"column":6},"end":{"line":178,"column":6}}]},"17":{"line":184,"type":"if","locations":[{"start":{"line":184,"column":6},"end":{"line":184,"column":6}},{"start":{"line":184,"column":6},"end":{"line":184,"column":6}}]}}},"contracts/crowdsale/CrowdsaleGeneratorERC20.sol":{"l":{"23":2,"24":2,"38":6,"39":5,"40":5,"41":5,"42":4,"43":4,"44":3,"45":3,"46":3,"47":3,"48":3,"49":3,"50":3,"51":3,"52":3,"53":3,"54":3,"65":6,"66":6},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/crowdsale/CrowdsaleGeneratorERC20.sol","s":{"1":2,"2":2,"3":6,"4":5,"5":5,"6":5,"7":4,"8":4,"9":3,"10":3,"11":3,"12":6},"b":{"1":[5,1],"2":[5,0],"3":[5,0],"4":[4,1],"5":[3,1],"6":[6,0]},"f":{"1":2,"2":6,"3":6},"fnMap":{"1":{"name":null,"line":21,"loc":{"start":{"line":21,"column":2},"end":{"line":22,"column":9}}},"2":{"name":"createAssetOrderERC20","line":35,"loc":{"start":{"line":35,"column":2},"end":{"line":37,"column":16}}},"3":{"name":"burnRequired","line":63,"loc":{"start":{"line":63,"column":2},"end":{"line":63,"column":23}}}},"statementMap":{"1":{"start":{"line":23,"column":6},"end":{"line":23,"column":38}},"2":{"start":{"line":24,"column":6},"end":{"line":24,"column":106}},"3":{"start":{"line":38,"column":4},"end":{"line":38,"column":30}},"4":{"start":{"line":39,"column":4},"end":{"line":39,"column":35}},"5":{"start":{"line":40,"column":4},"end":{"line":40,"column":105}},"6":{"start":{"line":41,"column":4},"end":{"line":41,"column":103}},"7":{"start":{"line":42,"column":4},"end":{"line":42,"column":100}},"8":{"start":{"line":43,"column":4},"end":{"line":43,"column":94}},"9":{"start":{"line":44,"column":4},"end":{"line":44,"column":167}},"10":{"start":{"line":46,"column":4},"end":{"line":46,"column":150}},"11":{"start":{"line":54,"column":4},"end":{"line":54,"column":77}},"12":{"start":{"line":65,"column":4},"end":{"line":65,"column":110}}},"branchMap":{"1":{"line":38,"type":"if","locations":[{"start":{"line":38,"column":4},"end":{"line":38,"column":4}},{"start":{"line":38,"column":4},"end":{"line":38,"column":4}}]},"2":{"line":39,"type":"if","locations":[{"start":{"line":39,"column":4},"end":{"line":39,"column":4}},{"start":{"line":39,"column":4},"end":{"line":39,"column":4}}]},"3":{"line":40,"type":"if","locations":[{"start":{"line":40,"column":4},"end":{"line":40,"column":4}},{"start":{"line":40,"column":4},"end":{"line":40,"column":4}}]},"4":{"line":41,"type":"if","locations":[{"start":{"line":41,"column":4},"end":{"line":41,"column":4}},{"start":{"line":41,"column":4},"end":{"line":41,"column":4}}]},"5":{"line":43,"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":43,"column":4}},{"start":{"line":43,"column":4},"end":{"line":43,"column":4}}]},"6":{"line":65,"type":"if","locations":[{"start":{"line":65,"column":4},"end":{"line":65,"column":4}},{"start":{"line":65,"column":4},"end":{"line":65,"column":4}}]}}},"contracts/crowdsale/CrowdsaleGeneratorETH.sol":{"l":{"23":2,"24":2,"38":9,"39":8,"40":7,"41":7,"42":6,"43":6,"44":5,"45":5,"46":5,"47":5,"48":5,"49":5,"50":5,"51":5,"52":5,"53":5,"54":5,"65":9,"66":9},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/crowdsale/CrowdsaleGeneratorETH.sol","s":{"1":2,"2":2,"3":9,"4":8,"5":7,"6":7,"7":6,"8":6,"9":5,"10":5,"11":5,"12":5,"13":9},"b":{"1":[8,1],"2":[7,1],"3":[7,0],"4":[6,1],"5":[5,1],"6":[9,0]},"f":{"1":2,"2":9,"3":9},"fnMap":{"1":{"name":null,"line":21,"loc":{"start":{"line":21,"column":2},"end":{"line":22,"column":9}}},"2":{"name":"createAssetOrderETH","line":34,"loc":{"start":{"line":34,"column":2},"end":{"line":37,"column":18}}},"3":{"name":"burnRequired","line":63,"loc":{"start":{"line":63,"column":2},"end":{"line":63,"column":23}}}},"statementMap":{"1":{"start":{"line":23,"column":6},"end":{"line":23,"column":38}},"2":{"start":{"line":24,"column":6},"end":{"line":24,"column":106}},"3":{"start":{"line":38,"column":4},"end":{"line":38,"column":30}},"4":{"start":{"line":39,"column":4},"end":{"line":39,"column":35}},"5":{"start":{"line":40,"column":4},"end":{"line":40,"column":90}},"6":{"start":{"line":41,"column":4},"end":{"line":41,"column":103}},"7":{"start":{"line":42,"column":4},"end":{"line":42,"column":100}},"8":{"start":{"line":43,"column":4},"end":{"line":43,"column":94}},"9":{"start":{"line":44,"column":4},"end":{"line":44,"column":145}},"10":{"start":{"line":46,"column":4},"end":{"line":46,"column":150}},"11":{"start":{"line":53,"column":4},"end":{"line":53,"column":86}},"12":{"start":{"line":54,"column":4},"end":{"line":54,"column":15}},"13":{"start":{"line":65,"column":4},"end":{"line":65,"column":110}}},"branchMap":{"1":{"line":38,"type":"if","locations":[{"start":{"line":38,"column":4},"end":{"line":38,"column":4}},{"start":{"line":38,"column":4},"end":{"line":38,"column":4}}]},"2":{"line":39,"type":"if","locations":[{"start":{"line":39,"column":4},"end":{"line":39,"column":4}},{"start":{"line":39,"column":4},"end":{"line":39,"column":4}}]},"3":{"line":40,"type":"if","locations":[{"start":{"line":40,"column":4},"end":{"line":40,"column":4}},{"start":{"line":40,"column":4},"end":{"line":40,"column":4}}]},"4":{"line":41,"type":"if","locations":[{"start":{"line":41,"column":4},"end":{"line":41,"column":4}},{"start":{"line":41,"column":4},"end":{"line":41,"column":4}}]},"5":{"line":43,"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":43,"column":4}},{"start":{"line":43,"column":4},"end":{"line":43,"column":4}}]},"6":{"line":65,"type":"if","locations":[{"start":{"line":65,"column":4},"end":{"line":65,"column":4}},{"start":{"line":65,"column":4},"end":{"line":65,"column":4}}]}}},"contracts/database/API.sol":{"l":{"33":6,"47":1,"48":1,"49":1,"50":1,"57":0,"64":1,"71":1,"72":1,"79":3,"86":1,"93":3,"100":0,"107":0,"118":0,"119":0,"126":0,"127":0,"134":2,"135":2,"142":0,"143":0,"160":1,"161":1,"168":0,"169":0,"176":0,"177":0,"184":4,"185":4,"197":0,"198":0,"205":0,"206":0,"213":2,"214":2,"221":1,"228":1,"229":1,"230":1,"237":1,"238":1,"245":0,"246":0,"253":0,"254":0,"261":0,"262":0,"269":0,"270":0,"281":0,"282":0,"294":0,"295":0,"302":0,"303":0,"310":0,"311":0,"318":0,"319":0,"326":0,"327":0,"334":0,"335":0,"342":0,"343":0,"354":0,"355":0},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/database/API.sol","s":{"1":6,"2":1,"3":1,"4":1,"5":1,"6":0,"7":1,"8":1,"9":1,"10":3,"11":1,"12":3,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":2,"20":2,"21":0,"22":0,"23":1,"24":1,"25":0,"26":0,"27":0,"28":0,"29":4,"30":4,"31":0,"32":0,"33":0,"34":0,"35":2,"36":2,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0},"b":{},"f":{"1":6,"2":1,"3":0,"4":1,"5":1,"6":3,"7":1,"8":3,"9":0,"10":0,"11":0,"12":0,"13":2,"14":0,"15":1,"16":0,"17":0,"18":4,"19":0,"20":0,"21":2,"22":1,"23":1,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0},"fnMap":{"1":{"name":null,"line":31,"loc":{"start":{"line":31,"column":2},"end":{"line":32,"column":10}}},"2":{"name":"getNumTokensAvailable","line":43,"loc":{"start":{"line":43,"column":2},"end":{"line":46,"column":18}}},"3":{"name":"getInvestorVotes","line":53,"loc":{"start":{"line":53,"column":2},"end":{"line":56,"column":18}}},"4":{"name":"getTotalVotes","line":60,"loc":{"start":{"line":60,"column":2},"end":{"line":63,"column":18}}},"5":{"name":"getCurrentConsensus","line":67,"loc":{"start":{"line":67,"column":2},"end":{"line":70,"column":18}}},"6":{"name":"getAssetManagerParameterHash","line":75,"loc":{"start":{"line":75,"column":2},"end":{"line":78,"column":20}}},"7":{"name":"getExecutionID","line":82,"loc":{"start":{"line":82,"column":2},"end":{"line":85,"column":21}}},"8":{"name":"getMethodID","line":89,"loc":{"start":{"line":89,"column":2},"end":{"line":92,"column":20}}},"9":{"name":"getAssetID","line":96,"loc":{"start":{"line":96,"column":2},"end":{"line":99,"column":20}}},"10":{"name":"getOrderID","line":103,"loc":{"start":{"line":103,"column":2},"end":{"line":106,"column":20}}},"11":{"name":"generateAssetID","line":114,"loc":{"start":{"line":114,"column":2},"end":{"line":117,"column":20}}},"12":{"name":"getAssetID","line":122,"loc":{"start":{"line":122,"column":2},"end":{"line":125,"column":20}}},"13":{"name":"getAssetAddress","line":130,"loc":{"start":{"line":130,"column":2},"end":{"line":133,"column":20}}},"14":{"name":"getAssetFundingToken","line":138,"loc":{"start":{"line":138,"column":2},"end":{"line":141,"column":20}}},"15":{"name":"getAssetROI","line":156,"loc":{"start":{"line":156,"column":2},"end":{"line":159,"column":18}}},"16":{"name":"getAssetFundingGoal","line":164,"loc":{"start":{"line":164,"column":2},"end":{"line":167,"column":17}}},"17":{"name":"getAssetFundingDeadline","line":172,"loc":{"start":{"line":172,"column":2},"end":{"line":175,"column":17}}},"18":{"name":"crowdsaleFinalized","line":180,"loc":{"start":{"line":180,"column":2},"end":{"line":183,"column":17}}},"19":{"name":"getAssetManager","line":193,"loc":{"start":{"line":193,"column":2},"end":{"line":196,"column":20}}},"20":{"name":"getAssetManagerFee","line":201,"loc":{"start":{"line":201,"column":2},"end":{"line":204,"column":17}}},"21":{"name":"getAssetManagerEscrowID","line":209,"loc":{"start":{"line":209,"column":2},"end":{"line":212,"column":20}}},"22":{"name":"getAssetManagerEscrow","line":217,"loc":{"start":{"line":217,"column":2},"end":{"line":220,"column":18}}},"23":{"name":"getAssetManagerEscrowRemaining","line":224,"loc":{"start":{"line":224,"column":2},"end":{"line":227,"column":17}}},"24":{"name":"getAssetManagerEscrowRedeemed","line":233,"loc":{"start":{"line":233,"column":2},"end":{"line":236,"column":17}}},"25":{"name":"getAssetOperator","line":241,"loc":{"start":{"line":241,"column":2},"end":{"line":244,"column":20}}},"26":{"name":"generateOperatorID","line":249,"loc":{"start":{"line":249,"column":2},"end":{"line":252,"column":20}}},"27":{"name":"getOperatorID","line":257,"loc":{"start":{"line":257,"column":2},"end":{"line":260,"column":20}}},"28":{"name":"getOperatorAddress","line":265,"loc":{"start":{"line":265,"column":2},"end":{"line":268,"column":20}}},"29":{"name":"generateOrderID","line":277,"loc":{"start":{"line":277,"column":2},"end":{"line":280,"column":20}}},"30":{"name":"getPlatformToken","line":290,"loc":{"start":{"line":290,"column":2},"end":{"line":293,"column":20}}},"31":{"name":"getPlatformWallet","line":298,"loc":{"start":{"line":298,"column":2},"end":{"line":301,"column":20}}},"32":{"name":"getContractAddress","line":306,"loc":{"start":{"line":306,"column":2},"end":{"line":309,"column":20}}},"33":{"name":"getCurrentState","line":314,"loc":{"start":{"line":314,"column":2},"end":{"line":317,"column":20}}},"34":{"name":"getUserPermission","line":322,"loc":{"start":{"line":322,"column":2},"end":{"line":325,"column":17}}},"35":{"name":"getFunctionCost","line":330,"loc":{"start":{"line":330,"column":2},"end":{"line":333,"column":17}}},"36":{"name":"contractPaused","line":338,"loc":{"start":{"line":338,"column":2},"end":{"line":341,"column":17}}},"37":{"name":"contractOwner","line":350,"loc":{"start":{"line":350,"column":2},"end":{"line":353,"column":17}}}},"statementMap":{"1":{"start":{"line":33,"column":4},"end":{"line":33,"column":31}},"2":{"start":{"line":47,"column":4},"end":{"line":47,"column":109}},"3":{"start":{"line":48,"column":4},"end":{"line":48,"column":102}},"4":{"start":{"line":49,"column":4},"end":{"line":49,"column":60}},"5":{"start":{"line":50,"column":4},"end":{"line":50,"column":36}},"6":{"start":{"line":57,"column":4},"end":{"line":57,"column":102}},"7":{"start":{"line":64,"column":2},"end":{"line":64,"column":85}},"8":{"start":{"line":71,"column":4},"end":{"line":71,"column":48}},"9":{"start":{"line":72,"column":4},"end":{"line":72,"column":68}},"10":{"start":{"line":79,"column":4},"end":{"line":79,"column":100}},"11":{"start":{"line":86,"column":4},"end":{"line":86,"column":95}},"12":{"start":{"line":93,"column":4},"end":{"line":93,"column":63}},"13":{"start":{"line":100,"column":4},"end":{"line":100,"column":87}},"14":{"start":{"line":107,"column":4},"end":{"line":107,"column":87}},"15":{"start":{"line":118,"column":4},"end":{"line":118,"column":97}},"16":{"start":{"line":119,"column":4},"end":{"line":119,"column":18}},"17":{"start":{"line":126,"column":4},"end":{"line":126,"column":104}},"18":{"start":{"line":127,"column":4},"end":{"line":127,"column":18}},"19":{"start":{"line":134,"column":4},"end":{"line":134,"column":104}},"20":{"start":{"line":135,"column":4},"end":{"line":135,"column":23}},"21":{"start":{"line":142,"column":4},"end":{"line":142,"column":111}},"22":{"start":{"line":143,"column":4},"end":{"line":143,"column":30}},"23":{"start":{"line":160,"column":4},"end":{"line":160,"column":62}},"24":{"start":{"line":161,"column":4},"end":{"line":161,"column":71}},"25":{"start":{"line":168,"column":4},"end":{"line":168,"column":98}},"26":{"start":{"line":169,"column":4},"end":{"line":169,"column":22}},"27":{"start":{"line":176,"column":4},"end":{"line":176,"column":104}},"28":{"start":{"line":177,"column":4},"end":{"line":177,"column":26}},"29":{"start":{"line":184,"column":4},"end":{"line":184,"column":98}},"30":{"start":{"line":185,"column":4},"end":{"line":185,"column":17}},"31":{"start":{"line":197,"column":4},"end":{"line":197,"column":106}},"32":{"start":{"line":198,"column":4},"end":{"line":198,"column":25}},"33":{"start":{"line":205,"column":4},"end":{"line":205,"column":99}},"34":{"start":{"line":206,"column":4},"end":{"line":206,"column":21}},"35":{"start":{"line":213,"column":4},"end":{"line":213,"column":76}},"36":{"start":{"line":214,"column":4},"end":{"line":214,"column":26}},"37":{"start":{"line":221,"column":4},"end":{"line":221,"column":100}},"38":{"start":{"line":228,"column":4},"end":{"line":228,"column":66}},"39":{"start":{"line":229,"column":4},"end":{"line":229,"column":126}},"40":{"start":{"line":230,"column":4},"end":{"line":230,"column":23}},"41":{"start":{"line":237,"column":4},"end":{"line":237,"column":110}},"42":{"start":{"line":238,"column":4},"end":{"line":238,"column":25}},"43":{"start":{"line":245,"column":4},"end":{"line":245,"column":103}},"44":{"start":{"line":246,"column":4},"end":{"line":246,"column":26}},"45":{"start":{"line":253,"column":4},"end":{"line":253,"column":65}},"46":{"start":{"line":254,"column":4},"end":{"line":254,"column":21}},"47":{"start":{"line":261,"column":4},"end":{"line":261,"column":106}},"48":{"start":{"line":262,"column":4},"end":{"line":262,"column":21}},"49":{"start":{"line":269,"column":4},"end":{"line":269,"column":106}},"50":{"start":{"line":270,"column":4},"end":{"line":270,"column":26}},"51":{"start":{"line":281,"column":4},"end":{"line":281,"column":95}},"52":{"start":{"line":282,"column":4},"end":{"line":282,"column":18}},"53":{"start":{"line":294,"column":4},"end":{"line":294,"column":95}},"54":{"start":{"line":295,"column":4},"end":{"line":295,"column":23}},"55":{"start":{"line":302,"column":4},"end":{"line":302,"column":97}},"56":{"start":{"line":303,"column":4},"end":{"line":303,"column":24}},"57":{"start":{"line":310,"column":4},"end":{"line":310,"column":108}},"58":{"start":{"line":311,"column":4},"end":{"line":311,"column":26}},"59":{"start":{"line":318,"column":4},"end":{"line":318,"column":94}},"60":{"start":{"line":319,"column":4},"end":{"line":319,"column":23}},"61":{"start":{"line":326,"column":4},"end":{"line":326,"column":96}},"62":{"start":{"line":327,"column":4},"end":{"line":327,"column":17}},"63":{"start":{"line":334,"column":4},"end":{"line":334,"column":81}},"64":{"start":{"line":335,"column":4},"end":{"line":335,"column":15}},"65":{"start":{"line":342,"column":4},"end":{"line":342,"column":87}},"66":{"start":{"line":343,"column":4},"end":{"line":343,"column":17}},"67":{"start":{"line":354,"column":4},"end":{"line":354,"column":85}},"68":{"start":{"line":355,"column":4},"end":{"line":355,"column":17}}},"branchMap":{}},"contracts/database/ContractManager.sol":{"l":{"15":16,"26":69,"27":68,"28":67,"29":67,"30":67,"31":67,"32":67,"33":67,"44":1,"45":1,"46":1,"47":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"65":1,"66":1,"76":177,"77":177,"78":177,"79":177,"80":177,"90":72,"91":71,"97":0,"98":0,"99":0,"103":4,"104":2,"108":147,"109":145},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/database/ContractManager.sol","s":{"1":16,"2":69,"3":68,"4":67,"5":67,"6":67,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":177,"15":177,"16":177,"17":72,"18":0,"19":4,"20":147},"b":{"1":[68,1],"2":[67,1],"3":[71,1],"4":[0,0],"5":[2,2],"6":[145,2]},"f":{"1":16,"2":69,"3":1,"4":1,"5":177,"6":72,"7":0,"8":4,"9":147},"fnMap":{"1":{"name":null,"line":13,"loc":{"start":{"line":13,"column":2},"end":{"line":14,"column":10}}},"2":{"name":"addContract","line":21,"loc":{"start":{"line":21,"column":2},"end":{"line":25,"column":12}}},"3":{"name":"removeContract","line":39,"loc":{"start":{"line":39,"column":2},"end":{"line":43,"column":12}}},"4":{"name":"updateContract","line":53,"loc":{"start":{"line":53,"column":2},"end":{"line":57,"column":12}}},"5":{"name":"setContractStatePreferences","line":73,"loc":{"start":{"line":73,"column":2},"end":{"line":75,"column":18}}},"6":{"name":"anyOwner","line":89,"loc":{"start":{"line":89,"column":2},"end":{"line":89,"column":19}}},"7":{"name":"isRestricted","line":96,"loc":{"start":{"line":96,"column":2},"end":{"line":96,"column":65}}},"8":{"name":"contractExists","line":102,"loc":{"start":{"line":102,"column":2},"end":{"line":102,"column":44}}},"9":{"name":"isTrue","line":107,"loc":{"start":{"line":107,"column":2},"end":{"line":107,"column":36}}}},"statementMap":{"1":{"start":{"line":15,"column":4},"end":{"line":15,"column":36}},"2":{"start":{"line":26,"column":4},"end":{"line":26,"column":92}},"3":{"start":{"line":27,"column":4},"end":{"line":27,"column":97}},"4":{"start":{"line":30,"column":4},"end":{"line":30,"column":94}},"5":{"start":{"line":31,"column":4},"end":{"line":31,"column":81}},"6":{"start":{"line":33,"column":4},"end":{"line":33,"column":64}},"7":{"start":{"line":44,"column":4},"end":{"line":44,"column":101}},"8":{"start":{"line":47,"column":4},"end":{"line":47,"column":66}},"9":{"start":{"line":58,"column":4},"end":{"line":58,"column":95}},"10":{"start":{"line":62,"column":4},"end":{"line":62,"column":94}},"11":{"start":{"line":63,"column":4},"end":{"line":63,"column":84}},"12":{"start":{"line":65,"column":4},"end":{"line":65,"column":60}},"13":{"start":{"line":66,"column":4},"end":{"line":66,"column":73}},"14":{"start":{"line":76,"column":4},"end":{"line":76,"column":94}},"15":{"start":{"line":79,"column":4},"end":{"line":79,"column":96}},"16":{"start":{"line":80,"column":4},"end":{"line":80,"column":15}},"17":{"start":{"line":90,"column":4},"end":{"line":90,"column":82}},"18":{"start":{"line":97,"column":6},"end":{"line":97,"column":105}},"19":{"start":{"line":103,"column":4},"end":{"line":103,"column":84}},"20":{"start":{"line":108,"column":4},"end":{"line":108,"column":24}}},"branchMap":{"1":{"line":26,"type":"if","locations":[{"start":{"line":26,"column":4},"end":{"line":26,"column":4}},{"start":{"line":26,"column":4},"end":{"line":26,"column":4}}]},"2":{"line":27,"type":"if","locations":[{"start":{"line":27,"column":4},"end":{"line":27,"column":4}},{"start":{"line":27,"column":4},"end":{"line":27,"column":4}}]},"3":{"line":90,"type":"if","locations":[{"start":{"line":90,"column":4},"end":{"line":90,"column":4}},{"start":{"line":90,"column":4},"end":{"line":90,"column":4}}]},"4":{"line":97,"type":"if","locations":[{"start":{"line":97,"column":6},"end":{"line":97,"column":6}},{"start":{"line":97,"column":6},"end":{"line":97,"column":6}}]},"5":{"line":103,"type":"if","locations":[{"start":{"line":103,"column":4},"end":{"line":103,"column":4}},{"start":{"line":103,"column":4},"end":{"line":103,"column":4}}]},"6":{"line":108,"type":"if","locations":[{"start":{"line":108,"column":4},"end":{"line":108,"column":4}},{"start":{"line":108,"column":4},"end":{"line":108,"column":4}}]}}},"contracts/database/Database.sol":{"l":{"24":16,"25":17,"26":17,"28":16,"29":15,"38":19,"39":18,"40":17,"41":16,"42":15,"43":15,"50":142,"56":67,"62":1,"68":1,"74":87,"80":445,"86":1,"94":7,"100":23,"106":1,"112":1,"118":1,"124":7,"130":1,"140":786,"141":785},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/database/Database.sol","s":{"1":16,"2":17,"3":17,"4":16,"5":15,"6":19,"7":18,"8":17,"9":16,"10":15,"11":15,"12":142,"13":67,"14":1,"15":1,"16":87,"17":445,"18":1,"19":786},"b":{"1":[15,1],"2":[18,1],"3":[17,1],"4":[16,1],"5":[15,1],"6":[785,1]},"f":{"1":16,"2":19,"3":142,"4":67,"5":1,"6":1,"7":87,"8":445,"9":1,"10":7,"11":23,"12":1,"13":1,"14":1,"15":7,"16":1,"17":786},"fnMap":{"1":{"name":null,"line":23,"loc":{"start":{"line":23,"column":4},"end":{"line":23,"column":58}}},"2":{"name":"enableContractManagement","line":36,"loc":{"start":{"line":36,"column":4},"end":{"line":37,"column":14}}},"3":{"name":"setAddress","line":47,"loc":{"start":{"line":47,"column":4},"end":{"line":49,"column":14}}},"4":{"name":"setUint","line":53,"loc":{"start":{"line":53,"column":4},"end":{"line":55,"column":14}}},"5":{"name":"setString","line":59,"loc":{"start":{"line":59,"column":4},"end":{"line":61,"column":14}}},"6":{"name":"setBytes","line":65,"loc":{"start":{"line":65,"column":4},"end":{"line":67,"column":14}}},"7":{"name":"setBytes32","line":71,"loc":{"start":{"line":71,"column":4},"end":{"line":73,"column":14}}},"8":{"name":"setBool","line":77,"loc":{"start":{"line":77,"column":4},"end":{"line":79,"column":14}}},"9":{"name":"setInt","line":83,"loc":{"start":{"line":83,"column":4},"end":{"line":85,"column":14}}},"10":{"name":"deleteAddress","line":91,"loc":{"start":{"line":91,"column":4},"end":{"line":93,"column":14}}},"11":{"name":"deleteUint","line":97,"loc":{"start":{"line":97,"column":4},"end":{"line":99,"column":14}}},"12":{"name":"deleteString","line":103,"loc":{"start":{"line":103,"column":4},"end":{"line":105,"column":14}}},"13":{"name":"deleteBytes","line":109,"loc":{"start":{"line":109,"column":4},"end":{"line":111,"column":14}}},"14":{"name":"deleteBytes32","line":115,"loc":{"start":{"line":115,"column":4},"end":{"line":117,"column":14}}},"15":{"name":"deleteBool","line":121,"loc":{"start":{"line":121,"column":4},"end":{"line":123,"column":14}}},"16":{"name":"deleteInt","line":127,"loc":{"start":{"line":127,"column":4},"end":{"line":129,"column":14}}},"17":{"name":"onlyApprovedContract","line":139,"loc":{"start":{"line":139,"column":4},"end":{"line":139,"column":33}}}},"statementMap":{"1":{"start":{"line":24,"column":6},"end":{"line":24,"column":962}},"2":{"start":{"line":25,"column":8},"end":{"line":25,"column":75}},"3":{"start":{"line":26,"column":8},"end":{"line":26,"column":53}},"4":{"start":{"line":28,"column":6},"end":{"line":28,"column":1147}},"5":{"start":{"line":29,"column":8},"end":{"line":29,"column":51}},"6":{"start":{"line":38,"column":8},"end":{"line":38,"column":53}},"7":{"start":{"line":39,"column":8},"end":{"line":39,"column":46}},"8":{"start":{"line":40,"column":8},"end":{"line":40,"column":77}},"9":{"start":{"line":41,"column":8},"end":{"line":41,"column":104}},"10":{"start":{"line":42,"column":8},"end":{"line":42,"column":100}},"11":{"start":{"line":43,"column":8},"end":{"line":43,"column":84}},"12":{"start":{"line":50,"column":8},"end":{"line":50,"column":36}},"13":{"start":{"line":56,"column":8},"end":{"line":56,"column":33}},"14":{"start":{"line":62,"column":8},"end":{"line":62,"column":35}},"15":{"start":{"line":68,"column":8},"end":{"line":68,"column":34}},"16":{"start":{"line":74,"column":8},"end":{"line":74,"column":36}},"17":{"start":{"line":80,"column":8},"end":{"line":80,"column":33}},"18":{"start":{"line":86,"column":8},"end":{"line":86,"column":32}},"19":{"start":{"line":140,"column":8},"end":{"line":140,"column":80}}},"branchMap":{"1":{"line":28,"type":"if","locations":[{"start":{"line":28,"column":6},"end":{"line":28,"column":6}},{"start":{"line":28,"column":6},"end":{"line":28,"column":6}}]},"2":{"line":38,"type":"if","locations":[{"start":{"line":38,"column":8},"end":{"line":38,"column":8}},{"start":{"line":38,"column":8},"end":{"line":38,"column":8}}]},"3":{"line":39,"type":"if","locations":[{"start":{"line":39,"column":8},"end":{"line":39,"column":8}},{"start":{"line":39,"column":8},"end":{"line":39,"column":8}}]},"4":{"line":40,"type":"if","locations":[{"start":{"line":40,"column":8},"end":{"line":40,"column":8}},{"start":{"line":40,"column":8},"end":{"line":40,"column":8}}]},"5":{"line":41,"type":"if","locations":[{"start":{"line":41,"column":8},"end":{"line":41,"column":8}},{"start":{"line":41,"column":8},"end":{"line":41,"column":8}}]},"6":{"line":140,"type":"if","locations":[{"start":{"line":140,"column":8},"end":{"line":140,"column":8}},{"start":{"line":140,"column":8},"end":{"line":140,"column":8}}]}}},"contracts/database/Events.sol":{"l":{"11":0,"21":0,"22":0},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/database/Events.sol","s":{"1":0,"2":0},"b":{"1":[0,0]},"f":{"1":0,"2":0},"fnMap":{"1":{"name":"numberStored","line":8,"loc":{"start":{"line":8,"column":2},"end":{"line":10,"column":24}}},"2":{"name":"onlyApprovedContract","line":20,"loc":{"start":{"line":20,"column":2},"end":{"line":20,"column":33}}}},"statementMap":{"1":{"start":{"line":11,"column":6},"end":{"line":11,"column":51}},"2":{"start":{"line":21,"column":6},"end":{"line":21,"column":87}}},"branchMap":{"1":{"line":21,"type":"if","locations":[{"start":{"line":21,"column":6},"end":{"line":21,"column":6}},{"start":{"line":21,"column":6},"end":{"line":21,"column":6}}]}}},"contracts/database/HashEncode.sol":{"l":{"5":0,"8":0,"11":0,"14":0,"17":0,"20":0},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/database/HashEncode.sol","s":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"b":{},"f":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"fnMap":{"1":{"name":"encode","line":4,"loc":{"start":{"line":4,"column":2},"end":{"line":4,"column":75}}},"2":{"name":"encode","line":7,"loc":{"start":{"line":7,"column":2},"end":{"line":7,"column":90}}},"3":{"name":"encode","line":10,"loc":{"start":{"line":10,"column":2},"end":{"line":10,"column":87}}},"4":{"name":"encode","line":13,"loc":{"start":{"line":13,"column":2},"end":{"line":13,"column":75}}},"5":{"name":"encode","line":16,"loc":{"start":{"line":16,"column":2},"end":{"line":16,"column":72}}},"6":{"name":"encode","line":19,"loc":{"start":{"line":19,"column":2},"end":{"line":19,"column":72}}}},"statementMap":{"1":{"start":{"line":5,"column":4},"end":{"line":5,"column":53}},"2":{"start":{"line":8,"column":4},"end":{"line":8,"column":60}},"3":{"start":{"line":11,"column":4},"end":{"line":11,"column":60}},"4":{"start":{"line":14,"column":4},"end":{"line":14,"column":53}},"5":{"start":{"line":17,"column":4},"end":{"line":17,"column":53}},"6":{"start":{"line":20,"column":4},"end":{"line":20,"column":53}}},"branchMap":{}},"contracts/ecosystem/AssetExchange.sol":{"l":{"29":2,"30":2,"46":4,"47":4,"48":3,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"67":2,"68":2,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"91":4,"92":3,"93":3,"94":2,"95":2,"96":2,"97":2,"98":2,"111":3,"112":3,"113":2,"114":2,"115":2,"116":2,"129":3,"130":3,"131":2,"132":1,"133":1,"134":1,"136":2,"137":2,"146":1,"147":1,"148":1,"149":1,"159":3,"160":2,"161":1,"162":1,"175":10,"176":9,"177":8,"184":10,"185":9,"192":11,"193":10,"199":8,"200":8,"207":8,"208":7,"215":7,"216":6,"223":4,"224":3},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/ecosystem/AssetExchange.sol","s":{"1":2,"2":2,"3":4,"4":4,"5":3,"6":1,"7":1,"8":1,"9":1,"10":1,"11":2,"12":2,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":4,"21":3,"22":3,"23":2,"24":2,"25":2,"26":2,"27":2,"28":3,"29":3,"30":2,"31":2,"32":2,"33":2,"34":3,"35":3,"36":2,"37":1,"38":1,"39":1,"40":2,"41":1,"42":1,"43":1,"44":3,"45":2,"46":1,"47":1,"48":10,"49":9,"50":10,"51":11,"52":8,"53":8,"54":7,"55":4},"b":{"1":[3,1],"2":[1,2],"3":[1,0],"4":[1,1],"5":[1,0],"6":[3,1],"7":[2,1],"8":[2,1],"9":[2,1],"10":[1,1],"11":[2,1],"12":[1,1],"13":[9,1],"14":[8,1],"15":[9,1],"16":[10,1],"17":[8,0],"18":[7,1],"19":[6,1],"20":[3,1]},"f":{"1":2,"2":4,"3":2,"4":4,"5":3,"6":3,"7":1,"8":3,"9":10,"10":10,"11":11,"12":8,"13":8,"14":7,"15":4},"fnMap":{"1":{"name":null,"line":27,"loc":{"start":{"line":27,"column":2},"end":{"line":28,"column":10}}},"2":{"name":"buyAsset","line":39,"loc":{"start":{"line":39,"column":2},"end":{"line":45,"column":17}}},"3":{"name":"sellAsset","line":62,"loc":{"start":{"line":62,"column":2},"end":{"line":66,"column":17}}},"4":{"name":"createBuyOrder","line":83,"loc":{"start":{"line":83,"column":2},"end":{"line":90,"column":18}}},"5":{"name":"createSellOrder","line":105,"loc":{"start":{"line":105,"column":2},"end":{"line":110,"column":18}}},"6":{"name":"deleteOrder","line":126,"loc":{"start":{"line":126,"column":2},"end":{"line":128,"column":18}}},"7":{"name":"withdraw","line":142,"loc":{"start":{"line":142,"column":2},"end":{"line":145,"column":17}}},"8":{"name":"destroy","line":156,"loc":{"start":{"line":156,"column":2},"end":{"line":158,"column":10}}},"9":{"name":"validAsset","line":174,"loc":{"start":{"line":174,"column":2},"end":{"line":174,"column":39}}},"10":{"name":"isAllowed","line":183,"loc":{"start":{"line":183,"column":2},"end":{"line":183,"column":69}}},"11":{"name":"aboveZero","line":191,"loc":{"start":{"line":191,"column":2},"end":{"line":191,"column":47}}},"12":{"name":"burnRequired","line":197,"loc":{"start":{"line":197,"column":2},"end":{"line":197,"column":23}}},"13":{"name":"whenNotPaused","line":206,"loc":{"start":{"line":206,"column":2},"end":{"line":206,"column":24}}},"14":{"name":"requiresEther","line":214,"loc":{"start":{"line":214,"column":2},"end":{"line":214,"column":26}}},"15":{"name":"anyOwner","line":222,"loc":{"start":{"line":222,"column":2},"end":{"line":222,"column":19}}}},"statementMap":{"1":{"start":{"line":29,"column":4},"end":{"line":29,"column":33}},"2":{"start":{"line":30,"column":4},"end":{"line":30,"column":104}},"3":{"start":{"line":46,"column":4},"end":{"line":46,"column":93}},"4":{"start":{"line":47,"column":4},"end":{"line":47,"column":38}},"5":{"start":{"line":48,"column":4},"end":{"line":48,"column":58}},"6":{"start":{"line":49,"column":4},"end":{"line":49,"column":113}},"7":{"start":{"line":50,"column":4},"end":{"line":50,"column":65}},"8":{"start":{"line":51,"column":4},"end":{"line":51,"column":53}},"9":{"start":{"line":53,"column":4},"end":{"line":53,"column":63}},"10":{"start":{"line":54,"column":4},"end":{"line":54,"column":15}},"11":{"start":{"line":67,"column":4},"end":{"line":67,"column":91}},"12":{"start":{"line":68,"column":4},"end":{"line":68,"column":37}},"13":{"start":{"line":69,"column":4},"end":{"line":69,"column":49}},"14":{"start":{"line":70,"column":4},"end":{"line":70,"column":113}},"15":{"start":{"line":71,"column":4},"end":{"line":71,"column":64}},"16":{"start":{"line":72,"column":4},"end":{"line":72,"column":57}},"17":{"start":{"line":73,"column":4},"end":{"line":73,"column":55}},"18":{"start":{"line":75,"column":4},"end":{"line":75,"column":62}},"19":{"start":{"line":76,"column":4},"end":{"line":76,"column":15}},"20":{"start":{"line":91,"column":4},"end":{"line":91,"column":58}},"21":{"start":{"line":92,"column":4},"end":{"line":92,"column":93}},"22":{"start":{"line":93,"column":4},"end":{"line":93,"column":40}},"23":{"start":{"line":94,"column":4},"end":{"line":94,"column":37}},"24":{"start":{"line":95,"column":4},"end":{"line":95,"column":69}},"25":{"start":{"line":96,"column":4},"end":{"line":96,"column":58}},"26":{"start":{"line":97,"column":4},"end":{"line":97,"column":53}},"27":{"start":{"line":98,"column":4},"end":{"line":98,"column":15}},"28":{"start":{"line":111,"column":4},"end":{"line":111,"column":94}},"29":{"start":{"line":112,"column":4},"end":{"line":112,"column":40}},"30":{"start":{"line":113,"column":4},"end":{"line":113,"column":37}},"31":{"start":{"line":114,"column":4},"end":{"line":114,"column":59}},"32":{"start":{"line":115,"column":4},"end":{"line":115,"column":54}},"33":{"start":{"line":116,"column":4},"end":{"line":116,"column":15}},"34":{"start":{"line":129,"column":4},"end":{"line":129,"column":98}},"35":{"start":{"line":130,"column":4},"end":{"line":130,"column":39}},"36":{"start":{"line":131,"column":4},"end":{"line":131,"column":5830}},"37":{"start":{"line":132,"column":6},"end":{"line":132,"column":57}},"38":{"start":{"line":133,"column":6},"end":{"line":133,"column":73}},"39":{"start":{"line":134,"column":6},"end":{"line":134,"column":63}},"40":{"start":{"line":137,"column":4},"end":{"line":137,"column":15}},"41":{"start":{"line":146,"column":4},"end":{"line":146,"column":34}},"42":{"start":{"line":147,"column":4},"end":{"line":147,"column":26}},"43":{"start":{"line":149,"column":4},"end":{"line":149,"column":15}},"44":{"start":{"line":159,"column":4},"end":{"line":159,"column":44}},"45":{"start":{"line":160,"column":4},"end":{"line":160,"column":153}},"46":{"start":{"line":161,"column":4},"end":{"line":161,"column":75}},"47":{"start":{"line":162,"column":4},"end":{"line":162,"column":32}},"48":{"start":{"line":175,"column":4},"end":{"line":175,"column":35}},"49":{"start":{"line":176,"column":4},"end":{"line":176,"column":94}},"50":{"start":{"line":184,"column":4},"end":{"line":184,"column":145}},"51":{"start":{"line":192,"column":4},"end":{"line":192,"column":35}},"52":{"start":{"line":199,"column":4},"end":{"line":199,"column":110}},"53":{"start":{"line":207,"column":4},"end":{"line":207,"column":87}},"54":{"start":{"line":215,"column":4},"end":{"line":215,"column":25}},"55":{"start":{"line":223,"column":4},"end":{"line":223,"column":82}}},"branchMap":{"1":{"line":47,"type":"if","locations":[{"start":{"line":47,"column":4},"end":{"line":47,"column":4}},{"start":{"line":47,"column":4},"end":{"line":47,"column":4}}]},"2":{"line":48,"type":"if","locations":[{"start":{"line":48,"column":4},"end":{"line":48,"column":4}},{"start":{"line":48,"column":4},"end":{"line":48,"column":4}}]},"3":{"line":50,"type":"if","locations":[{"start":{"line":50,"column":4},"end":{"line":50,"column":4}},{"start":{"line":50,"column":4},"end":{"line":50,"column":4}}]},"4":{"line":68,"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":68,"column":4}},{"start":{"line":68,"column":4},"end":{"line":68,"column":4}}]},"5":{"line":71,"type":"if","locations":[{"start":{"line":71,"column":4},"end":{"line":71,"column":4}},{"start":{"line":71,"column":4},"end":{"line":71,"column":4}}]},"6":{"line":91,"type":"if","locations":[{"start":{"line":91,"column":4},"end":{"line":91,"column":4}},{"start":{"line":91,"column":4},"end":{"line":91,"column":4}}]},"7":{"line":93,"type":"if","locations":[{"start":{"line":93,"column":4},"end":{"line":93,"column":4}},{"start":{"line":93,"column":4},"end":{"line":93,"column":4}}]},"8":{"line":112,"type":"if","locations":[{"start":{"line":112,"column":4},"end":{"line":112,"column":4}},{"start":{"line":112,"column":4},"end":{"line":112,"column":4}}]},"9":{"line":130,"type":"if","locations":[{"start":{"line":130,"column":4},"end":{"line":130,"column":4}},{"start":{"line":130,"column":4},"end":{"line":130,"column":4}}]},"10":{"line":131,"type":"if","locations":[{"start":{"line":131,"column":4},"end":{"line":131,"column":4}},{"start":{"line":131,"column":4},"end":{"line":131,"column":4}}]},"11":{"line":159,"type":"if","locations":[{"start":{"line":159,"column":4},"end":{"line":159,"column":4}},{"start":{"line":159,"column":4},"end":{"line":159,"column":4}}]},"12":{"line":160,"type":"if","locations":[{"start":{"line":160,"column":4},"end":{"line":160,"column":4}},{"start":{"line":160,"column":4},"end":{"line":160,"column":4}}]},"13":{"line":175,"type":"if","locations":[{"start":{"line":175,"column":4},"end":{"line":175,"column":4}},{"start":{"line":175,"column":4},"end":{"line":175,"column":4}}]},"14":{"line":176,"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":4}},{"start":{"line":176,"column":4},"end":{"line":176,"column":4}}]},"15":{"line":184,"type":"if","locations":[{"start":{"line":184,"column":4},"end":{"line":184,"column":4}},{"start":{"line":184,"column":4},"end":{"line":184,"column":4}}]},"16":{"line":192,"type":"if","locations":[{"start":{"line":192,"column":4},"end":{"line":192,"column":4}},{"start":{"line":192,"column":4},"end":{"line":192,"column":4}}]},"17":{"line":199,"type":"if","locations":[{"start":{"line":199,"column":4},"end":{"line":199,"column":4}},{"start":{"line":199,"column":4},"end":{"line":199,"column":4}}]},"18":{"line":207,"type":"if","locations":[{"start":{"line":207,"column":4},"end":{"line":207,"column":4}},{"start":{"line":207,"column":4},"end":{"line":207,"column":4}}]},"19":{"line":215,"type":"if","locations":[{"start":{"line":215,"column":4},"end":{"line":215,"column":4}},{"start":{"line":215,"column":4},"end":{"line":215,"column":4}}]},"20":{"line":223,"type":"if","locations":[{"start":{"line":223,"column":4},"end":{"line":223,"column":4}},{"start":{"line":223,"column":4},"end":{"line":223,"column":4}}]}}},"contracts/ecosystem/AssetGenerator.sol":{"l":{"21":1,"31":2,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"47":2,"48":1,"49":1,"50":1,"51":1,"52":1,"53":4,"55":1,"56":1,"57":1,"58":1,"59":1,"65":4,"66":4,"67":4},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/ecosystem/AssetGenerator.sol","s":{"1":1,"2":2,"3":1,"4":1,"5":1,"6":1,"7":1,"8":2,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":4,"17":4},"b":{"1":[1,1],"2":[1,0],"3":[1,1],"4":[1,0],"5":[4,0]},"f":{"1":1,"2":2,"3":2,"4":4},"fnMap":{"1":{"name":null,"line":19,"loc":{"start":{"line":19,"column":2},"end":{"line":20,"column":9}}},"2":{"name":"createAsset","line":27,"loc":{"start":{"line":27,"column":2},"end":{"line":30,"column":18}}},"3":{"name":"createTradeableAsset","line":43,"loc":{"start":{"line":43,"column":2},"end":{"line":46,"column":18}}},"4":{"name":"burnRequired","line":64,"loc":{"start":{"line":64,"column":2},"end":{"line":64,"column":23}}}},"statementMap":{"1":{"start":{"line":21,"column":6},"end":{"line":21,"column":38}},"2":{"start":{"line":31,"column":4},"end":{"line":31,"column":82}},"3":{"start":{"line":32,"column":4},"end":{"line":32,"column":71}},"4":{"start":{"line":33,"column":4},"end":{"line":33,"column":103}},"5":{"start":{"line":34,"column":4},"end":{"line":34,"column":93}},"6":{"start":{"line":37,"column":4},"end":{"line":37,"column":80}},"7":{"start":{"line":38,"column":4},"end":{"line":38,"column":15}},"8":{"start":{"line":47,"column":4},"end":{"line":47,"column":89}},"9":{"start":{"line":48,"column":4},"end":{"line":48,"column":117}},"10":{"start":{"line":49,"column":4},"end":{"line":49,"column":71}},"11":{"start":{"line":50,"column":4},"end":{"line":50,"column":103}},"12":{"start":{"line":51,"column":4},"end":{"line":51,"column":84}},"13":{"start":{"line":52,"column":4},"end":{"line":52,"column":2353}},"14":{"start":{"line":58,"column":4},"end":{"line":58,"column":89}},"15":{"start":{"line":59,"column":4},"end":{"line":59,"column":15}},"16":{"start":{"line":65,"column":4},"end":{"line":65,"column":116}},"17":{"start":{"line":66,"column":4},"end":{"line":66,"column":110}}},"branchMap":{"1":{"line":31,"type":"if","locations":[{"start":{"line":31,"column":4},"end":{"line":31,"column":4}},{"start":{"line":31,"column":4},"end":{"line":31,"column":4}}]},"2":{"line":33,"type":"if","locations":[{"start":{"line":33,"column":4},"end":{"line":33,"column":4}},{"start":{"line":33,"column":4},"end":{"line":33,"column":4}}]},"3":{"line":47,"type":"if","locations":[{"start":{"line":47,"column":4},"end":{"line":47,"column":4}},{"start":{"line":47,"column":4},"end":{"line":47,"column":4}}]},"4":{"line":50,"type":"if","locations":[{"start":{"line":50,"column":4},"end":{"line":50,"column":4}},{"start":{"line":50,"column":4},"end":{"line":50,"column":4}}]},"5":{"line":66,"type":"if","locations":[{"start":{"line":66,"column":4},"end":{"line":66,"column":4}},{"start":{"line":66,"column":4},"end":{"line":66,"column":4}}]}}},"contracts/ecosystem/PlatformFunds.sol":{"l":{"12":9,"20":7,"21":7,"28":9,"29":9,"38":18,"39":16},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/ecosystem/PlatformFunds.sol","s":{"1":9,"2":7,"3":9,"4":18},"b":{"1":[16,2]},"f":{"1":9,"2":7,"3":9,"4":18},"fnMap":{"1":{"name":null,"line":10,"loc":{"start":{"line":10,"column":2},"end":{"line":11,"column":10}}},"2":{"name":"setPlatformWallet","line":17,"loc":{"start":{"line":17,"column":2},"end":{"line":19,"column":13}}},"3":{"name":"setPlatformToken","line":25,"loc":{"start":{"line":25,"column":2},"end":{"line":27,"column":13}}},"4":{"name":"onlyOwner","line":37,"loc":{"start":{"line":37,"column":2},"end":{"line":37,"column":20}}}},"statementMap":{"1":{"start":{"line":12,"column":4},"end":{"line":12,"column":33}},"2":{"start":{"line":21,"column":4},"end":{"line":21,"column":42}},"3":{"start":{"line":29,"column":4},"end":{"line":29,"column":40}},"4":{"start":{"line":38,"column":4},"end":{"line":38,"column":82}}},"branchMap":{"1":{"line":38,"type":"if","locations":[{"start":{"line":38,"column":4},"end":{"line":38,"column":4}},{"start":{"line":38,"column":4},"end":{"line":38,"column":4}}]}}},"contracts/ecosystem/Staking.sol":{"l":{"20":0,"27":0,"28":0,"29":0,"30":0,"31":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"59":0,"60":0},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/ecosystem/Staking.sol","s":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0},"b":{"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0]},"f":{"1":0,"2":0,"3":0,"4":0},"fnMap":{"1":{"name":null,"line":18,"loc":{"start":{"line":18,"column":4},"end":{"line":19,"column":12}}},"2":{"name":"requestStaking","line":24,"loc":{"start":{"line":24,"column":4},"end":{"line":26,"column":20}}},"3":{"name":"purchaseStake","line":35,"loc":{"start":{"line":35,"column":4},"end":{"line":37,"column":20}}},"4":{"name":"noEmptyBytes","line":58,"loc":{"start":{"line":58,"column":2},"end":{"line":58,"column":38}}}},"statementMap":{"1":{"start":{"line":20,"column":6},"end":{"line":20,"column":35}},"2":{"start":{"line":27,"column":6},"end":{"line":27,"column":105}},"3":{"start":{"line":29,"column":6},"end":{"line":29,"column":99}},"4":{"start":{"line":31,"column":6},"end":{"line":31,"column":17}},"5":{"start":{"line":38,"column":6},"end":{"line":38,"column":105}},"6":{"start":{"line":39,"column":6},"end":{"line":39,"column":65}},"7":{"start":{"line":40,"column":6},"end":{"line":40,"column":102}},"8":{"start":{"line":41,"column":6},"end":{"line":41,"column":145}},"9":{"start":{"line":42,"column":6},"end":{"line":42,"column":84}},"10":{"start":{"line":44,"column":6},"end":{"line":44,"column":56}},"11":{"start":{"line":45,"column":6},"end":{"line":45,"column":57}},"12":{"start":{"line":46,"column":6},"end":{"line":46,"column":47}},"13":{"start":{"line":47,"column":6},"end":{"line":47,"column":17}},"14":{"start":{"line":59,"column":4},"end":{"line":59,"column":31}}},"branchMap":{"1":{"line":39,"type":"if","locations":[{"start":{"line":39,"column":6},"end":{"line":39,"column":6}},{"start":{"line":39,"column":6},"end":{"line":39,"column":6}}]},"2":{"line":44,"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":44,"column":6}},{"start":{"line":44,"column":6},"end":{"line":44,"column":6}}]},"3":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":6},"end":{"line":45,"column":6}},{"start":{"line":45,"column":6},"end":{"line":45,"column":6}}]},"4":{"line":46,"type":"if","locations":[{"start":{"line":46,"column":6},"end":{"line":46,"column":6}},{"start":{"line":46,"column":6},"end":{"line":46,"column":6}}]},"5":{"line":59,"type":"if","locations":[{"start":{"line":59,"column":4},"end":{"line":59,"column":4}},{"start":{"line":59,"column":4},"end":{"line":59,"column":4}}]}}},"contracts/interfaces/ApproveAndCallFallback.sol":{"l":{},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/interfaces/ApproveAndCallFallback.sol","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}},"contracts/interfaces/BurnableERC20.sol":{"l":{},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/interfaces/BurnableERC20.sol","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}},"contracts/interfaces/BurnERC20.sol":{"l":{},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/interfaces/BurnERC20.sol","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}},"contracts/interfaces/DBInterface.sol":{"l":{},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/interfaces/DBInterface.sol","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}},"contracts/interfaces/DivToken.sol":{"l":{},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/interfaces/DivToken.sol","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}},"contracts/interfaces/ERC20.sol":{"l":{},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/interfaces/ERC20.sol","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}},"contracts/interfaces/ERC20DividendInterface.sol":{"l":{},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/interfaces/ERC20DividendInterface.sol","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}},"contracts/interfaces/EtherDividendInterface.sol":{"l":{},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/interfaces/EtherDividendInterface.sol","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}},"contracts/interfaces/GovToken.sol":{"l":{},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/interfaces/GovToken.sol","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}},"contracts/interfaces/PullPayment.sol":{"l":{},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/interfaces/PullPayment.sol","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}},"contracts/interfaces/TokenFactoryInterface.sol":{"l":{},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/interfaces/TokenFactoryInterface.sol","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}},"contracts/math/SafeMath.sol":{"l":{"11":149,"12":27,"14":122,"15":122,"16":121,"24":109,"29":497,"30":493,"35":474,"36":474,"37":473,"45":1},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/math/SafeMath.sol","s":{"1":149,"2":27,"3":122,"4":122,"5":121,"6":109,"7":497,"8":493,"9":474,"10":474,"11":473,"12":1},"b":{"1":[27,122],"2":[121,1],"3":[493,4],"4":[473,1]},"f":{"1":149,"2":109,"3":497,"4":474,"5":1},"fnMap":{"1":{"name":"mul","line":10,"loc":{"start":{"line":10,"column":2},"end":{"line":10,"column":68}}},"2":{"name":"div","line":20,"loc":{"start":{"line":20,"column":2},"end":{"line":20,"column":68}}},"3":{"name":"sub","line":28,"loc":{"start":{"line":28,"column":2},"end":{"line":28,"column":68}}},"4":{"name":"add","line":34,"loc":{"start":{"line":34,"column":2},"end":{"line":34,"column":68}}},"5":{"name":"getFractionalAmount","line":41,"loc":{"start":{"line":41,"column":2},"end":{"line":44,"column":21}}}},"statementMap":{"1":{"start":{"line":11,"column":4},"end":{"line":11,"column":388}},"2":{"start":{"line":12,"column":6},"end":{"line":12,"column":14}},"3":{"start":{"line":14,"column":4},"end":{"line":14,"column":20}},"4":{"start":{"line":15,"column":4},"end":{"line":15,"column":21}},"5":{"start":{"line":16,"column":4},"end":{"line":16,"column":12}},"6":{"start":{"line":24,"column":4},"end":{"line":24,"column":16}},"7":{"start":{"line":29,"column":4},"end":{"line":29,"column":17}},"8":{"start":{"line":30,"column":4},"end":{"line":30,"column":16}},"9":{"start":{"line":35,"column":4},"end":{"line":35,"column":20}},"10":{"start":{"line":36,"column":4},"end":{"line":36,"column":17}},"11":{"start":{"line":37,"column":4},"end":{"line":37,"column":12}},"12":{"start":{"line":45,"column":4},"end":{"line":45,"column":46}}},"branchMap":{"1":{"line":11,"type":"if","locations":[{"start":{"line":11,"column":4},"end":{"line":11,"column":4}},{"start":{"line":11,"column":4},"end":{"line":11,"column":4}}]},"2":{"line":15,"type":"if","locations":[{"start":{"line":15,"column":4},"end":{"line":15,"column":4}},{"start":{"line":15,"column":4},"end":{"line":15,"column":4}}]},"3":{"line":29,"type":"if","locations":[{"start":{"line":29,"column":4},"end":{"line":29,"column":4}},{"start":{"line":29,"column":4},"end":{"line":29,"column":4}}]},"4":{"line":36,"type":"if","locations":[{"start":{"line":36,"column":4},"end":{"line":36,"column":4}},{"start":{"line":36,"column":4},"end":{"line":36,"column":4}}]}}},"contracts/ownership/AssetGovernance.sol":{"l":{"27":1,"37":4,"38":4,"39":4,"40":4,"41":4,"42":4,"43":3,"44":3,"45":3,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"75":1,"76":1,"77":1,"78":1,"79":1,"92":4,"93":4,"94":4,"95":3,"96":3,"115":4,"116":4},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/ownership/AssetGovernance.sol","s":{"1":1,"2":4,"3":4,"4":4,"5":4,"6":4,"7":4,"8":3,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":1,"17":1,"18":1,"19":1,"20":1,"21":4,"22":4,"23":4,"24":3,"25":4},"b":{"1":[3,1],"2":[0,0],"3":[3,1],"4":[4,0]},"f":{"1":1,"2":4,"3":0,"4":1,"5":4,"6":4},"fnMap":{"1":{"name":null,"line":25,"loc":{"start":{"line":25,"column":2},"end":{"line":26,"column":10}}},"2":{"name":"voteForExecution","line":33,"loc":{"start":{"line":33,"column":2},"end":{"line":36,"column":18}}},"3":{"name":"unlockToken","line":51,"loc":{"start":{"line":51,"column":2},"end":{"line":54,"column":18}}},"4":{"name":"isConsensusReached","line":71,"loc":{"start":{"line":71,"column":2},"end":{"line":74,"column":18}}},"5":{"name":"lockTokens","line":89,"loc":{"start":{"line":89,"column":2},"end":{"line":91,"column":18}}},"6":{"name":"validAsset","line":114,"loc":{"start":{"line":114,"column":2},"end":{"line":114,"column":39}}}},"statementMap":{"1":{"start":{"line":27,"column":4},"end":{"line":27,"column":27}},"2":{"start":{"line":37,"column":4},"end":{"line":37,"column":109}},"3":{"start":{"line":38,"column":4},"end":{"line":38,"column":77}},"4":{"start":{"line":39,"column":4},"end":{"line":39,"column":98}},"5":{"start":{"line":40,"column":4},"end":{"line":40,"column":54}},"6":{"start":{"line":41,"column":4},"end":{"line":41,"column":64}},"7":{"start":{"line":42,"column":4},"end":{"line":42,"column":59}},"8":{"start":{"line":45,"column":4},"end":{"line":45,"column":15}},"9":{"start":{"line":55,"column":4},"end":{"line":55,"column":109}},"10":{"start":{"line":56,"column":4},"end":{"line":56,"column":78}},"11":{"start":{"line":57,"column":4},"end":{"line":57,"column":86}},"12":{"start":{"line":58,"column":4},"end":{"line":58,"column":61}},"13":{"start":{"line":59,"column":4},"end":{"line":59,"column":54}},"14":{"start":{"line":60,"column":4},"end":{"line":60,"column":44}},"15":{"start":{"line":63,"column":4},"end":{"line":63,"column":15}},"16":{"start":{"line":75,"column":4},"end":{"line":75,"column":115}},"17":{"start":{"line":76,"column":4},"end":{"line":76,"column":109}},"18":{"start":{"line":77,"column":4},"end":{"line":77,"column":77}},"19":{"start":{"line":78,"column":4},"end":{"line":78,"column":47}},"20":{"start":{"line":79,"column":4},"end":{"line":79,"column":73}},"21":{"start":{"line":92,"column":4},"end":{"line":92,"column":115}},"22":{"start":{"line":93,"column":4},"end":{"line":93,"column":112}},"23":{"start":{"line":94,"column":4},"end":{"line":94,"column":75}},"24":{"start":{"line":96,"column":4},"end":{"line":96,"column":15}},"25":{"start":{"line":115,"column":4},"end":{"line":115,"column":104}}},"branchMap":{"1":{"line":42,"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":42,"column":4}},{"start":{"line":42,"column":4},"end":{"line":42,"column":4}}]},"2":{"line":60,"type":"if","locations":[{"start":{"line":60,"column":4},"end":{"line":60,"column":4}},{"start":{"line":60,"column":4},"end":{"line":60,"column":4}}]},"3":{"line":94,"type":"if","locations":[{"start":{"line":94,"column":4},"end":{"line":94,"column":4}},{"start":{"line":94,"column":4},"end":{"line":94,"column":4}}]},"4":{"line":115,"type":"if","locations":[{"start":{"line":115,"column":4},"end":{"line":115,"column":4}},{"start":{"line":115,"column":4},"end":{"line":115,"column":4}}]}}},"contracts/ownership/CollectiveOwned.sol":{"l":{"21":0,"22":0,"23":0,"24":0,"34":0,"35":0,"36":0,"45":0,"53":0,"54":0,"55":0,"62":0,"63":0,"64":0,"65":0,"66":0,"78":0,"79":0,"80":0,"81":0,"83":0,"94":0,"95":0,"101":0,"102":0,"103":0},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/ownership/CollectiveOwned.sol","s":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0},"b":{"1":[0,0],"2":[0,0]},"f":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0},"fnMap":{"1":{"name":null,"line":19,"loc":{"start":{"line":19,"column":2},"end":{"line":20,"column":10}}},"2":{"name":"addOwner","line":30,"loc":{"start":{"line":30,"column":2},"end":{"line":33,"column":13}}},"3":{"name":"removeOwner","line":41,"loc":{"start":{"line":41,"column":2},"end":{"line":44,"column":13}}},"4":{"name":"setQuorumLevel","line":49,"loc":{"start":{"line":49,"column":2},"end":{"line":52,"column":18}}},"5":{"name":"voteForExecution","line":59,"loc":{"start":{"line":59,"column":2},"end":{"line":61,"column":18}}},"6":{"name":"isQuorumReached","line":74,"loc":{"start":{"line":74,"column":2},"end":{"line":77,"column":18}}},"7":{"name":"onlyOwner","line":93,"loc":{"start":{"line":93,"column":2},"end":{"line":93,"column":20}}},"8":{"name":"isRestricted","line":100,"loc":{"start":{"line":100,"column":2},"end":{"line":100,"column":65}}}},"statementMap":{"1":{"start":{"line":21,"column":4},"end":{"line":21,"column":33}},"2":{"start":{"line":22,"column":4},"end":{"line":22,"column":100}},"3":{"start":{"line":23,"column":4},"end":{"line":23,"column":76}},"4":{"start":{"line":34,"column":4},"end":{"line":34,"column":87}},"5":{"start":{"line":53,"column":4},"end":{"line":53,"column":80}},"6":{"start":{"line":55,"column":4},"end":{"line":55,"column":15}},"7":{"start":{"line":62,"column":4},"end":{"line":62,"column":97}},"8":{"start":{"line":63,"column":4},"end":{"line":63,"column":86}},"9":{"start":{"line":64,"column":4},"end":{"line":64,"column":59}},"10":{"start":{"line":66,"column":4},"end":{"line":66,"column":15}},"11":{"start":{"line":78,"column":4},"end":{"line":78,"column":103}},"12":{"start":{"line":79,"column":4},"end":{"line":79,"column":97}},"13":{"start":{"line":80,"column":4},"end":{"line":80,"column":81}},"14":{"start":{"line":81,"column":4},"end":{"line":81,"column":90}},"15":{"start":{"line":83,"column":4},"end":{"line":83,"column":82}},"16":{"start":{"line":94,"column":4},"end":{"line":94,"column":90}},"17":{"start":{"line":101,"column":4},"end":{"line":101,"column":69}}},"branchMap":{"1":{"line":94,"type":"if","locations":[{"start":{"line":94,"column":4},"end":{"line":94,"column":4}},{"start":{"line":94,"column":4},"end":{"line":94,"column":4}}]},"2":{"line":101,"type":"if","locations":[{"start":{"line":101,"column":4},"end":{"line":101,"column":4}},{"start":{"line":101,"column":4},"end":{"line":101,"column":4}}]}}},"contracts/ownership/Pausible.sol":{"l":{"16":4,"24":3,"25":3,"33":3,"34":3,"39":7,"40":6},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/ownership/Pausible.sol","s":{"1":4,"2":3,"3":3,"4":7},"b":{"1":[6,1]},"f":{"1":4,"2":3,"3":3,"4":7},"fnMap":{"1":{"name":null,"line":14,"loc":{"start":{"line":14,"column":2},"end":{"line":15,"column":10}}},"2":{"name":"pause","line":21,"loc":{"start":{"line":21,"column":2},"end":{"line":23,"column":10}}},"3":{"name":"unpause","line":30,"loc":{"start":{"line":30,"column":2},"end":{"line":32,"column":10}}},"4":{"name":"onlyOwner","line":38,"loc":{"start":{"line":38,"column":2},"end":{"line":38,"column":22}}}},"statementMap":{"1":{"start":{"line":16,"column":4},"end":{"line":16,"column":33}},"2":{"start":{"line":25,"column":4},"end":{"line":25,"column":41}},"3":{"start":{"line":34,"column":4},"end":{"line":34,"column":43}},"4":{"start":{"line":39,"column":4},"end":{"line":39,"column":82}}},"branchMap":{"1":{"line":39,"type":"if","locations":[{"start":{"line":39,"column":4},"end":{"line":39,"column":4}},{"start":{"line":39,"column":4},"end":{"line":39,"column":4}}]}}},"contracts/ownership/SingleOwned.sol":{"l":{"14":2,"21":1,"22":1,"23":1,"28":2,"29":1},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/ownership/SingleOwned.sol","s":{"1":2,"2":1,"3":2},"b":{"1":[1,1]},"f":{"1":2,"2":1,"3":2},"fnMap":{"1":{"name":null,"line":13,"loc":{"start":{"line":13,"column":2},"end":{"line":13,"column":39}}},"2":{"name":"changeOwner","line":18,"loc":{"start":{"line":18,"column":2},"end":{"line":20,"column":13}}},"3":{"name":"onlyOwner","line":27,"loc":{"start":{"line":27,"column":2},"end":{"line":27,"column":22}}}},"statementMap":{"1":{"start":{"line":14,"column":4},"end":{"line":14,"column":33}},"2":{"start":{"line":23,"column":4},"end":{"line":23,"column":52}},"3":{"start":{"line":28,"column":4},"end":{"line":28,"column":90}}},"branchMap":{"1":{"line":28,"type":"if","locations":[{"start":{"line":28,"column":4},"end":{"line":28,"column":4}},{"start":{"line":28,"column":4},"end":{"line":28,"column":4}}]}}},"contracts/ownership/TokenGovernance.sol":{"l":{"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"45":0,"46":0,"47":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"83":0,"84":0,"85":0,"86":0,"87":0,"99":0,"100":0,"101":0,"102":0,"104":0,"115":0,"116":0,"118":0,"123":0,"124":0},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/ownership/TokenGovernance.sol","s":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0},"b":{"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0]},"f":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0},"fnMap":{"1":{"name":null,"line":30,"loc":{"start":{"line":30,"column":2},"end":{"line":31,"column":11}}},"2":{"name":"setQuorumLevel","line":41,"loc":{"start":{"line":41,"column":2},"end":{"line":44,"column":18}}},"3":{"name":"voteForExecution","line":51,"loc":{"start":{"line":51,"column":2},"end":{"line":53,"column":18}}},"4":{"name":"unlockTokens","line":63,"loc":{"start":{"line":63,"column":2},"end":{"line":65,"column":18}}},"5":{"name":"lockTokens","line":80,"loc":{"start":{"line":80,"column":2},"end":{"line":82,"column":18}}},"6":{"name":"isQuorumReached","line":95,"loc":{"start":{"line":95,"column":2},"end":{"line":98,"column":18}}},"7":{"name":"isRestricted","line":114,"loc":{"start":{"line":114,"column":2},"end":{"line":114,"column":65}}},"8":{"name":"onlyOwner","line":122,"loc":{"start":{"line":122,"column":2},"end":{"line":122,"column":20}}}},"statementMap":{"1":{"start":{"line":32,"column":4},"end":{"line":32,"column":97}},"2":{"start":{"line":33,"column":4},"end":{"line":33,"column":33}},"3":{"start":{"line":34,"column":4},"end":{"line":34,"column":43}},"4":{"start":{"line":35,"column":4},"end":{"line":35,"column":100}},"5":{"start":{"line":36,"column":4},"end":{"line":36,"column":76}},"6":{"start":{"line":45,"column":4},"end":{"line":45,"column":80}},"7":{"start":{"line":47,"column":4},"end":{"line":47,"column":15}},"8":{"start":{"line":54,"column":4},"end":{"line":54,"column":97}},"9":{"start":{"line":55,"column":4},"end":{"line":55,"column":81}},"10":{"start":{"line":56,"column":4},"end":{"line":56,"column":48}},"11":{"start":{"line":57,"column":4},"end":{"line":57,"column":54}},"12":{"start":{"line":59,"column":4},"end":{"line":59,"column":15}},"13":{"start":{"line":66,"column":4},"end":{"line":66,"column":93}},"14":{"start":{"line":67,"column":4},"end":{"line":67,"column":82}},"15":{"start":{"line":68,"column":4},"end":{"line":68,"column":54}},"16":{"start":{"line":69,"column":4},"end":{"line":69,"column":54}},"17":{"start":{"line":72,"column":4},"end":{"line":72,"column":15}},"18":{"start":{"line":83,"column":4},"end":{"line":83,"column":93}},"19":{"start":{"line":84,"column":4},"end":{"line":84,"column":82}},"20":{"start":{"line":85,"column":4},"end":{"line":85,"column":54}},"21":{"start":{"line":87,"column":4},"end":{"line":87,"column":15}},"22":{"start":{"line":99,"column":4},"end":{"line":99,"column":103}},"23":{"start":{"line":100,"column":4},"end":{"line":100,"column":97}},"24":{"start":{"line":101,"column":4},"end":{"line":101,"column":81}},"25":{"start":{"line":102,"column":4},"end":{"line":102,"column":52}},"26":{"start":{"line":104,"column":4},"end":{"line":104,"column":82}},"27":{"start":{"line":115,"column":4},"end":{"line":115,"column":69}},"28":{"start":{"line":123,"column":4},"end":{"line":123,"column":90}}},"branchMap":{"1":{"line":56,"type":"if","locations":[{"start":{"line":56,"column":4},"end":{"line":56,"column":4}},{"start":{"line":56,"column":4},"end":{"line":56,"column":4}}]},"2":{"line":84,"type":"if","locations":[{"start":{"line":84,"column":4},"end":{"line":84,"column":4}},{"start":{"line":84,"column":4},"end":{"line":84,"column":4}}]},"3":{"line":115,"type":"if","locations":[{"start":{"line":115,"column":4},"end":{"line":115,"column":4}},{"start":{"line":115,"column":4},"end":{"line":115,"column":4}}]},"4":{"line":123,"type":"if","locations":[{"start":{"line":123,"column":4},"end":{"line":123,"column":4}},{"start":{"line":123,"column":4},"end":{"line":123,"column":4}}]}}},"contracts/roles/AssetManagerEscrow.sol":{"l":{"22":3,"30":4,"31":3,"32":3,"33":3,"34":3,"35":3,"36":3,"37":3,"47":10,"48":9,"49":8,"50":8,"51":8,"52":8,"53":8,"55":1,"59":7,"60":7,"61":7,"62":7,"63":7,"65":5,"66":5,"67":2,"69":3,"70":3,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"88":0,"89":0,"100":1,"101":1,"102":1,"103":1,"114":2,"115":2,"116":2,"117":0},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/roles/AssetManagerEscrow.sol","s":{"1":3,"2":4,"3":3,"4":3,"5":3,"6":3,"7":3,"8":10,"9":9,"10":8,"11":8,"12":8,"13":8,"14":8,"15":1,"16":7,"17":7,"18":7,"19":7,"20":7,"21":5,"22":5,"23":3,"24":3,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":1,"37":2,"38":2,"39":2},"b":{"1":[3,1],"2":[3,0],"3":[9,1],"4":[8,1],"5":[1,7],"6":[1,0],"7":[5,2],"8":[2,3],"9":[3,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,2]},"f":{"1":3,"2":4,"3":10,"4":0,"5":1,"6":2},"fnMap":{"1":{"name":null,"line":20,"loc":{"start":{"line":20,"column":4},"end":{"line":21,"column":12}}},"2":{"name":"lockEscrow","line":27,"loc":{"start":{"line":27,"column":4},"end":{"line":29,"column":20}}},"3":{"name":"unlockEscrow","line":44,"loc":{"start":{"line":44,"column":4},"end":{"line":46,"column":20}}},"4":{"name":"becomeAssetManager","line":76,"loc":{"start":{"line":76,"column":4},"end":{"line":79,"column":20}}},"5":{"name":"removeAssetManager","line":97,"loc":{"start":{"line":97,"column":4},"end":{"line":99,"column":20}}},"6":{"name":"hasConsensus","line":113,"loc":{"start":{"line":113,"column":4},"end":{"line":113,"column":83}}}},"statementMap":{"1":{"start":{"line":22,"column":6},"end":{"line":22,"column":38}},"2":{"start":{"line":30,"column":6},"end":{"line":30,"column":106}},"3":{"start":{"line":31,"column":6},"end":{"line":31,"column":85}},"4":{"start":{"line":32,"column":6},"end":{"line":32,"column":97}},"5":{"start":{"line":33,"column":6},"end":{"line":33,"column":90}},"6":{"start":{"line":36,"column":6},"end":{"line":36,"column":79}},"7":{"start":{"line":37,"column":6},"end":{"line":37,"column":17}},"8":{"start":{"line":47,"column":6},"end":{"line":47,"column":106}},"9":{"start":{"line":48,"column":6},"end":{"line":48,"column":98}},"10":{"start":{"line":49,"column":6},"end":{"line":49,"column":115}},"11":{"start":{"line":50,"column":6},"end":{"line":50,"column":85}},"12":{"start":{"line":51,"column":6},"end":{"line":51,"column":116}},"13":{"start":{"line":52,"column":6},"end":{"line":52,"column":138}},"14":{"start":{"line":53,"column":6},"end":{"line":53,"column":2950}},"15":{"start":{"line":55,"column":8},"end":{"line":55,"column":66}},"16":{"start":{"line":59,"column":8},"end":{"line":59,"column":117}},"17":{"start":{"line":60,"column":8},"end":{"line":60,"column":81}},"18":{"start":{"line":61,"column":8},"end":{"line":61,"column":40}},"19":{"start":{"line":62,"column":8},"end":{"line":62,"column":128}},"20":{"start":{"line":63,"column":8},"end":{"line":63,"column":57}},"21":{"start":{"line":65,"column":8},"end":{"line":65,"column":75}},"22":{"start":{"line":66,"column":8},"end":{"line":66,"column":32}},"23":{"start":{"line":69,"column":6},"end":{"line":69,"column":58}},"24":{"start":{"line":70,"column":6},"end":{"line":70,"column":17}},"25":{"start":{"line":80,"column":6},"end":{"line":80,"column":113}},"26":{"start":{"line":81,"column":6},"end":{"line":81,"column":90}},"27":{"start":{"line":82,"column":6},"end":{"line":82,"column":91}},"28":{"start":{"line":83,"column":6},"end":{"line":83,"column":219}},"29":{"start":{"line":84,"column":6},"end":{"line":84,"column":111}},"30":{"start":{"line":85,"column":6},"end":{"line":85,"column":64}},"31":{"start":{"line":86,"column":6},"end":{"line":86,"column":5605}},"32":{"start":{"line":86,"column":19},"end":{"line":86,"column":57}},"33":{"start":{"line":87,"column":13},"end":{"line":87,"column":73}},"34":{"start":{"line":88,"column":6},"end":{"line":88,"column":43}},"35":{"start":{"line":89,"column":6},"end":{"line":89,"column":17}},"36":{"start":{"line":103,"column":8},"end":{"line":103,"column":19}},"37":{"start":{"line":114,"column":6},"end":{"line":114,"column":147}},"38":{"start":{"line":115,"column":6},"end":{"line":115,"column":127}},"39":{"start":{"line":116,"column":6},"end":{"line":116,"column":101}}},"branchMap":{"1":{"line":30,"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":30,"column":6}},{"start":{"line":30,"column":6},"end":{"line":30,"column":6}}]},"2":{"line":33,"type":"if","locations":[{"start":{"line":33,"column":6},"end":{"line":33,"column":6}},{"start":{"line":33,"column":6},"end":{"line":33,"column":6}}]},"3":{"line":47,"type":"if","locations":[{"start":{"line":47,"column":6},"end":{"line":47,"column":6}},{"start":{"line":47,"column":6},"end":{"line":47,"column":6}}]},"4":{"line":48,"type":"if","locations":[{"start":{"line":48,"column":6},"end":{"line":48,"column":6}},{"start":{"line":48,"column":6},"end":{"line":48,"column":6}}]},"5":{"line":53,"type":"if","locations":[{"start":{"line":53,"column":6},"end":{"line":53,"column":6}},{"start":{"line":53,"column":6},"end":{"line":53,"column":6}}]},"6":{"line":55,"type":"if","locations":[{"start":{"line":55,"column":8},"end":{"line":55,"column":8}},{"start":{"line":55,"column":8},"end":{"line":55,"column":8}}]},"7":{"line":63,"type":"if","locations":[{"start":{"line":63,"column":8},"end":{"line":63,"column":8}},{"start":{"line":63,"column":8},"end":{"line":63,"column":8}}]},"8":{"line":66,"type":"if","locations":[{"start":{"line":66,"column":8},"end":{"line":66,"column":8}},{"start":{"line":66,"column":8},"end":{"line":66,"column":8}}]},"9":{"line":69,"type":"if","locations":[{"start":{"line":69,"column":6},"end":{"line":69,"column":6}},{"start":{"line":69,"column":6},"end":{"line":69,"column":6}}]},"10":{"line":81,"type":"if","locations":[{"start":{"line":81,"column":6},"end":{"line":81,"column":6}},{"start":{"line":81,"column":6},"end":{"line":81,"column":6}}]},"11":{"line":85,"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":85,"column":6}},{"start":{"line":85,"column":6},"end":{"line":85,"column":6}}]},"12":{"line":86,"type":"if","locations":[{"start":{"line":86,"column":6},"end":{"line":86,"column":6}},{"start":{"line":86,"column":6},"end":{"line":86,"column":6}}]},"13":{"line":86,"type":"if","locations":[{"start":{"line":86,"column":19},"end":{"line":86,"column":19}},{"start":{"line":86,"column":19},"end":{"line":86,"column":19}}]},"14":{"line":87,"type":"if","locations":[{"start":{"line":87,"column":13},"end":{"line":87,"column":13}},{"start":{"line":87,"column":13},"end":{"line":87,"column":13}}]},"15":{"line":88,"type":"if","locations":[{"start":{"line":88,"column":6},"end":{"line":88,"column":6}},{"start":{"line":88,"column":6},"end":{"line":88,"column":6}}]},"16":{"line":116,"type":"if","locations":[{"start":{"line":116,"column":6},"end":{"line":116,"column":6}},{"start":{"line":116,"column":6},"end":{"line":116,"column":6}}]}}},"contracts/roles/AssetManagerFunds.sol":{"l":{"28":3,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"59":0,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"81":1,"82":1,"83":1,"85":1,"86":1,"89":1,"90":1,"92":1,"100":1,"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":1,"108":1,"109":1,"110":1,"111":1,"113":1,"114":1,"122":1,"123":1,"125":1,"131":2,"132":2,"133":2,"134":2},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/roles/AssetManagerFunds.sol","s":{"1":3,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":0,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"53":0,"54":1,"55":2,"56":2,"57":2},"b":{"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[1,0],"11":[1,0],"12":[1,0],"13":[1,0],"14":[0,1],"15":[1,0],"16":[1,0],"17":[1,0],"18":[1,0],"19":[1,0],"20":[1,0],"21":[1,0],"22":[1,0],"23":[0,1],"24":[2,0]},"f":{"1":3,"2":0,"3":1,"4":1,"5":1,"6":2,"7":1},"fnMap":{"1":{"name":null,"line":26,"loc":{"start":{"line":26,"column":2},"end":{"line":27,"column":10}}},"2":{"name":"withdraw","line":33,"loc":{"start":{"line":33,"column":2},"end":{"line":36,"column":18}}},"3":{"name":"retrieveAssetManagerTokens","line":62,"loc":{"start":{"line":62,"column":2},"end":{"line":65,"column":18}}},"4":{"name":"retrieveAssetManagerETH","line":96,"loc":{"start":{"line":96,"column":2},"end":{"line":99,"column":18}}},"5":{"name":"containsAddress","line":118,"loc":{"start":{"line":118,"column":2},"end":{"line":121,"column":19}}},"6":{"name":"nonReentrant","line":130,"loc":{"start":{"line":130,"column":2},"end":{"line":130,"column":25}}},"7":{"name":null,"line":137,"loc":{"start":{"line":137,"column":2},"end":{"line":139,"column":10}}}},"statementMap":{"1":{"start":{"line":28,"column":4},"end":{"line":28,"column":36}},"2":{"start":{"line":37,"column":4},"end":{"line":37,"column":104}},"3":{"start":{"line":38,"column":4},"end":{"line":38,"column":104}},"4":{"start":{"line":39,"column":4},"end":{"line":39,"column":40}},"5":{"start":{"line":42,"column":4},"end":{"line":42,"column":1561}},"6":{"start":{"line":43,"column":6},"end":{"line":43,"column":42}},"7":{"start":{"line":44,"column":6},"end":{"line":44,"column":52}},"8":{"start":{"line":45,"column":6},"end":{"line":45,"column":28}},"9":{"start":{"line":46,"column":6},"end":{"line":46,"column":54}},"10":{"start":{"line":47,"column":6},"end":{"line":47,"column":30}},"11":{"start":{"line":48,"column":6},"end":{"line":48,"column":51}},"12":{"start":{"line":52,"column":6},"end":{"line":52,"column":52}},"13":{"start":{"line":53,"column":6},"end":{"line":53,"column":28}},"14":{"start":{"line":54,"column":6},"end":{"line":54,"column":51}},"15":{"start":{"line":55,"column":6},"end":{"line":55,"column":30}},"16":{"start":{"line":56,"column":6},"end":{"line":56,"column":77}},"17":{"start":{"line":59,"column":4},"end":{"line":59,"column":15}},"18":{"start":{"line":66,"column":4},"end":{"line":66,"column":33}},"19":{"start":{"line":67,"column":4},"end":{"line":67,"column":60}},"20":{"start":{"line":68,"column":4},"end":{"line":68,"column":67}},"21":{"start":{"line":70,"column":4},"end":{"line":70,"column":2554}},"22":{"start":{"line":71,"column":6},"end":{"line":71,"column":110}},"23":{"start":{"line":72,"column":6},"end":{"line":72,"column":109}},"24":{"start":{"line":73,"column":6},"end":{"line":73,"column":42}},"25":{"start":{"line":74,"column":6},"end":{"line":74,"column":57}},"26":{"start":{"line":75,"column":6},"end":{"line":75,"column":28}},"27":{"start":{"line":76,"column":6},"end":{"line":76,"column":51}},"28":{"start":{"line":77,"column":6},"end":{"line":77,"column":63}},"29":{"start":{"line":78,"column":6},"end":{"line":78,"column":71}},"30":{"start":{"line":79,"column":6},"end":{"line":79,"column":3161}},"31":{"start":{"line":79,"column":43},"end":{"line":79,"column":111}},"32":{"start":{"line":81,"column":8},"end":{"line":81,"column":57}},"33":{"start":{"line":82,"column":8},"end":{"line":82,"column":45}},"34":{"start":{"line":85,"column":6},"end":{"line":85,"column":30}},"35":{"start":{"line":86,"column":6},"end":{"line":86,"column":84}},"36":{"start":{"line":89,"column":4},"end":{"line":89,"column":3551}},"37":{"start":{"line":90,"column":6},"end":{"line":90,"column":77}},"38":{"start":{"line":92,"column":4},"end":{"line":92,"column":15}},"39":{"start":{"line":100,"column":4},"end":{"line":100,"column":33}},"40":{"start":{"line":102,"column":4},"end":{"line":102,"column":3851}},"41":{"start":{"line":103,"column":6},"end":{"line":103,"column":109}},"42":{"start":{"line":104,"column":6},"end":{"line":104,"column":109}},"43":{"start":{"line":105,"column":6},"end":{"line":105,"column":47}},"44":{"start":{"line":106,"column":6},"end":{"line":106,"column":57}},"45":{"start":{"line":107,"column":6},"end":{"line":107,"column":28}},"46":{"start":{"line":108,"column":6},"end":{"line":108,"column":54}},"47":{"start":{"line":109,"column":6},"end":{"line":109,"column":30}},"48":{"start":{"line":110,"column":6},"end":{"line":110,"column":51}},"49":{"start":{"line":111,"column":6},"end":{"line":111,"column":38}},"50":{"start":{"line":114,"column":4},"end":{"line":114,"column":15}},"51":{"start":{"line":122,"column":4},"end":{"line":122,"column":4711}},"52":{"start":{"line":123,"column":6},"end":{"line":123,"column":44}},"53":{"start":{"line":123,"column":36},"end":{"line":123,"column":44}},"54":{"start":{"line":125,"column":4},"end":{"line":125,"column":41}},"55":{"start":{"line":131,"column":4},"end":{"line":131,"column":25}},"56":{"start":{"line":132,"column":4},"end":{"line":132,"column":43}},"57":{"start":{"line":134,"column":4},"end":{"line":134,"column":45}}},"branchMap":{"1":{"line":37,"type":"if","locations":[{"start":{"line":37,"column":4},"end":{"line":37,"column":4}},{"start":{"line":37,"column":4},"end":{"line":37,"column":4}}]},"2":{"line":39,"type":"if","locations":[{"start":{"line":39,"column":4},"end":{"line":39,"column":4}},{"start":{"line":39,"column":4},"end":{"line":39,"column":4}}]},"3":{"line":42,"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":42,"column":4}},{"start":{"line":42,"column":4},"end":{"line":42,"column":4}}]},"4":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":6},"end":{"line":45,"column":6}},{"start":{"line":45,"column":6},"end":{"line":45,"column":6}}]},"5":{"line":47,"type":"if","locations":[{"start":{"line":47,"column":6},"end":{"line":47,"column":6}},{"start":{"line":47,"column":6},"end":{"line":47,"column":6}}]},"6":{"line":48,"type":"if","locations":[{"start":{"line":48,"column":6},"end":{"line":48,"column":6}},{"start":{"line":48,"column":6},"end":{"line":48,"column":6}}]},"7":{"line":53,"type":"if","locations":[{"start":{"line":53,"column":6},"end":{"line":53,"column":6}},{"start":{"line":53,"column":6},"end":{"line":53,"column":6}}]},"8":{"line":55,"type":"if","locations":[{"start":{"line":55,"column":6},"end":{"line":55,"column":6}},{"start":{"line":55,"column":6},"end":{"line":55,"column":6}}]},"9":{"line":56,"type":"if","locations":[{"start":{"line":56,"column":6},"end":{"line":56,"column":6}},{"start":{"line":56,"column":6},"end":{"line":56,"column":6}}]},"10":{"line":66,"type":"if","locations":[{"start":{"line":66,"column":4},"end":{"line":66,"column":4}},{"start":{"line":66,"column":4},"end":{"line":66,"column":4}}]},"11":{"line":71,"type":"if","locations":[{"start":{"line":71,"column":6},"end":{"line":71,"column":6}},{"start":{"line":71,"column":6},"end":{"line":71,"column":6}}]},"12":{"line":73,"type":"if","locations":[{"start":{"line":73,"column":6},"end":{"line":73,"column":6}},{"start":{"line":73,"column":6},"end":{"line":73,"column":6}}]},"13":{"line":75,"type":"if","locations":[{"start":{"line":75,"column":6},"end":{"line":75,"column":6}},{"start":{"line":75,"column":6},"end":{"line":75,"column":6}}]},"14":{"line":79,"type":"if","locations":[{"start":{"line":79,"column":6},"end":{"line":79,"column":6}},{"start":{"line":79,"column":6},"end":{"line":79,"column":6}}]},"15":{"line":85,"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":85,"column":6}},{"start":{"line":85,"column":6},"end":{"line":85,"column":6}}]},"16":{"line":86,"type":"if","locations":[{"start":{"line":86,"column":6},"end":{"line":86,"column":6}},{"start":{"line":86,"column":6},"end":{"line":86,"column":6}}]},"17":{"line":90,"type":"if","locations":[{"start":{"line":90,"column":6},"end":{"line":90,"column":6}},{"start":{"line":90,"column":6},"end":{"line":90,"column":6}}]},"18":{"line":100,"type":"if","locations":[{"start":{"line":100,"column":4},"end":{"line":100,"column":4}},{"start":{"line":100,"column":4},"end":{"line":100,"column":4}}]},"19":{"line":103,"type":"if","locations":[{"start":{"line":103,"column":6},"end":{"line":103,"column":6}},{"start":{"line":103,"column":6},"end":{"line":103,"column":6}}]},"20":{"line":107,"type":"if","locations":[{"start":{"line":107,"column":6},"end":{"line":107,"column":6}},{"start":{"line":107,"column":6},"end":{"line":107,"column":6}}]},"21":{"line":109,"type":"if","locations":[{"start":{"line":109,"column":6},"end":{"line":109,"column":6}},{"start":{"line":109,"column":6},"end":{"line":109,"column":6}}]},"22":{"line":110,"type":"if","locations":[{"start":{"line":110,"column":6},"end":{"line":110,"column":6}},{"start":{"line":110,"column":6},"end":{"line":110,"column":6}}]},"23":{"line":123,"type":"if","locations":[{"start":{"line":123,"column":6},"end":{"line":123,"column":6}},{"start":{"line":123,"column":6},"end":{"line":123,"column":6}}]},"24":{"line":134,"type":"if","locations":[{"start":{"line":134,"column":4},"end":{"line":134,"column":4}},{"start":{"line":134,"column":4},"end":{"line":134,"column":4}}]}}},"contracts/roles/Operators.sol":{"l":{"11":8,"19":10,"20":10,"21":10,"22":9,"23":9,"24":9,"31":3,"32":3,"39":3,"40":3,"41":2,"42":1,"43":1,"44":1,"52":2,"53":2,"61":3,"62":3,"71":14,"72":13,"77":5,"78":5},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/roles/Operators.sol","s":{"1":8,"2":10,"3":10,"4":10,"5":9,"6":3,"7":3,"8":3,"9":2,"10":1,"11":2,"12":3,"13":14,"14":5},"b":{"1":[10,0],"2":[9,1],"3":[2,1],"4":[1,1],"5":[13,1],"6":[5,0]},"f":{"1":8,"2":10,"3":3,"4":3,"5":2,"6":3,"7":14,"8":5},"fnMap":{"1":{"name":null,"line":10,"loc":{"start":{"line":10,"column":2},"end":{"line":10,"column":39}}},"2":{"name":"registerOperator","line":16,"loc":{"start":{"line":16,"column":2},"end":{"line":18,"column":13}}},"3":{"name":"removeOperator","line":28,"loc":{"start":{"line":28,"column":2},"end":{"line":30,"column":13}}},"4":{"name":"changeOperatorAddress","line":37,"loc":{"start":{"line":37,"column":2},"end":{"line":38,"column":12}}},"5":{"name":"acceptERC20Token","line":48,"loc":{"start":{"line":48,"column":2},"end":{"line":51,"column":18}}},"6":{"name":"acceptEther","line":57,"loc":{"start":{"line":57,"column":2},"end":{"line":60,"column":18}}},"7":{"name":"onlyOwner","line":70,"loc":{"start":{"line":70,"column":2},"end":{"line":70,"column":20}}},"8":{"name":"onlyOperator","line":76,"loc":{"start":{"line":76,"column":2},"end":{"line":76,"column":44}}}},"statementMap":{"1":{"start":{"line":11,"column":4},"end":{"line":11,"column":33}},"2":{"start":{"line":19,"column":4},"end":{"line":19,"column":42}},"3":{"start":{"line":20,"column":4},"end":{"line":20,"column":65}},"4":{"start":{"line":21,"column":4},"end":{"line":21,"column":102}},"5":{"start":{"line":24,"column":4},"end":{"line":24,"column":56}},"6":{"start":{"line":32,"column":4},"end":{"line":32,"column":52}},"7":{"start":{"line":39,"column":4},"end":{"line":39,"column":101}},"8":{"start":{"line":40,"column":4},"end":{"line":40,"column":36}},"9":{"start":{"line":41,"column":4},"end":{"line":41,"column":110}},"10":{"start":{"line":44,"column":4},"end":{"line":44,"column":72}},"11":{"start":{"line":53,"column":4},"end":{"line":53,"column":15}},"12":{"start":{"line":62,"column":4},"end":{"line":62,"column":15}},"13":{"start":{"line":71,"column":4},"end":{"line":71,"column":82}},"14":{"start":{"line":77,"column":4},"end":{"line":77,"column":103}}},"branchMap":{"1":{"line":19,"type":"if","locations":[{"start":{"line":19,"column":4},"end":{"line":19,"column":4}},{"start":{"line":19,"column":4},"end":{"line":19,"column":4}}]},"2":{"line":21,"type":"if","locations":[{"start":{"line":21,"column":4},"end":{"line":21,"column":4}},{"start":{"line":21,"column":4},"end":{"line":21,"column":4}}]},"3":{"line":40,"type":"if","locations":[{"start":{"line":40,"column":4},"end":{"line":40,"column":4}},{"start":{"line":40,"column":4},"end":{"line":40,"column":4}}]},"4":{"line":41,"type":"if","locations":[{"start":{"line":41,"column":4},"end":{"line":41,"column":4}},{"start":{"line":41,"column":4},"end":{"line":41,"column":4}}]},"5":{"line":71,"type":"if","locations":[{"start":{"line":71,"column":4},"end":{"line":71,"column":4}},{"start":{"line":71,"column":4},"end":{"line":71,"column":4}}]},"6":{"line":77,"type":"if","locations":[{"start":{"line":77,"column":4},"end":{"line":77,"column":4}},{"start":{"line":77,"column":4},"end":{"line":77,"column":4}}]}}},"contracts/test/ApproveAndCallTest.sol":{"l":{"6":2},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/test/ApproveAndCallTest.sol","s":{"1":2},"b":{},"f":{"1":2},"fnMap":{"1":{"name":"receiveApproval","line":4,"loc":{"start":{"line":4,"column":2},"end":{"line":5,"column":10}}}},"statementMap":{"1":{"start":{"line":6,"column":4},"end":{"line":6,"column":47}}},"branchMap":{}},"contracts/test/HashFunctions.sol":{"l":{"9":0,"10":0,"19":0,"26":8,"33":0,"40":1,"47":0,"54":0,"61":0,"68":1,"76":0,"83":8,"90":0,"97":21,"104":0,"111":0,"118":0,"126":0,"133":0,"141":0,"148":0,"155":0,"162":0,"167":0},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/test/HashFunctions.sol","s":{"1":0,"2":0,"3":8,"4":0,"5":1,"6":0,"7":0,"8":0,"9":1,"10":0,"11":8,"12":0,"13":21,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0},"b":{},"f":{"1":0,"2":0,"3":8,"4":0,"5":1,"6":0,"7":0,"8":0,"9":1,"10":0,"11":8,"12":0,"13":21,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0},"fnMap":{"1":{"name":"toBytes","line":5,"loc":{"start":{"line":5,"column":2},"end":{"line":8,"column":21}}},"2":{"name":"getMethodID","line":15,"loc":{"start":{"line":15,"column":2},"end":{"line":18,"column":20}}},"3":{"name":"getAssetID","line":22,"loc":{"start":{"line":22,"column":2},"end":{"line":25,"column":20}}},"4":{"name":"getOrderID","line":29,"loc":{"start":{"line":29,"column":2},"end":{"line":32,"column":20}}},"5":{"name":"getFunctionInitiatorHash","line":36,"loc":{"start":{"line":36,"column":2},"end":{"line":39,"column":20}}},"6":{"name":"uintHash","line":43,"loc":{"start":{"line":43,"column":2},"end":{"line":46,"column":21}}},"7":{"name":"getStakingID","line":50,"loc":{"start":{"line":50,"column":2},"end":{"line":53,"column":21}}},"8":{"name":"stringHash","line":57,"loc":{"start":{"line":57,"column":2},"end":{"line":60,"column":20}}},"9":{"name":"addressHash","line":64,"loc":{"start":{"line":64,"column":2},"end":{"line":67,"column":21}}},"10":{"name":"contractHash","line":72,"loc":{"start":{"line":72,"column":2},"end":{"line":75,"column":21}}},"11":{"name":"stringAddress","line":79,"loc":{"start":{"line":79,"column":2},"end":{"line":82,"column":21}}},"12":{"name":"stringString","line":86,"loc":{"start":{"line":86,"column":2},"end":{"line":89,"column":21}}},"13":{"name":"stringBytes","line":93,"loc":{"start":{"line":93,"column":2},"end":{"line":96,"column":21}}},"14":{"name":"stringUint","line":100,"loc":{"start":{"line":100,"column":2},"end":{"line":103,"column":21}}},"15":{"name":"stringBytesAddress","line":107,"loc":{"start":{"line":107,"column":2},"end":{"line":110,"column":21}}},"16":{"name":"addressUintUint","line":114,"loc":{"start":{"line":114,"column":2},"end":{"line":117,"column":21}}},"17":{"name":"getAuthorizeHash","line":122,"loc":{"start":{"line":122,"column":2},"end":{"line":125,"column":21}}},"18":{"name":"uintUint","line":129,"loc":{"start":{"line":129,"column":2},"end":{"line":132,"column":21}}},"19":{"name":"uintUintUint","line":137,"loc":{"start":{"line":137,"column":2},"end":{"line":140,"column":21}}},"20":{"name":"currentTime","line":144,"loc":{"start":{"line":144,"column":2},"end":{"line":147,"column":18}}},"21":{"name":"nullBytes","line":151,"loc":{"start":{"line":151,"column":2},"end":{"line":154,"column":21}}},"22":{"name":"nullAddress","line":158,"loc":{"start":{"line":158,"column":2},"end":{"line":161,"column":21}}},"23":{"name":null,"line":165,"loc":{"start":{"line":165,"column":0},"end":{"line":166,"column":8}}}},"statementMap":{"1":{"start":{"line":9,"column":4},"end":{"line":9,"column":20}},"2":{"start":{"line":19,"column":4},"end":{"line":19,"column":63}},"3":{"start":{"line":26,"column":4},"end":{"line":26,"column":90}},"4":{"start":{"line":33,"column":4},"end":{"line":33,"column":83}},"5":{"start":{"line":40,"column":4},"end":{"line":40,"column":76}},"6":{"start":{"line":47,"column":4},"end":{"line":47,"column":46}},"7":{"start":{"line":54,"column":4},"end":{"line":54,"column":70}},"8":{"start":{"line":61,"column":4},"end":{"line":61,"column":45}},"9":{"start":{"line":68,"column":4},"end":{"line":68,"column":46}},"10":{"start":{"line":76,"column":4},"end":{"line":76,"column":57}},"11":{"start":{"line":83,"column":4},"end":{"line":83,"column":57}},"12":{"start":{"line":90,"column":4},"end":{"line":90,"column":59}},"13":{"start":{"line":97,"column":4},"end":{"line":97,"column":57}},"14":{"start":{"line":104,"column":4},"end":{"line":104,"column":57}},"15":{"start":{"line":111,"column":4},"end":{"line":111,"column":70}},"16":{"start":{"line":118,"column":4},"end":{"line":118,"column":70}},"17":{"start":{"line":126,"column":4},"end":{"line":126,"column":85}},"18":{"start":{"line":133,"column":4},"end":{"line":133,"column":60}},"19":{"start":{"line":141,"column":4},"end":{"line":141,"column":73}},"20":{"start":{"line":148,"column":4},"end":{"line":148,"column":14}},"21":{"start":{"line":155,"column":4},"end":{"line":155,"column":21}},"22":{"start":{"line":162,"column":4},"end":{"line":162,"column":21}},"23":{"start":{"line":167,"column":2},"end":{"line":167,"column":9}}},"branchMap":{}},"contracts/test/SafeMathWrapper.sol":{"l":{"10":3,"14":1,"18":2,"22":2,"26":1},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/test/SafeMathWrapper.sol","s":{"1":3,"2":1,"3":2,"4":2,"5":1},"b":{},"f":{"1":3,"2":1,"3":2,"4":2,"5":1},"fnMap":{"1":{"name":"multiply","line":9,"loc":{"start":{"line":9,"column":2},"end":{"line":9,"column":73}}},"2":{"name":"divide","line":13,"loc":{"start":{"line":13,"column":2},"end":{"line":13,"column":71}}},"3":{"name":"subtract","line":17,"loc":{"start":{"line":17,"column":2},"end":{"line":17,"column":73}}},"4":{"name":"addto","line":21,"loc":{"start":{"line":21,"column":2},"end":{"line":21,"column":70}}},"5":{"name":"fraction","line":25,"loc":{"start":{"line":25,"column":2},"end":{"line":25,"column":73}}}},"statementMap":{"1":{"start":{"line":10,"column":4},"end":{"line":10,"column":19}},"2":{"start":{"line":14,"column":4},"end":{"line":14,"column":19}},"3":{"start":{"line":18,"column":4},"end":{"line":18,"column":19}},"4":{"start":{"line":22,"column":4},"end":{"line":22,"column":19}},"5":{"start":{"line":26,"column":4},"end":{"line":26,"column":35}}},"branchMap":{}},"contracts/test/TestBurner.sol":{"l":{"15":1,"16":1,"21":4,"27":2,"28":2,"29":2,"30":1,"37":1},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/test/TestBurner.sol","s":{"1":1,"2":1,"3":4,"4":2,"5":2,"6":2,"7":1,"8":1},"b":{"1":[1,3],"2":[1,1]},"f":{"1":1,"2":4,"3":2,"4":1},"fnMap":{"1":{"name":null,"line":13,"loc":{"start":{"line":13,"column":2},"end":{"line":14,"column":10}}},"2":{"name":"burnTokensManualFee","line":19,"loc":{"start":{"line":19,"column":2},"end":{"line":20,"column":12}}},"3":{"name":"burnTokens","line":25,"loc":{"start":{"line":25,"column":2},"end":{"line":26,"column":12}}},"4":{"name":"getMethodID","line":33,"loc":{"start":{"line":33,"column":2},"end":{"line":36,"column":20}}}},"statementMap":{"1":{"start":{"line":15,"column":4},"end":{"line":15,"column":32}},"2":{"start":{"line":16,"column":4},"end":{"line":16,"column":33}},"3":{"start":{"line":21,"column":4},"end":{"line":21,"column":44}},"4":{"start":{"line":27,"column":4},"end":{"line":27,"column":72}},"5":{"start":{"line":28,"column":4},"end":{"line":28,"column":97}},"6":{"start":{"line":29,"column":4},"end":{"line":29,"column":49}},"7":{"start":{"line":30,"column":4},"end":{"line":30,"column":30}},"8":{"start":{"line":37,"column":4},"end":{"line":37,"column":62}}},"branchMap":{"1":{"line":21,"type":"if","locations":[{"start":{"line":21,"column":4},"end":{"line":21,"column":4}},{"start":{"line":21,"column":4},"end":{"line":21,"column":4}}]},"2":{"line":29,"type":"if","locations":[{"start":{"line":29,"column":4},"end":{"line":29,"column":4}},{"start":{"line":29,"column":4},"end":{"line":29,"column":4}}]}}},"contracts/test/WithdrawTest.sol":{"l":{"10":0,"11":0,"12":0,"13":0,"14":0,"20":1,"21":1},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/test/WithdrawTest.sol","s":{"1":0,"2":0,"3":0,"4":0,"5":1,"6":1},"b":{},"f":{"1":0,"2":1},"fnMap":{"1":{"name":"withdraw","line":7,"loc":{"start":{"line":7,"column":2},"end":{"line":9,"column":17}}},"2":{"name":"deposit","line":17,"loc":{"start":{"line":17,"column":2},"end":{"line":19,"column":11}}}},"statementMap":{"1":{"start":{"line":10,"column":4},"end":{"line":10,"column":54}},"2":{"start":{"line":11,"column":4},"end":{"line":11,"column":37}},"3":{"start":{"line":12,"column":4},"end":{"line":12,"column":27}},"4":{"start":{"line":14,"column":4},"end":{"line":14,"column":15}},"5":{"start":{"line":20,"column":4},"end":{"line":20,"column":41}},"6":{"start":{"line":21,"column":4},"end":{"line":21,"column":35}}},"branchMap":{}},"contracts/tokens/distribution/EqualDistribution.sol":{"l":{"24":1,"25":1,"34":0,"35":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"54":0,"67":2,"68":5,"70":1},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/tokens/distribution/EqualDistribution.sol","s":{"1":1,"2":1,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":2,"12":5,"13":1,"14":1},"b":{"1":[1,0],"2":[1,4]},"f":{"1":1,"2":0,"3":0,"4":0,"5":2},"fnMap":{"1":{"name":null,"line":22,"loc":{"start":{"line":22,"column":2},"end":{"line":23,"column":9}}},"2":{"name":"getFunds","line":31,"loc":{"start":{"line":31,"column":2},"end":{"line":33,"column":18}}},"3":{"name":"withdraw","line":39,"loc":{"start":{"line":39,"column":2},"end":{"line":41,"column":18}}},"4":{"name":null,"line":51,"loc":{"start":{"line":51,"column":2},"end":{"line":53,"column":11}}},"5":{"name":"isBeneficiary","line":63,"loc":{"start":{"line":63,"column":2},"end":{"line":66,"column":18}}}},"statementMap":{"1":{"start":{"line":24,"column":4},"end":{"line":24,"column":39}},"2":{"start":{"line":25,"column":4},"end":{"line":25,"column":33}},"3":{"start":{"line":34,"column":4},"end":{"line":34,"column":32}},"4":{"start":{"line":35,"column":4},"end":{"line":35,"column":15}},"5":{"start":{"line":42,"column":4},"end":{"line":42,"column":119}},"6":{"start":{"line":43,"column":4},"end":{"line":43,"column":70}},"7":{"start":{"line":44,"column":4},"end":{"line":44,"column":44}},"8":{"start":{"line":46,"column":4},"end":{"line":46,"column":40}},"9":{"start":{"line":47,"column":4},"end":{"line":47,"column":15}},"10":{"start":{"line":54,"column":4},"end":{"line":54,"column":42}},"11":{"start":{"line":67,"column":4},"end":{"line":67,"column":2604}},"12":{"start":{"line":68,"column":6},"end":{"line":68,"column":59}},"13":{"start":{"line":68,"column":46},"end":{"line":68,"column":57}},"14":{"start":{"line":70,"column":4},"end":{"line":70,"column":16}}},"branchMap":{"1":{"line":24,"type":"if","locations":[{"start":{"line":24,"column":4},"end":{"line":24,"column":4}},{"start":{"line":24,"column":4},"end":{"line":24,"column":4}}]},"2":{"line":68,"type":"if","locations":[{"start":{"line":68,"column":6},"end":{"line":68,"column":6}},{"start":{"line":68,"column":6},"end":{"line":68,"column":6}}]}}},"contracts/tokens/distribution/FixedDistribution.sol":{"l":{"17":2,"18":2,"19":2,"20":2,"21":6,"22":6,"24":2},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/tokens/distribution/FixedDistribution.sol","s":{"1":2,"2":2,"3":2,"4":6,"5":6,"6":2},"b":{"1":[2,0]},"f":{"1":2},"fnMap":{"1":{"name":null,"line":15,"loc":{"start":{"line":15,"column":2},"end":{"line":16,"column":10}}}},"statementMap":{"1":{"start":{"line":17,"column":4},"end":{"line":17,"column":80}},"2":{"start":{"line":19,"column":4},"end":{"line":19,"column":23}},"3":{"start":{"line":20,"column":4},"end":{"line":20,"column":828}},"4":{"start":{"line":21,"column":6},"end":{"line":21,"column":48}},"5":{"start":{"line":22,"column":6},"end":{"line":22,"column":76}},"6":{"start":{"line":24,"column":4},"end":{"line":24,"column":24}}},"branchMap":{"1":{"line":17,"type":"if","locations":[{"start":{"line":17,"column":4},"end":{"line":17,"column":4}},{"start":{"line":17,"column":4},"end":{"line":17,"column":4}}]}}},"contracts/tokens/distribution/MintableDistribution.sol":{"l":{"21":1,"22":1,"32":2,"33":2,"34":2,"35":2,"44":1,"45":1,"46":1,"56":4,"57":3},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/tokens/distribution/MintableDistribution.sol","s":{"1":1,"2":1,"3":2,"4":2,"5":2,"6":2,"7":1,"8":1,"9":1,"10":4},"b":{"1":[3,1]},"f":{"1":1,"2":2,"3":1,"4":4},"fnMap":{"1":{"name":null,"line":19,"loc":{"start":{"line":19,"column":2},"end":{"line":20,"column":10}}},"2":{"name":"mint","line":28,"loc":{"start":{"line":28,"column":2},"end":{"line":31,"column":18}}},"3":{"name":"finishMinting","line":40,"loc":{"start":{"line":40,"column":2},"end":{"line":43,"column":18}}},"4":{"name":"canMint","line":55,"loc":{"start":{"line":55,"column":2},"end":{"line":55,"column":20}}}},"statementMap":{"1":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"2":{"start":{"line":22,"column":6},"end":{"line":22,"column":21}},"3":{"start":{"line":32,"column":4},"end":{"line":32,"column":31}},"4":{"start":{"line":33,"column":4},"end":{"line":33,"column":45}},"5":{"start":{"line":34,"column":4},"end":{"line":34,"column":27}},"6":{"start":{"line":35,"column":4},"end":{"line":35,"column":15}},"7":{"start":{"line":44,"column":4},"end":{"line":44,"column":25}},"8":{"start":{"line":45,"column":4},"end":{"line":45,"column":23}},"9":{"start":{"line":46,"column":4},"end":{"line":46,"column":15}},"10":{"start":{"line":56,"column":4},"end":{"line":56,"column":52}}},"branchMap":{"1":{"line":56,"type":"if","locations":[{"start":{"line":56,"column":4},"end":{"line":56,"column":4}},{"start":{"line":56,"column":4},"end":{"line":56,"column":4}}]}}},"contracts/tokens/distribution/StandardDistribution.sol":{"l":{"35":4,"36":4,"37":4,"38":4,"55":1,"56":1,"57":1,"64":2,"65":2,"66":2,"78":5,"79":5,"87":1,"91":1,"95":7,"105":4,"106":4,"107":4},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/tokens/distribution/StandardDistribution.sol","s":{"1":4,"2":4,"3":1,"4":1,"5":1,"6":2,"7":2,"8":2,"9":5,"10":5,"11":1,"12":1,"13":7,"14":4,"15":4},"b":{},"f":{"1":4,"2":1,"3":2,"4":5,"5":1,"6":1,"7":7,"8":4},"fnMap":{"1":{"name":"withdraw","line":31,"loc":{"start":{"line":31,"column":2},"end":{"line":34,"column":26}}},"2":{"name":"issueDividends","line":52,"loc":{"start":{"line":52,"column":2},"end":{"line":54,"column":10}}},"3":{"name":null,"line":61,"loc":{"start":{"line":61,"column":2},"end":{"line":63,"column":12}}},"4":{"name":"getTokenValue","line":74,"loc":{"start":{"line":74,"column":2},"end":{"line":77,"column":18}}},"5":{"name":"getUnclaimedAmount","line":83,"loc":{"start":{"line":83,"column":2},"end":{"line":86,"column":18}}},"6":{"name":"totalSupply","line":90,"loc":{"start":{"line":90,"column":2},"end":{"line":90,"column":54}}},"7":{"name":"balanceOf","line":94,"loc":{"start":{"line":94,"column":2},"end":{"line":94,"column":66}}},"8":{"name":"updateclaimableIncome","line":104,"loc":{"start":{"line":104,"column":2},"end":{"line":104,"column":47}}}},"statementMap":{"1":{"start":{"line":35,"column":6},"end":{"line":35,"column":61}},"2":{"start":{"line":38,"column":6},"end":{"line":38,"column":55}},"3":{"start":{"line":55,"column":6},"end":{"line":55,"column":80}},"4":{"start":{"line":56,"column":6},"end":{"line":56,"column":45}},"5":{"start":{"line":57,"column":6},"end":{"line":57,"column":51}},"6":{"start":{"line":64,"column":6},"end":{"line":64,"column":80}},"7":{"start":{"line":65,"column":6},"end":{"line":65,"column":45}},"8":{"start":{"line":66,"column":6},"end":{"line":66,"column":51}},"9":{"start":{"line":78,"column":6},"end":{"line":78,"column":83}},"10":{"start":{"line":79,"column":6},"end":{"line":79,"column":57}},"11":{"start":{"line":87,"column":6},"end":{"line":87,"column":82}},"12":{"start":{"line":91,"column":4},"end":{"line":91,"column":17}},"13":{"start":{"line":95,"column":4},"end":{"line":95,"column":27}},"14":{"start":{"line":105,"column":6},"end":{"line":105,"column":78}},"15":{"start":{"line":106,"column":6},"end":{"line":106,"column":49}}},"branchMap":{}},"contracts/tokens/erc20/BurnableToken.sol":{"l":{"26":12,"27":12,"28":12,"29":12,"41":204,"42":203,"43":201,"44":201,"45":201,"46":201,"61":156,"62":156,"63":156,"75":17,"76":16,"77":15,"78":15,"79":14,"80":14,"95":1,"97":1,"98":1,"113":2,"114":2,"115":1,"118":1,"120":2,"121":2,"133":1,"134":1,"135":1,"136":1,"137":1,"147":40,"148":40,"149":39,"150":39,"151":39,"152":39,"161":2,"170":199,"184":5},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/tokens/erc20/BurnableToken.sol","s":{"1":12,"2":12,"3":12,"4":12,"5":204,"6":203,"7":201,"8":201,"9":201,"10":201,"11":156,"12":156,"13":156,"14":17,"15":16,"16":15,"17":15,"18":14,"19":14,"20":1,"21":1,"22":1,"23":2,"24":2,"25":1,"26":1,"27":2,"28":2,"29":1,"30":1,"31":1,"32":1,"33":1,"34":40,"35":40,"36":39,"37":39,"38":39,"39":39,"40":2,"41":199,"42":5},"b":{"1":[203,1],"2":[201,2],"3":[16,1],"4":[1,1]},"f":{"1":12,"2":204,"3":156,"4":17,"5":1,"6":2,"7":1,"8":40,"9":2,"10":199,"11":5},"fnMap":{"1":{"name":null,"line":24,"loc":{"start":{"line":24,"column":4},"end":{"line":25,"column":12}}},"2":{"name":"transfer","line":38,"loc":{"start":{"line":38,"column":2},"end":{"line":40,"column":18}}},"3":{"name":"approve","line":58,"loc":{"start":{"line":58,"column":2},"end":{"line":60,"column":18}}},"4":{"name":"transferFrom","line":72,"loc":{"start":{"line":72,"column":2},"end":{"line":74,"column":18}}},"5":{"name":"increaseApproval","line":92,"loc":{"start":{"line":92,"column":2},"end":{"line":94,"column":18}}},"6":{"name":"decreaseApproval","line":110,"loc":{"start":{"line":110,"column":2},"end":{"line":112,"column":18}}},"7":{"name":"burn","line":130,"loc":{"start":{"line":130,"column":2},"end":{"line":132,"column":26}}},"8":{"name":"burnFrom","line":144,"loc":{"start":{"line":144,"column":2},"end":{"line":146,"column":26}}},"9":{"name":"totalSupply","line":160,"loc":{"start":{"line":160,"column":2},"end":{"line":160,"column":54}}},"10":{"name":"balanceOf","line":169,"loc":{"start":{"line":169,"column":2},"end":{"line":169,"column":66}}},"11":{"name":"allowance","line":180,"loc":{"start":{"line":180,"column":2},"end":{"line":183,"column":21}}}},"statementMap":{"1":{"start":{"line":26,"column":8},"end":{"line":26,"column":28}},"2":{"start":{"line":27,"column":8},"end":{"line":27,"column":27}},"3":{"start":{"line":28,"column":8},"end":{"line":28,"column":42}},"4":{"start":{"line":29,"column":8},"end":{"line":29,"column":59}},"5":{"start":{"line":41,"column":4},"end":{"line":41,"column":42}},"6":{"start":{"line":42,"column":4},"end":{"line":42,"column":29}},"7":{"start":{"line":43,"column":4},"end":{"line":43,"column":58}},"8":{"start":{"line":44,"column":4},"end":{"line":44,"column":44}},"9":{"start":{"line":45,"column":4},"end":{"line":45,"column":42}},"10":{"start":{"line":46,"column":4},"end":{"line":46,"column":15}},"11":{"start":{"line":61,"column":4},"end":{"line":61,"column":41}},"12":{"start":{"line":62,"column":4},"end":{"line":62,"column":47}},"13":{"start":{"line":63,"column":4},"end":{"line":63,"column":15}},"14":{"start":{"line":75,"column":4},"end":{"line":75,"column":29}},"15":{"start":{"line":76,"column":4},"end":{"line":76,"column":48}},"16":{"start":{"line":77,"column":4},"end":{"line":77,"column":44}},"17":{"start":{"line":78,"column":4},"end":{"line":78,"column":70}},"18":{"start":{"line":79,"column":4},"end":{"line":79,"column":37}},"19":{"start":{"line":80,"column":4},"end":{"line":80,"column":15}},"20":{"start":{"line":95,"column":4},"end":{"line":95,"column":3610}},"21":{"start":{"line":97,"column":4},"end":{"line":97,"column":70}},"22":{"start":{"line":98,"column":4},"end":{"line":98,"column":15}},"23":{"start":{"line":113,"column":4},"end":{"line":113,"column":51}},"24":{"start":{"line":114,"column":4},"end":{"line":114,"column":4348}},"25":{"start":{"line":115,"column":6},"end":{"line":115,"column":38}},"26":{"start":{"line":118,"column":6},"end":{"line":118,"column":67}},"27":{"start":{"line":120,"column":4},"end":{"line":120,"column":70}},"28":{"start":{"line":121,"column":4},"end":{"line":121,"column":15}},"29":{"start":{"line":133,"column":4},"end":{"line":133,"column":59}},"30":{"start":{"line":134,"column":4},"end":{"line":134,"column":31}},"31":{"start":{"line":135,"column":4},"end":{"line":135,"column":37}},"32":{"start":{"line":136,"column":4},"end":{"line":136,"column":50}},"33":{"start":{"line":137,"column":4},"end":{"line":137,"column":15}},"34":{"start":{"line":147,"column":4},"end":{"line":147,"column":49}},"35":{"start":{"line":148,"column":4},"end":{"line":148,"column":71}},"36":{"start":{"line":149,"column":4},"end":{"line":149,"column":31}},"37":{"start":{"line":150,"column":4},"end":{"line":150,"column":32}},"38":{"start":{"line":151,"column":4},"end":{"line":151,"column":45}},"39":{"start":{"line":152,"column":4},"end":{"line":152,"column":15}},"40":{"start":{"line":161,"column":4},"end":{"line":161,"column":17}},"41":{"start":{"line":170,"column":4},"end":{"line":170,"column":27}},"42":{"start":{"line":184,"column":4},"end":{"line":184,"column":36}}},"branchMap":{"1":{"line":41,"type":"if","locations":[{"start":{"line":41,"column":4},"end":{"line":41,"column":4}},{"start":{"line":41,"column":4},"end":{"line":41,"column":4}}]},"2":{"line":42,"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":42,"column":4}},{"start":{"line":42,"column":4},"end":{"line":42,"column":4}}]},"3":{"line":75,"type":"if","locations":[{"start":{"line":75,"column":4},"end":{"line":75,"column":4}},{"start":{"line":75,"column":4},"end":{"line":75,"column":4}}]},"4":{"line":114,"type":"if","locations":[{"start":{"line":114,"column":4},"end":{"line":114,"column":4}},{"start":{"line":114,"column":4},"end":{"line":114,"column":4}}]}}},"contracts/tokens/erc20/DividendToken.sol":{"l":{"37":4,"38":3,"39":1,"52":6,"53":5,"54":3,"66":1,"67":1,"68":1,"69":1,"77":10,"78":10,"79":10,"80":10,"81":10,"89":7,"90":7,"91":7,"92":7,"100":0,"107":4,"108":4,"109":4,"122":36,"123":36,"131":4,"141":32,"142":32,"143":32},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/tokens/erc20/DividendToken.sol","s":{"1":4,"2":1,"3":6,"4":3,"5":1,"6":1,"7":1,"8":1,"9":10,"10":10,"11":10,"12":7,"13":7,"14":7,"15":7,"16":0,"17":4,"18":4,"19":4,"20":36,"21":36,"22":4,"23":32,"24":32},"b":{"1":[3,1],"2":[5,1]},"f":{"1":12,"2":4,"3":6,"4":1,"5":10,"6":7,"7":0,"8":4,"9":36,"10":4,"11":32},"fnMap":{"1":{"name":null,"line":24,"loc":{"start":{"line":24,"column":4},"end":{"line":26,"column":37}}},"2":{"name":"transfer","line":32,"loc":{"start":{"line":32,"column":4},"end":{"line":36,"column":28}}},"3":{"name":"transferFrom","line":47,"loc":{"start":{"line":47,"column":4},"end":{"line":51,"column":28}}},"4":{"name":"approveAndCall","line":61,"loc":{"start":{"line":61,"column":4},"end":{"line":65,"column":28}}},"5":{"name":"withdraw","line":73,"loc":{"start":{"line":73,"column":4},"end":{"line":76,"column":20}}},"6":{"name":"issueDividends","line":85,"loc":{"start":{"line":85,"column":4},"end":{"line":88,"column":20}}},"7":{"name":"getERC20","line":96,"loc":{"start":{"line":96,"column":4},"end":{"line":99,"column":21}}},"8":{"name":null,"line":104,"loc":{"start":{"line":104,"column":4},"end":{"line":106,"column":12}}},"9":{"name":"collectLatestPayments","line":118,"loc":{"start":{"line":118,"column":4},"end":{"line":121,"column":20}}},"10":{"name":"getAmountOwed","line":127,"loc":{"start":{"line":127,"column":4},"end":{"line":130,"column":20}}},"11":{"name":"updateIncomeClaimed","line":140,"loc":{"start":{"line":140,"column":4},"end":{"line":140,"column":49}}}},"statementMap":{"1":{"start":{"line":37,"column":8},"end":{"line":37,"column":36}},"2":{"start":{"line":39,"column":8},"end":{"line":39,"column":19}},"3":{"start":{"line":52,"column":8},"end":{"line":52,"column":36}},"4":{"start":{"line":54,"column":8},"end":{"line":54,"column":19}},"5":{"start":{"line":66,"column":8},"end":{"line":66,"column":46}},"6":{"start":{"line":67,"column":8},"end":{"line":67,"column":52}},"7":{"start":{"line":68,"column":8},"end":{"line":68,"column":39}},"8":{"start":{"line":69,"column":8},"end":{"line":69,"column":19}},"9":{"start":{"line":77,"column":8},"end":{"line":77,"column":62}},"10":{"start":{"line":79,"column":8},"end":{"line":79,"column":51}},"11":{"start":{"line":81,"column":8},"end":{"line":81,"column":19}},"12":{"start":{"line":89,"column":8},"end":{"line":89,"column":47}},"13":{"start":{"line":90,"column":8},"end":{"line":90,"column":82}},"14":{"start":{"line":91,"column":8},"end":{"line":91,"column":53}},"15":{"start":{"line":92,"column":8},"end":{"line":92,"column":19}},"16":{"start":{"line":100,"column":6},"end":{"line":100,"column":23}},"17":{"start":{"line":107,"column":8},"end":{"line":107,"column":47}},"18":{"start":{"line":108,"column":8},"end":{"line":108,"column":82}},"19":{"start":{"line":109,"column":8},"end":{"line":109,"column":53}},"20":{"start":{"line":122,"column":8},"end":{"line":122,"column":89}},"21":{"start":{"line":123,"column":8},"end":{"line":123,"column":63}},"22":{"start":{"line":131,"column":8},"end":{"line":131,"column":95}},"23":{"start":{"line":141,"column":8},"end":{"line":141,"column":90}},"24":{"start":{"line":142,"column":8},"end":{"line":142,"column":55}}},"branchMap":{"1":{"line":37,"type":"if","locations":[{"start":{"line":37,"column":8},"end":{"line":37,"column":8}},{"start":{"line":37,"column":8},"end":{"line":37,"column":8}}]},"2":{"line":52,"type":"if","locations":[{"start":{"line":52,"column":8},"end":{"line":52,"column":8}},{"start":{"line":52,"column":8},"end":{"line":52,"column":8}}]}}},"contracts/tokens/erc20/DividendTokenERC20.sol":{"l":{"32":5,"41":3,"42":2,"43":1,"52":3,"53":2,"54":1,"66":1,"67":1,"68":1,"69":1,"75":6,"76":5,"77":5,"78":5,"79":5,"80":5,"88":10,"89":10,"90":10,"91":10,"92":10,"93":10,"101":2,"102":2,"103":2,"104":2,"106":1,"107":1,"109":2,"122":28,"123":28,"131":4,"138":2,"148":24,"149":24,"150":24},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/tokens/erc20/DividendTokenERC20.sol","s":{"1":5,"2":3,"3":1,"4":3,"5":1,"6":1,"7":1,"8":1,"9":1,"10":6,"11":5,"12":5,"13":5,"14":5,"15":5,"16":10,"17":10,"18":10,"19":10,"20":10,"21":2,"22":2,"23":2,"24":2,"25":1,"26":1,"27":2,"28":28,"29":28,"30":4,"31":2,"32":24,"33":24},"b":{"1":[2,1],"2":[2,1],"3":[5,1],"4":[5,0],"5":[10,0],"6":[1,1]},"f":{"1":5,"2":3,"3":3,"4":1,"5":6,"6":10,"7":2,"8":28,"9":4,"10":2,"11":24},"fnMap":{"1":{"name":null,"line":30,"loc":{"start":{"line":30,"column":4},"end":{"line":31,"column":45}}},"2":{"name":"transfer","line":36,"loc":{"start":{"line":36,"column":4},"end":{"line":40,"column":28}}},"3":{"name":"transferFrom","line":47,"loc":{"start":{"line":47,"column":4},"end":{"line":51,"column":28}}},"4":{"name":"approveAndCall","line":61,"loc":{"start":{"line":61,"column":4},"end":{"line":65,"column":28}}},"5":{"name":"issueDividends","line":72,"loc":{"start":{"line":72,"column":4},"end":{"line":74,"column":19}}},"6":{"name":"withdraw","line":84,"loc":{"start":{"line":84,"column":4},"end":{"line":87,"column":20}}},"7":{"name":"checkForTransfers","line":99,"loc":{"start":{"line":99,"column":4},"end":{"line":100,"column":14}}},"8":{"name":"collectLatestPayments","line":118,"loc":{"start":{"line":118,"column":4},"end":{"line":121,"column":20}}},"9":{"name":"getAmountOwed","line":127,"loc":{"start":{"line":127,"column":4},"end":{"line":130,"column":20}}},"10":{"name":"getERC20","line":134,"loc":{"start":{"line":134,"column":4},"end":{"line":137,"column":21}}},"11":{"name":"updateIncomeClaimed","line":147,"loc":{"start":{"line":147,"column":4},"end":{"line":147,"column":49}}}},"statementMap":{"1":{"start":{"line":32,"column":8},"end":{"line":32,"column":35}},"2":{"start":{"line":41,"column":8},"end":{"line":41,"column":36}},"3":{"start":{"line":43,"column":8},"end":{"line":43,"column":19}},"4":{"start":{"line":52,"column":8},"end":{"line":52,"column":36}},"5":{"start":{"line":54,"column":8},"end":{"line":54,"column":19}},"6":{"start":{"line":66,"column":8},"end":{"line":66,"column":46}},"7":{"start":{"line":67,"column":8},"end":{"line":67,"column":52}},"8":{"start":{"line":68,"column":8},"end":{"line":68,"column":39}},"9":{"start":{"line":69,"column":8},"end":{"line":69,"column":19}},"10":{"start":{"line":75,"column":8},"end":{"line":75,"column":27}},"11":{"start":{"line":76,"column":8},"end":{"line":76,"column":70}},"12":{"start":{"line":77,"column":8},"end":{"line":77,"column":80}},"13":{"start":{"line":78,"column":8},"end":{"line":78,"column":45}},"14":{"start":{"line":79,"column":8},"end":{"line":79,"column":51}},"15":{"start":{"line":80,"column":8},"end":{"line":80,"column":19}},"16":{"start":{"line":88,"column":8},"end":{"line":88,"column":65}},"17":{"start":{"line":90,"column":8},"end":{"line":90,"column":56}},"18":{"start":{"line":91,"column":8},"end":{"line":91,"column":50}},"19":{"start":{"line":92,"column":8},"end":{"line":92,"column":51}},"20":{"start":{"line":93,"column":8},"end":{"line":93,"column":19}},"21":{"start":{"line":101,"column":6},"end":{"line":101,"column":58}},"22":{"start":{"line":102,"column":6},"end":{"line":102,"column":56}},"23":{"start":{"line":103,"column":6},"end":{"line":103,"column":54}},"24":{"start":{"line":104,"column":6},"end":{"line":104,"column":3801}},"25":{"start":{"line":106,"column":8},"end":{"line":106,"column":84}},"26":{"start":{"line":107,"column":8},"end":{"line":107,"column":49}},"27":{"start":{"line":109,"column":6},"end":{"line":109,"column":39}},"28":{"start":{"line":122,"column":8},"end":{"line":122,"column":89}},"29":{"start":{"line":123,"column":8},"end":{"line":123,"column":63}},"30":{"start":{"line":131,"column":8},"end":{"line":131,"column":98}},"31":{"start":{"line":138,"column":6},"end":{"line":138,"column":27}},"32":{"start":{"line":148,"column":8},"end":{"line":148,"column":96}},"33":{"start":{"line":149,"column":8},"end":{"line":149,"column":55}}},"branchMap":{"1":{"line":41,"type":"if","locations":[{"start":{"line":41,"column":8},"end":{"line":41,"column":8}},{"start":{"line":41,"column":8},"end":{"line":41,"column":8}}]},"2":{"line":52,"type":"if","locations":[{"start":{"line":52,"column":8},"end":{"line":52,"column":8}},{"start":{"line":52,"column":8},"end":{"line":52,"column":8}}]},"3":{"line":75,"type":"if","locations":[{"start":{"line":75,"column":8},"end":{"line":75,"column":8}},{"start":{"line":75,"column":8},"end":{"line":75,"column":8}}]},"4":{"line":76,"type":"if","locations":[{"start":{"line":76,"column":8},"end":{"line":76,"column":8}},{"start":{"line":76,"column":8},"end":{"line":76,"column":8}}]},"5":{"line":91,"type":"if","locations":[{"start":{"line":91,"column":8},"end":{"line":91,"column":8}},{"start":{"line":91,"column":8},"end":{"line":91,"column":8}}]},"6":{"line":104,"type":"if","locations":[{"start":{"line":104,"column":6},"end":{"line":104,"column":6}},{"start":{"line":104,"column":6},"end":{"line":104,"column":6}}]}}},"contracts/tokens/erc20/GovernedToken.sol":{"l":{"27":1,"34":1,"35":0,"36":0,"43":0,"44":0,"45":0,"53":1,"54":1,"55":1,"56":1,"57":1},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/tokens/erc20/GovernedToken.sol","s":{"1":1,"2":1,"3":0,"4":0,"5":0,"6":1,"7":1,"8":1,"9":1,"10":1},"b":{"1":[0,1],"2":[0,0]},"f":{"1":1,"2":1,"3":0,"4":1},"fnMap":{"1":{"name":null,"line":24,"loc":{"start":{"line":24,"column":2},"end":{"line":26,"column":35}}},"2":{"name":"transfer","line":31,"loc":{"start":{"line":31,"column":2},"end":{"line":33,"column":26}}},"3":{"name":"transferFrom","line":40,"loc":{"start":{"line":40,"column":2},"end":{"line":42,"column":26}}},"4":{"name":"getAmountAvailable","line":49,"loc":{"start":{"line":49,"column":2},"end":{"line":52,"column":18}}}},"statementMap":{"1":{"start":{"line":27,"column":4},"end":{"line":27,"column":33}},"2":{"start":{"line":34,"column":6},"end":{"line":34,"column":55}},"3":{"start":{"line":36,"column":6},"end":{"line":36,"column":17}},"4":{"start":{"line":43,"column":6},"end":{"line":43,"column":50}},"5":{"start":{"line":45,"column":6},"end":{"line":45,"column":17}},"6":{"start":{"line":53,"column":4},"end":{"line":53,"column":104}},"7":{"start":{"line":54,"column":4},"end":{"line":54,"column":108}},"8":{"start":{"line":55,"column":4},"end":{"line":55,"column":37}},"9":{"start":{"line":56,"column":4},"end":{"line":56,"column":45}},"10":{"start":{"line":57,"column":4},"end":{"line":57,"column":20}}},"branchMap":{"1":{"line":34,"type":"if","locations":[{"start":{"line":34,"column":6},"end":{"line":34,"column":6}},{"start":{"line":34,"column":6},"end":{"line":34,"column":6}}]},"2":{"line":43,"type":"if","locations":[{"start":{"line":43,"column":6},"end":{"line":43,"column":6}},{"start":{"line":43,"column":6},"end":{"line":43,"column":6}}]}}},"contracts/tokens/erc20/GovernedTokenERC20.sol":{"l":{"28":0,"35":0,"36":0,"37":0,"44":0,"45":0,"46":0,"54":0,"55":0,"56":0,"57":0,"58":0},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/tokens/erc20/GovernedTokenERC20.sol","s":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0},"b":{"1":[0,0],"2":[0,0]},"f":{"1":0,"2":0,"3":0,"4":0},"fnMap":{"1":{"name":null,"line":25,"loc":{"start":{"line":25,"column":2},"end":{"line":27,"column":55}}},"2":{"name":"transfer","line":32,"loc":{"start":{"line":32,"column":2},"end":{"line":34,"column":26}}},"3":{"name":"transferFrom","line":41,"loc":{"start":{"line":41,"column":2},"end":{"line":43,"column":26}}},"4":{"name":"getAmountAvailable","line":50,"loc":{"start":{"line":50,"column":2},"end":{"line":53,"column":18}}}},"statementMap":{"1":{"start":{"line":28,"column":4},"end":{"line":28,"column":33}},"2":{"start":{"line":35,"column":6},"end":{"line":35,"column":55}},"3":{"start":{"line":37,"column":6},"end":{"line":37,"column":17}},"4":{"start":{"line":44,"column":6},"end":{"line":44,"column":50}},"5":{"start":{"line":46,"column":6},"end":{"line":46,"column":17}},"6":{"start":{"line":54,"column":4},"end":{"line":54,"column":104}},"7":{"start":{"line":55,"column":4},"end":{"line":55,"column":108}},"8":{"start":{"line":56,"column":4},"end":{"line":56,"column":37}},"9":{"start":{"line":57,"column":4},"end":{"line":57,"column":45}},"10":{"start":{"line":58,"column":4},"end":{"line":58,"column":20}}},"branchMap":{"1":{"line":35,"type":"if","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":6}},{"start":{"line":35,"column":6},"end":{"line":35,"column":6}}]},"2":{"line":44,"type":"if","locations":[{"start":{"line":44,"column":6},"end":{"line":44,"column":6}},{"start":{"line":44,"column":6},"end":{"line":44,"column":6}}]}}},"contracts/tokens/erc20/MintableToken.sol":{"l":{"21":17,"22":17,"23":17,"34":43,"35":43,"36":43,"37":43,"38":43,"46":7,"47":7,"48":7,"55":2,"60":51,"61":50},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/tokens/erc20/MintableToken.sol","s":{"1":17,"2":17,"3":17,"4":43,"5":43,"6":43,"7":43,"8":43,"9":7,"10":7,"11":7,"12":2,"13":51},"b":{"1":[50,1]},"f":{"1":17,"2":43,"3":7,"4":2,"5":51},"fnMap":{"1":{"name":null,"line":19,"loc":{"start":{"line":19,"column":2},"end":{"line":20,"column":10}}},"2":{"name":"mint","line":30,"loc":{"start":{"line":30,"column":2},"end":{"line":33,"column":18}}},"3":{"name":"finishMinting","line":42,"loc":{"start":{"line":42,"column":2},"end":{"line":45,"column":18}}},"4":{"name":"getTokenURI","line":51,"loc":{"start":{"line":51,"column":2},"end":{"line":54,"column":20}}},"5":{"name":"canMint","line":59,"loc":{"start":{"line":59,"column":2},"end":{"line":59,"column":20}}}},"statementMap":{"1":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"2":{"start":{"line":22,"column":6},"end":{"line":22,"column":21}},"3":{"start":{"line":23,"column":6},"end":{"line":23,"column":15}},"4":{"start":{"line":34,"column":4},"end":{"line":34,"column":31}},"5":{"start":{"line":35,"column":4},"end":{"line":35,"column":45}},"6":{"start":{"line":36,"column":4},"end":{"line":36,"column":27}},"7":{"start":{"line":37,"column":4},"end":{"line":37,"column":43}},"8":{"start":{"line":38,"column":4},"end":{"line":38,"column":15}},"9":{"start":{"line":46,"column":4},"end":{"line":46,"column":25}},"10":{"start":{"line":47,"column":4},"end":{"line":47,"column":23}},"11":{"start":{"line":48,"column":4},"end":{"line":48,"column":15}},"12":{"start":{"line":55,"column":6},"end":{"line":55,"column":21}},"13":{"start":{"line":60,"column":4},"end":{"line":60,"column":52}}},"branchMap":{"1":{"line":60,"type":"if","locations":[{"start":{"line":60,"column":4},"end":{"line":60,"column":4}},{"start":{"line":60,"column":4},"end":{"line":60,"column":4}}]}}},"contracts/tokens/erc20/StandardToken.sol":{"l":{"34":17,"43":5,"44":3,"45":2,"46":2,"47":2,"48":2,"61":11,"62":11,"63":11,"75":7,"76":6,"77":5,"78":4,"79":4,"80":4,"81":4,"82":4,"101":1,"103":1,"104":1,"119":2,"120":2,"121":1,"124":1,"126":2,"127":2,"135":36,"144":55},"path":"/home/peter/Documents/Work/MyBit/develop/contracts/tokens/erc20/StandardToken.sol","s":{"1":17,"2":5,"3":3,"4":2,"5":2,"6":2,"7":2,"8":11,"9":11,"10":11,"11":7,"12":6,"13":5,"14":4,"15":4,"16":4,"17":4,"18":4,"19":1,"20":1,"21":1,"22":2,"23":2,"24":1,"25":1,"26":2,"27":2,"28":36,"29":55},"b":{"1":[3,2],"2":[2,1],"3":[6,1],"4":[5,1],"5":[4,1],"6":[1,1]},"f":{"1":17,"2":5,"3":11,"4":7,"5":1,"6":2,"7":36,"8":55},"fnMap":{"1":{"name":"allowance","line":30,"loc":{"start":{"line":30,"column":2},"end":{"line":33,"column":21}}},"2":{"name":"transfer","line":42,"loc":{"start":{"line":42,"column":2},"end":{"line":42,"column":70}}},"3":{"name":"approve","line":60,"loc":{"start":{"line":60,"column":2},"end":{"line":60,"column":74}}},"4":{"name":"transferFrom","line":72,"loc":{"start":{"line":72,"column":2},"end":{"line":74,"column":18}}},"5":{"name":"increaseApproval","line":94,"loc":{"start":{"line":94,"column":2},"end":{"line":100,"column":3}}},"6":{"name":"decreaseApproval","line":116,"loc":{"start":{"line":116,"column":2},"end":{"line":118,"column":18}}},"7":{"name":"totalSupply","line":134,"loc":{"start":{"line":134,"column":2},"end":{"line":134,"column":54}}},"8":{"name":"balanceOf","line":143,"loc":{"start":{"line":143,"column":2},"end":{"line":143,"column":66}}}},"statementMap":{"1":{"start":{"line":34,"column":4},"end":{"line":34,"column":36}},"2":{"start":{"line":43,"column":4},"end":{"line":43,"column":42}},"3":{"start":{"line":44,"column":4},"end":{"line":44,"column":29}},"4":{"start":{"line":45,"column":4},"end":{"line":45,"column":58}},"5":{"start":{"line":46,"column":4},"end":{"line":46,"column":44}},"6":{"start":{"line":47,"column":4},"end":{"line":47,"column":42}},"7":{"start":{"line":48,"column":4},"end":{"line":48,"column":15}},"8":{"start":{"line":61,"column":4},"end":{"line":61,"column":41}},"9":{"start":{"line":62,"column":4},"end":{"line":62,"column":47}},"10":{"start":{"line":63,"column":4},"end":{"line":63,"column":15}},"11":{"start":{"line":75,"column":4},"end":{"line":75,"column":37}},"12":{"start":{"line":76,"column":4},"end":{"line":76,"column":48}},"13":{"start":{"line":77,"column":4},"end":{"line":77,"column":29}},"14":{"start":{"line":78,"column":4},"end":{"line":78,"column":48}},"15":{"start":{"line":79,"column":4},"end":{"line":79,"column":44}},"16":{"start":{"line":80,"column":4},"end":{"line":80,"column":70}},"17":{"start":{"line":81,"column":4},"end":{"line":81,"column":37}},"18":{"start":{"line":82,"column":4},"end":{"line":82,"column":15}},"19":{"start":{"line":101,"column":4},"end":{"line":101,"column":3641}},"20":{"start":{"line":103,"column":4},"end":{"line":103,"column":70}},"21":{"start":{"line":104,"column":4},"end":{"line":104,"column":15}},"22":{"start":{"line":119,"column":4},"end":{"line":119,"column":51}},"23":{"start":{"line":120,"column":4},"end":{"line":120,"column":4387}},"24":{"start":{"line":121,"column":6},"end":{"line":121,"column":38}},"25":{"start":{"line":124,"column":6},"end":{"line":124,"column":67}},"26":{"start":{"line":126,"column":4},"end":{"line":126,"column":70}},"27":{"start":{"line":127,"column":4},"end":{"line":127,"column":15}},"28":{"start":{"line":135,"column":4},"end":{"line":135,"column":17}},"29":{"start":{"line":144,"column":4},"end":{"line":144,"column":27}}},"branchMap":{"1":{"line":43,"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":43,"column":4}},{"start":{"line":43,"column":4},"end":{"line":43,"column":4}}]},"2":{"line":44,"type":"if","locations":[{"start":{"line":44,"column":4},"end":{"line":44,"column":4}},{"start":{"line":44,"column":4},"end":{"line":44,"column":4}}]},"3":{"line":75,"type":"if","locations":[{"start":{"line":75,"column":4},"end":{"line":75,"column":4}},{"start":{"line":75,"column":4},"end":{"line":75,"column":4}}]},"4":{"line":76,"type":"if","locations":[{"start":{"line":76,"column":4},"end":{"line":76,"column":4}},{"start":{"line":76,"column":4},"end":{"line":76,"column":4}}]},"5":{"line":77,"type":"if","locations":[{"start":{"line":77,"column":4},"end":{"line":77,"column":4}},{"start":{"line":77,"column":4},"end":{"line":77,"column":4}}]},"6":{"line":120,"type":"if","locations":[{"start":{"line":120,"column":4},"end":{"line":120,"column":4}},{"start":{"line":120,"column":4},"end":{"line":120,"column":4}}]}}}}
\ No newline at end of file
diff --git a/coverage/access/AccessHierarchy.sol.html b/coverage/access/AccessHierarchy.sol.html
new file mode 100644
index 00000000..68503504
--- /dev/null
+++ b/coverage/access/AccessHierarchy.sol.html
@@ -0,0 +1,296 @@
+
+
+
pragma solidity 0.4.24;
+
+import '../interfaces/BurnableERC20.sol';
+import "../interfaces/DBInterface.sol";
+
+/// @title A contract for burning ERC20 tokens as usage fee for dapps
+/// @author Kyle Dewhurst & Peter Phillips MyBit Foundation
+/// @notice Allows Dapps to call this contract to burn ERC20 tokens as a usage fee
+/// @dev This contract does not accept tokens. It only burns tokens from investors wallets to run platform functionality
+contract ERC20Burner {
+
+ BurnableERC20 public token; // The instance of the ERC20 burner contract
+ DBInterface public database; // The datbase instance
+
+
+ // @notice constructor: initializes database and the MYB token
+ // @param: the address for the database contract used by this platform
+ constructor(address _database)
+ public {
+ database = DBInterface(_database);
+ token = BurnableERC20(database.addressStorage(keccak256(abi.encodePacked("platformToken"))));
+ Erequire(address(token) != address(0));
+ }
+
+ // @notice authorized contracts can burn mybit tokens here if the investor has approved this contract to do so
+ // @param (address) _tokenHolder = the address of the mybit token holder who wishes to burn _amount of tokens
+ // @param (uint) _amount = the amount of tokens to be burnt (must include decimal places)
+ function burn(address _tokenHolder, uint _amount)
+ external
+ onlyPlatformContracts(msg.sender)
+ acceptedState(_tokenHolder)
+ returns (bool) {
+ require(token.burnFrom(_tokenHolder, _amount));
+ emit LogMYBBurned(_tokenHolder, msg.sender, _amount);
+ return true;
+ }
+
+ // @notice owners can set the cost of functionality on the platform here.
+ // @dev _amount will be how many platformTokens are burned to call the method at _contractAddress
+ // @param (bytes4) _methodID: the methodID of the function which is to require a burning fee
+ // @param (address) _contractAddress: the address of the contract where this method is contained
+ function setFee(bytes4 _methodID, address _contractAddress, uint _amount)
+ external
+ onlyOwner
+ returns (bool) {
+ //Sets the price to burn per function in MyB.
+ database.setUint(keccak256(abi.encodePacked(_methodID, _contractAddress)), _amount);
+ emit LogFeeAdded(_contractAddress, _methodID, _amount);
+ return true;
+ }
+
+
+ // @notice fallback function. Rejects all ether
+ function ()
+ external
+ payable {
+ revert();
+ }
+
+ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Modifiers
+ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+ // @notice reverts if msg.sender isn't the owner
+ modifier onlyOwner {
+ Erequire(database.boolStorage(keccak256(abi.encodePacked("owner", msg.sender))));
+ _;
+ }
+
+ // @notice reverts if address isn't authorized to burn MYB
+ modifier onlyPlatformContracts(address _burner) {
+ require(database.boolStorage(keccak256(abi.encodePacked("contract", _burner))));
+ _;
+ }
+
+ // @notice reverts if investor hasn't accepted current contract state or if he doesn't ignore state changes entirely
+ modifier acceptedState(address _investor) {
+ bytes32 currentState = database.bytes32Storage(keccak256(abi.encodePacked("currentState")));
+ require(database.boolStorage(keccak256(abi.encodePacked(currentState, _investor))) || database.boolStorage(keccak256(abi.encodePacked("ignoreStateChanges", _investor))));
+ _;
+ }
+
+ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Events
+ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+ event LogMYBBurned(address _tokenHolder, address _burningContract, uint _amount);
+ event LogFeeAdded(address indexed _contractAddress, bytes4 _methodID, uint _amount);
+
+}
+
pragma solidity 0.4.24;
+
+
+import '../math/SafeMath.sol';
+import './AccessHierarchy.sol';
+
+// @title A contract extension that gives an expiration date to user access
+// @author Kyle Dewhurst, MyBit Foundation
+contract Expirable is AccessHierarchy {
+ using SafeMath for uint;
+
+ uint public expirationLength = uint256(31557600); // 365 days
+
+ constructor(address _database) public AccessHierarchy(_database){}
+
+ //------------------------------------------------------------------------------------------------------------------
+ // @notice Owner can manually grant access to a user here. WIll be used for KYC approval
+ // @param Address of new user.
+ // @param The level of access granted by owner/burningcontract
+ // TODO: does the modifier in AccessHierarchy throw?
+ //------------------------------------------------------------------------------------------------------------------
+ function approveTemporaryUser(address _newUser, uint _accessLevel)
+ onlyOwner
+ noEmptyAddress(_newUser)
+ public
+ returns (bool) {
+ Erequire(approveUser(_newUser, _accessLevel));
+ uint expiry = now.add(expiry);
+ database.setUint(keccak256(abi.encodePacked("userAccessExpiration", _newUser)), expiry);
+ return true;
+ }
+
+
+ // @notice Owner can remove access for users
+ // @param User to be removed
+ function removeTemporaryUser(address _user)
+ onlyOwner
+ public
+ returns (bool) {
+ Erequire(removeUser(_user));
+ database.deleteUint(keccak256(abi.encodePacked("userAccessExpiration", _user)));
+ return true;
+ }
+
+
+ // @notice Owner can change the length of expiration here
+ // @param (uint) _newExpirationLength = The number of seconds until the access expires
+ function changeExpirationLength(uint _newExpirationLength)
+ external
+ onlyOwner {
+ uint oldExpiration = expirationLength;
+ expirationLength = _newExpirationLength;
+ emit LogExpirationLengthChanged(oldExpiration, expirationLength);
+ }
+
+ event LogExpirationLengthChanged(uint _oldExpirationLength, uint _newExpirationLength);
+
+}
+
pragma solidity 0.4.24;
+
+import "../math/SafeMath.sol";
+import "../interfaces/DBInterface.sol";
+import "../access/ERC20Burner.sol";
+import "../tokens/erc20/DividendTokenERC20.sol";
+
+// @title A crowdsale generator contract
+// @author Kyle Dewhurst & Peter Phillips, MyBit Foundation
+// @notice AssetManagers can initiate a crowdsale that accepts ERC20 tokens as payment here
+contract CrowdsaleGeneratorERC20 {
+ using SafeMath for uint256;
+
+ DBInterface private database;
+ ERC20Burner private burner;
+
+ uint constant scalingFactor = 1e32;
+
+ // @notice This contract
+ // @param: The address for the database contract used by this platform
+ constructor(address _database)
+ public{
+ database = DBInterface(_database);
+ burner = ERC20Burner(database.addressStorage(keccak256(abi.encodePacked("contract", "ERC20Burner"))));
+ }
+
+ // @notice AssetManagers can initiate a crowdfund for a new asset here
+ // @dev the crowdsaleERC20 contract is granted rights to mint asset-tokens as it receives funding
+ // @param (string) _assetURI = The location where information about the asset can be found
+ // @param (bytes32) _operatorID = The ID of the operator who is to create and install this asset
+ // @param (uint) _fundingLength = The number of seconds this crowdsale is to go on for until it fails
+ // @param (uint) _amountToRaise = The amount of tokens required to raise for the crowdsale to be a success
+ // @param (uint) _assetManagerPerc = The percentage of the total revenue which is to go to the AssetManager if asset is a success
+ // @param (address) _fundingToken = The ERC20 token to be used to fund the crowdsale (Operator must accept this token as payment)
+ function createAssetOrderERC20(string _assetURI, bytes32 _operatorID, uint _fundingLength, uint _amountToRaise, uint _assetManagerPerc, address _fundingToken)
+ external
+ burnRequired {
+ require(_amountToRaise > 0);
+ Erequire(_assetManagerPerc < 100);
+ Erequire(database.boolStorage(keccak256(abi.encodePacked("acceptsToken", _operatorID, _fundingToken))));
+ require(database.addressStorage(keccak256(abi.encodePacked("operator", _operatorID))) != address(0));
+ bytes32 assetID = keccak256(abi.encodePacked(msg.sender, _amountToRaise, _operatorID, _assetURI));
+ require(database.uintStorage(keccak256(abi.encodePacked("fundingDeadline", assetID))) == 0);
+ address assetAddress = address(new DividendTokenERC20(_assetURI, database.addressStorage(keccak256(abi.encodePacked("contract", "CrowdsaleERC20"))), _fundingToken));
+ database.setUint(keccak256(abi.encodePacked("fundingDeadline", assetID)), now.add(_fundingLength));
+ uint assetManagerFee = _amountToRaise.mul(uint(100).mul(scalingFactor).div(uint(100).sub(_assetManagerPerc)).sub(scalingFactor)).div(scalingFactor);
+ database.setUint(keccak256(abi.encodePacked("amountToRaise", assetID)), _amountToRaise);
+ database.setUint(keccak256(abi.encodePacked("assetManagerFee", assetID)), assetManagerFee);
+ database.setAddress(keccak256(abi.encodePacked("tokenAddress", assetID)), assetAddress);
+ database.setBytes32(keccak256(abi.encodePacked("assetTokenID", assetAddress)), assetID);
+ database.setAddress(keccak256(abi.encodePacked("assetManager", assetID)), msg.sender);
+ database.setAddress(keccak256(abi.encodePacked("operator", assetID)), database.addressStorage(keccak256(abi.encodePacked("operator", _operatorID))));
+ database.setAddress(keccak256(abi.encodePacked("fundingToken", assetID)), _fundingToken);
+ emit LogAssetFundingStarted(assetID, msg.sender, _assetURI, assetAddress);
+ }
+
+
+ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Modifiers
+ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+ // @notice reverts if AssetManager hasn't approved burner to burn platform token
+ modifier burnRequired {
+ //emit LogSig(msg.sig);
+ Erequire(burner.burn(msg.sender, database.uintStorage(keccak256(abi.encodePacked(msg.sig, address(this))))));
+ _;
+ }
+
+ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Events
+ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+ event LogAssetFundingStarted(bytes32 indexed _assetID, address indexed _assetManager, string _assetURI, address indexed _tokenAddress);
+ event LogSig(bytes4 _sig);
+}
+
pragma solidity 0.4.24;
+
+import "../math/SafeMath.sol";
+import "../interfaces/DBInterface.sol";
+import "../access/ERC20Burner.sol";
+import "../tokens/erc20/DividendToken.sol";
+
+// @title A crowdsale generator contract
+// @author Kyle Dewhurst, MyBit Foundation
+// @notice AssetManagers can initiate a crowdsale that accepts Ether as payment here
+contract CrowdsaleGeneratorETH {
+ using SafeMath for uint256;
+
+ DBInterface public database;
+ ERC20Burner public burner;
+
+ uint constant scalingFactor = 1e32; // Used to avoid rounding errors
+
+ // @notice This contract
+ // @param: The address for the database contract used by this platform
+ constructor(address _database)
+ public{
+ database = DBInterface(_database);
+ burner = ERC20Burner(database.addressStorage(keccak256(abi.encodePacked("contract", "ERC20Burner"))));
+ }
+
+ // @notice AssetManagers can initiate a crowdfund for a new asset here
+ // @dev the crowdsaleETH contract is granted rights to mint asset-tokens as it receives funding
+ // @param (string) _assetURI = The location where information about the asset can be found
+ // @param (bytes32) _operatorID = The ID of the operator who is to create and install this asset
+ // @param (uint) _fundingLength = The number of seconds this crowdsale is to go on for until it fails
+ // @param (uint) _amountToRaise = The amount of WEI required to raise for the crowdsale to be a success
+ // @param (uint) _assetManagerPerc = The percentage of the total revenue which is to go to the AssetManager if asset is a success
+ function createAssetOrderETH(string _assetURI, bytes32 _operatorID, uint _fundingLength, uint _amountToRaise, uint _assetManagerPerc)
+ external
+ burnRequired
+ returns (bool) {
+ require(_amountToRaise > 0);
+ require(_assetManagerPerc < 100);
+ Erequire(database.boolStorage(keccak256(abi.encodePacked("acceptsEther", _operatorID))));
+ require(database.addressStorage(keccak256(abi.encodePacked("operator", _operatorID))) != address(0));
+ bytes32 assetID = keccak256(abi.encodePacked(msg.sender, _amountToRaise, _operatorID, _assetURI));
+ require(database.uintStorage(keccak256(abi.encodePacked("fundingDeadline", assetID))) == 0);
+ address assetAddress = address(new DividendToken(_assetURI, database.addressStorage(keccak256(abi.encodePacked("contract", "CrowdsaleETH"))))); // Gives this contract all new asset tokens
+ database.setUint(keccak256(abi.encodePacked("fundingDeadline", assetID)), now.add(_fundingLength));
+ uint assetManagerFee = _amountToRaise.mul(uint(100).mul(scalingFactor).div(uint(100).sub(_assetManagerPerc)).sub(scalingFactor)).div(scalingFactor);
+ database.setUint(keccak256(abi.encodePacked("assetManagerFee", assetID)), assetManagerFee);
+ database.setUint(keccak256(abi.encodePacked("amountToRaise", assetID)), _amountToRaise);
+ database.setAddress(keccak256(abi.encodePacked("tokenAddress", assetID)), assetAddress);
+ database.setBytes32(keccak256(abi.encodePacked("assetTokenID", assetAddress)), assetID);
+ database.setAddress(keccak256(abi.encodePacked("assetManager", assetID)), msg.sender);
+ database.setAddress(keccak256(abi.encodePacked("operator", assetID)), database.addressStorage(keccak256(abi.encodePacked("operator", _operatorID))));
+ emit LogAssetFundingStarted(assetID, msg.sender, _assetURI, address(assetAddress));
+ return true;
+ }
+
+ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Modifiers
+ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // @notice reverts if asset manager is unable to burn pp
+ modifier burnRequired {
+ //emit LogSig(msg.sig);
+ Erequire(burner.burn(msg.sender, database.uintStorage(keccak256(abi.encodePacked(msg.sig, address(this))))));
+ _;
+ }
+
+ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Events
+ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+ event LogAssetFundingStarted(bytes32 indexed _assetID, address indexed _assetManager, string _assetURI, address indexed _tokenAddress);
+ event LogSig(bytes4 _sig);
+
+}
+
pragma solidity 0.4.24;
+
+import "../interfaces/DBInterface.sol";
+
+// @title A contract manager that determines which contracts have write access to platform database
+// @notice This contract determines which contracts are allowed to make changes to the database contract.
+// @author Kyle Dewhurst, MyBit Foundation
+contract ContractManager{
+ DBInterface public database;
+
+ // @notice constructor: initializes database
+ // @param: the address for the database contract used by this platform
+ constructor(address _database)
+ public {
+ database = DBInterface(_database);
+ }
+
+ // @notice This function adds new contracts to the platform. Giving them write access to Database.sol
+ // @Param: The name of the contract
+ // @Param: The address of the new contract
+ function addContract(string _name, address _contractAddress)
+ external
+ isTrue(_contractAddress != address(0))
+ isTrue(bytes(_name).length != uint(0))
+ anyOwner {
+ require(!database.boolStorage(keccak256(abi.encodePacked("contract", _contractAddress))));
+ require(database.addressStorage(keccak256(abi.encodePacked("contract", _name))) == address(0));
+ database.setAddress(keccak256(abi.encodePacked("contract", _name)), _contractAddress);
+ database.setBool(keccak256(abi.encodePacked("contract", _contractAddress)), true);
+ bytes32 currentState = database.bytes32Storage(keccak256(abi.encodePacked("currentState"))); //Update currentState
+ bytes32 newState = keccak256(abi.encodePacked(currentState, _contractAddress));
+ database.setBytes32(keccak256(abi.encodePacked("currentState")), newState);
+ emit LogContractAdded(_contractAddress, _name, block.number);
+ }
+
+ // @notice Owner can remove an existing contract on the platform.
+ // @Param: The name of the contract
+ // @Param: The owner who authorized this function to be called
+ function removeContract(string _name)
+ external
+ isTrue(bytes(_name).length != uint(0))
+ contractExists(database.addressStorage(keccak256(abi.encodePacked("contract", _name))))
+ anyOwner {
+ address contractToDelete = database.addressStorage(keccak256(abi.encodePacked("contract", _name)));
+ database.deleteBool(keccak256(abi.encodePacked("contract", contractToDelete)));
+ database.deleteAddress(keccak256(abi.encodePacked("contract", _name)));
+ emit LogContractRemoved(contractToDelete, _name, block.number);
+ }
+
+ // @notice Owner can update an existing contract on the platform, giving it write access to Database
+ // @Param: The name of the contract (First Letter Capitalized)
+ // @Param: The address of the new contract
+ function updateContract(string _name, address _newContractAddress)
+ external
+ isTrue(_newContractAddress != 0)
+ contractExists(database.addressStorage(keccak256(abi.encodePacked("contract", _name))))
+ anyOwner {
+ address oldAddress = database.addressStorage(keccak256(abi.encodePacked("contract", _name)));
+ database.setAddress(keccak256(abi.encodePacked("contract", _name)), _newContractAddress);
+ database.setBool(keccak256(abi.encodePacked("contract", _newContractAddress)), true);
+ database.deleteBool(keccak256(abi.encodePacked("contract", oldAddress)));
+ bytes32 currentState = database.bytes32Storage(keccak256(abi.encodePacked("currentState"))); //Update currentState
+ bytes32 newState = keccak256(abi.encodePacked(currentState, _newContractAddress));
+ database.setBytes32(keccak256(abi.encodePacked("currentState")), newState);
+ emit LogContractUpdated(oldAddress, _name, block.number);
+ emit LogNewContractLocation(_newContractAddress, _name, block.number);
+ }
+
+ // @notice user can decide to accept or deny the current and future state of the platform contracts
+ // @notice if user accepts future upgrades they will automatically be able to interact with upgraded contracts
+ // @param (bool) _acceptCurrentState: does the user agree to use the current contracts in the platform
+ // @param (bool) _ignoreStateChanges: does the user agree to use the platform despite contract changes
+ function setContractStatePreferences(bool _acceptCurrentState, bool _ignoreStateChanges)
+ external
+ returns (bool) {
+ bytes32 currentState = database.bytes32Storage(keccak256(abi.encodePacked("currentState")));
+ database.setBool(keccak256(abi.encodePacked(currentState, msg.sender)), _acceptCurrentState);
+ database.setBool(keccak256(abi.encodePacked("ignoreStateChanges", msg.sender)), _ignoreStateChanges);
+ emit LogContractStatePreferenceChanged(msg.sender, _acceptCurrentState, _ignoreStateChanges);
+ return true;
+ }
+
+
+ // ------------------------------------------------------------------------------------------------
+ // Modifiers
+ // ------------------------------------------------------------------------------------------------
+
+ // @notice Verify that sender is an owner
+ modifier anyOwner {
+ require(database.boolStorage(keccak256(abi.encodePacked("owner", msg.sender))));
+ _;
+ }
+
+ // @notice add this modifer to functions that you want multi-sig requirements for
+ // @dev function can only be called after at least n >= quorumLevel owners have agreed to call it
+ modifier isRestricted(bytes4 _methodID, bytes32 _parameterHash) {
+ require(database.boolStorage(keccak256(abi.encodePacked(address(this), _methodID, _parameterHash)))); // owners must have agreed on function + parameters
+ _;
+ database.deleteBool(keccak256(abi.encodePacked(address(this), _methodID, _parameterHash)));
+ }
+
+ modifier contractExists(address _contract) {
+ require(database.boolStorage(keccak256(abi.encodePacked("contract", _contract))));
+ _;
+ }
+
+ modifier isTrue(bool _conditional) {
+ require(_conditional);
+ _;
+ }
+
+
+
+ // ------------------------------------------------------------------------------------------------
+ // Events
+ // ------------------------------------------------------------------------------------------------
+ event LogContractAdded(address _contractAddress, string _name, uint _blockNumber);
+ event LogContractRemoved(address contractToDelete, string _name, uint _blockNumber);
+ event LogContractUpdated(address oldAddress, string _name, uint _blockNumber);
+ event LogNewContractLocation(address _contractAddress, string _name, uint _blockNumber);
+ event LogContractStatePreferenceChanged(address indexed _user, bool _currentStateAcceptance, bool _ignoreStateChanges);
+}
+
pragma solidity 0.4.24;
+
+
+// @title ERC20 token contract with shared revenue distribution functionality.
+// @notice This token contract can receive payments in the fallback function and token owners receive their share when transferring tokens.
+// Credit goes to Nick Johnson for the dividend token https://medium.com/@weka/dividend-bearing-tokens-on-ethereum-42d01c710657
+// TODO: Suicide function
+interface DivToken {
+
+ // @notice Transfer _amount tokens to address _to.
+ // @dev Sender must have enough tokens. Cannot send to 0x0.
+ // @param (address) _to = The address which will receive the tokens
+ // @param (uint) _amount = The amount of tokens to send
+ function transfer(address _to, uint _amount)
+ external
+ returns (bool success);
+
+ // @notice A 3rd party can transfer tokens if user approves them to do so
+ // @dev Transfer _amount of tokens if _from has allowed msg.sender to do so.
+ // @param (address) _from = The address who approved msg.sender to spend tokens
+ // @param (address) _to = The address who will receive the tokens
+ // @param (uint) _amount = The number of tokens to send
+ function transferFrom(address _from, address _to, uint _amount)
+ external
+ returns (bool success);
+
+ // @notice approves a 3rd party to transfer msg.sender's tokens on behalf of him/her
+ // @param (address) _spender = The address of who msg.sender approves to spend tokens on their behalf
+ // @param (uint) _amount = The upper limit of how many tokens can be spent
+ function approve(address _spender, uint _amount)
+ external
+ returns (bool success);
+
+
+ // @notice Token holder can notify a contract that it has been approved to spend _amount of tokens
+ // @param (address) _spender = The contract to call after approval is done
+ // @param (uint) _amount = Number of tokens to send
+ // @param (bytes) _data = Bytes data to send along with the contract call
+ function approveAndCall(address _spender, uint _amount, bytes _data)
+ external
+ returns (bool success);
+
+ function withdraw()
+ external
+ returns (bool);
+
+ // @notice Updates incomeClaimed, sends all wei to the token holder
+ function collectOwedDividends()
+ external
+ returns (uint _amount);
+
+
+ // @notice Returns amount of tokens _spender is allowed to transfer or burn
+ function allowance(address _tokenHolder, address _spender)
+ external
+ view
+ returns (uint);
+
+ // @notice Returns the number of tokens in circulation
+ function totalSupply()
+ external
+ view
+ returns (uint tokenSupply);
+
+ // @notice Returns the token balance of user
+ function balanceOf(address _tokenHolder)
+ external
+ view
+ returns (uint balance);
+
+ // @notice Returns the URI of this token
+ function tokenURI()
+ external
+ view
+ returns (string);
+
+ function valuePerToken()
+ external
+ view
+ returns (uint);
+
+ function scalingFactor()
+ external
+ view
+ returns (uint);
+
+ // @notice Calculates how much value _user holds
+ function getAmountOwed(address _user)
+ external
+ view
+ returns (uint);
+
+ // @notice Calculates how much wei user is owed. (points + incomeClaimed) / 10**32
+ function getOwedDividends(address _user)
+ external
+ constant
+ returns (uint);
+
+ function assetIncome()
+ external
+ view
+ returns (uint);
+
+ function getERC20()
+ external
+ view
+ returns (address);
+
+ event LogIncomeReceived(address indexed _sender, uint _paymentAmount);
+ event LogIncomeCollected(uint _block, address _address, uint _amount);
+
+}
+
pragma solidity ^0.4.24;
+
+interface ERC20DividendInterface{
+ // @dev Function to mint tokens
+ // @param _to The address that will receive the minted tokens.
+ // @param _amount The amount of tokens to mint.
+ function mint(address _to, uint256 _amount) external returns (bool);
+
+ // @dev Function to stop minting new tokens.
+ function finishMinting() external returns (bool);
+
+ function issueDividends(uint _amount) external;
+
+ // @dev Total number of tokens in existence
+ function totalSupply() external view returns (uint256);
+}
+
pragma solidity ^0.4.24;
+
+interface EtherDividendInterface{
+ // @dev Function to mint tokens
+ // @param _to The address that will receive the minted tokens.
+ // @param _amount The amount of tokens to mint.
+ function mint(address _to, uint256 _amount) external returns (bool);
+
+ // @dev Function to stop minting new tokens.
+ function finishMinting() external returns (bool);
+
+ function issueDividends() external payable;
+
+ // @dev Total number of tokens in existence
+ function totalSupply() external view returns (uint256);
+}
+
pragma solidity ^0.4.24;
+
+// @notice allows contract to call a basic withdraw() function taking no parameters on another contract
+interface PullPayment {
+
+ function withdraw() external returns(bool);
+
+}
+
pragma solidity 0.4.24;
+
+import '../interfaces/BurnableERC20.sol';
+import "../interfaces/DBInterface.sol";
+
+/// @title A contract for burning ERC20 tokens as usage fee for dapps
+/// @author Kyle Dewhurst & Peter Phillips MyBit Foundation
+/// @notice Allows Dapps to call this contract to burn ERC20 tokens as a usage fee
+/// @dev This contract does not accept tokens. It only burns tokens from investors wallets to run platform functionality
+contract ERC20Burner {
+
+ BurnableERC20 public token; // The instance of the ERC20 burner contract
+ DBInterface public database; // The datbase instance
+
+
+ // @notice constructor: initializes database and the MYB token
+ // @param: the address for the database contract used by this platform
+ constructor(address _database)
+ public {
+ database = DBInterface(_database);
+ token = BurnableERC20(database.addressStorage(keccak256(abi.encodePacked("platformToken"))));
+ Erequire(address(token) != address(0));
+ }
+
+ // @notice authorized contracts can burn mybit tokens here if the investor has approved this contract to do so
+ // @param (address) _tokenHolder = the address of the mybit token holder who wishes to burn _amount of tokens
+ // @param (uint) _amount = the amount of tokens to be burnt (must include decimal places)
+ function burn(address _tokenHolder, uint _amount)
+ external
+ onlyPlatformContracts(msg.sender)
+ acceptedState(_tokenHolder)
+ returns (bool) {
+ require(token.burnFrom(_tokenHolder, _amount));
+ emit LogMYBBurned(_tokenHolder, msg.sender, _amount);
+ return true;
+ }
+
+ // @notice owners can set the cost of functionality on the platform here.
+ // @dev _amount will be how many platformTokens are burned to call the method at _contractAddress
+ // @param (bytes4) _methodID: the methodID of the function which is to require a burning fee
+ // @param (address) _contractAddress: the address of the contract where this method is contained
+ function setFee(bytes4 _methodID, address _contractAddress, uint _amount)
+ external
+ onlyOwner
+ returns (bool) {
+ //Sets the price to burn per function in MyB.
+ database.setUint(keccak256(abi.encodePacked(_methodID, _contractAddress)), _amount);
+ emit LogFeeAdded(_contractAddress, _methodID, _amount);
+ return true;
+ }
+
+
+ // @notice fallback function. Rejects all ether
+ function ()
+ external
+ payable {
+ revert();
+ }
+
+ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Modifiers
+ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+ // @notice reverts if msg.sender isn't the owner
+ modifier onlyOwner {
+ Erequire(database.boolStorage(keccak256(abi.encodePacked("owner", msg.sender))));
+ _;
+ }
+
+ // @notice reverts if address isn't authorized to burn MYB
+ modifier onlyPlatformContracts(address _burner) {
+ require(database.boolStorage(keccak256(abi.encodePacked("contract", _burner))));
+ _;
+ }
+
+ // @notice reverts if investor hasn't accepted current contract state or if he doesn't ignore state changes entirely
+ modifier acceptedState(address _investor) {
+ bytes32 currentState = database.bytes32Storage(keccak256(abi.encodePacked("currentState")));
+ require(database.boolStorage(keccak256(abi.encodePacked(currentState, _investor))) || database.boolStorage(keccak256(abi.encodePacked("ignoreStateChanges", _investor))));
+ _;
+ }
+
+ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Events
+ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+ event LogMYBBurned(address _tokenHolder, address _burningContract, uint _amount);
+ event LogFeeAdded(address indexed _contractAddress, bytes4 _methodID, uint _amount);
+
+}
+
pragma solidity 0.4.24;
+
+
+import '../math/SafeMath.sol';
+import './AccessHierarchy.sol';
+
+// @title A contract extension that gives an expiration date to user access
+// @author Kyle Dewhurst, MyBit Foundation
+contract Expirable is AccessHierarchy {
+ using SafeMath for uint;
+
+ uint public expirationLength = uint256(31557600); // 365 days
+
+ constructor(address _database) public AccessHierarchy(_database){}
+
+ //------------------------------------------------------------------------------------------------------------------
+ // @notice Owner can manually grant access to a user here. WIll be used for KYC approval
+ // @param Address of new user.
+ // @param The level of access granted by owner/burningcontract
+ // TODO: does the modifier in AccessHierarchy throw?
+ //------------------------------------------------------------------------------------------------------------------
+ function approveTemporaryUser(address _newUser, uint _accessLevel)
+ onlyOwner
+ noEmptyAddress(_newUser)
+ public
+ returns (bool) {
+ Erequire(approveUser(_newUser, _accessLevel));
+ uint expiry = now.add(expiry);
+ database.setUint(keccak256(abi.encodePacked("userAccessExpiration", _newUser)), expiry);
+ return true;
+ }
+
+
+ // @notice Owner can remove access for users
+ // @param User to be removed
+ function removeTemporaryUser(address _user)
+ onlyOwner
+ public
+ returns (bool) {
+ Erequire(removeUser(_user));
+ database.deleteUint(keccak256(abi.encodePacked("userAccessExpiration", _user)));
+ return true;
+ }
+
+
+ // @notice Owner can change the length of expiration here
+ // @param (uint) _newExpirationLength = The number of seconds until the access expires
+ function changeExpirationLength(uint _newExpirationLength)
+ external
+ onlyOwner {
+ uint oldExpiration = expirationLength;
+ expirationLength = _newExpirationLength;
+ emit LogExpirationLengthChanged(oldExpiration, expirationLength);
+ }
+
+ event LogExpirationLengthChanged(uint _oldExpirationLength, uint _newExpirationLength);
+
+}
+
pragma solidity 0.4.24;
+
+import "../math/SafeMath.sol";
+import "../interfaces/DBInterface.sol";
+import "../access/ERC20Burner.sol";
+import "../tokens/erc20/DividendTokenERC20.sol";
+
+// @title A crowdsale generator contract
+// @author Kyle Dewhurst & Peter Phillips, MyBit Foundation
+// @notice AssetManagers can initiate a crowdsale that accepts ERC20 tokens as payment here
+contract CrowdsaleGeneratorERC20 {
+ using SafeMath for uint256;
+
+ DBInterface private database;
+ ERC20Burner private burner;
+
+ uint constant scalingFactor = 1e32;
+
+ // @notice This contract
+ // @param: The address for the database contract used by this platform
+ constructor(address _database)
+ public{
+ database = DBInterface(_database);
+ burner = ERC20Burner(database.addressStorage(keccak256(abi.encodePacked("contract", "ERC20Burner"))));
+ }
+
+ // @notice AssetManagers can initiate a crowdfund for a new asset here
+ // @dev the crowdsaleERC20 contract is granted rights to mint asset-tokens as it receives funding
+ // @param (string) _assetURI = The location where information about the asset can be found
+ // @param (bytes32) _operatorID = The ID of the operator who is to create and install this asset
+ // @param (uint) _fundingLength = The number of seconds this crowdsale is to go on for until it fails
+ // @param (uint) _amountToRaise = The amount of tokens required to raise for the crowdsale to be a success
+ // @param (uint) _assetManagerPerc = The percentage of the total revenue which is to go to the AssetManager if asset is a success
+ // @param (address) _fundingToken = The ERC20 token to be used to fund the crowdsale (Operator must accept this token as payment)
+ function createAssetOrderERC20(string _assetURI, bytes32 _operatorID, uint _fundingLength, uint _amountToRaise, uint _assetManagerPerc, address _fundingToken)
+ external
+ burnRequired {
+ require(_amountToRaise > 0);
+ Erequire(_assetManagerPerc < 100);
+ Erequire(database.boolStorage(keccak256(abi.encodePacked("acceptsToken", _operatorID, _fundingToken))));
+ require(database.addressStorage(keccak256(abi.encodePacked("operator", _operatorID))) != address(0));
+ bytes32 assetID = keccak256(abi.encodePacked(msg.sender, _amountToRaise, _operatorID, _assetURI));
+ require(database.uintStorage(keccak256(abi.encodePacked("fundingDeadline", assetID))) == 0);
+ address assetAddress = address(new DividendTokenERC20(_assetURI, database.addressStorage(keccak256(abi.encodePacked("contract", "CrowdsaleERC20"))), _fundingToken));
+ database.setUint(keccak256(abi.encodePacked("fundingDeadline", assetID)), now.add(_fundingLength));
+ uint assetManagerFee = _amountToRaise.mul(uint(100).mul(scalingFactor).div(uint(100).sub(_assetManagerPerc)).sub(scalingFactor)).div(scalingFactor);
+ database.setUint(keccak256(abi.encodePacked("amountToRaise", assetID)), _amountToRaise);
+ database.setUint(keccak256(abi.encodePacked("assetManagerFee", assetID)), assetManagerFee);
+ database.setAddress(keccak256(abi.encodePacked("tokenAddress", assetID)), assetAddress);
+ database.setBytes32(keccak256(abi.encodePacked("assetTokenID", assetAddress)), assetID);
+ database.setAddress(keccak256(abi.encodePacked("assetManager", assetID)), msg.sender);
+ database.setAddress(keccak256(abi.encodePacked("operator", assetID)), database.addressStorage(keccak256(abi.encodePacked("operator", _operatorID))));
+ database.setAddress(keccak256(abi.encodePacked("fundingToken", assetID)), _fundingToken);
+ emit LogAssetFundingStarted(assetID, msg.sender, _assetURI, assetAddress);
+ }
+
+
+ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Modifiers
+ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+ // @notice reverts if AssetManager hasn't approved burner to burn platform token
+ modifier burnRequired {
+ //emit LogSig(msg.sig);
+ Erequire(burner.burn(msg.sender, database.uintStorage(keccak256(abi.encodePacked(msg.sig, address(this))))));
+ _;
+ }
+
+ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Events
+ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+ event LogAssetFundingStarted(bytes32 indexed _assetID, address indexed _assetManager, string _assetURI, address indexed _tokenAddress);
+ event LogSig(bytes4 _sig);
+}
+
pragma solidity 0.4.24;
+
+import "../math/SafeMath.sol";
+import "../interfaces/DBInterface.sol";
+import "../access/ERC20Burner.sol";
+import "../tokens/erc20/DividendToken.sol";
+
+// @title A crowdsale generator contract
+// @author Kyle Dewhurst, MyBit Foundation
+// @notice AssetManagers can initiate a crowdsale that accepts Ether as payment here
+contract CrowdsaleGeneratorETH {
+ using SafeMath for uint256;
+
+ DBInterface public database;
+ ERC20Burner public burner;
+
+ uint constant scalingFactor = 1e32; // Used to avoid rounding errors
+
+ // @notice This contract
+ // @param: The address for the database contract used by this platform
+ constructor(address _database)
+ public{
+ database = DBInterface(_database);
+ burner = ERC20Burner(database.addressStorage(keccak256(abi.encodePacked("contract", "ERC20Burner"))));
+ }
+
+ // @notice AssetManagers can initiate a crowdfund for a new asset here
+ // @dev the crowdsaleETH contract is granted rights to mint asset-tokens as it receives funding
+ // @param (string) _assetURI = The location where information about the asset can be found
+ // @param (bytes32) _operatorID = The ID of the operator who is to create and install this asset
+ // @param (uint) _fundingLength = The number of seconds this crowdsale is to go on for until it fails
+ // @param (uint) _amountToRaise = The amount of WEI required to raise for the crowdsale to be a success
+ // @param (uint) _assetManagerPerc = The percentage of the total revenue which is to go to the AssetManager if asset is a success
+ function createAssetOrderETH(string _assetURI, bytes32 _operatorID, uint _fundingLength, uint _amountToRaise, uint _assetManagerPerc)
+ external
+ burnRequired
+ returns (bool) {
+ require(_amountToRaise > 0);
+ require(_assetManagerPerc < 100);
+ Erequire(database.boolStorage(keccak256(abi.encodePacked("acceptsEther", _operatorID))));
+ require(database.addressStorage(keccak256(abi.encodePacked("operator", _operatorID))) != address(0));
+ bytes32 assetID = keccak256(abi.encodePacked(msg.sender, _amountToRaise, _operatorID, _assetURI));
+ require(database.uintStorage(keccak256(abi.encodePacked("fundingDeadline", assetID))) == 0);
+ address assetAddress = address(new DividendToken(_assetURI, database.addressStorage(keccak256(abi.encodePacked("contract", "CrowdsaleETH"))))); // Gives this contract all new asset tokens
+ database.setUint(keccak256(abi.encodePacked("fundingDeadline", assetID)), now.add(_fundingLength));
+ uint assetManagerFee = _amountToRaise.mul(uint(100).mul(scalingFactor).div(uint(100).sub(_assetManagerPerc)).sub(scalingFactor)).div(scalingFactor);
+ database.setUint(keccak256(abi.encodePacked("assetManagerFee", assetID)), assetManagerFee);
+ database.setUint(keccak256(abi.encodePacked("amountToRaise", assetID)), _amountToRaise);
+ database.setAddress(keccak256(abi.encodePacked("tokenAddress", assetID)), assetAddress);
+ database.setBytes32(keccak256(abi.encodePacked("assetTokenID", assetAddress)), assetID);
+ database.setAddress(keccak256(abi.encodePacked("assetManager", assetID)), msg.sender);
+ database.setAddress(keccak256(abi.encodePacked("operator", assetID)), database.addressStorage(keccak256(abi.encodePacked("operator", _operatorID))));
+ emit LogAssetFundingStarted(assetID, msg.sender, _assetURI, address(assetAddress));
+ return true;
+ }
+
+ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Modifiers
+ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ // @notice reverts if asset manager is unable to burn pp
+ modifier burnRequired {
+ //emit LogSig(msg.sig);
+ Erequire(burner.burn(msg.sender, database.uintStorage(keccak256(abi.encodePacked(msg.sig, address(this))))));
+ _;
+ }
+
+ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Events
+ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+ event LogAssetFundingStarted(bytes32 indexed _assetID, address indexed _assetManager, string _assetURI, address indexed _tokenAddress);
+ event LogSig(bytes4 _sig);
+
+}
+
pragma solidity 0.4.24;
+
+import "../interfaces/DBInterface.sol";
+
+// @title A contract manager that determines which contracts have write access to platform database
+// @notice This contract determines which contracts are allowed to make changes to the database contract.
+// @author Kyle Dewhurst, MyBit Foundation
+contract ContractManager{
+ DBInterface public database;
+
+ // @notice constructor: initializes database
+ // @param: the address for the database contract used by this platform
+ constructor(address _database)
+ public {
+ database = DBInterface(_database);
+ }
+
+ // @notice This function adds new contracts to the platform. Giving them write access to Database.sol
+ // @Param: The name of the contract
+ // @Param: The address of the new contract
+ function addContract(string _name, address _contractAddress)
+ external
+ isTrue(_contractAddress != address(0))
+ isTrue(bytes(_name).length != uint(0))
+ anyOwner {
+ require(!database.boolStorage(keccak256(abi.encodePacked("contract", _contractAddress))));
+ require(database.addressStorage(keccak256(abi.encodePacked("contract", _name))) == address(0));
+ database.setAddress(keccak256(abi.encodePacked("contract", _name)), _contractAddress);
+ database.setBool(keccak256(abi.encodePacked("contract", _contractAddress)), true);
+ bytes32 currentState = database.bytes32Storage(keccak256(abi.encodePacked("currentState"))); //Update currentState
+ bytes32 newState = keccak256(abi.encodePacked(currentState, _contractAddress));
+ database.setBytes32(keccak256(abi.encodePacked("currentState")), newState);
+ emit LogContractAdded(_contractAddress, _name, block.number);
+ }
+
+ // @notice Owner can remove an existing contract on the platform.
+ // @Param: The name of the contract
+ // @Param: The owner who authorized this function to be called
+ function removeContract(string _name)
+ external
+ isTrue(bytes(_name).length != uint(0))
+ contractExists(database.addressStorage(keccak256(abi.encodePacked("contract", _name))))
+ anyOwner {
+ address contractToDelete = database.addressStorage(keccak256(abi.encodePacked("contract", _name)));
+ database.deleteBool(keccak256(abi.encodePacked("contract", contractToDelete)));
+ database.deleteAddress(keccak256(abi.encodePacked("contract", _name)));
+ emit LogContractRemoved(contractToDelete, _name, block.number);
+ }
+
+ // @notice Owner can update an existing contract on the platform, giving it write access to Database
+ // @Param: The name of the contract (First Letter Capitalized)
+ // @Param: The address of the new contract
+ function updateContract(string _name, address _newContractAddress)
+ external
+ isTrue(_newContractAddress != 0)
+ contractExists(database.addressStorage(keccak256(abi.encodePacked("contract", _name))))
+ anyOwner {
+ address oldAddress = database.addressStorage(keccak256(abi.encodePacked("contract", _name)));
+ database.setAddress(keccak256(abi.encodePacked("contract", _name)), _newContractAddress);
+ database.setBool(keccak256(abi.encodePacked("contract", _newContractAddress)), true);
+ database.deleteBool(keccak256(abi.encodePacked("contract", oldAddress)));
+ bytes32 currentState = database.bytes32Storage(keccak256(abi.encodePacked("currentState"))); //Update currentState
+ bytes32 newState = keccak256(abi.encodePacked(currentState, _newContractAddress));
+ database.setBytes32(keccak256(abi.encodePacked("currentState")), newState);
+ emit LogContractUpdated(oldAddress, _name, block.number);
+ emit LogNewContractLocation(_newContractAddress, _name, block.number);
+ }
+
+ // @notice user can decide to accept or deny the current and future state of the platform contracts
+ // @notice if user accepts future upgrades they will automatically be able to interact with upgraded contracts
+ // @param (bool) _acceptCurrentState: does the user agree to use the current contracts in the platform
+ // @param (bool) _ignoreStateChanges: does the user agree to use the platform despite contract changes
+ function setContractStatePreferences(bool _acceptCurrentState, bool _ignoreStateChanges)
+ external
+ returns (bool) {
+ bytes32 currentState = database.bytes32Storage(keccak256(abi.encodePacked("currentState")));
+ database.setBool(keccak256(abi.encodePacked(currentState, msg.sender)), _acceptCurrentState);
+ database.setBool(keccak256(abi.encodePacked("ignoreStateChanges", msg.sender)), _ignoreStateChanges);
+ emit LogContractStatePreferenceChanged(msg.sender, _acceptCurrentState, _ignoreStateChanges);
+ return true;
+ }
+
+
+ // ------------------------------------------------------------------------------------------------
+ // Modifiers
+ // ------------------------------------------------------------------------------------------------
+
+ // @notice Verify that sender is an owner
+ modifier anyOwner {
+ require(database.boolStorage(keccak256(abi.encodePacked("owner", msg.sender))));
+ _;
+ }
+
+ // @notice add this modifer to functions that you want multi-sig requirements for
+ // @dev function can only be called after at least n >= quorumLevel owners have agreed to call it
+ modifier isRestricted(bytes4 _methodID, bytes32 _parameterHash) {
+ require(database.boolStorage(keccak256(abi.encodePacked(address(this), _methodID, _parameterHash)))); // owners must have agreed on function + parameters
+ _;
+ database.deleteBool(keccak256(abi.encodePacked(address(this), _methodID, _parameterHash)));
+ }
+
+ modifier contractExists(address _contract) {
+ require(database.boolStorage(keccak256(abi.encodePacked("contract", _contract))));
+ _;
+ }
+
+ modifier isTrue(bool _conditional) {
+ require(_conditional);
+ _;
+ }
+
+
+
+ // ------------------------------------------------------------------------------------------------
+ // Events
+ // ------------------------------------------------------------------------------------------------
+ event LogContractAdded(address _contractAddress, string _name, uint _blockNumber);
+ event LogContractRemoved(address contractToDelete, string _name, uint _blockNumber);
+ event LogContractUpdated(address oldAddress, string _name, uint _blockNumber);
+ event LogNewContractLocation(address _contractAddress, string _name, uint _blockNumber);
+ event LogContractStatePreferenceChanged(address indexed _user, bool _currentStateAcceptance, bool _ignoreStateChanges);
+}
+
pragma solidity 0.4.24;
+
+
+// @title ERC20 token contract with shared revenue distribution functionality.
+// @notice This token contract can receive payments in the fallback function and token owners receive their share when transferring tokens.
+// Credit goes to Nick Johnson for the dividend token https://medium.com/@weka/dividend-bearing-tokens-on-ethereum-42d01c710657
+// TODO: Suicide function
+interface DivToken {
+
+ // @notice Transfer _amount tokens to address _to.
+ // @dev Sender must have enough tokens. Cannot send to 0x0.
+ // @param (address) _to = The address which will receive the tokens
+ // @param (uint) _amount = The amount of tokens to send
+ function transfer(address _to, uint _amount)
+ external
+ returns (bool success);
+
+ // @notice A 3rd party can transfer tokens if user approves them to do so
+ // @dev Transfer _amount of tokens if _from has allowed msg.sender to do so.
+ // @param (address) _from = The address who approved msg.sender to spend tokens
+ // @param (address) _to = The address who will receive the tokens
+ // @param (uint) _amount = The number of tokens to send
+ function transferFrom(address _from, address _to, uint _amount)
+ external
+ returns (bool success);
+
+ // @notice approves a 3rd party to transfer msg.sender's tokens on behalf of him/her
+ // @param (address) _spender = The address of who msg.sender approves to spend tokens on their behalf
+ // @param (uint) _amount = The upper limit of how many tokens can be spent
+ function approve(address _spender, uint _amount)
+ external
+ returns (bool success);
+
+
+ // @notice Token holder can notify a contract that it has been approved to spend _amount of tokens
+ // @param (address) _spender = The contract to call after approval is done
+ // @param (uint) _amount = Number of tokens to send
+ // @param (bytes) _data = Bytes data to send along with the contract call
+ function approveAndCall(address _spender, uint _amount, bytes _data)
+ external
+ returns (bool success);
+
+ function withdraw()
+ external
+ returns (bool);
+
+ // @notice Updates incomeClaimed, sends all wei to the token holder
+ function collectOwedDividends()
+ external
+ returns (uint _amount);
+
+
+ // @notice Returns amount of tokens _spender is allowed to transfer or burn
+ function allowance(address _tokenHolder, address _spender)
+ external
+ view
+ returns (uint);
+
+ // @notice Returns the number of tokens in circulation
+ function totalSupply()
+ external
+ view
+ returns (uint tokenSupply);
+
+ // @notice Returns the token balance of user
+ function balanceOf(address _tokenHolder)
+ external
+ view
+ returns (uint balance);
+
+ // @notice Returns the URI of this token
+ function tokenURI()
+ external
+ view
+ returns (string);
+
+ function valuePerToken()
+ external
+ view
+ returns (uint);
+
+ function scalingFactor()
+ external
+ view
+ returns (uint);
+
+ // @notice Calculates how much value _user holds
+ function getAmountOwed(address _user)
+ external
+ view
+ returns (uint);
+
+ // @notice Calculates how much wei user is owed. (points + incomeClaimed) / 10**32
+ function getOwedDividends(address _user)
+ external
+ constant
+ returns (uint);
+
+ function assetIncome()
+ external
+ view
+ returns (uint);
+
+ function getERC20()
+ external
+ view
+ returns (address);
+
+ event LogIncomeReceived(address indexed _sender, uint _paymentAmount);
+ event LogIncomeCollected(uint _block, address _address, uint _amount);
+
+}
+
pragma solidity ^0.4.24;
+
+interface ERC20DividendInterface{
+ // @dev Function to mint tokens
+ // @param _to The address that will receive the minted tokens.
+ // @param _amount The amount of tokens to mint.
+ function mint(address _to, uint256 _amount) external returns (bool);
+
+ // @dev Function to stop minting new tokens.
+ function finishMinting() external returns (bool);
+
+ function issueDividends(uint _amount) external;
+
+ // @dev Total number of tokens in existence
+ function totalSupply() external view returns (uint256);
+}
+
pragma solidity ^0.4.24;
+
+interface EtherDividendInterface{
+ // @dev Function to mint tokens
+ // @param _to The address that will receive the minted tokens.
+ // @param _amount The amount of tokens to mint.
+ function mint(address _to, uint256 _amount) external returns (bool);
+
+ // @dev Function to stop minting new tokens.
+ function finishMinting() external returns (bool);
+
+ function issueDividends() external payable;
+
+ // @dev Total number of tokens in existence
+ function totalSupply() external view returns (uint256);
+}
+
pragma solidity ^0.4.24;
+
+// @notice allows contract to call a basic withdraw() function taking no parameters on another contract
+interface PullPayment {
+
+ function withdraw() external returns(bool);
+
+}
+
pragma solidity 0.4.24;
+
+// https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/math/SafeMath.sol
+
+// @title SafeMath: overflow/underflow checks
+// @notice Math operations with safety checks that throw on error
+library SafeMath {
+
+ // @notice Multiplies two numbers, throws on overflow.
+ function mul(uint256 a, uint256 b) internal pure returns (uint256) {
+ if (a == 0) {
+ return 0;
+ }
+ uint256 c = a * b;
+ assert(c / a == b);
+ return c;
+ }
+
+ // @notice Integer division of two numbers, truncating the quotient.
+ function div(uint256 a, uint256 b) internal pure returns (uint256) {
+ // assert(b > 0); // Solidity automatically throws when dividing by 0
+ // uint256 c = a / b;
+ // assert(a == b * c + a % b); // There is no case in which this doesn't hold
+ return a / b;
+ }
+
+ // @notice Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
+ function sub(uint256 a, uint256 b) internal pure returns (uint256) {
+ assert(b <= a);
+ return a - b;
+ }
+
+ // @notice Adds two numbers, throws on overflow.
+ function add(uint256 a, uint256 b) internal pure returns (uint256) {
+ uint256 c = a + b;
+ assert(c >= a);
+ return c;
+ }
+
+ // @notice Returns fractional amount
+ function getFractionalAmount(uint256 _amount, uint256 _percentage)
+ internal
+ pure
+ returns (uint256) {
+ return div(mul(_amount, _percentage), 100);
+ }
+
+}
+
pragma solidity 0.4.24;
+
+import '../database/Database.sol';
+import '../math/SafeMath.sol';
+import '../interfaces/ERC20.sol';
+
+
+// @title A contract which allows for platform owners to come to consensus on important functionality
+// @notice Can hold any number of owners. Each getting 1 vote.
+// @dev An owner has already been initialized when database is deployed
+// @author Kyle Dewhurst, MyBit Foundation
+contract CollectiveOwned {
+ using SafeMath for uint256;
+
+ Database public database;
+
+ // @param (address) _database = the address of the platform database
+ // @param (uint) _baseQuorum = the percentage of owners needed to approve a function call
+ constructor(address _database, uint256 _baseQuorum)
+ public {
+ database = Database(_database);
+ bytes4 methodID = bytes4(keccak256(abi.encodePacked("setQuorumLevel(address, bytes4, uint256)")));
+ bytes32 functionID = keccak256(abi.encodePacked(address(this), methodID));
+ database.setUint(functionID, _baseQuorum); // the initial quorum level to set further quorum levels
+ }
+
+ // @notice any owner on the platform can call this function to add a new user if it has receieve quorum level of signatures
+ // @notice must
+ // @param (address) _newOwner the address of the new owner
+ function addOwner(address _newOwner)
+ external
+ isRestricted(msg.sig, keccak256(abi.encodePacked(_newOwner)))
+ onlyOwner {
+ uint numOwners = database.uintStorage(keccak256(abi.encodePacked("numberOfOwners")));
+ database.setBool(keccak256(abi.encodePacked("owner", _newOwner)), true);
+ database.setUint(keccak256(abi.encodePacked("numberOfOwners")), numOwners.add(1));
+ }
+
+ // @notice any owner can call this function to remove an owner if the the function receives quorum level of signatures
+ // @param (address) _owner = the owner to be removed from the group of owners
+ function removeOwner(address _owner)
+ external
+ isRestricted(msg.sig, keccak256(abi.encodePacked(_owner)))
+ onlyOwner {
+ database.deleteBool(keccak256(abi.encodePacked("owner", _owner)));
+ }
+
+ // @notice restricts a function, forcing it to require _quorumLevel of votes to be executed
+ function setQuorumLevel(address _contractAddress, bytes4 _methodID, uint256 _quorumLevel)
+ external
+ isRestricted(msg.sig, keccak256(abi.encodePacked(_contractAddress, _methodID, _quorumLevel)))
+ returns (bool) {
+ bytes32 functionID = keccak256(abi.encodePacked(_contractAddress, _methodID));
+ database.setUint(functionID, _quorumLevel);
+ return true;
+ }
+
+ // @param (bytes32) _parameterHash = The hash of the exact parameter to be called for function...ie sha3(true, 55)
+ function voteForExecution(address _contractAddress, bytes4 _methodID, bytes32 _parameterHash)
+ external
+ returns (bool) {
+ bytes32 executionID = keccak256(abi.encodePacked(_contractAddress, _methodID, _parameterHash));
+ bytes32 numVotesID = keccak256(abi.encodePacked("numberOfSignatures", executionID));
+ uint256 numSignatures = database.uintStorage(numVotesID);
+ database.setUint(numVotesID, numSignatures.add(1));
+ return true;
+ }
+
+
+ //------------------------------------------------------------------------------------------------------------------
+ // View Functions
+ //------------------------------------------------------------------------------------------------------------------
+
+ function isQuorumReached(address _contractAddress, bytes4 _methodID, bytes32 _parameterHash)
+ public
+ view
+ returns (bool) {
+ uint256 quorumLevel = database.uintStorage(keccak256(abi.encodePacked(_contractAddress, _methodID)));
+ bytes32 executionID = keccak256(abi.encodePacked(_contractAddress, _methodID, _parameterHash));
+ bytes32 numVotesID = keccak256(abi.encodePacked("numberOfVotes", executionID));
+ uint256 numOwners = database.uintStorage(keccak256(abi.encodePacked("numberOfOwners")));
+ // check that number of signatures are greater than required quorum
+ return database.uintStorage(numVotesID).mul(100).div(numOwners) >= quorumLevel;
+ }
+
+
+ //------------------------------------------------------------------------------------------------------------------
+ // Modifiers
+ //------------------------------------------------------------------------------------------------------------------
+
+
+ // @notice reverts if caller is not the owner
+ modifier onlyOwner {
+ require(database.boolStorage(keccak256(abi.encodePacked("owner", msg.sender))) == true);
+ _;
+ }
+
+ // @notice add this modifer to functions that you want multi-sig requirements for
+ // @dev function can only be called after at least n >= quorumLevel owners have agreed to call it
+ modifier isRestricted(bytes4 _methodID, bytes32 _parameterHash) {
+ require(isQuorumReached(address(this), _methodID, _parameterHash)); // owners must have agreed on function + parameters
+ _;
+ database.deleteBool(keccak256(abi.encodePacked(address(this), _methodID, _parameterHash)));
+ }
+
+
+ //------------------------------------------------------------------------------------------------------------------
+ // Events
+ //------------------------------------------------------------------------------------------------------------------
+ event LogOwnerChanged(address indexed _previousOwner, address indexed _newOwner);
+ event LogFunctionAuthorized(address indexed _owner, string indexed _functionName, bytes32 indexed _beneficiary, bytes32 _authHash);
+}
+
pragma solidity 0.4.24;
+
+
+import '../database/Database.sol';
+
+// @title A contract which allows for the freezing of functionality within the platform.
+// @dev only valid with a single owned ownership model
+// @author Kyle Dewhurst, MyBit Foundation
+contract Pausible {
+
+ Database public database;
+
+ // @notice constructor: initialize database instance
+ constructor(address _database)
+ public {
+ database = Database(_database);
+ }
+
+ // @notice This will pause all critical activity for the supplied address
+ // @param: The address of the contract which is to be paused\
+ function pause(address _contract)
+ onlyOwner
+ public {
+ database.setBool(keccak256(abi.encodePacked("paused", _contract)), true);
+ emit LogPaused(_contract, msg.sender);
+ }
+
+ // @notice This will unpause all critical activity for the supplied address
+ // @param: The address of the contract which is to be unpaused
+ function unpause(address _contract)
+ onlyOwner
+ public {
+ database.deleteBool(keccak256(abi.encodePacked("paused", _contract)));
+ emit LogUnpaused(_contract, msg.sender);
+ }
+
+ // @notice reverts if caller is not the owner
+ modifier onlyOwner() {
+ require(database.boolStorage(keccak256(abi.encodePacked("owner", msg.sender))));
+ _;
+ }
+
+ event LogPaused(address indexed _contract, address _owner);
+ event LogUnpaused(address indexed _contract, address _owner);
+
+}
+