From 1b0ebf61bbd6213ca0af06ab6a9559324f58c9e4 Mon Sep 17 00:00:00 2001 From: Cyril Lapinte Date: Fri, 10 Apr 2020 21:21:22 +0200 Subject: [PATCH] Removing coverage --- README.md | 4 - coverage.json | 1 - coverage/base.css | 213 ---- coverage/coverage-final.json | 13 - coverage/governance/Operator.sol.html | 269 ----- coverage/governance/Ownable.sol.html | 245 ----- coverage/governance/index.html | 106 -- coverage/index.html | 158 --- coverage/interface/ERC20.sol.html | 176 ---- coverage/interface/IERC20.sol.html | 179 ---- coverage/interface/IRouter.sol.html | 173 --- coverage/interface/IUserRegistry.sol.html | 242 ----- coverage/interface/index.html | 119 --- coverage/lcov-report/base.css | 213 ---- .../lcov-report/governance/Operator.sol.html | 269 ----- .../lcov-report/governance/Ownable.sol.html | 245 ----- coverage/lcov-report/governance/index.html | 106 -- coverage/lcov-report/index.html | 158 --- coverage/lcov-report/interface/ERC20.sol.html | 176 ---- .../lcov-report/interface/IERC20.sol.html | 179 ---- .../lcov-report/interface/IRouter.sol.html | 173 --- .../interface/IUserRegistry.sol.html | 242 ----- coverage/lcov-report/interface/index.html | 119 --- coverage/lcov-report/math/SafeMath.sol.html | 221 ---- coverage/lcov-report/math/index.html | 93 -- coverage/lcov-report/prettify.css | 1 - coverage/lcov-report/prettify.js | 1 - .../registry/UserRegistry.sol.html | 992 ------------------ coverage/lcov-report/registry/index.html | 93 -- .../lcov-report/routing/BasicRouter.sol.html | 431 -------- .../routing/DynamicRouter.sol.html | 296 ------ .../routing/ScheduledRouter.sol.html | 203 ---- coverage/lcov-report/routing/index.html | 119 --- coverage/lcov-report/sort-arrow-sprite.png | Bin 209 -> 0 bytes coverage/lcov-report/sorter.js | 158 --- .../lcov-report/token/DummyToken.sol.html | 602 ----------- .../lcov-report/token/ERC20Token.sol.html | 416 -------- coverage/lcov-report/token/index.html | 106 -- coverage/lcov.info | 643 ------------ coverage/math/SafeMath.sol.html | 221 ---- coverage/math/index.html | 93 -- coverage/prettify.css | 1 - coverage/prettify.js | 1 - coverage/registry/UserRegistry.sol.html | 992 ------------------ coverage/registry/index.html | 93 -- coverage/routing/BasicRouter.sol.html | 431 -------- coverage/routing/DynamicRouter.sol.html | 296 ------ coverage/routing/ScheduledRouter.sol.html | 203 ---- coverage/routing/index.html | 119 --- coverage/sort-arrow-sprite.png | Bin 209 -> 0 bytes coverage/sorter.js | 158 --- coverage/token/DummyToken.sol.html | 602 ----------- coverage/token/ERC20Token.sol.html | 416 -------- coverage/token/index.html | 106 -- 54 files changed, 11885 deletions(-) delete mode 100644 coverage.json delete mode 100644 coverage/base.css delete mode 100644 coverage/coverage-final.json delete mode 100644 coverage/governance/Operator.sol.html delete mode 100644 coverage/governance/Ownable.sol.html delete mode 100644 coverage/governance/index.html delete mode 100644 coverage/index.html delete mode 100644 coverage/interface/ERC20.sol.html delete mode 100644 coverage/interface/IERC20.sol.html delete mode 100644 coverage/interface/IRouter.sol.html delete mode 100644 coverage/interface/IUserRegistry.sol.html delete mode 100644 coverage/interface/index.html delete mode 100644 coverage/lcov-report/base.css delete mode 100644 coverage/lcov-report/governance/Operator.sol.html delete mode 100644 coverage/lcov-report/governance/Ownable.sol.html delete mode 100644 coverage/lcov-report/governance/index.html delete mode 100644 coverage/lcov-report/index.html delete mode 100644 coverage/lcov-report/interface/ERC20.sol.html delete mode 100644 coverage/lcov-report/interface/IERC20.sol.html delete mode 100644 coverage/lcov-report/interface/IRouter.sol.html delete mode 100644 coverage/lcov-report/interface/IUserRegistry.sol.html delete mode 100644 coverage/lcov-report/interface/index.html delete mode 100644 coverage/lcov-report/math/SafeMath.sol.html delete mode 100644 coverage/lcov-report/math/index.html delete mode 100644 coverage/lcov-report/prettify.css delete mode 100644 coverage/lcov-report/prettify.js delete mode 100644 coverage/lcov-report/registry/UserRegistry.sol.html delete mode 100644 coverage/lcov-report/registry/index.html delete mode 100644 coverage/lcov-report/routing/BasicRouter.sol.html delete mode 100644 coverage/lcov-report/routing/DynamicRouter.sol.html delete mode 100644 coverage/lcov-report/routing/ScheduledRouter.sol.html delete mode 100644 coverage/lcov-report/routing/index.html delete mode 100644 coverage/lcov-report/sort-arrow-sprite.png delete mode 100644 coverage/lcov-report/sorter.js delete mode 100644 coverage/lcov-report/token/DummyToken.sol.html delete mode 100644 coverage/lcov-report/token/ERC20Token.sol.html delete mode 100644 coverage/lcov-report/token/index.html delete mode 100644 coverage/lcov.info delete mode 100644 coverage/math/SafeMath.sol.html delete mode 100644 coverage/math/index.html delete mode 100644 coverage/prettify.css delete mode 100644 coverage/prettify.js delete mode 100644 coverage/registry/UserRegistry.sol.html delete mode 100644 coverage/registry/index.html delete mode 100644 coverage/routing/BasicRouter.sol.html delete mode 100644 coverage/routing/DynamicRouter.sol.html delete mode 100644 coverage/routing/ScheduledRouter.sol.html delete mode 100644 coverage/routing/index.html delete mode 100644 coverage/sort-arrow-sprite.png delete mode 100644 coverage/sorter.js delete mode 100644 coverage/token/DummyToken.sol.html delete mode 100644 coverage/token/ERC20Token.sol.html delete mode 100644 coverage/token/index.html diff --git a/README.md b/README.md index d046e14..8d32ca9 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,3 @@ All matters regarding the intellectual property of this code or software are sub without the express and written permission of Cyril Lapinte. Copyright © 2016 - 2019 Cyril Lapinte - All Rights Reserved - -## Coverage - -https://sirhill.github.io/onchain/coverage/ diff --git a/coverage.json b/coverage.json deleted file mode 100644 index 9797b55..0000000 --- a/coverage.json +++ /dev/null @@ -1 +0,0 @@ -{"contracts/governance/Operator.sol":{"l":{"29":208,"30":203,"37":2,"44":2,"55":59,"57":57,"58":2,"60":57,"62":57,"63":65,"64":65,"66":57},"path":"/home/node/project/contracts/governance/Operator.sol","s":{"1":208,"2":2,"3":2,"4":59,"5":57,"6":57,"7":57,"8":65,"9":65,"10":57},"b":{"1":[203,5],"2":[57,2]},"f":{"1":208,"2":2,"3":2,"4":59},"fnMap":{"1":{"name":"onlyOperator","line":28,"loc":{"start":{"line":28,"column":2},"end":{"line":28,"column":23}}},"2":{"name":"operatorCount","line":36,"loc":{"start":{"line":36,"column":2},"end":{"line":36,"column":56}}},"3":{"name":"operatorAddress","line":43,"loc":{"start":{"line":43,"column":2},"end":{"line":43,"column":75}}},"4":{"name":"defineOperators","line":53,"loc":{"start":{"line":53,"column":19},"end":{"line":54,"column":3}}}},"statementMap":{"1":{"start":{"line":29,"column":4},"end":{"line":29,"column":47}},"2":{"start":{"line":37,"column":4},"end":{"line":37,"column":27}},"3":{"start":{"line":44,"column":4},"end":{"line":44,"column":33}},"4":{"start":{"line":55,"column":4},"end":{"line":55,"column":54}},"5":{"start":{"line":57,"column":4},"end":{"line":57,"column":1305}},"6":{"start":{"line":60,"column":4},"end":{"line":60,"column":43}},"7":{"start":{"line":62,"column":4},"end":{"line":62,"column":1450}},"8":{"start":{"line":63,"column":6},"end":{"line":63,"column":52}},"9":{"start":{"line":64,"column":6},"end":{"line":64,"column":46}},"10":{"start":{"line":66,"column":4},"end":{"line":66,"column":25}}},"branchMap":{"1":{"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}}]},"2":{"line":55,"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":55,"column":4}},{"start":{"line":55,"column":4},"end":{"line":55,"column":4}}]}}},"contracts/governance/Ownable.sol":{"l":{"24":61,"31":61,"32":59,"39":0,"40":0,"48":0,"56":0,"57":0,"58":0},"path":"/home/node/project/contracts/governance/Ownable.sol","s":{"1":61,"2":61,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0},"b":{"1":[59,2],"2":[0,0]},"f":{"1":61,"2":61,"3":0,"4":0,"5":0},"fnMap":{"1":{"name":"constructor","line":23,"loc":{"start":{"line":23,"column":2},"end":{"line":23,"column":22}}},"2":{"name":"onlyOwner","line":30,"loc":{"start":{"line":30,"column":2},"end":{"line":30,"column":22}}},"3":{"name":"renounceOwnership","line":38,"loc":{"start":{"line":38,"column":46},"end":{"line":38,"column":3}}},"4":{"name":"transferOwnership","line":47,"loc":{"start":{"line":47,"column":63},"end":{"line":47,"column":3}}},"5":{"name":"_transferOwnership","line":55,"loc":{"start":{"line":55,"column":2},"end":{"line":55,"column":57}}}},"statementMap":{"1":{"start":{"line":24,"column":4},"end":{"line":24,"column":21}},"2":{"start":{"line":31,"column":4},"end":{"line":31,"column":31}},"3":{"start":{"line":39,"column":4},"end":{"line":39,"column":34}},"4":{"start":{"line":40,"column":4},"end":{"line":40,"column":21}},"5":{"start":{"line":48,"column":4},"end":{"line":48,"column":32}},"6":{"start":{"line":56,"column":4},"end":{"line":56,"column":35}},"7":{"start":{"line":57,"column":4},"end":{"line":57,"column":47}},"8":{"start":{"line":58,"column":4},"end":{"line":58,"column":20}}},"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":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/interface/IERC20.sol":{"l":{},"path":"/home/node/project/contracts/interface/IERC20.sol","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}},"contracts/interface/IRouter.sol":{"l":{},"path":"/home/node/project/contracts/interface/IRouter.sol","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}},"contracts/interface/IUserRegistry.sol":{"l":{},"path":"/home/node/project/contracts/interface/IUserRegistry.sol","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}},"contracts/math/SafeMath.sol":{"l":{"17":0,"18":0,"21":0,"22":0,"23":0,"33":0,"40":9,"41":9,"48":7,"49":7,"50":7},"path":"/home/node/project/contracts/math/SafeMath.sol","s":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":9,"8":9,"9":7,"10":7,"11":7},"b":{"1":[0,0],"2":[0,0],"3":[9,0],"4":[7,0]},"f":{"1":0,"2":0,"3":9,"4":7},"fnMap":{"1":{"name":"mul","line":13,"loc":{"start":{"line":13,"column":2},"end":{"line":13,"column":70}}},"2":{"name":"div","line":29,"loc":{"start":{"line":29,"column":2},"end":{"line":29,"column":68}}},"3":{"name":"sub","line":39,"loc":{"start":{"line":39,"column":2},"end":{"line":39,"column":68}}},"4":{"name":"add","line":47,"loc":{"start":{"line":47,"column":2},"end":{"line":47,"column":70}}}},"statementMap":{"1":{"start":{"line":17,"column":4},"end":{"line":17,"column":495}},"2":{"start":{"line":18,"column":6},"end":{"line":18,"column":14}},"3":{"start":{"line":21,"column":4},"end":{"line":21,"column":12}},"4":{"start":{"line":22,"column":4},"end":{"line":22,"column":21}},"5":{"start":{"line":23,"column":4},"end":{"line":23,"column":12}},"6":{"start":{"line":33,"column":4},"end":{"line":33,"column":16}},"7":{"start":{"line":40,"column":4},"end":{"line":40,"column":17}},"8":{"start":{"line":41,"column":4},"end":{"line":41,"column":16}},"9":{"start":{"line":48,"column":4},"end":{"line":48,"column":12}},"10":{"start":{"line":49,"column":4},"end":{"line":49,"column":17}},"11":{"start":{"line":50,"column":4},"end":{"line":50,"column":12}}},"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}}]},"2":{"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}}]},"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":49,"type":"if","locations":[{"start":{"line":49,"column":4},"end":{"line":49,"column":4}},{"start":{"line":49,"column":4},"end":{"line":49,"column":4}}]}}},"contracts/registry/UserRegistry.sol":{"l":{"41":49,"42":112,"50":4,"57":10,"64":3,"65":3,"66":3,"68":0,"75":7,"82":15,"91":4,"98":4,"105":3,"114":3,"123":1,"124":2,"134":86,"135":82,"136":78,"138":78,"147":30,"148":28,"149":54,"159":3,"168":1,"169":3,"177":3,"184":3,"185":3,"186":1,"193":14,"194":10,"195":8,"202":9,"203":5,"204":3,"213":5,"214":8,"224":3,"225":4,"237":33,"238":29,"239":29,"250":3,"251":4,"261":7,"262":3,"273":3,"274":4,"284":117,"285":115,"286":115,"288":115,"289":115,"296":10,"297":10,"298":6,"299":6,"307":10},"path":"/home/node/project/contracts/registry/UserRegistry.sol","s":{"1":49,"2":112,"3":4,"4":10,"5":3,"6":3,"7":3,"8":0,"9":7,"10":15,"11":4,"12":4,"13":3,"14":3,"15":1,"16":2,"17":86,"18":82,"19":78,"20":78,"21":30,"22":28,"23":54,"24":3,"25":1,"26":3,"27":3,"28":3,"29":3,"30":1,"31":14,"32":10,"33":8,"34":9,"35":5,"36":3,"37":5,"38":8,"39":3,"40":4,"41":33,"42":29,"43":29,"44":3,"45":4,"46":7,"47":3,"48":3,"49":4,"50":117,"51":115,"52":115,"53":115,"54":115,"55":10,"56":10,"57":6,"58":10},"b":{"1":[3,0],"2":[82,4],"3":[78,4],"4":[28,2],"5":[1,2],"6":[10,4],"7":[8,2],"8":[5,4],"9":[3,2],"10":[29,4],"11":[3,4],"12":[115,2],"13":[6,4]},"f":{"1":49,"2":4,"3":10,"4":3,"5":7,"6":15,"7":4,"8":4,"9":3,"10":3,"11":1,"12":86,"13":30,"14":3,"15":1,"16":3,"17":3,"18":14,"19":9,"20":5,"21":3,"22":33,"23":3,"24":7,"25":3,"26":117,"27":10,"28":10},"fnMap":{"1":{"name":"constructor","line":40,"loc":{"start":{"line":40,"column":2},"end":{"line":40,"column":74}}},"2":{"name":"userCount","line":49,"loc":{"start":{"line":49,"column":2},"end":{"line":49,"column":61}}},"3":{"name":"userId","line":56,"loc":{"start":{"line":56,"column":2},"end":{"line":56,"column":74}}},"4":{"name":"validUserId","line":63,"loc":{"start":{"line":63,"column":2},"end":{"line":63,"column":79}}},"5":{"name":"validUntilTime","line":74,"loc":{"start":{"line":74,"column":2},"end":{"line":74,"column":81}}},"6":{"name":"suspended","line":81,"loc":{"start":{"line":81,"column":2},"end":{"line":81,"column":73}}},"7":{"name":"extended","line":88,"loc":{"start":{"line":88,"column":2},"end":{"line":90,"column":3}}},"8":{"name":"isAddressValid","line":97,"loc":{"start":{"line":97,"column":2},"end":{"line":97,"column":79}}},"9":{"name":"isValid","line":104,"loc":{"start":{"line":104,"column":2},"end":{"line":104,"column":71}}},"10":{"name":"registerUser","line":112,"loc":{"start":{"line":112,"column":31},"end":{"line":113,"column":3}}},"11":{"name":"registerManyUsers","line":121,"loc":{"start":{"line":121,"column":31},"end":{"line":122,"column":3}}},"12":{"name":"attachAddress","line":132,"loc":{"start":{"line":132,"column":31},"end":{"line":133,"column":3}}},"13":{"name":"attachManyAddresses","line":145,"loc":{"start":{"line":145,"column":31},"end":{"line":146,"column":3}}},"14":{"name":"detachAddress","line":157,"loc":{"start":{"line":157,"column":31},"end":{"line":158,"column":3}}},"15":{"name":"detachManyAddresses","line":166,"loc":{"start":{"line":166,"column":31},"end":{"line":167,"column":3}}},"16":{"name":"detachSelf","line":176,"loc":{"start":{"line":176,"column":2},"end":{"line":176,"column":39}}},"17":{"name":"detachSelfAddress","line":183,"loc":{"start":{"line":183,"column":2},"end":{"line":183,"column":62}}},"18":{"name":"suspendUser","line":192,"loc":{"start":{"line":192,"column":67},"end":{"line":192,"column":3}}},"19":{"name":"unsuspendUser","line":201,"loc":{"start":{"line":201,"column":69},"end":{"line":201,"column":3}}},"20":{"name":"suspendManyUsers","line":211,"loc":{"start":{"line":211,"column":31},"end":{"line":212,"column":3}}},"21":{"name":"unsuspendManyUsers","line":222,"loc":{"start":{"line":222,"column":31},"end":{"line":223,"column":3}}},"22":{"name":"updateUser","line":235,"loc":{"start":{"line":235,"column":48},"end":{"line":236,"column":3}}},"23":{"name":"updateManyUsers","line":248,"loc":{"start":{"line":248,"column":48},"end":{"line":249,"column":3}}},"24":{"name":"updateUserExtended","line":259,"loc":{"start":{"line":259,"column":31},"end":{"line":260,"column":3}}},"25":{"name":"updateManyUsersExtended","line":271,"loc":{"start":{"line":271,"column":47},"end":{"line":272,"column":3}}},"26":{"name":"registerUserInternal","line":281,"loc":{"start":{"line":281,"column":2},"end":{"line":283,"column":3}}},"27":{"name":"detachAddressInternal","line":295,"loc":{"start":{"line":295,"column":2},"end":{"line":295,"column":59}}},"28":{"name":"isValidInternal","line":305,"loc":{"start":{"line":305,"column":2},"end":{"line":305,"column":74}}}},"statementMap":{"1":{"start":{"line":41,"column":4},"end":{"line":41,"column":1016}},"2":{"start":{"line":42,"column":6},"end":{"line":42,"column":57}},"3":{"start":{"line":50,"column":4},"end":{"line":50,"column":21}},"4":{"start":{"line":57,"column":4},"end":{"line":57,"column":33}},"5":{"start":{"line":64,"column":4},"end":{"line":64,"column":50}},"6":{"start":{"line":65,"column":4},"end":{"line":65,"column":1689}},"7":{"start":{"line":66,"column":6},"end":{"line":66,"column":26}},"8":{"start":{"line":68,"column":4},"end":{"line":68,"column":12}},"9":{"start":{"line":75,"column":4},"end":{"line":75,"column":40}},"10":{"start":{"line":82,"column":4},"end":{"line":82,"column":35}},"11":{"start":{"line":91,"column":4},"end":{"line":91,"column":40}},"12":{"start":{"line":98,"column":4},"end":{"line":98,"column":57}},"13":{"start":{"line":105,"column":4},"end":{"line":105,"column":42}},"14":{"start":{"line":114,"column":4},"end":{"line":114,"column":50}},"15":{"start":{"line":123,"column":4},"end":{"line":123,"column":3080}},"16":{"start":{"line":124,"column":6},"end":{"line":124,"column":57}},"17":{"start":{"line":134,"column":4},"end":{"line":134,"column":56}},"18":{"start":{"line":135,"column":4},"end":{"line":135,"column":47}},"19":{"start":{"line":136,"column":4},"end":{"line":136,"column":35}},"20":{"start":{"line":138,"column":4},"end":{"line":138,"column":43}},"21":{"start":{"line":147,"column":4},"end":{"line":147,"column":56}},"22":{"start":{"line":148,"column":4},"end":{"line":148,"column":3793}},"23":{"start":{"line":149,"column":6},"end":{"line":149,"column":46}},"24":{"start":{"line":159,"column":4},"end":{"line":159,"column":34}},"25":{"start":{"line":168,"column":4},"end":{"line":168,"column":4304}},"26":{"start":{"line":169,"column":6},"end":{"line":169,"column":41}},"27":{"start":{"line":177,"column":4},"end":{"line":177,"column":36}},"28":{"start":{"line":184,"column":4},"end":{"line":184,"column":51}},"29":{"start":{"line":185,"column":4},"end":{"line":185,"column":58}},"30":{"start":{"line":186,"column":4},"end":{"line":186,"column":34}},"31":{"start":{"line":193,"column":4},"end":{"line":193,"column":56}},"32":{"start":{"line":194,"column":4},"end":{"line":194,"column":45}},"33":{"start":{"line":195,"column":4},"end":{"line":195,"column":34}},"34":{"start":{"line":202,"column":4},"end":{"line":202,"column":56}},"35":{"start":{"line":203,"column":4},"end":{"line":203,"column":44}},"36":{"start":{"line":204,"column":4},"end":{"line":204,"column":35}},"37":{"start":{"line":213,"column":4},"end":{"line":213,"column":5525}},"38":{"start":{"line":214,"column":6},"end":{"line":214,"column":29}},"39":{"start":{"line":224,"column":4},"end":{"line":224,"column":5757}},"40":{"start":{"line":225,"column":6},"end":{"line":225,"column":31}},"41":{"start":{"line":237,"column":4},"end":{"line":237,"column":56}},"42":{"start":{"line":238,"column":4},"end":{"line":238,"column":50}},"43":{"start":{"line":239,"column":4},"end":{"line":239,"column":40}},"44":{"start":{"line":250,"column":4},"end":{"line":250,"column":6359}},"45":{"start":{"line":251,"column":6},"end":{"line":251,"column":57}},"46":{"start":{"line":261,"column":4},"end":{"line":261,"column":56}},"47":{"start":{"line":262,"column":4},"end":{"line":262,"column":41}},"48":{"start":{"line":273,"column":4},"end":{"line":273,"column":6958}},"49":{"start":{"line":274,"column":6},"end":{"line":274,"column":50}},"50":{"start":{"line":284,"column":4},"end":{"line":284,"column":47}},"51":{"start":{"line":285,"column":4},"end":{"line":285,"column":53}},"52":{"start":{"line":286,"column":4},"end":{"line":286,"column":38}},"53":{"start":{"line":288,"column":4},"end":{"line":288,"column":35}},"54":{"start":{"line":289,"column":4},"end":{"line":289,"column":46}},"55":{"start":{"line":296,"column":4},"end":{"line":296,"column":50}},"56":{"start":{"line":297,"column":4},"end":{"line":297,"column":38}},"57":{"start":{"line":298,"column":4},"end":{"line":298,"column":49}},"58":{"start":{"line":307,"column":4},"end":{"line":307,"column":55}}},"branchMap":{"1":{"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}}]},"2":{"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}}]},"3":{"line":135,"type":"if","locations":[{"start":{"line":135,"column":4},"end":{"line":135,"column":4}},{"start":{"line":135,"column":4},"end":{"line":135,"column":4}}]},"4":{"line":147,"type":"if","locations":[{"start":{"line":147,"column":4},"end":{"line":147,"column":4}},{"start":{"line":147,"column":4},"end":{"line":147,"column":4}}]},"5":{"line":185,"type":"if","locations":[{"start":{"line":185,"column":4},"end":{"line":185,"column":4}},{"start":{"line":185,"column":4},"end":{"line":185,"column":4}}]},"6":{"line":193,"type":"if","locations":[{"start":{"line":193,"column":4},"end":{"line":193,"column":4}},{"start":{"line":193,"column":4},"end":{"line":193,"column":4}}]},"7":{"line":194,"type":"if","locations":[{"start":{"line":194,"column":4},"end":{"line":194,"column":4}},{"start":{"line":194,"column":4},"end":{"line":194,"column":4}}]},"8":{"line":202,"type":"if","locations":[{"start":{"line":202,"column":4},"end":{"line":202,"column":4}},{"start":{"line":202,"column":4},"end":{"line":202,"column":4}}]},"9":{"line":203,"type":"if","locations":[{"start":{"line":203,"column":4},"end":{"line":203,"column":4}},{"start":{"line":203,"column":4},"end":{"line":203,"column":4}}]},"10":{"line":237,"type":"if","locations":[{"start":{"line":237,"column":4},"end":{"line":237,"column":4}},{"start":{"line":237,"column":4},"end":{"line":237,"column":4}}]},"11":{"line":261,"type":"if","locations":[{"start":{"line":261,"column":4},"end":{"line":261,"column":4}},{"start":{"line":261,"column":4},"end":{"line":261,"column":4}}]},"12":{"line":284,"type":"if","locations":[{"start":{"line":284,"column":4},"end":{"line":284,"column":4}},{"start":{"line":284,"column":4},"end":{"line":284,"column":4}}]},"13":{"line":297,"type":"if","locations":[{"start":{"line":297,"column":4},"end":{"line":297,"column":4}},{"start":{"line":297,"column":4},"end":{"line":297,"column":4}}]}}},"contracts/routing/BasicRouter.sol":{"l":{"34":0,"35":0,"39":0,"43":0,"47":0,"51":0,"55":0,"59":0,"66":0,"67":0,"77":0,"78":0,"79":0,"85":0,"86":0,"88":0,"95":0,"96":0,"105":0,"106":0,"107":0,"109":0,"111":0,"112":0,"113":0,"114":0,"115":0,"117":0,"120":0},"path":"/home/node/project/contracts/routing/BasicRouter.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],"5":[0,0],"6":[0,0]},"f":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0},"fnMap":{"1":{"name":"configNotLocked","line":33,"loc":{"start":{"line":33,"column":2},"end":{"line":33,"column":28}}},"2":{"name":null,"line":38,"loc":{"start":{"line":38,"column":2},"end":{"line":38,"column":37}}},"3":{"name":null,"line":42,"loc":{"start":{"line":42,"column":2},"end":{"line":42,"column":38}}},"4":{"name":"destinations","line":46,"loc":{"start":{"line":46,"column":2},"end":{"line":46,"column":88}}},"5":{"name":"activeDestination","line":50,"loc":{"start":{"line":50,"column":2},"end":{"line":50,"column":75}}},"6":{"name":"destinationAbi","line":54,"loc":{"start":{"line":54,"column":2},"end":{"line":54,"column":80}}},"7":{"name":"isConfigLocked","line":58,"loc":{"start":{"line":58,"column":2},"end":{"line":58,"column":63}}},"8":{"name":"findDestination","line":65,"loc":{"start":{"line":65,"column":2},"end":{"line":65,"column":81}}},"9":{"name":"setRoute","line":75,"loc":{"start":{"line":75,"column":44},"end":{"line":76,"column":3}}},"10":{"name":"switchDestination","line":83,"loc":{"start":{"line":83,"column":19},"end":{"line":84,"column":3}}},"11":{"name":"lockConfig","line":94,"loc":{"start":{"line":94,"column":64},"end":{"line":94,"column":3}}},"12":{"name":"callPayable","line":103,"loc":{"start":{"line":103,"column":2},"end":{"line":104,"column":3}}}},"statementMap":{"1":{"start":{"line":34,"column":4},"end":{"line":34,"column":34}},"2":{"start":{"line":39,"column":4},"end":{"line":39,"column":47}},"3":{"start":{"line":43,"column":4},"end":{"line":43,"column":47}},"4":{"start":{"line":47,"column":4},"end":{"line":47,"column":39}},"5":{"start":{"line":51,"column":4},"end":{"line":51,"column":44}},"6":{"start":{"line":55,"column":4},"end":{"line":55,"column":41}},"7":{"start":{"line":59,"column":4},"end":{"line":59,"column":24}},"8":{"start":{"line":66,"column":4},"end":{"line":66,"column":40}},"9":{"start":{"line":67,"column":4},"end":{"line":67,"column":1721}},"10":{"start":{"line":77,"column":4},"end":{"line":77,"column":61}},"11":{"start":{"line":78,"column":4},"end":{"line":78,"column":62}},"12":{"start":{"line":79,"column":4},"end":{"line":79,"column":15}},"13":{"start":{"line":85,"column":4},"end":{"line":85,"column":76}},"14":{"start":{"line":86,"column":4},"end":{"line":86,"column":57}},"15":{"start":{"line":88,"column":4},"end":{"line":88,"column":57}},"16":{"start":{"line":95,"column":4},"end":{"line":95,"column":23}},"17":{"start":{"line":96,"column":4},"end":{"line":96,"column":23}},"18":{"start":{"line":105,"column":4},"end":{"line":105,"column":33}},"19":{"start":{"line":106,"column":4},"end":{"line":106,"column":50}},"20":{"start":{"line":107,"column":4},"end":{"line":107,"column":45}},"21":{"start":{"line":109,"column":4},"end":{"line":109,"column":59}},"22":{"start":{"line":111,"column":4},"end":{"line":111,"column":16}},"23":{"start":{"line":112,"column":4},"end":{"line":112,"column":23}},"24":{"start":{"line":113,"column":4},"end":{"line":113,"column":3080}},"25":{"start":{"line":114,"column":6},"end":{"line":114,"column":77}},"26":{"start":{"line":115,"column":6},"end":{"line":115,"column":69}},"27":{"start":{"line":117,"column":6},"end":{"line":117,"column":63}},"28":{"start":{"line":120,"column":4},"end":{"line":120,"column":27}}},"branchMap":{"1":{"line":34,"type":"if","locations":[{"start":{"line":34,"column":4},"end":{"line":34,"column":4}},{"start":{"line":34,"column":4},"end":{"line":34,"column":4}}]},"2":{"line":85,"type":"if","locations":[{"start":{"line":85,"column":4},"end":{"line":85,"column":4}},{"start":{"line":85,"column":4},"end":{"line":85,"column":4}}]},"3":{"line":105,"type":"if","locations":[{"start":{"line":105,"column":4},"end":{"line":105,"column":4}},{"start":{"line":105,"column":4},"end":{"line":105,"column":4}}]},"4":{"line":107,"type":"if","locations":[{"start":{"line":107,"column":4},"end":{"line":107,"column":4}},{"start":{"line":107,"column":4},"end":{"line":107,"column":4}}]},"5":{"line":113,"type":"if","locations":[{"start":{"line":113,"column":4},"end":{"line":113,"column":4}},{"start":{"line":113,"column":4},"end":{"line":113,"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}}]}}},"contracts/routing/DynamicRouter.sol":{"l":{"29":0,"33":0,"37":0,"38":0,"40":0,"41":0,"42":0,"43":0,"45":0,"46":0,"47":0,"50":0,"51":0,"53":0,"54":0,"55":0,"56":0,"61":0,"69":0,"72":0,"73":0,"75":0},"path":"/home/node/project/contracts/routing/DynamicRouter.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},"b":{"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0]},"f":{"1":0,"2":0,"3":0,"4":0},"fnMap":{"1":{"name":"maxBalances","line":28,"loc":{"start":{"line":28,"column":2},"end":{"line":28,"column":78}}},"2":{"name":"weights","line":32,"loc":{"start":{"line":32,"column":2},"end":{"line":32,"column":74}}},"3":{"name":"findDestination","line":36,"loc":{"start":{"line":36,"column":2},"end":{"line":36,"column":82}}},"4":{"name":"setDistribution","line":68,"loc":{"start":{"line":68,"column":35},"end":{"line":68,"column":18}}}},"statementMap":{"1":{"start":{"line":29,"column":4},"end":{"line":29,"column":45}},"2":{"start":{"line":33,"column":4},"end":{"line":33,"column":41}},"3":{"start":{"line":37,"column":4},"end":{"line":37,"column":61}},"4":{"start":{"line":38,"column":4},"end":{"line":38,"column":40}},"5":{"start":{"line":40,"column":4},"end":{"line":40,"column":44}},"6":{"start":{"line":41,"column":4},"end":{"line":41,"column":44}},"7":{"start":{"line":42,"column":4},"end":{"line":42,"column":1156}},"8":{"start":{"line":43,"column":6},"end":{"line":43,"column":49}},"9":{"start":{"line":45,"column":6},"end":{"line":45,"column":1271}},"10":{"start":{"line":46,"column":8},"end":{"line":46,"column":40}},"11":{"start":{"line":50,"column":5},"end":{"line":50,"column":1375}},"12":{"start":{"line":51,"column":8},"end":{"line":51,"column":1503}},"13":{"start":{"line":53,"column":8},"end":{"line":53,"column":62}},"14":{"start":{"line":54,"column":8},"end":{"line":54,"column":1602}},"15":{"start":{"line":55,"column":10},"end":{"line":55,"column":45}},"16":{"start":{"line":56,"column":10},"end":{"line":56,"column":42}},"17":{"start":{"line":61,"column":4},"end":{"line":61,"column":30}},"18":{"start":{"line":69,"column":4},"end":{"line":69,"column":2040}},"19":{"start":{"line":72,"column":4},"end":{"line":72,"column":64}},"20":{"start":{"line":73,"column":4},"end":{"line":73,"column":52}},"21":{"start":{"line":75,"column":4},"end":{"line":75,"column":15}}},"branchMap":{"1":{"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}}]},"2":{"line":50,"type":"if","locations":[{"start":{"line":50,"column":5},"end":{"line":50,"column":5}},{"start":{"line":50,"column":5},"end":{"line":50,"column":5}}]},"3":{"line":54,"type":"if","locations":[{"start":{"line":54,"column":8},"end":{"line":54,"column":8}},{"start":{"line":54,"column":8},"end":{"line":54,"column":8}}]},"4":{"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}}]}}},"contracts/routing/ScheduledRouter.sol":{"l":{"28":0,"29":0,"33":0,"34":0,"35":0,"37":0,"42":0,"43":0,"44":0},"path":"/home/node/project/contracts/routing/ScheduledRouter.sol","s":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0},"b":{"1":[0,0],"2":[0,0]},"f":{"1":0,"2":0,"3":0},"fnMap":{"1":{"name":"schedule","line":27,"loc":{"start":{"line":27,"column":2},"end":{"line":27,"column":75}}},"2":{"name":"findDestination","line":32,"loc":{"start":{"line":32,"column":2},"end":{"line":32,"column":90}}},"3":{"name":"setRouteSchedule","line":41,"loc":{"start":{"line":41,"column":35},"end":{"line":41,"column":18}}}},"statementMap":{"1":{"start":{"line":28,"column":4},"end":{"line":28,"column":50}},"2":{"start":{"line":29,"column":4},"end":{"line":29,"column":47}},"3":{"start":{"line":33,"column":4},"end":{"line":33,"column":50}},"4":{"start":{"line":34,"column":4},"end":{"line":34,"column":818}},"5":{"start":{"line":35,"column":6},"end":{"line":35,"column":23}},"6":{"start":{"line":37,"column":4},"end":{"line":37,"column":41}},"7":{"start":{"line":42,"column":4},"end":{"line":42,"column":55}},"8":{"start":{"line":43,"column":4},"end":{"line":43,"column":50}},"9":{"start":{"line":44,"column":4},"end":{"line":44,"column":36}}},"branchMap":{"1":{"line":34,"type":"if","locations":[{"start":{"line":34,"column":4},"end":{"line":34,"column":4}},{"start":{"line":34,"column":4},"end":{"line":34,"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}}]}}},"contracts/token/DummyToken.sol":{"l":{"35":0,"36":0,"37":0,"38":0,"39":0,"41":0,"42":0,"46":0,"50":0,"54":0,"58":0,"62":0,"66":0,"70":0,"74":0,"78":0,"84":0,"88":0,"89":0,"91":0,"92":0,"93":0,"94":0,"100":0,"101":0,"102":0,"104":0,"105":0,"106":0,"107":0,"108":0,"112":0,"113":0,"114":0,"120":0,"122":0,"123":0,"129":0,"130":0,"131":0,"133":0,"135":0,"136":0,"140":0,"141":0,"142":0,"146":0,"150":0,"154":0,"155":0,"159":0,"163":0,"167":0,"168":0,"170":0,"171":0,"172":0,"176":0,"177":0},"path":"/home/node/project/contracts/token/DummyToken.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,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"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,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0},"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]},"f":{"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},"fnMap":{"1":{"name":"constructor","line":29,"loc":{"start":{"line":29,"column":2},"end":{"line":34,"column":3}}},"2":{"name":"name","line":45,"loc":{"start":{"line":45,"column":2},"end":{"line":45,"column":62}}},"3":{"name":"symbol","line":49,"loc":{"start":{"line":49,"column":2},"end":{"line":49,"column":64}}},"4":{"name":"decimal","line":53,"loc":{"start":{"line":53,"column":2},"end":{"line":53,"column":59}}},"5":{"name":"totalSupply","line":57,"loc":{"start":{"line":57,"column":2},"end":{"line":57,"column":63}}},"6":{"name":"balanceOf","line":61,"loc":{"start":{"line":61,"column":2},"end":{"line":61,"column":75}}},"7":{"name":"rate","line":65,"loc":{"start":{"line":65,"column":2},"end":{"line":65,"column":47}}},"8":{"name":"rateAt","line":69,"loc":{"start":{"line":69,"column":2},"end":{"line":69,"column":49}}},"9":{"name":"interest","line":73,"loc":{"start":{"line":73,"column":2},"end":{"line":73,"column":51}}},"10":{"name":"twin","line":77,"loc":{"start":{"line":77,"column":2},"end":{"line":77,"column":46}}},"11":{"name":"allowance","line":81,"loc":{"start":{"line":81,"column":2},"end":{"line":83,"column":3}}},"12":{"name":"transfer","line":87,"loc":{"start":{"line":87,"column":2},"end":{"line":87,"column":79}}},"13":{"name":"transferFrom","line":97,"loc":{"start":{"line":97,"column":2},"end":{"line":99,"column":3}}},"14":{"name":"approve","line":111,"loc":{"start":{"line":111,"column":2},"end":{"line":111,"column":83}}},"15":{"name":"increaseApproval","line":117,"loc":{"start":{"line":117,"column":2},"end":{"line":119,"column":3}}},"16":{"name":"decreaseApproval","line":126,"loc":{"start":{"line":126,"column":2},"end":{"line":128,"column":3}}},"17":{"name":"updateToken","line":139,"loc":{"start":{"line":139,"column":2},"end":{"line":139,"column":91}}},"18":{"name":"updateSupply","line":145,"loc":{"start":{"line":145,"column":2},"end":{"line":145,"column":52}}},"19":{"name":"updateBalance","line":149,"loc":{"start":{"line":149,"column":2},"end":{"line":149,"column":65}}},"20":{"name":"updateRate","line":153,"loc":{"start":{"line":153,"column":2},"end":{"line":153,"column":43}}},"21":{"name":"updateTwin","line":158,"loc":{"start":{"line":158,"column":2},"end":{"line":158,"column":42}}},"22":{"name":"createTwin","line":162,"loc":{"start":{"line":162,"column":2},"end":{"line":162,"column":30}}},"23":{"name":"transferNoEvent","line":166,"loc":{"start":{"line":166,"column":2},"end":{"line":166,"column":77}}},"24":{"name":"transferTwin","line":175,"loc":{"start":{"line":175,"column":2},"end":{"line":175,"column":74}}}},"statementMap":{"1":{"start":{"line":35,"column":4},"end":{"line":35,"column":16}},"2":{"start":{"line":36,"column":4},"end":{"line":36,"column":20}},"3":{"start":{"line":37,"column":4},"end":{"line":37,"column":22}},"4":{"start":{"line":38,"column":4},"end":{"line":38,"column":30}},"5":{"start":{"line":39,"column":4},"end":{"line":39,"column":38}},"6":{"start":{"line":41,"column":4},"end":{"line":41,"column":12}},"7":{"start":{"line":42,"column":4},"end":{"line":42,"column":16}},"8":{"start":{"line":46,"column":4},"end":{"line":46,"column":16}},"9":{"start":{"line":50,"column":4},"end":{"line":50,"column":18}},"10":{"start":{"line":54,"column":4},"end":{"line":54,"column":19}},"11":{"start":{"line":58,"column":4},"end":{"line":58,"column":48}},"12":{"start":{"line":62,"column":4},"end":{"line":62,"column":52}},"13":{"start":{"line":66,"column":4},"end":{"line":66,"column":16}},"14":{"start":{"line":70,"column":4},"end":{"line":70,"column":18}},"15":{"start":{"line":74,"column":4},"end":{"line":74,"column":43}},"16":{"start":{"line":78,"column":4},"end":{"line":78,"column":16}},"17":{"start":{"line":84,"column":4},"end":{"line":84,"column":36}},"18":{"start":{"line":88,"column":4},"end":{"line":88,"column":29}},"19":{"start":{"line":89,"column":4},"end":{"line":89,"column":42}},"20":{"start":{"line":91,"column":4},"end":{"line":91,"column":58}},"21":{"start":{"line":92,"column":4},"end":{"line":92,"column":44}},"22":{"start":{"line":93,"column":4},"end":{"line":93,"column":42}},"23":{"start":{"line":94,"column":4},"end":{"line":94,"column":15}},"24":{"start":{"line":100,"column":4},"end":{"line":100,"column":29}},"25":{"start":{"line":101,"column":4},"end":{"line":101,"column":37}},"26":{"start":{"line":102,"column":4},"end":{"line":102,"column":48}},"27":{"start":{"line":104,"column":4},"end":{"line":104,"column":48}},"28":{"start":{"line":105,"column":4},"end":{"line":105,"column":44}},"29":{"start":{"line":106,"column":4},"end":{"line":106,"column":70}},"30":{"start":{"line":107,"column":4},"end":{"line":107,"column":37}},"31":{"start":{"line":108,"column":4},"end":{"line":108,"column":15}},"32":{"start":{"line":112,"column":4},"end":{"line":112,"column":41}},"33":{"start":{"line":113,"column":4},"end":{"line":113,"column":47}},"34":{"start":{"line":114,"column":4},"end":{"line":114,"column":15}},"35":{"start":{"line":120,"column":4},"end":{"line":120,"column":3026}},"36":{"start":{"line":122,"column":4},"end":{"line":122,"column":70}},"37":{"start":{"line":123,"column":4},"end":{"line":123,"column":15}},"38":{"start":{"line":129,"column":4},"end":{"line":129,"column":49}},"39":{"start":{"line":130,"column":4},"end":{"line":130,"column":3324}},"40":{"start":{"line":131,"column":6},"end":{"line":131,"column":38}},"41":{"start":{"line":133,"column":6},"end":{"line":133,"column":67}},"42":{"start":{"line":135,"column":4},"end":{"line":135,"column":70}},"43":{"start":{"line":136,"column":4},"end":{"line":136,"column":15}},"44":{"start":{"line":140,"column":4},"end":{"line":140,"column":16}},"45":{"start":{"line":141,"column":4},"end":{"line":141,"column":20}},"46":{"start":{"line":142,"column":4},"end":{"line":142,"column":22}},"47":{"start":{"line":146,"column":4},"end":{"line":146,"column":30}},"48":{"start":{"line":150,"column":4},"end":{"line":150,"column":30}},"49":{"start":{"line":154,"column":4},"end":{"line":154,"column":16}},"50":{"start":{"line":155,"column":4},"end":{"line":155,"column":16}},"51":{"start":{"line":159,"column":4},"end":{"line":159,"column":16}},"52":{"start":{"line":163,"column":4},"end":{"line":163,"column":65}},"53":{"start":{"line":167,"column":4},"end":{"line":167,"column":29}},"54":{"start":{"line":168,"column":4},"end":{"line":168,"column":42}},"55":{"start":{"line":170,"column":4},"end":{"line":170,"column":58}},"56":{"start":{"line":171,"column":4},"end":{"line":171,"column":44}},"57":{"start":{"line":172,"column":4},"end":{"line":172,"column":15}},"58":{"start":{"line":176,"column":4},"end":{"line":176,"column":40}},"59":{"start":{"line":177,"column":4},"end":{"line":177,"column":38}}},"branchMap":{"1":{"line":88,"type":"if","locations":[{"start":{"line":88,"column":4},"end":{"line":88,"column":4}},{"start":{"line":88,"column":4},"end":{"line":88,"column":4}}]},"2":{"line":89,"type":"if","locations":[{"start":{"line":89,"column":4},"end":{"line":89,"column":4}},{"start":{"line":89,"column":4},"end":{"line":89,"column":4}}]},"3":{"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}}]},"4":{"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}}]},"5":{"line":102,"type":"if","locations":[{"start":{"line":102,"column":4},"end":{"line":102,"column":4}},{"start":{"line":102,"column":4},"end":{"line":102,"column":4}}]},"6":{"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}}]},"7":{"line":167,"type":"if","locations":[{"start":{"line":167,"column":4},"end":{"line":167,"column":4}},{"start":{"line":167,"column":4},"end":{"line":167,"column":4}}]},"8":{"line":168,"type":"if","locations":[{"start":{"line":168,"column":4},"end":{"line":168,"column":4}},{"start":{"line":168,"column":4},"end":{"line":168,"column":4}}]},"9":{"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}}]}}},"contracts/token/ERC20Token.sol":{"l":{"30":17,"31":17,"32":17,"33":17,"34":17,"38":1,"42":1,"46":1,"50":2,"54":4,"60":1,"65":5,"66":5,"68":5,"69":5,"70":5,"71":5,"77":3,"78":3,"79":3,"81":1,"82":1,"83":1,"84":1,"85":1,"91":6,"92":6,"93":6,"99":1,"101":1,"102":1,"108":2,"109":2,"110":0,"112":2,"114":2,"115":2},"path":"/home/node/project/contracts/token/ERC20Token.sol","s":{"1":17,"2":17,"3":17,"4":17,"5":17,"6":1,"7":1,"8":1,"9":2,"10":4,"11":1,"12":5,"13":5,"14":5,"15":5,"16":5,"17":5,"18":3,"19":3,"20":3,"21":1,"22":1,"23":1,"24":1,"25":1,"26":6,"27":6,"28":6,"29":1,"30":1,"31":1,"32":2,"33":2,"34":0,"35":2,"36":2,"37":2},"b":{"1":[5,0],"2":[5,0],"3":[3,0],"4":[3,0],"5":[1,2],"6":[0,2]},"f":{"1":17,"2":1,"3":1,"4":1,"5":2,"6":4,"7":1,"8":5,"9":3,"10":6,"11":1,"12":2},"fnMap":{"1":{"name":"constructor","line":24,"loc":{"start":{"line":24,"column":2},"end":{"line":29,"column":3}}},"2":{"name":"name","line":37,"loc":{"start":{"line":37,"column":2},"end":{"line":37,"column":62}}},"3":{"name":"symbol","line":41,"loc":{"start":{"line":41,"column":2},"end":{"line":41,"column":64}}},"4":{"name":"decimal","line":45,"loc":{"start":{"line":45,"column":2},"end":{"line":45,"column":59}}},"5":{"name":"totalSupply","line":49,"loc":{"start":{"line":49,"column":2},"end":{"line":49,"column":63}}},"6":{"name":"balanceOf","line":53,"loc":{"start":{"line":53,"column":2},"end":{"line":53,"column":75}}},"7":{"name":"allowance","line":57,"loc":{"start":{"line":57,"column":2},"end":{"line":59,"column":3}}},"8":{"name":"transfer","line":63,"loc":{"start":{"line":63,"column":2},"end":{"line":64,"column":36}}},"9":{"name":"transferFrom","line":74,"loc":{"start":{"line":74,"column":2},"end":{"line":76,"column":3}}},"10":{"name":"approve","line":88,"loc":{"start":{"line":88,"column":2},"end":{"line":90,"column":3}}},"11":{"name":"increaseApproval","line":96,"loc":{"start":{"line":96,"column":2},"end":{"line":98,"column":3}}},"12":{"name":"decreaseApproval","line":105,"loc":{"start":{"line":105,"column":2},"end":{"line":107,"column":3}}}},"statementMap":{"1":{"start":{"line":30,"column":4},"end":{"line":30,"column":16}},"2":{"start":{"line":31,"column":4},"end":{"line":31,"column":20}},"3":{"start":{"line":32,"column":4},"end":{"line":32,"column":22}},"4":{"start":{"line":33,"column":4},"end":{"line":33,"column":30}},"5":{"start":{"line":34,"column":4},"end":{"line":34,"column":38}},"6":{"start":{"line":38,"column":4},"end":{"line":38,"column":16}},"7":{"start":{"line":42,"column":4},"end":{"line":42,"column":18}},"8":{"start":{"line":46,"column":4},"end":{"line":46,"column":19}},"9":{"start":{"line":50,"column":4},"end":{"line":50,"column":23}},"10":{"start":{"line":54,"column":4},"end":{"line":54,"column":27}},"11":{"start":{"line":60,"column":4},"end":{"line":60,"column":36}},"12":{"start":{"line":65,"column":4},"end":{"line":65,"column":29}},"13":{"start":{"line":66,"column":4},"end":{"line":66,"column":42}},"14":{"start":{"line":68,"column":4},"end":{"line":68,"column":58}},"15":{"start":{"line":69,"column":4},"end":{"line":69,"column":44}},"16":{"start":{"line":70,"column":4},"end":{"line":70,"column":42}},"17":{"start":{"line":71,"column":4},"end":{"line":71,"column":15}},"18":{"start":{"line":77,"column":4},"end":{"line":77,"column":29}},"19":{"start":{"line":78,"column":4},"end":{"line":78,"column":37}},"20":{"start":{"line":79,"column":4},"end":{"line":79,"column":48}},"21":{"start":{"line":81,"column":4},"end":{"line":81,"column":48}},"22":{"start":{"line":82,"column":4},"end":{"line":82,"column":44}},"23":{"start":{"line":83,"column":4},"end":{"line":83,"column":70}},"24":{"start":{"line":84,"column":4},"end":{"line":84,"column":37}},"25":{"start":{"line":85,"column":4},"end":{"line":85,"column":15}},"26":{"start":{"line":91,"column":4},"end":{"line":91,"column":41}},"27":{"start":{"line":92,"column":4},"end":{"line":92,"column":47}},"28":{"start":{"line":93,"column":4},"end":{"line":93,"column":15}},"29":{"start":{"line":99,"column":4},"end":{"line":99,"column":2581}},"30":{"start":{"line":101,"column":4},"end":{"line":101,"column":70}},"31":{"start":{"line":102,"column":4},"end":{"line":102,"column":15}},"32":{"start":{"line":108,"column":4},"end":{"line":108,"column":49}},"33":{"start":{"line":109,"column":4},"end":{"line":109,"column":2879}},"34":{"start":{"line":110,"column":6},"end":{"line":110,"column":38}},"35":{"start":{"line":112,"column":6},"end":{"line":112,"column":67}},"36":{"start":{"line":114,"column":4},"end":{"line":114,"column":70}},"37":{"start":{"line":115,"column":4},"end":{"line":115,"column":15}}},"branchMap":{"1":{"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}}]},"2":{"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}}]},"3":{"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}}]},"4":{"line":78,"type":"if","locations":[{"start":{"line":78,"column":4},"end":{"line":78,"column":4}},{"start":{"line":78,"column":4},"end":{"line":78,"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}}]},"6":{"line":109,"type":"if","locations":[{"start":{"line":109,"column":4},"end":{"line":109,"column":4}},{"start":{"line":109,"column":4},"end":{"line":109,"column":4}}]}}}} \ No newline at end of file diff --git a/coverage/base.css b/coverage/base.css deleted file mode 100644 index 29737bc..0000000 --- a/coverage/base.css +++ /dev/null @@ -1,213 +0,0 @@ -body, html { - margin:0; padding: 0; - height: 100%; -} -body { - font-family: Helvetica Neue, Helvetica, Arial; - font-size: 14px; - color:#333; -} -.small { font-size: 12px; } -*, *:after, *:before { - -webkit-box-sizing:border-box; - -moz-box-sizing:border-box; - box-sizing:border-box; - } -h1 { font-size: 20px; margin: 0;} -h2 { font-size: 14px; } -pre { - font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; - margin: 0; - padding: 0; - -moz-tab-size: 2; - -o-tab-size: 2; - tab-size: 2; -} -a { color:#0074D9; text-decoration:none; } -a:hover { text-decoration:underline; } -.strong { font-weight: bold; } -.space-top1 { padding: 10px 0 0 0; } -.pad2y { padding: 20px 0; } -.pad1y { padding: 10px 0; } -.pad2x { padding: 0 20px; } -.pad2 { padding: 20px; } -.pad1 { padding: 10px; } -.space-left2 { padding-left:55px; } -.space-right2 { padding-right:20px; } -.center { text-align:center; } -.clearfix { display:block; } -.clearfix:after { - content:''; - display:block; - height:0; - clear:both; - visibility:hidden; - } -.fl { float: left; } -@media only screen and (max-width:640px) { - .col3 { width:100%; max-width:100%; } - .hide-mobile { display:none!important; } -} - -.quiet { - color: #7f7f7f; - color: rgba(0,0,0,0.5); -} -.quiet a { opacity: 0.7; } - -.fraction { - font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; - font-size: 10px; - color: #555; - background: #E8E8E8; - padding: 4px 5px; - border-radius: 3px; - vertical-align: middle; -} - -div.path a:link, div.path a:visited { color: #333; } -table.coverage { - border-collapse: collapse; - margin: 10px 0 0 0; - padding: 0; -} - -table.coverage td { - margin: 0; - padding: 0; - vertical-align: top; -} -table.coverage td.line-count { - text-align: right; - padding: 0 5px 0 20px; -} -table.coverage td.line-coverage { - text-align: right; - padding-right: 10px; - min-width:20px; -} - -table.coverage td span.cline-any { - display: inline-block; - padding: 0 5px; - width: 100%; -} -.missing-if-branch { - display: inline-block; - margin-right: 5px; - border-radius: 3px; - position: relative; - padding: 0 4px; - background: #333; - color: yellow; -} - -.skip-if-branch { - display: none; - margin-right: 10px; - position: relative; - padding: 0 4px; - background: #ccc; - color: white; -} -.missing-if-branch .typ, .skip-if-branch .typ { - color: inherit !important; -} -.coverage-summary { - border-collapse: collapse; - width: 100%; -} -.coverage-summary tr { border-bottom: 1px solid #bbb; } -.keyline-all { border: 1px solid #ddd; } -.coverage-summary td, .coverage-summary th { padding: 10px; } -.coverage-summary tbody { border: 1px solid #bbb; } -.coverage-summary td { border-right: 1px solid #bbb; } -.coverage-summary td:last-child { border-right: none; } -.coverage-summary th { - text-align: left; - font-weight: normal; - white-space: nowrap; -} -.coverage-summary th.file { border-right: none !important; } -.coverage-summary th.pct { } -.coverage-summary th.pic, -.coverage-summary th.abs, -.coverage-summary td.pct, -.coverage-summary td.abs { text-align: right; } -.coverage-summary td.file { white-space: nowrap; } -.coverage-summary td.pic { min-width: 120px !important; } -.coverage-summary tfoot td { } - -.coverage-summary .sorter { - height: 10px; - width: 7px; - display: inline-block; - margin-left: 0.5em; - background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; -} -.coverage-summary .sorted .sorter { - background-position: 0 -20px; -} -.coverage-summary .sorted-desc .sorter { - background-position: 0 -10px; -} -.status-line { height: 10px; } -/* dark red */ -.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } -.low .chart { border:1px solid #C21F39 } -/* medium red */ -.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } -/* light red */ -.low, .cline-no { background:#FCE1E5 } -/* light green */ -.high, .cline-yes { background:rgb(230,245,208) } -/* medium green */ -.cstat-yes { background:rgb(161,215,106) } -/* dark green */ -.status-line.high, .high .cover-fill { background:rgb(77,146,33) } -.high .chart { border:1px solid rgb(77,146,33) } -/* dark yellow (gold) */ -.medium .chart { border:1px solid #f9cd0b; } -.status-line.medium, .medium .cover-fill { background: #f9cd0b; } -/* light yellow */ -.medium { background: #fff4c2; } -/* light gray */ -span.cline-neutral { background: #eaeaea; } - -.cbranch-no { background: yellow !important; color: #111; } - -.cstat-skip { background: #ddd; color: #111; } -.fstat-skip { background: #ddd; color: #111 !important; } -.cbranch-skip { background: #ddd !important; color: #111; } - - -.cover-fill, .cover-empty { - display:inline-block; - height: 12px; -} -.chart { - line-height: 0; -} -.cover-empty { - background: white; -} -.cover-full { - border-right: none !important; -} -pre.prettyprint { - border: none !important; - padding: 0 !important; - margin: 0 !important; -} -.com { color: #999 !important; } -.ignore-none { color: #999; font-weight: normal; } - -.wrapper { - min-height: 100%; - height: auto !important; - height: 100%; - margin: 0 auto -48px; -} -.footer, .push { - height: 48px; -} diff --git a/coverage/coverage-final.json b/coverage/coverage-final.json deleted file mode 100644 index 363de23..0000000 --- a/coverage/coverage-final.json +++ /dev/null @@ -1,13 +0,0 @@ -{ -"contracts/governance/Operator.sol":{"l":{"29":208,"30":203,"37":2,"44":2,"55":59,"57":57,"58":2,"60":57,"62":57,"63":65,"64":65,"66":57},"path":"/home/node/project/contracts/governance/Operator.sol","s":{"1":208,"2":2,"3":2,"4":59,"5":57,"6":57,"7":57,"8":65,"9":65,"10":57},"b":{"1":[203,5],"2":[57,2]},"f":{"1":208,"2":2,"3":2,"4":59},"fnMap":{"1":{"name":"onlyOperator","line":28,"loc":{"start":{"line":28,"column":2},"end":{"line":28,"column":23}}},"2":{"name":"operatorCount","line":36,"loc":{"start":{"line":36,"column":2},"end":{"line":36,"column":56}}},"3":{"name":"operatorAddress","line":43,"loc":{"start":{"line":43,"column":2},"end":{"line":43,"column":75}}},"4":{"name":"defineOperators","line":53,"loc":{"start":{"line":53,"column":19},"end":{"line":54,"column":3}}}},"statementMap":{"1":{"start":{"line":29,"column":4},"end":{"line":29,"column":47}},"2":{"start":{"line":37,"column":4},"end":{"line":37,"column":27}},"3":{"start":{"line":44,"column":4},"end":{"line":44,"column":33}},"4":{"start":{"line":55,"column":4},"end":{"line":55,"column":54}},"5":{"start":{"line":57,"column":4},"end":{"line":57,"column":1305}},"6":{"start":{"line":60,"column":4},"end":{"line":60,"column":43}},"7":{"start":{"line":62,"column":4},"end":{"line":62,"column":1450}},"8":{"start":{"line":63,"column":6},"end":{"line":63,"column":52}},"9":{"start":{"line":64,"column":6},"end":{"line":64,"column":46}},"10":{"start":{"line":66,"column":4},"end":{"line":66,"column":25}}},"branchMap":{"1":{"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}}]},"2":{"line":55,"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":55,"column":4}},{"start":{"line":55,"column":4},"end":{"line":55,"column":4}}]}}}, -"contracts/governance/Ownable.sol":{"l":{"24":61,"31":61,"32":59,"39":0,"40":0,"48":0,"56":0,"57":0,"58":0},"path":"/home/node/project/contracts/governance/Ownable.sol","s":{"1":61,"2":61,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0},"b":{"1":[59,2],"2":[0,0]},"f":{"1":61,"2":61,"3":0,"4":0,"5":0},"fnMap":{"1":{"name":"constructor","line":23,"loc":{"start":{"line":23,"column":2},"end":{"line":23,"column":22}}},"2":{"name":"onlyOwner","line":30,"loc":{"start":{"line":30,"column":2},"end":{"line":30,"column":22}}},"3":{"name":"renounceOwnership","line":38,"loc":{"start":{"line":38,"column":46},"end":{"line":38,"column":3}}},"4":{"name":"transferOwnership","line":47,"loc":{"start":{"line":47,"column":63},"end":{"line":47,"column":3}}},"5":{"name":"_transferOwnership","line":55,"loc":{"start":{"line":55,"column":2},"end":{"line":55,"column":57}}}},"statementMap":{"1":{"start":{"line":24,"column":4},"end":{"line":24,"column":21}},"2":{"start":{"line":31,"column":4},"end":{"line":31,"column":31}},"3":{"start":{"line":39,"column":4},"end":{"line":39,"column":34}},"4":{"start":{"line":40,"column":4},"end":{"line":40,"column":21}},"5":{"start":{"line":48,"column":4},"end":{"line":48,"column":32}},"6":{"start":{"line":56,"column":4},"end":{"line":56,"column":35}},"7":{"start":{"line":57,"column":4},"end":{"line":57,"column":47}},"8":{"start":{"line":58,"column":4},"end":{"line":58,"column":20}}},"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":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/interface/IERC20.sol":{"l":{},"path":"/home/node/project/contracts/interface/IERC20.sol","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}}, -"contracts/interface/IRouter.sol":{"l":{},"path":"/home/node/project/contracts/interface/IRouter.sol","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}}, -"contracts/interface/IUserRegistry.sol":{"l":{},"path":"/home/node/project/contracts/interface/IUserRegistry.sol","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}}, -"contracts/math/SafeMath.sol":{"l":{"17":0,"18":0,"21":0,"22":0,"23":0,"33":0,"40":9,"41":9,"48":7,"49":7,"50":7},"path":"/home/node/project/contracts/math/SafeMath.sol","s":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":9,"8":9,"9":7,"10":7,"11":7},"b":{"1":[0,0],"2":[0,0],"3":[9,0],"4":[7,0]},"f":{"1":0,"2":0,"3":9,"4":7},"fnMap":{"1":{"name":"mul","line":13,"loc":{"start":{"line":13,"column":2},"end":{"line":13,"column":70}}},"2":{"name":"div","line":29,"loc":{"start":{"line":29,"column":2},"end":{"line":29,"column":68}}},"3":{"name":"sub","line":39,"loc":{"start":{"line":39,"column":2},"end":{"line":39,"column":68}}},"4":{"name":"add","line":47,"loc":{"start":{"line":47,"column":2},"end":{"line":47,"column":70}}}},"statementMap":{"1":{"start":{"line":17,"column":4},"end":{"line":17,"column":495}},"2":{"start":{"line":18,"column":6},"end":{"line":18,"column":14}},"3":{"start":{"line":21,"column":4},"end":{"line":21,"column":12}},"4":{"start":{"line":22,"column":4},"end":{"line":22,"column":21}},"5":{"start":{"line":23,"column":4},"end":{"line":23,"column":12}},"6":{"start":{"line":33,"column":4},"end":{"line":33,"column":16}},"7":{"start":{"line":40,"column":4},"end":{"line":40,"column":17}},"8":{"start":{"line":41,"column":4},"end":{"line":41,"column":16}},"9":{"start":{"line":48,"column":4},"end":{"line":48,"column":12}},"10":{"start":{"line":49,"column":4},"end":{"line":49,"column":17}},"11":{"start":{"line":50,"column":4},"end":{"line":50,"column":12}}},"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}}]},"2":{"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}}]},"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":49,"type":"if","locations":[{"start":{"line":49,"column":4},"end":{"line":49,"column":4}},{"start":{"line":49,"column":4},"end":{"line":49,"column":4}}]}}}, -"contracts/registry/UserRegistry.sol":{"l":{"41":49,"42":112,"50":4,"57":10,"64":3,"65":3,"66":3,"68":0,"75":7,"82":15,"91":4,"98":4,"105":3,"114":3,"123":1,"124":2,"134":86,"135":82,"136":78,"138":78,"147":30,"148":28,"149":54,"159":3,"168":1,"169":3,"177":3,"184":3,"185":3,"186":1,"193":14,"194":10,"195":8,"202":9,"203":5,"204":3,"213":5,"214":8,"224":3,"225":4,"237":33,"238":29,"239":29,"250":3,"251":4,"261":7,"262":3,"273":3,"274":4,"284":117,"285":115,"286":115,"288":115,"289":115,"296":10,"297":10,"298":6,"299":6,"307":10},"path":"/home/node/project/contracts/registry/UserRegistry.sol","s":{"1":49,"2":112,"3":4,"4":10,"5":3,"6":3,"7":3,"8":0,"9":7,"10":15,"11":4,"12":4,"13":3,"14":3,"15":1,"16":2,"17":86,"18":82,"19":78,"20":78,"21":30,"22":28,"23":54,"24":3,"25":1,"26":3,"27":3,"28":3,"29":3,"30":1,"31":14,"32":10,"33":8,"34":9,"35":5,"36":3,"37":5,"38":8,"39":3,"40":4,"41":33,"42":29,"43":29,"44":3,"45":4,"46":7,"47":3,"48":3,"49":4,"50":117,"51":115,"52":115,"53":115,"54":115,"55":10,"56":10,"57":6,"58":10},"b":{"1":[3,0],"2":[82,4],"3":[78,4],"4":[28,2],"5":[1,2],"6":[10,4],"7":[8,2],"8":[5,4],"9":[3,2],"10":[29,4],"11":[3,4],"12":[115,2],"13":[6,4]},"f":{"1":49,"2":4,"3":10,"4":3,"5":7,"6":15,"7":4,"8":4,"9":3,"10":3,"11":1,"12":86,"13":30,"14":3,"15":1,"16":3,"17":3,"18":14,"19":9,"20":5,"21":3,"22":33,"23":3,"24":7,"25":3,"26":117,"27":10,"28":10},"fnMap":{"1":{"name":"constructor","line":40,"loc":{"start":{"line":40,"column":2},"end":{"line":40,"column":74}}},"2":{"name":"userCount","line":49,"loc":{"start":{"line":49,"column":2},"end":{"line":49,"column":61}}},"3":{"name":"userId","line":56,"loc":{"start":{"line":56,"column":2},"end":{"line":56,"column":74}}},"4":{"name":"validUserId","line":63,"loc":{"start":{"line":63,"column":2},"end":{"line":63,"column":79}}},"5":{"name":"validUntilTime","line":74,"loc":{"start":{"line":74,"column":2},"end":{"line":74,"column":81}}},"6":{"name":"suspended","line":81,"loc":{"start":{"line":81,"column":2},"end":{"line":81,"column":73}}},"7":{"name":"extended","line":88,"loc":{"start":{"line":88,"column":2},"end":{"line":90,"column":3}}},"8":{"name":"isAddressValid","line":97,"loc":{"start":{"line":97,"column":2},"end":{"line":97,"column":79}}},"9":{"name":"isValid","line":104,"loc":{"start":{"line":104,"column":2},"end":{"line":104,"column":71}}},"10":{"name":"registerUser","line":112,"loc":{"start":{"line":112,"column":31},"end":{"line":113,"column":3}}},"11":{"name":"registerManyUsers","line":121,"loc":{"start":{"line":121,"column":31},"end":{"line":122,"column":3}}},"12":{"name":"attachAddress","line":132,"loc":{"start":{"line":132,"column":31},"end":{"line":133,"column":3}}},"13":{"name":"attachManyAddresses","line":145,"loc":{"start":{"line":145,"column":31},"end":{"line":146,"column":3}}},"14":{"name":"detachAddress","line":157,"loc":{"start":{"line":157,"column":31},"end":{"line":158,"column":3}}},"15":{"name":"detachManyAddresses","line":166,"loc":{"start":{"line":166,"column":31},"end":{"line":167,"column":3}}},"16":{"name":"detachSelf","line":176,"loc":{"start":{"line":176,"column":2},"end":{"line":176,"column":39}}},"17":{"name":"detachSelfAddress","line":183,"loc":{"start":{"line":183,"column":2},"end":{"line":183,"column":62}}},"18":{"name":"suspendUser","line":192,"loc":{"start":{"line":192,"column":67},"end":{"line":192,"column":3}}},"19":{"name":"unsuspendUser","line":201,"loc":{"start":{"line":201,"column":69},"end":{"line":201,"column":3}}},"20":{"name":"suspendManyUsers","line":211,"loc":{"start":{"line":211,"column":31},"end":{"line":212,"column":3}}},"21":{"name":"unsuspendManyUsers","line":222,"loc":{"start":{"line":222,"column":31},"end":{"line":223,"column":3}}},"22":{"name":"updateUser","line":235,"loc":{"start":{"line":235,"column":48},"end":{"line":236,"column":3}}},"23":{"name":"updateManyUsers","line":248,"loc":{"start":{"line":248,"column":48},"end":{"line":249,"column":3}}},"24":{"name":"updateUserExtended","line":259,"loc":{"start":{"line":259,"column":31},"end":{"line":260,"column":3}}},"25":{"name":"updateManyUsersExtended","line":271,"loc":{"start":{"line":271,"column":47},"end":{"line":272,"column":3}}},"26":{"name":"registerUserInternal","line":281,"loc":{"start":{"line":281,"column":2},"end":{"line":283,"column":3}}},"27":{"name":"detachAddressInternal","line":295,"loc":{"start":{"line":295,"column":2},"end":{"line":295,"column":59}}},"28":{"name":"isValidInternal","line":305,"loc":{"start":{"line":305,"column":2},"end":{"line":305,"column":74}}}},"statementMap":{"1":{"start":{"line":41,"column":4},"end":{"line":41,"column":1016}},"2":{"start":{"line":42,"column":6},"end":{"line":42,"column":57}},"3":{"start":{"line":50,"column":4},"end":{"line":50,"column":21}},"4":{"start":{"line":57,"column":4},"end":{"line":57,"column":33}},"5":{"start":{"line":64,"column":4},"end":{"line":64,"column":50}},"6":{"start":{"line":65,"column":4},"end":{"line":65,"column":1689}},"7":{"start":{"line":66,"column":6},"end":{"line":66,"column":26}},"8":{"start":{"line":68,"column":4},"end":{"line":68,"column":12}},"9":{"start":{"line":75,"column":4},"end":{"line":75,"column":40}},"10":{"start":{"line":82,"column":4},"end":{"line":82,"column":35}},"11":{"start":{"line":91,"column":4},"end":{"line":91,"column":40}},"12":{"start":{"line":98,"column":4},"end":{"line":98,"column":57}},"13":{"start":{"line":105,"column":4},"end":{"line":105,"column":42}},"14":{"start":{"line":114,"column":4},"end":{"line":114,"column":50}},"15":{"start":{"line":123,"column":4},"end":{"line":123,"column":3080}},"16":{"start":{"line":124,"column":6},"end":{"line":124,"column":57}},"17":{"start":{"line":134,"column":4},"end":{"line":134,"column":56}},"18":{"start":{"line":135,"column":4},"end":{"line":135,"column":47}},"19":{"start":{"line":136,"column":4},"end":{"line":136,"column":35}},"20":{"start":{"line":138,"column":4},"end":{"line":138,"column":43}},"21":{"start":{"line":147,"column":4},"end":{"line":147,"column":56}},"22":{"start":{"line":148,"column":4},"end":{"line":148,"column":3793}},"23":{"start":{"line":149,"column":6},"end":{"line":149,"column":46}},"24":{"start":{"line":159,"column":4},"end":{"line":159,"column":34}},"25":{"start":{"line":168,"column":4},"end":{"line":168,"column":4304}},"26":{"start":{"line":169,"column":6},"end":{"line":169,"column":41}},"27":{"start":{"line":177,"column":4},"end":{"line":177,"column":36}},"28":{"start":{"line":184,"column":4},"end":{"line":184,"column":51}},"29":{"start":{"line":185,"column":4},"end":{"line":185,"column":58}},"30":{"start":{"line":186,"column":4},"end":{"line":186,"column":34}},"31":{"start":{"line":193,"column":4},"end":{"line":193,"column":56}},"32":{"start":{"line":194,"column":4},"end":{"line":194,"column":45}},"33":{"start":{"line":195,"column":4},"end":{"line":195,"column":34}},"34":{"start":{"line":202,"column":4},"end":{"line":202,"column":56}},"35":{"start":{"line":203,"column":4},"end":{"line":203,"column":44}},"36":{"start":{"line":204,"column":4},"end":{"line":204,"column":35}},"37":{"start":{"line":213,"column":4},"end":{"line":213,"column":5525}},"38":{"start":{"line":214,"column":6},"end":{"line":214,"column":29}},"39":{"start":{"line":224,"column":4},"end":{"line":224,"column":5757}},"40":{"start":{"line":225,"column":6},"end":{"line":225,"column":31}},"41":{"start":{"line":237,"column":4},"end":{"line":237,"column":56}},"42":{"start":{"line":238,"column":4},"end":{"line":238,"column":50}},"43":{"start":{"line":239,"column":4},"end":{"line":239,"column":40}},"44":{"start":{"line":250,"column":4},"end":{"line":250,"column":6359}},"45":{"start":{"line":251,"column":6},"end":{"line":251,"column":57}},"46":{"start":{"line":261,"column":4},"end":{"line":261,"column":56}},"47":{"start":{"line":262,"column":4},"end":{"line":262,"column":41}},"48":{"start":{"line":273,"column":4},"end":{"line":273,"column":6958}},"49":{"start":{"line":274,"column":6},"end":{"line":274,"column":50}},"50":{"start":{"line":284,"column":4},"end":{"line":284,"column":47}},"51":{"start":{"line":285,"column":4},"end":{"line":285,"column":53}},"52":{"start":{"line":286,"column":4},"end":{"line":286,"column":38}},"53":{"start":{"line":288,"column":4},"end":{"line":288,"column":35}},"54":{"start":{"line":289,"column":4},"end":{"line":289,"column":46}},"55":{"start":{"line":296,"column":4},"end":{"line":296,"column":50}},"56":{"start":{"line":297,"column":4},"end":{"line":297,"column":38}},"57":{"start":{"line":298,"column":4},"end":{"line":298,"column":49}},"58":{"start":{"line":307,"column":4},"end":{"line":307,"column":55}}},"branchMap":{"1":{"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}}]},"2":{"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}}]},"3":{"line":135,"type":"if","locations":[{"start":{"line":135,"column":4},"end":{"line":135,"column":4}},{"start":{"line":135,"column":4},"end":{"line":135,"column":4}}]},"4":{"line":147,"type":"if","locations":[{"start":{"line":147,"column":4},"end":{"line":147,"column":4}},{"start":{"line":147,"column":4},"end":{"line":147,"column":4}}]},"5":{"line":185,"type":"if","locations":[{"start":{"line":185,"column":4},"end":{"line":185,"column":4}},{"start":{"line":185,"column":4},"end":{"line":185,"column":4}}]},"6":{"line":193,"type":"if","locations":[{"start":{"line":193,"column":4},"end":{"line":193,"column":4}},{"start":{"line":193,"column":4},"end":{"line":193,"column":4}}]},"7":{"line":194,"type":"if","locations":[{"start":{"line":194,"column":4},"end":{"line":194,"column":4}},{"start":{"line":194,"column":4},"end":{"line":194,"column":4}}]},"8":{"line":202,"type":"if","locations":[{"start":{"line":202,"column":4},"end":{"line":202,"column":4}},{"start":{"line":202,"column":4},"end":{"line":202,"column":4}}]},"9":{"line":203,"type":"if","locations":[{"start":{"line":203,"column":4},"end":{"line":203,"column":4}},{"start":{"line":203,"column":4},"end":{"line":203,"column":4}}]},"10":{"line":237,"type":"if","locations":[{"start":{"line":237,"column":4},"end":{"line":237,"column":4}},{"start":{"line":237,"column":4},"end":{"line":237,"column":4}}]},"11":{"line":261,"type":"if","locations":[{"start":{"line":261,"column":4},"end":{"line":261,"column":4}},{"start":{"line":261,"column":4},"end":{"line":261,"column":4}}]},"12":{"line":284,"type":"if","locations":[{"start":{"line":284,"column":4},"end":{"line":284,"column":4}},{"start":{"line":284,"column":4},"end":{"line":284,"column":4}}]},"13":{"line":297,"type":"if","locations":[{"start":{"line":297,"column":4},"end":{"line":297,"column":4}},{"start":{"line":297,"column":4},"end":{"line":297,"column":4}}]}}}, -"contracts/routing/BasicRouter.sol":{"l":{"34":0,"35":0,"39":0,"43":0,"47":0,"51":0,"55":0,"59":0,"66":0,"67":0,"77":0,"78":0,"79":0,"85":0,"86":0,"88":0,"95":0,"96":0,"105":0,"106":0,"107":0,"109":0,"111":0,"112":0,"113":0,"114":0,"115":0,"117":0,"120":0},"path":"/home/node/project/contracts/routing/BasicRouter.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],"5":[0,0],"6":[0,0]},"f":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0},"fnMap":{"1":{"name":"configNotLocked","line":33,"loc":{"start":{"line":33,"column":2},"end":{"line":33,"column":28}}},"2":{"name":null,"line":38,"loc":{"start":{"line":38,"column":2},"end":{"line":38,"column":37}}},"3":{"name":null,"line":42,"loc":{"start":{"line":42,"column":2},"end":{"line":42,"column":38}}},"4":{"name":"destinations","line":46,"loc":{"start":{"line":46,"column":2},"end":{"line":46,"column":88}}},"5":{"name":"activeDestination","line":50,"loc":{"start":{"line":50,"column":2},"end":{"line":50,"column":75}}},"6":{"name":"destinationAbi","line":54,"loc":{"start":{"line":54,"column":2},"end":{"line":54,"column":80}}},"7":{"name":"isConfigLocked","line":58,"loc":{"start":{"line":58,"column":2},"end":{"line":58,"column":63}}},"8":{"name":"findDestination","line":65,"loc":{"start":{"line":65,"column":2},"end":{"line":65,"column":81}}},"9":{"name":"setRoute","line":75,"loc":{"start":{"line":75,"column":44},"end":{"line":76,"column":3}}},"10":{"name":"switchDestination","line":83,"loc":{"start":{"line":83,"column":19},"end":{"line":84,"column":3}}},"11":{"name":"lockConfig","line":94,"loc":{"start":{"line":94,"column":64},"end":{"line":94,"column":3}}},"12":{"name":"callPayable","line":103,"loc":{"start":{"line":103,"column":2},"end":{"line":104,"column":3}}}},"statementMap":{"1":{"start":{"line":34,"column":4},"end":{"line":34,"column":34}},"2":{"start":{"line":39,"column":4},"end":{"line":39,"column":47}},"3":{"start":{"line":43,"column":4},"end":{"line":43,"column":47}},"4":{"start":{"line":47,"column":4},"end":{"line":47,"column":39}},"5":{"start":{"line":51,"column":4},"end":{"line":51,"column":44}},"6":{"start":{"line":55,"column":4},"end":{"line":55,"column":41}},"7":{"start":{"line":59,"column":4},"end":{"line":59,"column":24}},"8":{"start":{"line":66,"column":4},"end":{"line":66,"column":40}},"9":{"start":{"line":67,"column":4},"end":{"line":67,"column":1721}},"10":{"start":{"line":77,"column":4},"end":{"line":77,"column":61}},"11":{"start":{"line":78,"column":4},"end":{"line":78,"column":62}},"12":{"start":{"line":79,"column":4},"end":{"line":79,"column":15}},"13":{"start":{"line":85,"column":4},"end":{"line":85,"column":76}},"14":{"start":{"line":86,"column":4},"end":{"line":86,"column":57}},"15":{"start":{"line":88,"column":4},"end":{"line":88,"column":57}},"16":{"start":{"line":95,"column":4},"end":{"line":95,"column":23}},"17":{"start":{"line":96,"column":4},"end":{"line":96,"column":23}},"18":{"start":{"line":105,"column":4},"end":{"line":105,"column":33}},"19":{"start":{"line":106,"column":4},"end":{"line":106,"column":50}},"20":{"start":{"line":107,"column":4},"end":{"line":107,"column":45}},"21":{"start":{"line":109,"column":4},"end":{"line":109,"column":59}},"22":{"start":{"line":111,"column":4},"end":{"line":111,"column":16}},"23":{"start":{"line":112,"column":4},"end":{"line":112,"column":23}},"24":{"start":{"line":113,"column":4},"end":{"line":113,"column":3080}},"25":{"start":{"line":114,"column":6},"end":{"line":114,"column":77}},"26":{"start":{"line":115,"column":6},"end":{"line":115,"column":69}},"27":{"start":{"line":117,"column":6},"end":{"line":117,"column":63}},"28":{"start":{"line":120,"column":4},"end":{"line":120,"column":27}}},"branchMap":{"1":{"line":34,"type":"if","locations":[{"start":{"line":34,"column":4},"end":{"line":34,"column":4}},{"start":{"line":34,"column":4},"end":{"line":34,"column":4}}]},"2":{"line":85,"type":"if","locations":[{"start":{"line":85,"column":4},"end":{"line":85,"column":4}},{"start":{"line":85,"column":4},"end":{"line":85,"column":4}}]},"3":{"line":105,"type":"if","locations":[{"start":{"line":105,"column":4},"end":{"line":105,"column":4}},{"start":{"line":105,"column":4},"end":{"line":105,"column":4}}]},"4":{"line":107,"type":"if","locations":[{"start":{"line":107,"column":4},"end":{"line":107,"column":4}},{"start":{"line":107,"column":4},"end":{"line":107,"column":4}}]},"5":{"line":113,"type":"if","locations":[{"start":{"line":113,"column":4},"end":{"line":113,"column":4}},{"start":{"line":113,"column":4},"end":{"line":113,"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}}]}}}, -"contracts/routing/DynamicRouter.sol":{"l":{"29":0,"33":0,"37":0,"38":0,"40":0,"41":0,"42":0,"43":0,"45":0,"46":0,"47":0,"50":0,"51":0,"53":0,"54":0,"55":0,"56":0,"61":0,"69":0,"72":0,"73":0,"75":0},"path":"/home/node/project/contracts/routing/DynamicRouter.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},"b":{"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0]},"f":{"1":0,"2":0,"3":0,"4":0},"fnMap":{"1":{"name":"maxBalances","line":28,"loc":{"start":{"line":28,"column":2},"end":{"line":28,"column":78}}},"2":{"name":"weights","line":32,"loc":{"start":{"line":32,"column":2},"end":{"line":32,"column":74}}},"3":{"name":"findDestination","line":36,"loc":{"start":{"line":36,"column":2},"end":{"line":36,"column":82}}},"4":{"name":"setDistribution","line":68,"loc":{"start":{"line":68,"column":35},"end":{"line":68,"column":18}}}},"statementMap":{"1":{"start":{"line":29,"column":4},"end":{"line":29,"column":45}},"2":{"start":{"line":33,"column":4},"end":{"line":33,"column":41}},"3":{"start":{"line":37,"column":4},"end":{"line":37,"column":61}},"4":{"start":{"line":38,"column":4},"end":{"line":38,"column":40}},"5":{"start":{"line":40,"column":4},"end":{"line":40,"column":44}},"6":{"start":{"line":41,"column":4},"end":{"line":41,"column":44}},"7":{"start":{"line":42,"column":4},"end":{"line":42,"column":1156}},"8":{"start":{"line":43,"column":6},"end":{"line":43,"column":49}},"9":{"start":{"line":45,"column":6},"end":{"line":45,"column":1271}},"10":{"start":{"line":46,"column":8},"end":{"line":46,"column":40}},"11":{"start":{"line":50,"column":5},"end":{"line":50,"column":1375}},"12":{"start":{"line":51,"column":8},"end":{"line":51,"column":1503}},"13":{"start":{"line":53,"column":8},"end":{"line":53,"column":62}},"14":{"start":{"line":54,"column":8},"end":{"line":54,"column":1602}},"15":{"start":{"line":55,"column":10},"end":{"line":55,"column":45}},"16":{"start":{"line":56,"column":10},"end":{"line":56,"column":42}},"17":{"start":{"line":61,"column":4},"end":{"line":61,"column":30}},"18":{"start":{"line":69,"column":4},"end":{"line":69,"column":2040}},"19":{"start":{"line":72,"column":4},"end":{"line":72,"column":64}},"20":{"start":{"line":73,"column":4},"end":{"line":73,"column":52}},"21":{"start":{"line":75,"column":4},"end":{"line":75,"column":15}}},"branchMap":{"1":{"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}}]},"2":{"line":50,"type":"if","locations":[{"start":{"line":50,"column":5},"end":{"line":50,"column":5}},{"start":{"line":50,"column":5},"end":{"line":50,"column":5}}]},"3":{"line":54,"type":"if","locations":[{"start":{"line":54,"column":8},"end":{"line":54,"column":8}},{"start":{"line":54,"column":8},"end":{"line":54,"column":8}}]},"4":{"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}}]}}}, -"contracts/routing/ScheduledRouter.sol":{"l":{"28":0,"29":0,"33":0,"34":0,"35":0,"37":0,"42":0,"43":0,"44":0},"path":"/home/node/project/contracts/routing/ScheduledRouter.sol","s":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0},"b":{"1":[0,0],"2":[0,0]},"f":{"1":0,"2":0,"3":0},"fnMap":{"1":{"name":"schedule","line":27,"loc":{"start":{"line":27,"column":2},"end":{"line":27,"column":75}}},"2":{"name":"findDestination","line":32,"loc":{"start":{"line":32,"column":2},"end":{"line":32,"column":90}}},"3":{"name":"setRouteSchedule","line":41,"loc":{"start":{"line":41,"column":35},"end":{"line":41,"column":18}}}},"statementMap":{"1":{"start":{"line":28,"column":4},"end":{"line":28,"column":50}},"2":{"start":{"line":29,"column":4},"end":{"line":29,"column":47}},"3":{"start":{"line":33,"column":4},"end":{"line":33,"column":50}},"4":{"start":{"line":34,"column":4},"end":{"line":34,"column":818}},"5":{"start":{"line":35,"column":6},"end":{"line":35,"column":23}},"6":{"start":{"line":37,"column":4},"end":{"line":37,"column":41}},"7":{"start":{"line":42,"column":4},"end":{"line":42,"column":55}},"8":{"start":{"line":43,"column":4},"end":{"line":43,"column":50}},"9":{"start":{"line":44,"column":4},"end":{"line":44,"column":36}}},"branchMap":{"1":{"line":34,"type":"if","locations":[{"start":{"line":34,"column":4},"end":{"line":34,"column":4}},{"start":{"line":34,"column":4},"end":{"line":34,"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}}]}}}, -"contracts/token/DummyToken.sol":{"l":{"35":0,"36":0,"37":0,"38":0,"39":0,"41":0,"42":0,"46":0,"50":0,"54":0,"58":0,"62":0,"66":0,"70":0,"74":0,"78":0,"84":0,"88":0,"89":0,"91":0,"92":0,"93":0,"94":0,"100":0,"101":0,"102":0,"104":0,"105":0,"106":0,"107":0,"108":0,"112":0,"113":0,"114":0,"120":0,"122":0,"123":0,"129":0,"130":0,"131":0,"133":0,"135":0,"136":0,"140":0,"141":0,"142":0,"146":0,"150":0,"154":0,"155":0,"159":0,"163":0,"167":0,"168":0,"170":0,"171":0,"172":0,"176":0,"177":0},"path":"/home/node/project/contracts/token/DummyToken.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,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"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,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0},"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]},"f":{"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},"fnMap":{"1":{"name":"constructor","line":29,"loc":{"start":{"line":29,"column":2},"end":{"line":34,"column":3}}},"2":{"name":"name","line":45,"loc":{"start":{"line":45,"column":2},"end":{"line":45,"column":62}}},"3":{"name":"symbol","line":49,"loc":{"start":{"line":49,"column":2},"end":{"line":49,"column":64}}},"4":{"name":"decimal","line":53,"loc":{"start":{"line":53,"column":2},"end":{"line":53,"column":59}}},"5":{"name":"totalSupply","line":57,"loc":{"start":{"line":57,"column":2},"end":{"line":57,"column":63}}},"6":{"name":"balanceOf","line":61,"loc":{"start":{"line":61,"column":2},"end":{"line":61,"column":75}}},"7":{"name":"rate","line":65,"loc":{"start":{"line":65,"column":2},"end":{"line":65,"column":47}}},"8":{"name":"rateAt","line":69,"loc":{"start":{"line":69,"column":2},"end":{"line":69,"column":49}}},"9":{"name":"interest","line":73,"loc":{"start":{"line":73,"column":2},"end":{"line":73,"column":51}}},"10":{"name":"twin","line":77,"loc":{"start":{"line":77,"column":2},"end":{"line":77,"column":46}}},"11":{"name":"allowance","line":81,"loc":{"start":{"line":81,"column":2},"end":{"line":83,"column":3}}},"12":{"name":"transfer","line":87,"loc":{"start":{"line":87,"column":2},"end":{"line":87,"column":79}}},"13":{"name":"transferFrom","line":97,"loc":{"start":{"line":97,"column":2},"end":{"line":99,"column":3}}},"14":{"name":"approve","line":111,"loc":{"start":{"line":111,"column":2},"end":{"line":111,"column":83}}},"15":{"name":"increaseApproval","line":117,"loc":{"start":{"line":117,"column":2},"end":{"line":119,"column":3}}},"16":{"name":"decreaseApproval","line":126,"loc":{"start":{"line":126,"column":2},"end":{"line":128,"column":3}}},"17":{"name":"updateToken","line":139,"loc":{"start":{"line":139,"column":2},"end":{"line":139,"column":91}}},"18":{"name":"updateSupply","line":145,"loc":{"start":{"line":145,"column":2},"end":{"line":145,"column":52}}},"19":{"name":"updateBalance","line":149,"loc":{"start":{"line":149,"column":2},"end":{"line":149,"column":65}}},"20":{"name":"updateRate","line":153,"loc":{"start":{"line":153,"column":2},"end":{"line":153,"column":43}}},"21":{"name":"updateTwin","line":158,"loc":{"start":{"line":158,"column":2},"end":{"line":158,"column":42}}},"22":{"name":"createTwin","line":162,"loc":{"start":{"line":162,"column":2},"end":{"line":162,"column":30}}},"23":{"name":"transferNoEvent","line":166,"loc":{"start":{"line":166,"column":2},"end":{"line":166,"column":77}}},"24":{"name":"transferTwin","line":175,"loc":{"start":{"line":175,"column":2},"end":{"line":175,"column":74}}}},"statementMap":{"1":{"start":{"line":35,"column":4},"end":{"line":35,"column":16}},"2":{"start":{"line":36,"column":4},"end":{"line":36,"column":20}},"3":{"start":{"line":37,"column":4},"end":{"line":37,"column":22}},"4":{"start":{"line":38,"column":4},"end":{"line":38,"column":30}},"5":{"start":{"line":39,"column":4},"end":{"line":39,"column":38}},"6":{"start":{"line":41,"column":4},"end":{"line":41,"column":12}},"7":{"start":{"line":42,"column":4},"end":{"line":42,"column":16}},"8":{"start":{"line":46,"column":4},"end":{"line":46,"column":16}},"9":{"start":{"line":50,"column":4},"end":{"line":50,"column":18}},"10":{"start":{"line":54,"column":4},"end":{"line":54,"column":19}},"11":{"start":{"line":58,"column":4},"end":{"line":58,"column":48}},"12":{"start":{"line":62,"column":4},"end":{"line":62,"column":52}},"13":{"start":{"line":66,"column":4},"end":{"line":66,"column":16}},"14":{"start":{"line":70,"column":4},"end":{"line":70,"column":18}},"15":{"start":{"line":74,"column":4},"end":{"line":74,"column":43}},"16":{"start":{"line":78,"column":4},"end":{"line":78,"column":16}},"17":{"start":{"line":84,"column":4},"end":{"line":84,"column":36}},"18":{"start":{"line":88,"column":4},"end":{"line":88,"column":29}},"19":{"start":{"line":89,"column":4},"end":{"line":89,"column":42}},"20":{"start":{"line":91,"column":4},"end":{"line":91,"column":58}},"21":{"start":{"line":92,"column":4},"end":{"line":92,"column":44}},"22":{"start":{"line":93,"column":4},"end":{"line":93,"column":42}},"23":{"start":{"line":94,"column":4},"end":{"line":94,"column":15}},"24":{"start":{"line":100,"column":4},"end":{"line":100,"column":29}},"25":{"start":{"line":101,"column":4},"end":{"line":101,"column":37}},"26":{"start":{"line":102,"column":4},"end":{"line":102,"column":48}},"27":{"start":{"line":104,"column":4},"end":{"line":104,"column":48}},"28":{"start":{"line":105,"column":4},"end":{"line":105,"column":44}},"29":{"start":{"line":106,"column":4},"end":{"line":106,"column":70}},"30":{"start":{"line":107,"column":4},"end":{"line":107,"column":37}},"31":{"start":{"line":108,"column":4},"end":{"line":108,"column":15}},"32":{"start":{"line":112,"column":4},"end":{"line":112,"column":41}},"33":{"start":{"line":113,"column":4},"end":{"line":113,"column":47}},"34":{"start":{"line":114,"column":4},"end":{"line":114,"column":15}},"35":{"start":{"line":120,"column":4},"end":{"line":120,"column":3026}},"36":{"start":{"line":122,"column":4},"end":{"line":122,"column":70}},"37":{"start":{"line":123,"column":4},"end":{"line":123,"column":15}},"38":{"start":{"line":129,"column":4},"end":{"line":129,"column":49}},"39":{"start":{"line":130,"column":4},"end":{"line":130,"column":3324}},"40":{"start":{"line":131,"column":6},"end":{"line":131,"column":38}},"41":{"start":{"line":133,"column":6},"end":{"line":133,"column":67}},"42":{"start":{"line":135,"column":4},"end":{"line":135,"column":70}},"43":{"start":{"line":136,"column":4},"end":{"line":136,"column":15}},"44":{"start":{"line":140,"column":4},"end":{"line":140,"column":16}},"45":{"start":{"line":141,"column":4},"end":{"line":141,"column":20}},"46":{"start":{"line":142,"column":4},"end":{"line":142,"column":22}},"47":{"start":{"line":146,"column":4},"end":{"line":146,"column":30}},"48":{"start":{"line":150,"column":4},"end":{"line":150,"column":30}},"49":{"start":{"line":154,"column":4},"end":{"line":154,"column":16}},"50":{"start":{"line":155,"column":4},"end":{"line":155,"column":16}},"51":{"start":{"line":159,"column":4},"end":{"line":159,"column":16}},"52":{"start":{"line":163,"column":4},"end":{"line":163,"column":65}},"53":{"start":{"line":167,"column":4},"end":{"line":167,"column":29}},"54":{"start":{"line":168,"column":4},"end":{"line":168,"column":42}},"55":{"start":{"line":170,"column":4},"end":{"line":170,"column":58}},"56":{"start":{"line":171,"column":4},"end":{"line":171,"column":44}},"57":{"start":{"line":172,"column":4},"end":{"line":172,"column":15}},"58":{"start":{"line":176,"column":4},"end":{"line":176,"column":40}},"59":{"start":{"line":177,"column":4},"end":{"line":177,"column":38}}},"branchMap":{"1":{"line":88,"type":"if","locations":[{"start":{"line":88,"column":4},"end":{"line":88,"column":4}},{"start":{"line":88,"column":4},"end":{"line":88,"column":4}}]},"2":{"line":89,"type":"if","locations":[{"start":{"line":89,"column":4},"end":{"line":89,"column":4}},{"start":{"line":89,"column":4},"end":{"line":89,"column":4}}]},"3":{"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}}]},"4":{"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}}]},"5":{"line":102,"type":"if","locations":[{"start":{"line":102,"column":4},"end":{"line":102,"column":4}},{"start":{"line":102,"column":4},"end":{"line":102,"column":4}}]},"6":{"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}}]},"7":{"line":167,"type":"if","locations":[{"start":{"line":167,"column":4},"end":{"line":167,"column":4}},{"start":{"line":167,"column":4},"end":{"line":167,"column":4}}]},"8":{"line":168,"type":"if","locations":[{"start":{"line":168,"column":4},"end":{"line":168,"column":4}},{"start":{"line":168,"column":4},"end":{"line":168,"column":4}}]},"9":{"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}}]}}}, -"contracts/token/ERC20Token.sol":{"l":{"30":17,"31":17,"32":17,"33":17,"34":17,"38":1,"42":1,"46":1,"50":2,"54":4,"60":1,"65":5,"66":5,"68":5,"69":5,"70":5,"71":5,"77":3,"78":3,"79":3,"81":1,"82":1,"83":1,"84":1,"85":1,"91":6,"92":6,"93":6,"99":1,"101":1,"102":1,"108":2,"109":2,"110":0,"112":2,"114":2,"115":2},"path":"/home/node/project/contracts/token/ERC20Token.sol","s":{"1":17,"2":17,"3":17,"4":17,"5":17,"6":1,"7":1,"8":1,"9":2,"10":4,"11":1,"12":5,"13":5,"14":5,"15":5,"16":5,"17":5,"18":3,"19":3,"20":3,"21":1,"22":1,"23":1,"24":1,"25":1,"26":6,"27":6,"28":6,"29":1,"30":1,"31":1,"32":2,"33":2,"34":0,"35":2,"36":2,"37":2},"b":{"1":[5,0],"2":[5,0],"3":[3,0],"4":[3,0],"5":[1,2],"6":[0,2]},"f":{"1":17,"2":1,"3":1,"4":1,"5":2,"6":4,"7":1,"8":5,"9":3,"10":6,"11":1,"12":2},"fnMap":{"1":{"name":"constructor","line":24,"loc":{"start":{"line":24,"column":2},"end":{"line":29,"column":3}}},"2":{"name":"name","line":37,"loc":{"start":{"line":37,"column":2},"end":{"line":37,"column":62}}},"3":{"name":"symbol","line":41,"loc":{"start":{"line":41,"column":2},"end":{"line":41,"column":64}}},"4":{"name":"decimal","line":45,"loc":{"start":{"line":45,"column":2},"end":{"line":45,"column":59}}},"5":{"name":"totalSupply","line":49,"loc":{"start":{"line":49,"column":2},"end":{"line":49,"column":63}}},"6":{"name":"balanceOf","line":53,"loc":{"start":{"line":53,"column":2},"end":{"line":53,"column":75}}},"7":{"name":"allowance","line":57,"loc":{"start":{"line":57,"column":2},"end":{"line":59,"column":3}}},"8":{"name":"transfer","line":63,"loc":{"start":{"line":63,"column":2},"end":{"line":64,"column":36}}},"9":{"name":"transferFrom","line":74,"loc":{"start":{"line":74,"column":2},"end":{"line":76,"column":3}}},"10":{"name":"approve","line":88,"loc":{"start":{"line":88,"column":2},"end":{"line":90,"column":3}}},"11":{"name":"increaseApproval","line":96,"loc":{"start":{"line":96,"column":2},"end":{"line":98,"column":3}}},"12":{"name":"decreaseApproval","line":105,"loc":{"start":{"line":105,"column":2},"end":{"line":107,"column":3}}}},"statementMap":{"1":{"start":{"line":30,"column":4},"end":{"line":30,"column":16}},"2":{"start":{"line":31,"column":4},"end":{"line":31,"column":20}},"3":{"start":{"line":32,"column":4},"end":{"line":32,"column":22}},"4":{"start":{"line":33,"column":4},"end":{"line":33,"column":30}},"5":{"start":{"line":34,"column":4},"end":{"line":34,"column":38}},"6":{"start":{"line":38,"column":4},"end":{"line":38,"column":16}},"7":{"start":{"line":42,"column":4},"end":{"line":42,"column":18}},"8":{"start":{"line":46,"column":4},"end":{"line":46,"column":19}},"9":{"start":{"line":50,"column":4},"end":{"line":50,"column":23}},"10":{"start":{"line":54,"column":4},"end":{"line":54,"column":27}},"11":{"start":{"line":60,"column":4},"end":{"line":60,"column":36}},"12":{"start":{"line":65,"column":4},"end":{"line":65,"column":29}},"13":{"start":{"line":66,"column":4},"end":{"line":66,"column":42}},"14":{"start":{"line":68,"column":4},"end":{"line":68,"column":58}},"15":{"start":{"line":69,"column":4},"end":{"line":69,"column":44}},"16":{"start":{"line":70,"column":4},"end":{"line":70,"column":42}},"17":{"start":{"line":71,"column":4},"end":{"line":71,"column":15}},"18":{"start":{"line":77,"column":4},"end":{"line":77,"column":29}},"19":{"start":{"line":78,"column":4},"end":{"line":78,"column":37}},"20":{"start":{"line":79,"column":4},"end":{"line":79,"column":48}},"21":{"start":{"line":81,"column":4},"end":{"line":81,"column":48}},"22":{"start":{"line":82,"column":4},"end":{"line":82,"column":44}},"23":{"start":{"line":83,"column":4},"end":{"line":83,"column":70}},"24":{"start":{"line":84,"column":4},"end":{"line":84,"column":37}},"25":{"start":{"line":85,"column":4},"end":{"line":85,"column":15}},"26":{"start":{"line":91,"column":4},"end":{"line":91,"column":41}},"27":{"start":{"line":92,"column":4},"end":{"line":92,"column":47}},"28":{"start":{"line":93,"column":4},"end":{"line":93,"column":15}},"29":{"start":{"line":99,"column":4},"end":{"line":99,"column":2581}},"30":{"start":{"line":101,"column":4},"end":{"line":101,"column":70}},"31":{"start":{"line":102,"column":4},"end":{"line":102,"column":15}},"32":{"start":{"line":108,"column":4},"end":{"line":108,"column":49}},"33":{"start":{"line":109,"column":4},"end":{"line":109,"column":2879}},"34":{"start":{"line":110,"column":6},"end":{"line":110,"column":38}},"35":{"start":{"line":112,"column":6},"end":{"line":112,"column":67}},"36":{"start":{"line":114,"column":4},"end":{"line":114,"column":70}},"37":{"start":{"line":115,"column":4},"end":{"line":115,"column":15}}},"branchMap":{"1":{"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}}]},"2":{"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}}]},"3":{"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}}]},"4":{"line":78,"type":"if","locations":[{"start":{"line":78,"column":4},"end":{"line":78,"column":4}},{"start":{"line":78,"column":4},"end":{"line":78,"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}}]},"6":{"line":109,"type":"if","locations":[{"start":{"line":109,"column":4},"end":{"line":109,"column":4}},{"start":{"line":109,"column":4},"end":{"line":109,"column":4}}]}}}} diff --git a/coverage/governance/Operator.sol.html b/coverage/governance/Operator.sol.html deleted file mode 100644 index 8a18569..0000000 --- a/coverage/governance/Operator.sol.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - Code coverage report for governance/Operator.sol - - - - - - - -
-
-

- all files / governance/ Operator.sol -

-
-
- 100% - Statements - 10/10 -
-
- 100% - Branches - 4/4 -
-
- 100% - Functions - 4/4 -
-
- 100% - Lines - 12/12 -
-
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -208× -203× -  -  -  -  -  -  - -  -  -  -  -  -  - -  -  -  -  -  -  -  -  -  -  -59× -  -57× - -  -57× -  -57× -65× -65× -  -57× -  -  - 
pragma solidity >=0.6.0 <0.7.0;
- 
-import "./Ownable.sol";
- 
-/**
- * @title Operator
- * @dev The Operator contract contains list of addresses authorized to specific operations
- *
- * @author Cyril Lapinte - <cyril.lapinte@gmail.com>
- *
- * Error messages
- * OP01: Message sender must be an authority
- */
-contract Operator is Ownable {
- 
-  mapping (address => uint8) operatorIds;
-  address[] public operators;
- 
-  event OperatorsCleared(uint256 size);
-  event OperatorDefined(
-    bytes32 name,
-    address _address
-  );
- 
-  /**
-   * @dev Throws if called by any account other than the operator
-   */
-  modifier onlyOperator {
-    require(operatorIds[msg.sender] > 0, "OP01");
-    _;
-  }
- 
-  /**
-   * @dev return the count of operator
-   */
-  function operatorCount() public view returns (uint256) {
-    return operators.length;
-  }
- 
-  /**
-   * @dev return the address associated to the _operatorId
-   */
-  function operatorAddress(uint8 _operatorId) public view returns (address) {
-    return operators[_operatorId];
-  }
- 
-  /**
-   * @dev defineOperator role
-   * @param _names operators names
-   * @param _addresses operator addresses.
-   */
-  function defineOperators(bytes32[] memory _names, address[] memory _addresses)
-    public onlyOwner
-  {
-    require(_names.length == _addresses.length, "OP02");
- 
-    for (uint256 i = 0; i < operators.length; i++) {
-      delete operatorIds[operators[i]];
-    }
-    emit OperatorsCleared(operators.length);
- 
-    for (uint256 j = 0; j < _names.length; j++) {
-      emit OperatorDefined(_names[j], _addresses[j]);
-      operatorIds[_addresses[j]] = uint8(j + 1);
-    }
-    operators = _addresses;
-  }
-}
- 
-
-
- - - - - - - diff --git a/coverage/governance/Ownable.sol.html b/coverage/governance/Ownable.sol.html deleted file mode 100644 index 881f0f4..0000000 --- a/coverage/governance/Ownable.sol.html +++ /dev/null @@ -1,245 +0,0 @@ - - - - Code coverage report for governance/Ownable.sol - - - - - - - -
-
-

- all files / governance/ Ownable.sol -

-
-
- 25% - Statements - 2/8 -
-
- 50% - Branches - 2/4 -
-
- 40% - Functions - 2/5 -
-
- 33.33% - Lines - 3/9 -
-
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -61× -  -  -  -  -  -  -61× -59× -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
pragma solidity >=0.6.0 <0.7.0;
- 
- 
-/**
- * @title Ownable
- * @dev The Ownable contract define an owner address and methods to transfer ownership
- * @author Cyril Lapinte - <cyril.lapinte@gmail.com>
- */
-contract Ownable {
- 
-  address public owner;
- 
-  event OwnershipRenounced(address indexed previousOwner);
-  event OwnershipTransferred(
-    address indexed previousOwner,
-    address indexed newOwner
-  );
- 
-  /**
-   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
-   * account.
-   */
-  constructor() public {
-    owner = msg.sender;
-  }
- 
-  /**
-   * @dev Throws if called by any account other than the owner.
-   */
-  modifier onlyOwner() {
-    require(msg.sender == owner);
-    _;
-  }
- 
-  /**
-   * @dev Allows the current owner to relinquish control of the contract.
-   */
-  function renounceOwnership() public onlyOwner {
-    emit OwnershipRenounced(owner);
-    owner = address(0);
-  }
- 
-  /**
-   * @dev Allows the current owner to transfer control of the contract to a newOwner.
-   * @param _newOwner The address to transfer ownership to.
-   */
-  function transferOwnership(address _newOwner) public onlyOwner {
-    _transferOwnership(_newOwner);
-  }
- 
-  /**
-   * @dev Transfers control of the contract to a newOwner.
-   * @param _newOwner The address to transfer ownership to.
-   */
-  function _transferOwnership(address _newOwner) internal {
-    require(_newOwner != address(0));
-    emit OwnershipTransferred(owner, _newOwner);
-    owner = _newOwner;
-  }
-}
- 
-
-
- - - - - - - diff --git a/coverage/governance/index.html b/coverage/governance/index.html deleted file mode 100644 index 7a00622..0000000 --- a/coverage/governance/index.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - Code coverage report for governance/ - - - - - - - -
-
-

- all files governance/ -

-
-
- 66.67% - Statements - 12/18 -
-
- 75% - Branches - 6/8 -
-
- 66.67% - Functions - 6/9 -
-
- 71.43% - Lines - 15/21 -
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
Operator.sol
100%10/10100%4/4100%4/4100%12/12
Ownable.sol
25%2/850%2/440%2/533.33%3/9
-
-
- - - - - - - diff --git a/coverage/index.html b/coverage/index.html deleted file mode 100644 index 683c961..0000000 --- a/coverage/index.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - Code coverage report for All files - - - - - - - -
-
-

- / -

-
-
- 45.64% - Statements - 110/241 -
-
- 41.67% - Branches - 40/96 -
-
- 50% - Functions - 48/96 -
-
- 46.15% - Lines - 114/247 -
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
governance/
66.67%12/1875%6/866.67%6/971.43%15/21
interface/
100%0/0100%0/0100%0/0100%0/0
math/
45.45%5/1125%2/850%2/445.45%5/11
registry/
98.28%57/5896.15%25/26100%28/2898.31%58/59
routing/
0%0/580%0/240%0/190%0/60
token/
37.5%36/9623.33%7/3033.33%12/3637.5%36/96
-
-
- - - - - - - diff --git a/coverage/interface/ERC20.sol.html b/coverage/interface/ERC20.sol.html deleted file mode 100644 index 9b0c330..0000000 --- a/coverage/interface/ERC20.sol.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - Code coverage report for interface/ERC20.sol - - - - - - - -
-
-

- all files / interface/ ERC20.sol -

-
-
- 100% - Statements - 0/0 -
-
- 100% - Branches - 0/0 -
-
- 100% - Functions - 0/0 -
-
- 100% - Lines - 0/0 -
-
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
pragma solidity >=0.5.0 <0.6.0;
- 
- 
-/**
- * @title ERC20 interface
- * @dev see https://github.com/ethereum/EIPs/issues/20
- * @dev see https://github.com/ethereum/EIPs/issues/179
- */
-contract ERC20 {
-  function name() public view returns (string memory);
-  function symbol() public view returns (string memory);
-  function decimal() public view returns (uint256);
-  function totalSupply() public view returns (uint256);
-  function balanceOf(address who) public view returns (uint256);
-  function transfer(address to, uint256 value) public returns (bool);
- 
-  function allowance(address owner, address spender)
-    public view returns (uint256);
- 
-  function transferFrom(address from, address to, uint256 value)
-    public returns (bool);
- 
-  function approve(address spender, uint256 value) public returns (bool);
- 
-  function increaseApproval(address spender, uint addedValue)
-    public returns (bool);
- 
-  function decreaseApproval(address spender, uint subtractedValue)
-    public returns (bool);
- 
-  event Transfer(address indexed from, address indexed to, uint256 value);
-  event Approval(
-    address indexed owner,
-    address indexed spender,
-    uint256 value
-  );
-}
- 
-
-
- - - - - - - diff --git a/coverage/interface/IERC20.sol.html b/coverage/interface/IERC20.sol.html deleted file mode 100644 index 2818733..0000000 --- a/coverage/interface/IERC20.sol.html +++ /dev/null @@ -1,179 +0,0 @@ - - - - Code coverage report for interface/IERC20.sol - - - - - - - -
-
-

- all files / interface/ IERC20.sol -

-
-
- 100% - Statements - 0/0 -
-
- 100% - Branches - 0/0 -
-
- 100% - Functions - 0/0 -
-
- 100% - Lines - 0/0 -
-
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
pragma solidity >=0.6.0 <0.7.0;
- 
- 
-/**
- * @title IERC20 interface
- * @dev see https://github.com/ethereum/EIPs/issues/20
- * @dev see https://github.com/ethereum/EIPs/issues/179
- */
-abstract contract IERC20 {
- 
-  event Transfer(address indexed from, address indexed to, uint256 value);
-  event Approval(
-    address indexed owner,
-    address indexed spender,
-    uint256 value
-  );
- 
-  function name() virtual public view returns (string memory);
-  function symbol() virtual public view returns (string memory);
-  function decimal() virtual public view returns (uint256);
-  function totalSupply() virtual public view returns (uint256);
-  function balanceOf(address who) virtual public view returns (uint256);
-  function transfer(address to, uint256 value) virtual public returns (bool);
- 
-  function allowance(address owner, address spender)
-    virtual public view returns (uint256);
- 
-  function transferFrom(address from, address to, uint256 value)
-    virtual public returns (bool);
- 
-  function approve(address spender, uint256 value) virtual public returns (bool);
- 
-  function increaseApproval(address spender, uint addedValue)
-    virtual public returns (bool);
- 
-  function decreaseApproval(address spender, uint subtractedValue)
-    virtual public returns (bool);
-}
- 
-
-
- - - - - - - diff --git a/coverage/interface/IRouter.sol.html b/coverage/interface/IRouter.sol.html deleted file mode 100644 index 0d59012..0000000 --- a/coverage/interface/IRouter.sol.html +++ /dev/null @@ -1,173 +0,0 @@ - - - - Code coverage report for interface/IRouter.sol - - - - - - - -
-
-

- all files / interface/ IRouter.sol -

-
-
- 100% - Statements - 0/0 -
-
- 100% - Branches - 0/0 -
-
- 100% - Functions - 0/0 -
-
- 100% - Lines - 0/0 -
-
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
pragma solidity >=0.6.0 <0.7.0;
- 
- 
-/**
- * @title IRouter
- *
- * To avoid abuse the configuration need to be locked before the redirection is active
- *
- * Error messages
- * RO01: configuration is locked
- * RO02: configuration has not been locked
- * RO03: no valid routes were found
- * RO04: redirection has failed
- *
- * @author Cyril Lapinte - <cyril.lapinte@gmail.com>
- */
-abstract contract IRouter {
- 
-  event ConfigLocked();
-  event RouteDefined(address origin, address[] destinations, bytes4 destinationAbi);
-  event DestinationSwitched(address origin, uint256 activeDestination);
- 
-  receive() virtual external payable;
-  fallback() virtual external payable;
-  function destinations(address _origin) virtual public view returns (address[] memory);
-  function destinationAbi(address _origin) virtual public view returns (bytes4);
-  function isConfigLocked() virtual public view returns (bool);
- 
-  function setRoute(
-    address _origin,
-    address[] memory _destinations,
-    bytes4 _destinationAbi
-    ) virtual public returns (bool);
- 
-  function lockConfig() virtual public;
-}
- 
-
-
- - - - - - - diff --git a/coverage/interface/IUserRegistry.sol.html b/coverage/interface/IUserRegistry.sol.html deleted file mode 100644 index 0cba924..0000000 --- a/coverage/interface/IUserRegistry.sol.html +++ /dev/null @@ -1,242 +0,0 @@ - - - - Code coverage report for interface/IUserRegistry.sol - - - - - - - -
-
-

- all files / interface/ IUserRegistry.sol -

-
-
- 100% - Statements - 0/0 -
-
- 100% - Branches - 0/0 -
-
- 100% - Functions - 0/0 -
-
- 100% - Lines - 0/0 -
-
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
pragma solidity >=0.6.0 <0.7.0;
- 
- 
-/**
- * @title IUserRegistry
- * @dev IUserRegistry interface
- * @author Cyril Lapinte - <cyril.lapinte@gmail.com>
- **/
-abstract contract IUserRegistry {
- 
-  event UserRegistered(uint256 indexed userId);
-  event AddressAttached(uint256 indexed userId, address address_);
-  event AddressDetached(uint256 indexed userId, address address_);
- 
-  function userCount() virtual public view returns (uint256);
-  function userId(address _address) virtual public view returns (uint256);
-  function validUserId(address _address) virtual public view returns (uint256);
-  function validUntilTime(uint256 _userId) virtual public view returns (uint256);
-  function suspended(uint256 _userId) virtual public view returns (bool);
-  function extended(uint256 _userId, uint256 _key)
-    virtual public view returns (uint256);
- 
-  function isAddressValid(address _address) virtual public view returns (bool);
-  function isValid(uint256 _userId) virtual public view returns (bool);
- 
-  function registerUser(address _address, uint256 _validUntilTime) virtual public;
-  function registerManyUsers(address[] memory _addresses, uint256 _validUntilTime)
-    virtual public;
- 
-  function attachAddress(uint256 _userId, address _address) virtual public;
-  function attachManyAddresses(uint256[] memory _userIds, address[] memory _addresses)
-    virtual public;
- 
-  function detachAddress(address _address) virtual public;
-  function detachManyAddresses(address[] memory _addresses)
-    virtual public;
- 
-  function detachSelf() virtual public;
-  function detachSelfAddress(address _address) virtual public;
-  function suspendUser(uint256 _userId) virtual public;
-  function unsuspendUser(uint256 _userId) virtual public;
-  function suspendManyUsers(uint256[] memory _userIds) virtual public;
-  function unsuspendManyUsers(uint256[] memory _userIds) virtual public;
-  function updateUser(uint256 _userId, uint256 _validUntil, bool _suspended)
-    virtual public;
- 
-  function updateManyUsers(
-    uint256[] memory _userIds,
-    uint256 _validUntil,
-    bool _suspended) virtual public;
- 
-  function updateUserExtended(uint256 _userId, uint256 _key, uint256 _value)
-    virtual public;
- 
-  function updateManyUsersExtended(
-    uint256[] memory _userIds,
-    uint256 _key,
-    uint256 _value) virtual public;
-}
- 
-
-
- - - - - - - diff --git a/coverage/interface/index.html b/coverage/interface/index.html deleted file mode 100644 index 275e780..0000000 --- a/coverage/interface/index.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - Code coverage report for interface/ - - - - - - - -
-
-

- all files interface/ -

-
-
- 100% - Statements - 0/0 -
-
- 100% - Branches - 0/0 -
-
- 100% - Functions - 0/0 -
-
- 100% - Lines - 0/0 -
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
IERC20.sol
100%0/0100%0/0100%0/0100%0/0
IRouter.sol
100%0/0100%0/0100%0/0100%0/0
IUserRegistry.sol
100%0/0100%0/0100%0/0100%0/0
-
-
- - - - - - - diff --git a/coverage/lcov-report/base.css b/coverage/lcov-report/base.css deleted file mode 100644 index 29737bc..0000000 --- a/coverage/lcov-report/base.css +++ /dev/null @@ -1,213 +0,0 @@ -body, html { - margin:0; padding: 0; - height: 100%; -} -body { - font-family: Helvetica Neue, Helvetica, Arial; - font-size: 14px; - color:#333; -} -.small { font-size: 12px; } -*, *:after, *:before { - -webkit-box-sizing:border-box; - -moz-box-sizing:border-box; - box-sizing:border-box; - } -h1 { font-size: 20px; margin: 0;} -h2 { font-size: 14px; } -pre { - font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; - margin: 0; - padding: 0; - -moz-tab-size: 2; - -o-tab-size: 2; - tab-size: 2; -} -a { color:#0074D9; text-decoration:none; } -a:hover { text-decoration:underline; } -.strong { font-weight: bold; } -.space-top1 { padding: 10px 0 0 0; } -.pad2y { padding: 20px 0; } -.pad1y { padding: 10px 0; } -.pad2x { padding: 0 20px; } -.pad2 { padding: 20px; } -.pad1 { padding: 10px; } -.space-left2 { padding-left:55px; } -.space-right2 { padding-right:20px; } -.center { text-align:center; } -.clearfix { display:block; } -.clearfix:after { - content:''; - display:block; - height:0; - clear:both; - visibility:hidden; - } -.fl { float: left; } -@media only screen and (max-width:640px) { - .col3 { width:100%; max-width:100%; } - .hide-mobile { display:none!important; } -} - -.quiet { - color: #7f7f7f; - color: rgba(0,0,0,0.5); -} -.quiet a { opacity: 0.7; } - -.fraction { - font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; - font-size: 10px; - color: #555; - background: #E8E8E8; - padding: 4px 5px; - border-radius: 3px; - vertical-align: middle; -} - -div.path a:link, div.path a:visited { color: #333; } -table.coverage { - border-collapse: collapse; - margin: 10px 0 0 0; - padding: 0; -} - -table.coverage td { - margin: 0; - padding: 0; - vertical-align: top; -} -table.coverage td.line-count { - text-align: right; - padding: 0 5px 0 20px; -} -table.coverage td.line-coverage { - text-align: right; - padding-right: 10px; - min-width:20px; -} - -table.coverage td span.cline-any { - display: inline-block; - padding: 0 5px; - width: 100%; -} -.missing-if-branch { - display: inline-block; - margin-right: 5px; - border-radius: 3px; - position: relative; - padding: 0 4px; - background: #333; - color: yellow; -} - -.skip-if-branch { - display: none; - margin-right: 10px; - position: relative; - padding: 0 4px; - background: #ccc; - color: white; -} -.missing-if-branch .typ, .skip-if-branch .typ { - color: inherit !important; -} -.coverage-summary { - border-collapse: collapse; - width: 100%; -} -.coverage-summary tr { border-bottom: 1px solid #bbb; } -.keyline-all { border: 1px solid #ddd; } -.coverage-summary td, .coverage-summary th { padding: 10px; } -.coverage-summary tbody { border: 1px solid #bbb; } -.coverage-summary td { border-right: 1px solid #bbb; } -.coverage-summary td:last-child { border-right: none; } -.coverage-summary th { - text-align: left; - font-weight: normal; - white-space: nowrap; -} -.coverage-summary th.file { border-right: none !important; } -.coverage-summary th.pct { } -.coverage-summary th.pic, -.coverage-summary th.abs, -.coverage-summary td.pct, -.coverage-summary td.abs { text-align: right; } -.coverage-summary td.file { white-space: nowrap; } -.coverage-summary td.pic { min-width: 120px !important; } -.coverage-summary tfoot td { } - -.coverage-summary .sorter { - height: 10px; - width: 7px; - display: inline-block; - margin-left: 0.5em; - background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; -} -.coverage-summary .sorted .sorter { - background-position: 0 -20px; -} -.coverage-summary .sorted-desc .sorter { - background-position: 0 -10px; -} -.status-line { height: 10px; } -/* dark red */ -.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } -.low .chart { border:1px solid #C21F39 } -/* medium red */ -.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } -/* light red */ -.low, .cline-no { background:#FCE1E5 } -/* light green */ -.high, .cline-yes { background:rgb(230,245,208) } -/* medium green */ -.cstat-yes { background:rgb(161,215,106) } -/* dark green */ -.status-line.high, .high .cover-fill { background:rgb(77,146,33) } -.high .chart { border:1px solid rgb(77,146,33) } -/* dark yellow (gold) */ -.medium .chart { border:1px solid #f9cd0b; } -.status-line.medium, .medium .cover-fill { background: #f9cd0b; } -/* light yellow */ -.medium { background: #fff4c2; } -/* light gray */ -span.cline-neutral { background: #eaeaea; } - -.cbranch-no { background: yellow !important; color: #111; } - -.cstat-skip { background: #ddd; color: #111; } -.fstat-skip { background: #ddd; color: #111 !important; } -.cbranch-skip { background: #ddd !important; color: #111; } - - -.cover-fill, .cover-empty { - display:inline-block; - height: 12px; -} -.chart { - line-height: 0; -} -.cover-empty { - background: white; -} -.cover-full { - border-right: none !important; -} -pre.prettyprint { - border: none !important; - padding: 0 !important; - margin: 0 !important; -} -.com { color: #999 !important; } -.ignore-none { color: #999; font-weight: normal; } - -.wrapper { - min-height: 100%; - height: auto !important; - height: 100%; - margin: 0 auto -48px; -} -.footer, .push { - height: 48px; -} diff --git a/coverage/lcov-report/governance/Operator.sol.html b/coverage/lcov-report/governance/Operator.sol.html deleted file mode 100644 index 8a18569..0000000 --- a/coverage/lcov-report/governance/Operator.sol.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - Code coverage report for governance/Operator.sol - - - - - - - -
-
-

- all files / governance/ Operator.sol -

-
-
- 100% - Statements - 10/10 -
-
- 100% - Branches - 4/4 -
-
- 100% - Functions - 4/4 -
-
- 100% - Lines - 12/12 -
-
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -208× -203× -  -  -  -  -  -  - -  -  -  -  -  -  - -  -  -  -  -  -  -  -  -  -  -59× -  -57× - -  -57× -  -57× -65× -65× -  -57× -  -  - 
pragma solidity >=0.6.0 <0.7.0;
- 
-import "./Ownable.sol";
- 
-/**
- * @title Operator
- * @dev The Operator contract contains list of addresses authorized to specific operations
- *
- * @author Cyril Lapinte - <cyril.lapinte@gmail.com>
- *
- * Error messages
- * OP01: Message sender must be an authority
- */
-contract Operator is Ownable {
- 
-  mapping (address => uint8) operatorIds;
-  address[] public operators;
- 
-  event OperatorsCleared(uint256 size);
-  event OperatorDefined(
-    bytes32 name,
-    address _address
-  );
- 
-  /**
-   * @dev Throws if called by any account other than the operator
-   */
-  modifier onlyOperator {
-    require(operatorIds[msg.sender] > 0, "OP01");
-    _;
-  }
- 
-  /**
-   * @dev return the count of operator
-   */
-  function operatorCount() public view returns (uint256) {
-    return operators.length;
-  }
- 
-  /**
-   * @dev return the address associated to the _operatorId
-   */
-  function operatorAddress(uint8 _operatorId) public view returns (address) {
-    return operators[_operatorId];
-  }
- 
-  /**
-   * @dev defineOperator role
-   * @param _names operators names
-   * @param _addresses operator addresses.
-   */
-  function defineOperators(bytes32[] memory _names, address[] memory _addresses)
-    public onlyOwner
-  {
-    require(_names.length == _addresses.length, "OP02");
- 
-    for (uint256 i = 0; i < operators.length; i++) {
-      delete operatorIds[operators[i]];
-    }
-    emit OperatorsCleared(operators.length);
- 
-    for (uint256 j = 0; j < _names.length; j++) {
-      emit OperatorDefined(_names[j], _addresses[j]);
-      operatorIds[_addresses[j]] = uint8(j + 1);
-    }
-    operators = _addresses;
-  }
-}
- 
-
-
- - - - - - - diff --git a/coverage/lcov-report/governance/Ownable.sol.html b/coverage/lcov-report/governance/Ownable.sol.html deleted file mode 100644 index 881f0f4..0000000 --- a/coverage/lcov-report/governance/Ownable.sol.html +++ /dev/null @@ -1,245 +0,0 @@ - - - - Code coverage report for governance/Ownable.sol - - - - - - - -
-
-

- all files / governance/ Ownable.sol -

-
-
- 25% - Statements - 2/8 -
-
- 50% - Branches - 2/4 -
-
- 40% - Functions - 2/5 -
-
- 33.33% - Lines - 3/9 -
-
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -61× -  -  -  -  -  -  -61× -59× -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
pragma solidity >=0.6.0 <0.7.0;
- 
- 
-/**
- * @title Ownable
- * @dev The Ownable contract define an owner address and methods to transfer ownership
- * @author Cyril Lapinte - <cyril.lapinte@gmail.com>
- */
-contract Ownable {
- 
-  address public owner;
- 
-  event OwnershipRenounced(address indexed previousOwner);
-  event OwnershipTransferred(
-    address indexed previousOwner,
-    address indexed newOwner
-  );
- 
-  /**
-   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
-   * account.
-   */
-  constructor() public {
-    owner = msg.sender;
-  }
- 
-  /**
-   * @dev Throws if called by any account other than the owner.
-   */
-  modifier onlyOwner() {
-    require(msg.sender == owner);
-    _;
-  }
- 
-  /**
-   * @dev Allows the current owner to relinquish control of the contract.
-   */
-  function renounceOwnership() public onlyOwner {
-    emit OwnershipRenounced(owner);
-    owner = address(0);
-  }
- 
-  /**
-   * @dev Allows the current owner to transfer control of the contract to a newOwner.
-   * @param _newOwner The address to transfer ownership to.
-   */
-  function transferOwnership(address _newOwner) public onlyOwner {
-    _transferOwnership(_newOwner);
-  }
- 
-  /**
-   * @dev Transfers control of the contract to a newOwner.
-   * @param _newOwner The address to transfer ownership to.
-   */
-  function _transferOwnership(address _newOwner) internal {
-    require(_newOwner != address(0));
-    emit OwnershipTransferred(owner, _newOwner);
-    owner = _newOwner;
-  }
-}
- 
-
-
- - - - - - - diff --git a/coverage/lcov-report/governance/index.html b/coverage/lcov-report/governance/index.html deleted file mode 100644 index 7a00622..0000000 --- a/coverage/lcov-report/governance/index.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - Code coverage report for governance/ - - - - - - - -
-
-

- all files governance/ -

-
-
- 66.67% - Statements - 12/18 -
-
- 75% - Branches - 6/8 -
-
- 66.67% - Functions - 6/9 -
-
- 71.43% - Lines - 15/21 -
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
Operator.sol
100%10/10100%4/4100%4/4100%12/12
Ownable.sol
25%2/850%2/440%2/533.33%3/9
-
-
- - - - - - - diff --git a/coverage/lcov-report/index.html b/coverage/lcov-report/index.html deleted file mode 100644 index 683c961..0000000 --- a/coverage/lcov-report/index.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - Code coverage report for All files - - - - - - - -
-
-

- / -

-
-
- 45.64% - Statements - 110/241 -
-
- 41.67% - Branches - 40/96 -
-
- 50% - Functions - 48/96 -
-
- 46.15% - Lines - 114/247 -
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
governance/
66.67%12/1875%6/866.67%6/971.43%15/21
interface/
100%0/0100%0/0100%0/0100%0/0
math/
45.45%5/1125%2/850%2/445.45%5/11
registry/
98.28%57/5896.15%25/26100%28/2898.31%58/59
routing/
0%0/580%0/240%0/190%0/60
token/
37.5%36/9623.33%7/3033.33%12/3637.5%36/96
-
-
- - - - - - - diff --git a/coverage/lcov-report/interface/ERC20.sol.html b/coverage/lcov-report/interface/ERC20.sol.html deleted file mode 100644 index 9b0c330..0000000 --- a/coverage/lcov-report/interface/ERC20.sol.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - Code coverage report for interface/ERC20.sol - - - - - - - -
-
-

- all files / interface/ ERC20.sol -

-
-
- 100% - Statements - 0/0 -
-
- 100% - Branches - 0/0 -
-
- 100% - Functions - 0/0 -
-
- 100% - Lines - 0/0 -
-
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
pragma solidity >=0.5.0 <0.6.0;
- 
- 
-/**
- * @title ERC20 interface
- * @dev see https://github.com/ethereum/EIPs/issues/20
- * @dev see https://github.com/ethereum/EIPs/issues/179
- */
-contract ERC20 {
-  function name() public view returns (string memory);
-  function symbol() public view returns (string memory);
-  function decimal() public view returns (uint256);
-  function totalSupply() public view returns (uint256);
-  function balanceOf(address who) public view returns (uint256);
-  function transfer(address to, uint256 value) public returns (bool);
- 
-  function allowance(address owner, address spender)
-    public view returns (uint256);
- 
-  function transferFrom(address from, address to, uint256 value)
-    public returns (bool);
- 
-  function approve(address spender, uint256 value) public returns (bool);
- 
-  function increaseApproval(address spender, uint addedValue)
-    public returns (bool);
- 
-  function decreaseApproval(address spender, uint subtractedValue)
-    public returns (bool);
- 
-  event Transfer(address indexed from, address indexed to, uint256 value);
-  event Approval(
-    address indexed owner,
-    address indexed spender,
-    uint256 value
-  );
-}
- 
-
-
- - - - - - - diff --git a/coverage/lcov-report/interface/IERC20.sol.html b/coverage/lcov-report/interface/IERC20.sol.html deleted file mode 100644 index 2818733..0000000 --- a/coverage/lcov-report/interface/IERC20.sol.html +++ /dev/null @@ -1,179 +0,0 @@ - - - - Code coverage report for interface/IERC20.sol - - - - - - - -
-
-

- all files / interface/ IERC20.sol -

-
-
- 100% - Statements - 0/0 -
-
- 100% - Branches - 0/0 -
-
- 100% - Functions - 0/0 -
-
- 100% - Lines - 0/0 -
-
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
pragma solidity >=0.6.0 <0.7.0;
- 
- 
-/**
- * @title IERC20 interface
- * @dev see https://github.com/ethereum/EIPs/issues/20
- * @dev see https://github.com/ethereum/EIPs/issues/179
- */
-abstract contract IERC20 {
- 
-  event Transfer(address indexed from, address indexed to, uint256 value);
-  event Approval(
-    address indexed owner,
-    address indexed spender,
-    uint256 value
-  );
- 
-  function name() virtual public view returns (string memory);
-  function symbol() virtual public view returns (string memory);
-  function decimal() virtual public view returns (uint256);
-  function totalSupply() virtual public view returns (uint256);
-  function balanceOf(address who) virtual public view returns (uint256);
-  function transfer(address to, uint256 value) virtual public returns (bool);
- 
-  function allowance(address owner, address spender)
-    virtual public view returns (uint256);
- 
-  function transferFrom(address from, address to, uint256 value)
-    virtual public returns (bool);
- 
-  function approve(address spender, uint256 value) virtual public returns (bool);
- 
-  function increaseApproval(address spender, uint addedValue)
-    virtual public returns (bool);
- 
-  function decreaseApproval(address spender, uint subtractedValue)
-    virtual public returns (bool);
-}
- 
-
-
- - - - - - - diff --git a/coverage/lcov-report/interface/IRouter.sol.html b/coverage/lcov-report/interface/IRouter.sol.html deleted file mode 100644 index 0d59012..0000000 --- a/coverage/lcov-report/interface/IRouter.sol.html +++ /dev/null @@ -1,173 +0,0 @@ - - - - Code coverage report for interface/IRouter.sol - - - - - - - -
-
-

- all files / interface/ IRouter.sol -

-
-
- 100% - Statements - 0/0 -
-
- 100% - Branches - 0/0 -
-
- 100% - Functions - 0/0 -
-
- 100% - Lines - 0/0 -
-
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
pragma solidity >=0.6.0 <0.7.0;
- 
- 
-/**
- * @title IRouter
- *
- * To avoid abuse the configuration need to be locked before the redirection is active
- *
- * Error messages
- * RO01: configuration is locked
- * RO02: configuration has not been locked
- * RO03: no valid routes were found
- * RO04: redirection has failed
- *
- * @author Cyril Lapinte - <cyril.lapinte@gmail.com>
- */
-abstract contract IRouter {
- 
-  event ConfigLocked();
-  event RouteDefined(address origin, address[] destinations, bytes4 destinationAbi);
-  event DestinationSwitched(address origin, uint256 activeDestination);
- 
-  receive() virtual external payable;
-  fallback() virtual external payable;
-  function destinations(address _origin) virtual public view returns (address[] memory);
-  function destinationAbi(address _origin) virtual public view returns (bytes4);
-  function isConfigLocked() virtual public view returns (bool);
- 
-  function setRoute(
-    address _origin,
-    address[] memory _destinations,
-    bytes4 _destinationAbi
-    ) virtual public returns (bool);
- 
-  function lockConfig() virtual public;
-}
- 
-
-
- - - - - - - diff --git a/coverage/lcov-report/interface/IUserRegistry.sol.html b/coverage/lcov-report/interface/IUserRegistry.sol.html deleted file mode 100644 index 0cba924..0000000 --- a/coverage/lcov-report/interface/IUserRegistry.sol.html +++ /dev/null @@ -1,242 +0,0 @@ - - - - Code coverage report for interface/IUserRegistry.sol - - - - - - - -
-
-

- all files / interface/ IUserRegistry.sol -

-
-
- 100% - Statements - 0/0 -
-
- 100% - Branches - 0/0 -
-
- 100% - Functions - 0/0 -
-
- 100% - Lines - 0/0 -
-
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
pragma solidity >=0.6.0 <0.7.0;
- 
- 
-/**
- * @title IUserRegistry
- * @dev IUserRegistry interface
- * @author Cyril Lapinte - <cyril.lapinte@gmail.com>
- **/
-abstract contract IUserRegistry {
- 
-  event UserRegistered(uint256 indexed userId);
-  event AddressAttached(uint256 indexed userId, address address_);
-  event AddressDetached(uint256 indexed userId, address address_);
- 
-  function userCount() virtual public view returns (uint256);
-  function userId(address _address) virtual public view returns (uint256);
-  function validUserId(address _address) virtual public view returns (uint256);
-  function validUntilTime(uint256 _userId) virtual public view returns (uint256);
-  function suspended(uint256 _userId) virtual public view returns (bool);
-  function extended(uint256 _userId, uint256 _key)
-    virtual public view returns (uint256);
- 
-  function isAddressValid(address _address) virtual public view returns (bool);
-  function isValid(uint256 _userId) virtual public view returns (bool);
- 
-  function registerUser(address _address, uint256 _validUntilTime) virtual public;
-  function registerManyUsers(address[] memory _addresses, uint256 _validUntilTime)
-    virtual public;
- 
-  function attachAddress(uint256 _userId, address _address) virtual public;
-  function attachManyAddresses(uint256[] memory _userIds, address[] memory _addresses)
-    virtual public;
- 
-  function detachAddress(address _address) virtual public;
-  function detachManyAddresses(address[] memory _addresses)
-    virtual public;
- 
-  function detachSelf() virtual public;
-  function detachSelfAddress(address _address) virtual public;
-  function suspendUser(uint256 _userId) virtual public;
-  function unsuspendUser(uint256 _userId) virtual public;
-  function suspendManyUsers(uint256[] memory _userIds) virtual public;
-  function unsuspendManyUsers(uint256[] memory _userIds) virtual public;
-  function updateUser(uint256 _userId, uint256 _validUntil, bool _suspended)
-    virtual public;
- 
-  function updateManyUsers(
-    uint256[] memory _userIds,
-    uint256 _validUntil,
-    bool _suspended) virtual public;
- 
-  function updateUserExtended(uint256 _userId, uint256 _key, uint256 _value)
-    virtual public;
- 
-  function updateManyUsersExtended(
-    uint256[] memory _userIds,
-    uint256 _key,
-    uint256 _value) virtual public;
-}
- 
-
-
- - - - - - - diff --git a/coverage/lcov-report/interface/index.html b/coverage/lcov-report/interface/index.html deleted file mode 100644 index 275e780..0000000 --- a/coverage/lcov-report/interface/index.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - Code coverage report for interface/ - - - - - - - -
-
-

- all files interface/ -

-
-
- 100% - Statements - 0/0 -
-
- 100% - Branches - 0/0 -
-
- 100% - Functions - 0/0 -
-
- 100% - Lines - 0/0 -
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
IERC20.sol
100%0/0100%0/0100%0/0100%0/0
IRouter.sol
100%0/0100%0/0100%0/0100%0/0
IUserRegistry.sol
100%0/0100%0/0100%0/0100%0/0
-
-
- - - - - - - diff --git a/coverage/lcov-report/math/SafeMath.sol.html b/coverage/lcov-report/math/SafeMath.sol.html deleted file mode 100644 index d451179..0000000 --- a/coverage/lcov-report/math/SafeMath.sol.html +++ /dev/null @@ -1,221 +0,0 @@ - - - - Code coverage report for math/SafeMath.sol - - - - - - - -
-
-

- all files / math/ SafeMath.sol -

-
-
- 45.45% - Statements - 5/11 -
-
- 25% - Branches - 2/8 -
-
- 50% - Functions - 2/4 -
-
- 45.45% - Lines - 5/11 -
-
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - - -  -  -  -  -  -  - - - -  -  - 
pragma solidity >=0.5.0 <0.7.0;
- 
- 
-/**
- * @title SafeMath
- * @dev Math operations with safety checks that throw on error
- */
-library SafeMath {
- 
-  /**
-  * @dev Multiplies two numbers, throws on overflow.
-  */
-  function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
-    // Gas optimization: this is cheaper than asserting 'a' not being zero, but the
-    // benefit is lost if 'b' is also tested.
-    // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
-    if (a == 0) {
-      return 0;
-    }
- 
-    c = a * b;
-    assert(c / a == b);
-    return c;
-  }
- 
-  /**
-  * @dev 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;
-  }
- 
-  /**
-  * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
-  */
-  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
-    Eassert(b <= a);
-    return a - b;
-  }
- 
-  /**
-  * @dev Adds two numbers, throws on overflow.
-  */
-  function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
-    c = a + b;
-    Eassert(c >= a);
-    return c;
-  }
-}
- 
-
-
- - - - - - - diff --git a/coverage/lcov-report/math/index.html b/coverage/lcov-report/math/index.html deleted file mode 100644 index 8cdf067..0000000 --- a/coverage/lcov-report/math/index.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - Code coverage report for math/ - - - - - - - -
-
-

- all files math/ -

-
-
- 45.45% - Statements - 5/11 -
-
- 25% - Branches - 2/8 -
-
- 50% - Functions - 2/4 -
-
- 45.45% - Lines - 5/11 -
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
SafeMath.sol
45.45%5/1125%2/850%2/445.45%5/11
-
-
- - - - - - - diff --git a/coverage/lcov-report/prettify.css b/coverage/lcov-report/prettify.css deleted file mode 100644 index b317a7c..0000000 --- a/coverage/lcov-report/prettify.css +++ /dev/null @@ -1 +0,0 @@ -.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/coverage/lcov-report/prettify.js b/coverage/lcov-report/prettify.js deleted file mode 100644 index ef51e03..0000000 --- a/coverage/lcov-report/prettify.js +++ /dev/null @@ -1 +0,0 @@ -window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/coverage/lcov-report/registry/UserRegistry.sol.html b/coverage/lcov-report/registry/UserRegistry.sol.html deleted file mode 100644 index 10749ee..0000000 --- a/coverage/lcov-report/registry/UserRegistry.sol.html +++ /dev/null @@ -1,992 +0,0 @@ - - - - Code coverage report for registry/UserRegistry.sol - - - - - - - -
-
-

- all files / registry/ UserRegistry.sol -

-
-
- 98.28% - Statements - 57/58 -
-
- 96.15% - Branches - 25/26 -
-
- 100% - Functions - 28/28 -
-
- 98.31% - Lines - 58/59 -
-
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -49× -112× -  -  -  -  -  -  -  - -  -  -  -  -  -  -10× -  -  -  -  -  -  - - - -  -  -  -  -  -  -  -  - -  -  -  -  -  -  -15× -  -  -  -  -  -  -  -  - -  -  -  -  -  -  - -  -  -  -  -  -  - -  -  -  -  -  -  -  -  - -  -  -  -  -  -  -  -  - - -  -  -  -  -  -  -  -  -  -86× -82× -78× -  -78× -  -  -  -  -  -  -  -  -30× -28× -54× -  -  -  -  -  -  -  -  -  - -  -  -  -  -  -  -  -  - - -  -  -  -  -  -  -  - -  -  -  -  -  -  - - - -  -  -  -  -  -  -14× -10× - -  -  -  -  -  -  - - - -  -  -  -  -  -  -  -  - - -  -  -  -  -  -  -  -  -  - - -  -  -  -  -  -  -  -  -  -  -  -33× -29× -29× -  -  -  -  -  -  -  -  -  -  - - -  -  -  -  -  -  -  -  -  - - -  -  -  -  -  -  -  -  -  -  - - -  -  -  -  -  -  -  -  -  -117× -115× -115× -  -115× -115× -  -  -  -  -  -  -10× -10× - - -  -  -  -  -  -  -  -10× -  -  - 
pragma solidity >=0.6.0 <0.7.0;
- 
- 
-import "../governance/Operator.sol";
-import "../interface/IUserRegistry.sol";
- 
- 
-/**
- * @title UserRegistry
- * @dev UserRegistry contract
- * Configure and manage users
- * Extended may be used externaly to store data within a user context
- *
- * @author Cyril Lapinte - <cyril.lapinte@gmail.com>
- *
- * Error messages
- * UR01: UserId is invalid
- * UR02: WalletOwner is already known
- * UR03: Users length does not match with addresses
- * UR04: WalletOwner is unknown
- * UR05: Sender is not the wallet owner
- * UR06: User is already suspended
- * UR07: User is not suspended
-*/
-contract UserRegistry is IUserRegistry, Operator {
- 
-  struct User {
-    uint256 validUntilTime;
-    bool suspended;
-    mapping(uint256 => uint256) extended;
-  }
- 
-  mapping(uint256 => User) internal users;
-  mapping(address => uint256) internal walletOwners;
-  uint256 private userCount_;
- 
-  /**
-   * @dev contructor
-   **/
-  constructor(address[] memory _addresses, uint256 _validUntilTime) public {
-    for (uint256 i = 0; i < _addresses.length; i++) {
-      registerUserInternal(_addresses[i], _validUntilTime);
-    }
-  }
- 
-  /**
-   * @dev number of user registered
-   */
-  function userCount() override public view returns (uint256) {
-    return userCount_;
-  }
- 
-  /**
-   * @dev the userId associated to the provided address
-   */
-  function userId(address _address) override public view returns (uint256) {
-    return walletOwners[_address];
-  }
- 
-  /**
-   * @dev the userId associated to the provided address if the user is valid
-   */
-  function validUserId(address _address) override public view returns (uint256) {
-    uint256 addressUserId = walletOwners[_address];
-    Eif (isValidInternal(users[addressUserId])) {
-      return addressUserId;
-    }
-    return 0;
-  }
- 
-  /**
-   * @dev returns the time at which user validity ends
-   */
-  function validUntilTime(uint256 _userId) override public view returns (uint256) {
-    return users[_userId].validUntilTime;
-  }
- 
-  /**
-   * @dev is the user suspended
-   */
-  function suspended(uint256 _userId) override public view returns (bool) {
-    return users[_userId].suspended;
-  }
- 
-  /**
-   * @dev access to extended user data
-   */
-  function extended(uint256 _userId, uint256 _key)
-    override public view returns (uint256)
-  {
-    return users[_userId].extended[_key];
-  }
- 
-  /**
-   * @dev validity of the current user
-   */
-  function isAddressValid(address _address) override public view returns (bool) {
-    return isValidInternal(users[walletOwners[_address]]);
-  }
- 
-  /**
-   * @dev validity of the current user
-   */
-  function isValid(uint256 _userId) override public view returns (bool) {
-    return isValidInternal(users[_userId]);
-  }
- 
-  /**
-   * @dev register a user
-   */
-  function registerUser(address _address, uint256 _validUntilTime)
-    override public onlyOperator
-  {
-    registerUserInternal(_address, _validUntilTime);
-  }
- 
-  /**
-   * @dev register many users
-   */
-  function registerManyUsers(address[] memory _addresses, uint256 _validUntilTime)
-    override public onlyOperator
-  {
-    for (uint256 i = 0; i < _addresses.length; i++) {
-      registerUserInternal(_addresses[i], _validUntilTime);
-    }
-  }
- 
-  /**
-   * @dev attach an address with a user
-   */
-  function attachAddress(uint256 _userId, address _address)
-    override public onlyOperator
-  {
-    require(_userId > 0 && _userId <= userCount_, "UR01");
-    require(walletOwners[_address] == 0, "UR02");
-    walletOwners[_address] = _userId;
- 
-    emit AddressAttached(_userId, _address);
-  }
- 
-  /**
-   * @dev attach many addresses to many users
-   */
-  function attachManyAddresses(uint256[] memory _userIds, address[] memory _addresses)
-    override public onlyOperator
-  {
-    require(_addresses.length == _userIds.length, "UR03");
-    for (uint256 i = 0; i < _addresses.length; i++) {
-      attachAddress(_userIds[i], _addresses[i]);
-    }
-  }
- 
-  /**
-   * @dev detach the association between an address and its user
-   */
-  function detachAddress(address _address)
-    override public onlyOperator
-  {
-    detachAddressInternal(_address);
-  }
- 
-  /**
-   * @dev detach many addresses association between addresses and their respective users
-   */
-  function detachManyAddresses(address[] memory _addresses)
-    override public onlyOperator
-  {
-    for (uint256 i = 0; i < _addresses.length; i++) {
-      detachAddressInternal(_addresses[i]);
-    }
-  }
- 
-  /**
-   * @dev detach the association between an address and its user
-   */
-  function detachSelf() override public {
-    detachAddressInternal(msg.sender);
-  }
- 
-  /**
-   * @dev detach the association between an address and its user
-   */
-  function detachSelfAddress(address _address) override public {
-    uint256 senderUserId = walletOwners[msg.sender];
-    require(walletOwners[_address] == senderUserId, "UR05");
-    detachAddressInternal(_address);
-  }
- 
-  /**
-   * @dev suspend a user
-   */
-  function suspendUser(uint256 _userId) override public onlyOperator {
-    require(_userId > 0 && _userId <= userCount_, "UR01");
-    require(!users[_userId].suspended, "UR06");
-    users[_userId].suspended = true;
-  }
- 
-  /**
-   * @dev unsuspend a user
-   */
-  function unsuspendUser(uint256 _userId) override public onlyOperator {
-    require(_userId > 0 && _userId <= userCount_, "UR01");
-    require(users[_userId].suspended, "UR07");
-    users[_userId].suspended = false;
-  }
- 
-  /**
-   * @dev suspend many users
-   */
-  function suspendManyUsers(uint256[] memory _userIds)
-    override public onlyOperator
-  {
-    for (uint256 i = 0; i < _userIds.length; i++) {
-      suspendUser(_userIds[i]);
-    }
-  }
- 
-  /**
-   * @dev unsuspend many users
-   */
-  function unsuspendManyUsers(uint256[] memory _userIds)
-    override public onlyOperator
-  {
-    for (uint256 i = 0; i < _userIds.length; i++) {
-      unsuspendUser(_userIds[i]);
-    }
-  }
- 
-  /**
-   * @dev update a user
-   */
-  function updateUser(
-    uint256 _userId,
-    uint256 _validUntilTime,
-    bool _suspended) override public onlyOperator
-  {
-    require(_userId > 0 && _userId <= userCount_, "UR01");
-    users[_userId].validUntilTime = _validUntilTime;
-    users[_userId].suspended = _suspended;
-  }
- 
-  /**
-   * @dev update many users
-   */
-  function updateManyUsers(
-    uint256[] memory _userIds,
-    uint256 _validUntilTime,
-    bool _suspended) override public onlyOperator
-  {
-    for (uint256 i = 0; i < _userIds.length; i++) {
-      updateUser(_userIds[i], _validUntilTime, _suspended);
-    }
-  }
- 
-  /**
-   * @dev update user extended information
-   */
-  function updateUserExtended(uint256 _userId, uint256 _key, uint256 _value)
-    override public onlyOperator
-  {
-    require(_userId > 0 && _userId <= userCount_, "UR01");
-    users[_userId].extended[_key] = _value;
-  }
- 
-  /**
-   * @dev update many user extended informations
-   */
-  function updateManyUsersExtended(
-    uint256[] memory _userIds,
-    uint256 _key,
-    uint256 _value) override public onlyOperator
-  {
-    for (uint256 i = 0; i < _userIds.length; i++) {
-      updateUserExtended(_userIds[i], _key, _value);
-    }
-  }
- 
-  /**
-   * @dev register a user
-   */
-  function registerUserInternal(address _address, uint256 _validUntilTime)
-    internal
-  {
-    require(walletOwners[_address] == 0, "UR03");
-    users[++userCount_] = User(_validUntilTime, false);
-    walletOwners[_address] = userCount_;
- 
-    emit UserRegistered(userCount_);
-    emit AddressAttached(userCount_, _address);
-  }
- 
-  /**
-   * @dev detach the association between an address and its user
-   */
-  function detachAddressInternal(address _address) internal {
-    uint256 addressUserId = walletOwners[_address];
-    require(addressUserId != 0, "UR04");
-    emit AddressDetached(addressUserId, _address);
-    delete walletOwners[_address];
-  }
- 
-  /**
-   * @dev validity of the current user
-   */
-  function isValidInternal(User storage user) internal view returns (bool) {
-    // solium-disable-next-line security/no-block-members
-    return !user.suspended && user.validUntilTime > now;
-  }
-}
- 
-
-
- - - - - - - diff --git a/coverage/lcov-report/registry/index.html b/coverage/lcov-report/registry/index.html deleted file mode 100644 index 77248ec..0000000 --- a/coverage/lcov-report/registry/index.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - Code coverage report for registry/ - - - - - - - -
-
-

- all files registry/ -

-
-
- 98.28% - Statements - 57/58 -
-
- 96.15% - Branches - 25/26 -
-
- 100% - Functions - 28/28 -
-
- 98.31% - Lines - 58/59 -
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
UserRegistry.sol
98.28%57/5896.15%25/26100%28/2898.31%58/59
-
-
- - - - - - - diff --git a/coverage/lcov-report/routing/BasicRouter.sol.html b/coverage/lcov-report/routing/BasicRouter.sol.html deleted file mode 100644 index 439271f..0000000 --- a/coverage/lcov-report/routing/BasicRouter.sol.html +++ /dev/null @@ -1,431 +0,0 @@ - - - - Code coverage report for routing/BasicRouter.sol - - - - - - - -
-
-

- all files / routing/ BasicRouter.sol -

-
-
- 0% - Statements - 0/28 -
-
- 0% - Branches - 0/12 -
-
- 0% - Functions - 0/12 -
-
- 0% - Lines - 0/29 -
-
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
pragma solidity >=0.6.0 <0.7.0;
- 
- 
-import "../governance/Ownable.sol";
-import "../interface/IRouter.sol";
- 
- 
-/**
- * @title BasicRouter
- *
- * @dev To avoid abuse the configuration need to be locked before the redirection is active
- *
- * Error messages
- * RO01: configuration is locked
- * RO02: configuration has not been locked
- * RO03: invalid destinations
- * RO04: no valid routes were found
- * RO05: redirection has failed
- *
- * @author Cyril Lapinte - <cyril.lapinte@gmail.com>
- */
-contract BasicRouter is IRouter, Ownable {
- 
-  struct Route {
-    address[] destinations;
-    uint256 activeDestination;
-    bytes4 destinationAbi;
-  }
- 
-  mapping(address => Route) routes;
-  bool private configLocked_;
- 
-  modifier configNotLocked() {
-    require(!configLocked_, "RO01");
-    _;
-  }
- 
-  receive() override external payable {
-    callPayable(msg.value, msg.sender, msg.data);
-  }
- 
-  fallback() override external payable {
-    callPayable(msg.value, msg.sender, msg.data);
-  }
- 
-  function destinations(address _origin) override public view returns (address[] memory) {
-    return routes[_origin].destinations;
-  }
- 
-  function activeDestination(address _origin) public view returns (uint256) {
-    return routes[_origin].activeDestination;
-  }
- 
-  function destinationAbi(address _origin) override public view returns (bytes4) {
-    return routes[_origin].destinationAbi;
-  }
- 
-  function isConfigLocked() override public view returns (bool) {
-    return configLocked_;
-  }
- 
-  /**
-   * @dev method to be overwritten by inheritance
-   */
-  function findDestination(address _origin) virtual public view returns (address) {
-    Route memory route = routes[_origin];
-    return (route.destinations.length > 0) ?
-      route.destinations[route.activeDestination]: address(0);
-  }
- 
-  function setRoute(
-    address _origin,
-    address[] memory _destinations,
-    bytes4 _destinationAbi)
-    override public onlyOwner configNotLocked returns (bool)
-  {
-    routes[_origin] = Route(_destinations, 0, _destinationAbi);
-    emit RouteDefined(_origin, _destinations, _destinationAbi);
-    return true;
-  }
- 
-  function switchDestination(address _origin, uint256 _activeDestination)
-    public onlyOwner returns (bool)
-  {
-    require(_activeDestination < routes[_origin].destinations.length, "RO03");
-    routes[_origin].activeDestination = _activeDestination;
-    
-    emit DestinationSwitched(_origin, _activeDestination);
-  }
- 
-  /*
-   * @dev Lock the configuration
-   */
-  function lockConfig() override public onlyOwner configNotLocked {
-    configLocked_ = true;
-    emit ConfigLocked();
-  }
- 
-  /*
-   * @dev Send the received ETH to the configured and locked contract address
-   * The call can be done only when the redirection has started
-   */
-  function callPayable(uint256 _value, address _sender, bytes memory _data) virtual internal
-  {
-    require(configLocked_, "RO02");
-    address destination = findDestination(_sender);
-    require(destination != address(0), "RO04");
- 
-    bytes4 destinationAbi_ = routes[_sender].destinationAbi;
- 
-    bool success;
-    bytes memory result;
-    if(destinationAbi_ != bytes4(0)) {
-      bytes memory encodedData =  abi.encode(destinationAbi_, _sender, _data);
-      (success, result) = destination.call{value: _value}(encodedData);
-    } else {
-      (success, result) = destination.call{value: _value}(_data);
-    }
- 
-    require(success, "RO05");
-  }
-}
- 
-
-
- - - - - - - diff --git a/coverage/lcov-report/routing/DynamicRouter.sol.html b/coverage/lcov-report/routing/DynamicRouter.sol.html deleted file mode 100644 index 4e2619c..0000000 --- a/coverage/lcov-report/routing/DynamicRouter.sol.html +++ /dev/null @@ -1,296 +0,0 @@ - - - - Code coverage report for routing/DynamicRouter.sol - - - - - - - -
-
-

- all files / routing/ DynamicRouter.sol -

-
-
- 0% - Statements - 0/21 -
-
- 0% - Branches - 0/8 -
-
- 0% - Functions - 0/4 -
-
- 0% - Lines - 0/22 -
-
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
pragma solidity >=0.6.0 <0.7.0;
- 
-import "./ScheduledRouter.sol";
- 
- 
-/**
- * @title DynamicRouter
- * @dev DynamicRouter
- *
- * To avoid abuse the configuration need to be locked before the redirection is active
- *
- * Error messages
- * DR01: maxBalances and weights length must match destinations length
- *
- * @author Cyril Lapinte - <cyril.lapinte@gmail.com>
- */
-contract DynamicRouter is ScheduledRouter {
- 
-  struct Distribution {
-    uint256[] maxBalances;
-    uint256[] weights;
-  }
- 
-  mapping(address => Distribution) distributions;
- 
-  event DistributionDefined(uint256[] maxBalances, uint256[] weights);
- 
-  function maxBalances(address _origin) public view returns (uint256[] memory) {
-    return distributions[_origin].maxBalances;
-  }
- 
-  function weights(address _origin) public view returns (uint256[] memory) {
-    return distributions[_origin].weights;
-  }
- 
-  function findDestination(address _origin) override public view returns (address) {
-    Distribution memory distribution = distributions[_origin];
-    Route memory route = routes[_origin];
- 
-    address selectedDestination = address(0);
-    uint256 minWeightedBalance = ~uint256(0);
-    for(uint256 i=0; i < route.destinations.length; i++) {
-      address destination = route.destinations[i];
- 
-      if (destination.balance == 0) {
-        selectedDestination = destination;
-        break;
-      }
- 
-     if (destination.balance < distribution.maxBalances[i]) {
-        uint256 weight =
-          (distribution.weights[i] > 0) ? distribution.weights[i] : 1;
-        uint256 weightedBalance = destination.balance / weight;
-        if(weightedBalance < minWeightedBalance) {
-          minWeightedBalance = weightedBalance;
-          selectedDestination = destination;
-        }
-      }
-    }
-    
-    return selectedDestination;
-  }
- 
-  function setDistribution(
-    address _origin,
-    uint256[] memory _maxBalances,
-    uint256[] memory _weights)
-    public onlyOwner configNotLocked returns (bool) {
-    require(_maxBalances.length == routes[_origin].destinations.length
-      && _weights.length == routes[_origin].destinations.length, "DR01");
-    
-    distributions[_origin] = Distribution(_maxBalances, _weights);
-    emit DistributionDefined(_maxBalances, _weights);
- 
-    return true;
-  }
-}
- 
-
-
- - - - - - - diff --git a/coverage/lcov-report/routing/ScheduledRouter.sol.html b/coverage/lcov-report/routing/ScheduledRouter.sol.html deleted file mode 100644 index b6ac7ab..0000000 --- a/coverage/lcov-report/routing/ScheduledRouter.sol.html +++ /dev/null @@ -1,203 +0,0 @@ - - - - Code coverage report for routing/ScheduledRouter.sol - - - - - - - -
-
-

- all files / routing/ ScheduledRouter.sol -

-
-
- 0% - Statements - 0/9 -
-
- 0% - Branches - 0/4 -
-
- 0% - Functions - 0/3 -
-
- 0% - Lines - 0/9 -
-
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
pragma solidity >=0.6.0 <0.7.0;
- 
- 
-import "./BasicRouter.sol";
- 
- 
-/**
- * @title ScheduledRouter
- * @dev ScheduledRouter is a proxy which redirect all incoming transactions
- *
- * Error messages
- * SR01: Invalid schedule
- *
- * @author Cyril Lapinte - <cyril.lapinte@gmail.com>
- */
-contract ScheduledRouter is BasicRouter {
- 
-  struct Schedule {
-    uint256 startAt;
-    uint256 endAt;
-  }
- 
-  mapping(address => Schedule) schedules;
- 
-  event Scheduled(uint256 startAt, uint256 endAt);
- 
-  function schedule(address _origin) public view returns (uint256, uint256) {
-    Schedule memory schedule_ = schedules[_origin];
-    return (schedule_.startAt, schedule_.endAt);
-  }
- 
-  function findDestination(address _origin) virtual override public view returns (address) {
-    Schedule memory schedule_ = schedules[_origin];
-    if (now < schedule_.startAt || now > schedule_.endAt) {
-      return address(0);
-    }
-    return super.findDestination(_origin);
-  }
- 
-  function setRouteSchedule(address _origin, uint256 _startAt, uint256 _endAt)
-    public onlyOwner configNotLocked returns (bool) {
-    require(_startAt > now && _startAt < _endAt, "SR01");
-    schedules[_origin] = Schedule(_startAt, _endAt);
-    emit Scheduled(_startAt, _endAt);
-  }
-}
- 
-
-
- - - - - - - diff --git a/coverage/lcov-report/routing/index.html b/coverage/lcov-report/routing/index.html deleted file mode 100644 index 6ef7893..0000000 --- a/coverage/lcov-report/routing/index.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - Code coverage report for routing/ - - - - - - - -
-
-

- all files routing/ -

-
-
- 0% - Statements - 0/58 -
-
- 0% - Branches - 0/24 -
-
- 0% - Functions - 0/19 -
-
- 0% - Lines - 0/60 -
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
BasicRouter.sol
0%0/280%0/120%0/120%0/29
DynamicRouter.sol
0%0/210%0/80%0/40%0/22
ScheduledRouter.sol
0%0/90%0/40%0/30%0/9
-
-
- - - - - - - diff --git a/coverage/lcov-report/sort-arrow-sprite.png b/coverage/lcov-report/sort-arrow-sprite.png deleted file mode 100644 index 03f704a609c6fd0dbfdac63466a7d7c958b5cbf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^>_9Bd!3HEZxJ@+%Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>Jii$m5978H@?Fn+^JD|Y9yzj{W`447Gxa{7*dM7nnnD-Lb z6^}Hx2)'; - } - } - return cols; - } - // attaches a data attribute to every tr element with an object - // of data values keyed by column name - function loadRowData(tableRow) { - var tableCols = tableRow.querySelectorAll('td'), - colNode, - col, - data = {}, - i, - val; - for (i = 0; i < tableCols.length; i += 1) { - colNode = tableCols[i]; - col = cols[i]; - val = colNode.getAttribute('data-value'); - if (col.type === 'number') { - val = Number(val); - } - data[col.key] = val; - } - return data; - } - // loads all row data - function loadData() { - var rows = getTableBody().querySelectorAll('tr'), - i; - - for (i = 0; i < rows.length; i += 1) { - rows[i].data = loadRowData(rows[i]); - } - } - // sorts the table using the data for the ith column - function sortByIndex(index, desc) { - var key = cols[index].key, - sorter = function (a, b) { - a = a.data[key]; - b = b.data[key]; - return a < b ? -1 : a > b ? 1 : 0; - }, - finalSorter = sorter, - tableBody = document.querySelector('.coverage-summary tbody'), - rowNodes = tableBody.querySelectorAll('tr'), - rows = [], - i; - - if (desc) { - finalSorter = function (a, b) { - return -1 * sorter(a, b); - }; - } - - for (i = 0; i < rowNodes.length; i += 1) { - rows.push(rowNodes[i]); - tableBody.removeChild(rowNodes[i]); - } - - rows.sort(finalSorter); - - for (i = 0; i < rows.length; i += 1) { - tableBody.appendChild(rows[i]); - } - } - // removes sort indicators for current column being sorted - function removeSortIndicators() { - var col = getNthColumn(currentSort.index), - cls = col.className; - - cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); - col.className = cls; - } - // adds sort indicators for current column being sorted - function addSortIndicators() { - getNthColumn(currentSort.index).className += currentSort.desc ? ' sorted-desc' : ' sorted'; - } - // adds event listeners for all sorter widgets - function enableUI() { - var i, - el, - ithSorter = function ithSorter(i) { - var col = cols[i]; - - return function () { - var desc = col.defaultDescSort; - - if (currentSort.index === i) { - desc = !currentSort.desc; - } - sortByIndex(i, desc); - removeSortIndicators(); - currentSort.index = i; - currentSort.desc = desc; - addSortIndicators(); - }; - }; - for (i =0 ; i < cols.length; i += 1) { - if (cols[i].sortable) { - // add the click event handler on the th so users - // dont have to click on those tiny arrows - el = getNthColumn(i).querySelector('.sorter').parentElement; - if (el.addEventListener) { - el.addEventListener('click', ithSorter(i)); - } else { - el.attachEvent('onclick', ithSorter(i)); - } - } - } - } - // adds sorting functionality to the UI - return function () { - if (!getTable()) { - return; - } - cols = loadColumns(); - loadData(cols); - addSortIndicators(); - enableUI(); - }; -})(); - -window.addEventListener('load', addSorting); diff --git a/coverage/lcov-report/token/DummyToken.sol.html b/coverage/lcov-report/token/DummyToken.sol.html deleted file mode 100644 index 2235600..0000000 --- a/coverage/lcov-report/token/DummyToken.sol.html +++ /dev/null @@ -1,602 +0,0 @@ - - - - Code coverage report for token/DummyToken.sol - - - - - - - -
-
-

- all files / token/ DummyToken.sol -

-
-
- 0% - Statements - 0/59 -
-
- 0% - Branches - 0/18 -
-
- 0% - Functions - 0/24 -
-
- 0% - Lines - 0/59 -
-
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
pragma solidity >=0.6.0 <0.7.0;
- 
- 
-import "../interface/IERC20.sol";
-import "../math/SafeMath.sol";
-import "./ERC20Token.sol";
- 
- 
-/**
- * @title Dummy ERC20 token
- * @dev ERC20 token default implementation
- */
-contract DummyToken is IERC20 {
-  using SafeMath for uint256;
- 
-  string public name_;
-  string public symbol_;
-  uint256 public decimal_;
-  uint256 public totalSupply_;
- 
-  uint256 public rate_;
-  uint256 public rateAt_;
- 
-  IERC20 twin_;
- 
-  mapping(address => uint256) private balances;
-  mapping (address => mapping (address => uint256)) internal allowed;
- 
-  constructor(
-    string memory _name,
-    string memory _symbol,
-    uint256 _decimal,
-    uint256 _totalSupply) public
-  {
-    name_ = _name;
-    symbol_ = _symbol;
-    decimal_ = _decimal;
-    totalSupply_ = _totalSupply;
-    balances[msg.sender] = _totalSupply;
- 
-    rate_ = 1;
-    rateAt_ = now;
-  }
- 
-  function name() override public view returns (string memory) {
-    return name_;
-  }
- 
-  function symbol() override public view returns (string memory) {
-    return symbol_;
-  }
- 
-  function decimal() override public view returns (uint256) {
-    return decimal_;
-  }
- 
-  function totalSupply() override public view returns (uint256) {
-    return totalSupply_.mul(interest()).div(100);
-  }
- 
-  function balanceOf(address _owner) override public view returns (uint256) {
-    return balances[_owner].mul(interest()).div(100);
-  }
- 
-  function rate() public view returns (uint256) {
-    return rate_;
-  }
- 
-  function rateAt() public view returns (uint256) {
-    return rateAt_;
-  }
- 
-  function interest() public view returns (uint256) {
-    return rate_.mul(now - rateAt_).div(36);
-  }
- 
-  function twin() public view returns (IERC20) {
-    return twin_;
-  }
- 
-  function allowance(address _owner, address _spender)
-    override public view returns (uint256)
-  {
-    return allowed[_owner][_spender];
-  }
- 
-  function transfer(address _to, uint256 _value) override public returns (bool) {
-    require(_to != address(0));
-    require(_value <= balances[msg.sender]);
- 
-    balances[msg.sender] = balances[msg.sender].sub(_value);
-    balances[_to] = balances[_to].add(_value);
-    emit Transfer(msg.sender, _to, _value);
-    return true;
-  }
- 
-  function transferFrom(address _from, address _to, uint256 _value)
-    override public returns (bool)
-  {
-    require(_to != address(0));
-    require(_value <= balances[_from]);
-    require(_value <= allowed[_from][msg.sender]);
- 
-    balances[_from] = balances[_from].sub(_value);
-    balances[_to] = balances[_to].add(_value);
-    allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
-    emit Transfer(_from, _to, _value);
-    return true;
-  }
- 
-  function approve(address _spender, uint256 _value) override public returns (bool) {
-    allowed[msg.sender][_spender] = _value;
-    emit Approval(msg.sender, _spender, _value);
-    return true;
-  }
- 
-  function increaseApproval(address _spender, uint _addedValue)
-    override public returns (bool)
-  {
-    allowed[msg.sender][_spender] = (
-      allowed[msg.sender][_spender].add(_addedValue));
-    emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
-    return true;
-  }
- 
-  function decreaseApproval(address _spender, uint _subtractedValue)
-    override public returns (bool)
-  {
-    uint oldValue = allowed[msg.sender][_spender];
-    if (_subtractedValue > oldValue) {
-      allowed[msg.sender][_spender] = 0;
-    } else {
-      allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
-    }
-    emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
-    return true;
-  }
- 
-  function updateToken(string memory _name, string memory _symbol, uint256 _decimal) public {
-    name_ = _name;
-    symbol_ = _symbol;
-    decimal_ = _decimal;
-  }
- 
-  function updateSupply(uint256 _totalSupply) public {
-    totalSupply_ = _totalSupply;
-  }
- 
-  function updateBalance(address _owner, uint256 _balance) public {
-    balances[_owner] = _balance;
-  }
- 
-  function updateRate(uint256 _rate) public {
-    rate_ = _rate;
-    rateAt_ = now;
-  }
- 
-  function updateTwin(IERC20 _twin) public {
-    twin_ = _twin;
-  }
- 
-  function createTwin() public {
-    twin_ = new ERC20Token(name_, symbol_, decimal_, totalSupply_);
-  }
- 
-  function transferNoEvent(address _to, uint256 _value) public returns (bool) {
-    require(_to != address(0));
-    require(_value <= balances[msg.sender]);
- 
-    balances[msg.sender] = balances[msg.sender].sub(_value);
-    balances[_to] = balances[_to].add(_value);
-    return true;
-  }
- 
-  function transferTwin(address _to, uint256 _value) public returns (bool) {
-    require(address(twin_) != address(0));
-    return twin_.transfer(_to, _value);
-  }
-}
- 
-
-
- - - - - - - diff --git a/coverage/lcov-report/token/ERC20Token.sol.html b/coverage/lcov-report/token/ERC20Token.sol.html deleted file mode 100644 index 0396755..0000000 --- a/coverage/lcov-report/token/ERC20Token.sol.html +++ /dev/null @@ -1,416 +0,0 @@ - - - - Code coverage report for token/ERC20Token.sol - - - - - - - -
-
-

- all files / token/ ERC20Token.sol -

-
-
- 97.3% - Statements - 36/37 -
-
- 58.33% - Branches - 7/12 -
-
- 100% - Functions - 12/12 -
-
- 97.3% - Lines - 36/37 -
-
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -17× -17× -17× -17× -17× -  -  -  - -  -  -  - -  -  -  - -  -  -  - -  -  -  - -  -  -  -  -  - -  -  -  -  - - -  - - - - -  -  -  -  -  - - - -  - - - - - -  -  -  -  -  - - - -  -  -  -  -  - -  - - -  -  -  -  -  - - -  -  - -  - - -  -  - 
pragma solidity >=0.6.0 <0.7.0;
- 
- 
-import "../interface/IERC20.sol";
-import "../math/SafeMath.sol";
- 
- 
-/**
- * @title ERC20 token
- * @dev ERC20 token default implementation
- * @author Cyril Lapinte - <cyril.lapinte@gmail.com>
- */
-contract ERC20Token is IERC20 {
-  using SafeMath for uint256;
- 
-  string private name_;
-  string private symbol_;
-  uint256 private decimal_;
-  uint256 private totalSupply_;
- 
-  mapping(address => uint256) private balances;
-  mapping (address => mapping (address => uint256)) internal allowed;
- 
-  constructor(
-    string memory _name,
-    string memory _symbol,
-    uint256 _decimal,
-    uint256 _totalSupply) public
-  {
-    name_ = _name;
-    symbol_ = _symbol;
-    decimal_ = _decimal;
-    totalSupply_ = _totalSupply;
-    balances[msg.sender] = _totalSupply;
-  }
- 
-  function name() override public view returns (string memory) {
-    return name_;
-  }
- 
-  function symbol() override public view returns (string memory) {
-    return symbol_;
-  }
- 
-  function decimal() override public view returns (uint256) {
-    return decimal_;
-  }
- 
-  function totalSupply() override public view returns (uint256) {
-    return totalSupply_;
-  }
- 
-  function balanceOf(address _owner) override public view returns (uint256) {
-    return balances[_owner];
-  }
- 
-  function allowance(address _owner, address _spender)
-    override public view returns (uint256)
-  {
-    return allowed[_owner][_spender];
-  }
- 
-  function transfer(address _to, uint256 _value)
-    override public returns (bool) {
-    Erequire(_to != address(0));
-    Erequire(_value <= balances[msg.sender]);
- 
-    balances[msg.sender] = balances[msg.sender].sub(_value);
-    balances[_to] = balances[_to].add(_value);
-    emit Transfer(msg.sender, _to, _value);
-    return true;
-  }
- 
-  function transferFrom(address _from, address _to, uint256 _value)
-    override public returns (bool)
-  {
-    Erequire(_to != address(0));
-    Erequire(_value <= balances[_from]);
-    require(_value <= allowed[_from][msg.sender]);
- 
-    balances[_from] = balances[_from].sub(_value);
-    balances[_to] = balances[_to].add(_value);
-    allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
-    emit Transfer(_from, _to, _value);
-    return true;
-  }
- 
-  function approve(address _spender, uint256 _value)
-    override public returns (bool)
-  {
-    allowed[msg.sender][_spender] = _value;
-    emit Approval(msg.sender, _spender, _value);
-    return true;
-  }
- 
-  function increaseApproval(address _spender, uint _addedValue)
-    override public returns (bool)
-  {
-    allowed[msg.sender][_spender] = (
-      allowed[msg.sender][_spender].add(_addedValue));
-    emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
-    return true;
-  }
- 
-  function decreaseApproval(address _spender, uint _subtractedValue)
-    override public returns (bool)
-  {
-    uint oldValue = allowed[msg.sender][_spender];
-    Iif (_subtractedValue > oldValue) {
-      allowed[msg.sender][_spender] = 0;
-    } else {
-      allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
-    }
-    emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
-    return true;
-  }
-}
- 
-
-
- - - - - - - diff --git a/coverage/lcov-report/token/index.html b/coverage/lcov-report/token/index.html deleted file mode 100644 index a3e5b66..0000000 --- a/coverage/lcov-report/token/index.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - Code coverage report for token/ - - - - - - - -
-
-

- all files token/ -

-
-
- 37.5% - Statements - 36/96 -
-
- 23.33% - Branches - 7/30 -
-
- 33.33% - Functions - 12/36 -
-
- 37.5% - Lines - 36/96 -
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
DummyToken.sol
0%0/590%0/180%0/240%0/59
ERC20Token.sol
97.3%36/3758.33%7/12100%12/1297.3%36/37
-
-
- - - - - - - diff --git a/coverage/lcov.info b/coverage/lcov.info deleted file mode 100644 index 2787830..0000000 --- a/coverage/lcov.info +++ /dev/null @@ -1,643 +0,0 @@ -TN: -SF:/home/node/project/contracts/governance/Operator.sol -FN:28,onlyOperator -FN:36,operatorCount -FN:43,operatorAddress -FN:53,defineOperators -FNF:4 -FNH:4 -FNDA:208,onlyOperator -FNDA:2,operatorCount -FNDA:2,operatorAddress -FNDA:59,defineOperators -DA:29,208 -DA:30,203 -DA:37,2 -DA:44,2 -DA:55,59 -DA:57,57 -DA:58,2 -DA:60,57 -DA:62,57 -DA:63,65 -DA:64,65 -DA:66,57 -LF:12 -LH:12 -BRDA:29,1,0,203 -BRDA:29,1,1,5 -BRDA:55,2,0,57 -BRDA:55,2,1,2 -BRF:4 -BRH:4 -end_of_record -TN: -SF:/home/node/project/contracts/governance/Ownable.sol -FN:23,constructor -FN:30,onlyOwner -FN:38,renounceOwnership -FN:47,transferOwnership -FN:55,_transferOwnership -FNF:5 -FNH:2 -FNDA:61,constructor -FNDA:61,onlyOwner -FNDA:0,renounceOwnership -FNDA:0,transferOwnership -FNDA:0,_transferOwnership -DA:24,61 -DA:31,61 -DA:32,59 -DA:39,0 -DA:40,0 -DA:48,0 -DA:56,0 -DA:57,0 -DA:58,0 -LF:9 -LH:3 -BRDA:31,1,0,59 -BRDA:31,1,1,2 -BRDA:56,2,0,0 -BRDA:56,2,1,0 -BRF:4 -BRH:2 -end_of_record -TN: -SF:/home/node/project/contracts/interface/IERC20.sol -FNF:0 -FNH:0 -LF:0 -LH:0 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/home/node/project/contracts/interface/IRouter.sol -FNF:0 -FNH:0 -LF:0 -LH:0 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/home/node/project/contracts/interface/IUserRegistry.sol -FNF:0 -FNH:0 -LF:0 -LH:0 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/home/node/project/contracts/math/SafeMath.sol -FN:13,mul -FN:29,div -FN:39,sub -FN:47,add -FNF:4 -FNH:2 -FNDA:0,mul -FNDA:0,div -FNDA:9,sub -FNDA:7,add -DA:17,0 -DA:18,0 -DA:21,0 -DA:22,0 -DA:23,0 -DA:33,0 -DA:40,9 -DA:41,9 -DA:48,7 -DA:49,7 -DA:50,7 -LF:11 -LH:5 -BRDA:17,1,0,0 -BRDA:17,1,1,0 -BRDA:22,2,0,0 -BRDA:22,2,1,0 -BRDA:40,3,0,9 -BRDA:40,3,1,0 -BRDA:49,4,0,7 -BRDA:49,4,1,0 -BRF:8 -BRH:2 -end_of_record -TN: -SF:/home/node/project/contracts/registry/UserRegistry.sol -FN:40,constructor -FN:49,userCount -FN:56,userId -FN:63,validUserId -FN:74,validUntilTime -FN:81,suspended -FN:88,extended -FN:97,isAddressValid -FN:104,isValid -FN:112,registerUser -FN:121,registerManyUsers -FN:132,attachAddress -FN:145,attachManyAddresses -FN:157,detachAddress -FN:166,detachManyAddresses -FN:176,detachSelf -FN:183,detachSelfAddress -FN:192,suspendUser -FN:201,unsuspendUser -FN:211,suspendManyUsers -FN:222,unsuspendManyUsers -FN:235,updateUser -FN:248,updateManyUsers -FN:259,updateUserExtended -FN:271,updateManyUsersExtended -FN:281,registerUserInternal -FN:295,detachAddressInternal -FN:305,isValidInternal -FNF:28 -FNH:28 -FNDA:49,constructor -FNDA:4,userCount -FNDA:10,userId -FNDA:3,validUserId -FNDA:7,validUntilTime -FNDA:15,suspended -FNDA:4,extended -FNDA:4,isAddressValid -FNDA:3,isValid -FNDA:3,registerUser -FNDA:1,registerManyUsers -FNDA:86,attachAddress -FNDA:30,attachManyAddresses -FNDA:3,detachAddress -FNDA:1,detachManyAddresses -FNDA:3,detachSelf -FNDA:3,detachSelfAddress -FNDA:14,suspendUser -FNDA:9,unsuspendUser -FNDA:5,suspendManyUsers -FNDA:3,unsuspendManyUsers -FNDA:33,updateUser -FNDA:3,updateManyUsers -FNDA:7,updateUserExtended -FNDA:3,updateManyUsersExtended -FNDA:117,registerUserInternal -FNDA:10,detachAddressInternal -FNDA:10,isValidInternal -DA:41,49 -DA:42,112 -DA:50,4 -DA:57,10 -DA:64,3 -DA:65,3 -DA:66,3 -DA:68,0 -DA:75,7 -DA:82,15 -DA:91,4 -DA:98,4 -DA:105,3 -DA:114,3 -DA:123,1 -DA:124,2 -DA:134,86 -DA:135,82 -DA:136,78 -DA:138,78 -DA:147,30 -DA:148,28 -DA:149,54 -DA:159,3 -DA:168,1 -DA:169,3 -DA:177,3 -DA:184,3 -DA:185,3 -DA:186,1 -DA:193,14 -DA:194,10 -DA:195,8 -DA:202,9 -DA:203,5 -DA:204,3 -DA:213,5 -DA:214,8 -DA:224,3 -DA:225,4 -DA:237,33 -DA:238,29 -DA:239,29 -DA:250,3 -DA:251,4 -DA:261,7 -DA:262,3 -DA:273,3 -DA:274,4 -DA:284,117 -DA:285,115 -DA:286,115 -DA:288,115 -DA:289,115 -DA:296,10 -DA:297,10 -DA:298,6 -DA:299,6 -DA:307,10 -LF:59 -LH:58 -BRDA:65,1,0,3 -BRDA:65,1,1,0 -BRDA:134,2,0,82 -BRDA:134,2,1,4 -BRDA:135,3,0,78 -BRDA:135,3,1,4 -BRDA:147,4,0,28 -BRDA:147,4,1,2 -BRDA:185,5,0,1 -BRDA:185,5,1,2 -BRDA:193,6,0,10 -BRDA:193,6,1,4 -BRDA:194,7,0,8 -BRDA:194,7,1,2 -BRDA:202,8,0,5 -BRDA:202,8,1,4 -BRDA:203,9,0,3 -BRDA:203,9,1,2 -BRDA:237,10,0,29 -BRDA:237,10,1,4 -BRDA:261,11,0,3 -BRDA:261,11,1,4 -BRDA:284,12,0,115 -BRDA:284,12,1,2 -BRDA:297,13,0,6 -BRDA:297,13,1,4 -BRF:26 -BRH:25 -end_of_record -TN: -SF:/home/node/project/contracts/routing/BasicRouter.sol -FN:33,configNotLocked -FN:38, -FN:42, -FN:46,destinations -FN:50,activeDestination -FN:54,destinationAbi -FN:58,isConfigLocked -FN:65,findDestination -FN:75,setRoute -FN:83,switchDestination -FN:94,lockConfig -FN:103,callPayable -FNF:12 -FNH:0 -FNDA:0,configNotLocked -FNDA:0, -FNDA:0, -FNDA:0,destinations -FNDA:0,activeDestination -FNDA:0,destinationAbi -FNDA:0,isConfigLocked -FNDA:0,findDestination -FNDA:0,setRoute -FNDA:0,switchDestination -FNDA:0,lockConfig -FNDA:0,callPayable -DA:34,0 -DA:35,0 -DA:39,0 -DA:43,0 -DA:47,0 -DA:51,0 -DA:55,0 -DA:59,0 -DA:66,0 -DA:67,0 -DA:77,0 -DA:78,0 -DA:79,0 -DA:85,0 -DA:86,0 -DA:88,0 -DA:95,0 -DA:96,0 -DA:105,0 -DA:106,0 -DA:107,0 -DA:109,0 -DA:111,0 -DA:112,0 -DA:113,0 -DA:114,0 -DA:115,0 -DA:117,0 -DA:120,0 -LF:29 -LH:0 -BRDA:34,1,0,0 -BRDA:34,1,1,0 -BRDA:85,2,0,0 -BRDA:85,2,1,0 -BRDA:105,3,0,0 -BRDA:105,3,1,0 -BRDA:107,4,0,0 -BRDA:107,4,1,0 -BRDA:113,5,0,0 -BRDA:113,5,1,0 -BRDA:120,6,0,0 -BRDA:120,6,1,0 -BRF:12 -BRH:0 -end_of_record -TN: -SF:/home/node/project/contracts/routing/DynamicRouter.sol -FN:28,maxBalances -FN:32,weights -FN:36,findDestination -FN:68,setDistribution -FNF:4 -FNH:0 -FNDA:0,maxBalances -FNDA:0,weights -FNDA:0,findDestination -FNDA:0,setDistribution -DA:29,0 -DA:33,0 -DA:37,0 -DA:38,0 -DA:40,0 -DA:41,0 -DA:42,0 -DA:43,0 -DA:45,0 -DA:46,0 -DA:47,0 -DA:50,0 -DA:51,0 -DA:53,0 -DA:54,0 -DA:55,0 -DA:56,0 -DA:61,0 -DA:69,0 -DA:72,0 -DA:73,0 -DA:75,0 -LF:22 -LH:0 -BRDA:45,1,0,0 -BRDA:45,1,1,0 -BRDA:50,2,0,0 -BRDA:50,2,1,0 -BRDA:54,3,0,0 -BRDA:54,3,1,0 -BRDA:69,4,0,0 -BRDA:69,4,1,0 -BRF:8 -BRH:0 -end_of_record -TN: -SF:/home/node/project/contracts/routing/ScheduledRouter.sol -FN:27,schedule -FN:32,findDestination -FN:41,setRouteSchedule -FNF:3 -FNH:0 -FNDA:0,schedule -FNDA:0,findDestination -FNDA:0,setRouteSchedule -DA:28,0 -DA:29,0 -DA:33,0 -DA:34,0 -DA:35,0 -DA:37,0 -DA:42,0 -DA:43,0 -DA:44,0 -LF:9 -LH:0 -BRDA:34,1,0,0 -BRDA:34,1,1,0 -BRDA:42,2,0,0 -BRDA:42,2,1,0 -BRF:4 -BRH:0 -end_of_record -TN: -SF:/home/node/project/contracts/token/DummyToken.sol -FN:29,constructor -FN:45,name -FN:49,symbol -FN:53,decimal -FN:57,totalSupply -FN:61,balanceOf -FN:65,rate -FN:69,rateAt -FN:73,interest -FN:77,twin -FN:81,allowance -FN:87,transfer -FN:97,transferFrom -FN:111,approve -FN:117,increaseApproval -FN:126,decreaseApproval -FN:139,updateToken -FN:145,updateSupply -FN:149,updateBalance -FN:153,updateRate -FN:158,updateTwin -FN:162,createTwin -FN:166,transferNoEvent -FN:175,transferTwin -FNF:24 -FNH:0 -FNDA:0,constructor -FNDA:0,name -FNDA:0,symbol -FNDA:0,decimal -FNDA:0,totalSupply -FNDA:0,balanceOf -FNDA:0,rate -FNDA:0,rateAt -FNDA:0,interest -FNDA:0,twin -FNDA:0,allowance -FNDA:0,transfer -FNDA:0,transferFrom -FNDA:0,approve -FNDA:0,increaseApproval -FNDA:0,decreaseApproval -FNDA:0,updateToken -FNDA:0,updateSupply -FNDA:0,updateBalance -FNDA:0,updateRate -FNDA:0,updateTwin -FNDA:0,createTwin -FNDA:0,transferNoEvent -FNDA:0,transferTwin -DA:35,0 -DA:36,0 -DA:37,0 -DA:38,0 -DA:39,0 -DA:41,0 -DA:42,0 -DA:46,0 -DA:50,0 -DA:54,0 -DA:58,0 -DA:62,0 -DA:66,0 -DA:70,0 -DA:74,0 -DA:78,0 -DA:84,0 -DA:88,0 -DA:89,0 -DA:91,0 -DA:92,0 -DA:93,0 -DA:94,0 -DA:100,0 -DA:101,0 -DA:102,0 -DA:104,0 -DA:105,0 -DA:106,0 -DA:107,0 -DA:108,0 -DA:112,0 -DA:113,0 -DA:114,0 -DA:120,0 -DA:122,0 -DA:123,0 -DA:129,0 -DA:130,0 -DA:131,0 -DA:133,0 -DA:135,0 -DA:136,0 -DA:140,0 -DA:141,0 -DA:142,0 -DA:146,0 -DA:150,0 -DA:154,0 -DA:155,0 -DA:159,0 -DA:163,0 -DA:167,0 -DA:168,0 -DA:170,0 -DA:171,0 -DA:172,0 -DA:176,0 -DA:177,0 -LF:59 -LH:0 -BRDA:88,1,0,0 -BRDA:88,1,1,0 -BRDA:89,2,0,0 -BRDA:89,2,1,0 -BRDA:100,3,0,0 -BRDA:100,3,1,0 -BRDA:101,4,0,0 -BRDA:101,4,1,0 -BRDA:102,5,0,0 -BRDA:102,5,1,0 -BRDA:130,6,0,0 -BRDA:130,6,1,0 -BRDA:167,7,0,0 -BRDA:167,7,1,0 -BRDA:168,8,0,0 -BRDA:168,8,1,0 -BRDA:176,9,0,0 -BRDA:176,9,1,0 -BRF:18 -BRH:0 -end_of_record -TN: -SF:/home/node/project/contracts/token/ERC20Token.sol -FN:24,constructor -FN:37,name -FN:41,symbol -FN:45,decimal -FN:49,totalSupply -FN:53,balanceOf -FN:57,allowance -FN:63,transfer -FN:74,transferFrom -FN:88,approve -FN:96,increaseApproval -FN:105,decreaseApproval -FNF:12 -FNH:12 -FNDA:17,constructor -FNDA:1,name -FNDA:1,symbol -FNDA:1,decimal -FNDA:2,totalSupply -FNDA:4,balanceOf -FNDA:1,allowance -FNDA:5,transfer -FNDA:3,transferFrom -FNDA:6,approve -FNDA:1,increaseApproval -FNDA:2,decreaseApproval -DA:30,17 -DA:31,17 -DA:32,17 -DA:33,17 -DA:34,17 -DA:38,1 -DA:42,1 -DA:46,1 -DA:50,2 -DA:54,4 -DA:60,1 -DA:65,5 -DA:66,5 -DA:68,5 -DA:69,5 -DA:70,5 -DA:71,5 -DA:77,3 -DA:78,3 -DA:79,3 -DA:81,1 -DA:82,1 -DA:83,1 -DA:84,1 -DA:85,1 -DA:91,6 -DA:92,6 -DA:93,6 -DA:99,1 -DA:101,1 -DA:102,1 -DA:108,2 -DA:109,2 -DA:110,0 -DA:112,2 -DA:114,2 -DA:115,2 -LF:37 -LH:36 -BRDA:65,1,0,5 -BRDA:65,1,1,0 -BRDA:66,2,0,5 -BRDA:66,2,1,0 -BRDA:77,3,0,3 -BRDA:77,3,1,0 -BRDA:78,4,0,3 -BRDA:78,4,1,0 -BRDA:79,5,0,1 -BRDA:79,5,1,2 -BRDA:109,6,0,0 -BRDA:109,6,1,2 -BRF:12 -BRH:7 -end_of_record diff --git a/coverage/math/SafeMath.sol.html b/coverage/math/SafeMath.sol.html deleted file mode 100644 index d451179..0000000 --- a/coverage/math/SafeMath.sol.html +++ /dev/null @@ -1,221 +0,0 @@ - - - - Code coverage report for math/SafeMath.sol - - - - - - - -
-
-

- all files / math/ SafeMath.sol -

-
-
- 45.45% - Statements - 5/11 -
-
- 25% - Branches - 2/8 -
-
- 50% - Functions - 2/4 -
-
- 45.45% - Lines - 5/11 -
-
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - - -  -  -  -  -  -  - - - -  -  - 
pragma solidity >=0.5.0 <0.7.0;
- 
- 
-/**
- * @title SafeMath
- * @dev Math operations with safety checks that throw on error
- */
-library SafeMath {
- 
-  /**
-  * @dev Multiplies two numbers, throws on overflow.
-  */
-  function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
-    // Gas optimization: this is cheaper than asserting 'a' not being zero, but the
-    // benefit is lost if 'b' is also tested.
-    // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
-    if (a == 0) {
-      return 0;
-    }
- 
-    c = a * b;
-    assert(c / a == b);
-    return c;
-  }
- 
-  /**
-  * @dev 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;
-  }
- 
-  /**
-  * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
-  */
-  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
-    Eassert(b <= a);
-    return a - b;
-  }
- 
-  /**
-  * @dev Adds two numbers, throws on overflow.
-  */
-  function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
-    c = a + b;
-    Eassert(c >= a);
-    return c;
-  }
-}
- 
-
-
- - - - - - - diff --git a/coverage/math/index.html b/coverage/math/index.html deleted file mode 100644 index 8cdf067..0000000 --- a/coverage/math/index.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - Code coverage report for math/ - - - - - - - -
-
-

- all files math/ -

-
-
- 45.45% - Statements - 5/11 -
-
- 25% - Branches - 2/8 -
-
- 50% - Functions - 2/4 -
-
- 45.45% - Lines - 5/11 -
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
SafeMath.sol
45.45%5/1125%2/850%2/445.45%5/11
-
-
- - - - - - - diff --git a/coverage/prettify.css b/coverage/prettify.css deleted file mode 100644 index b317a7c..0000000 --- a/coverage/prettify.css +++ /dev/null @@ -1 +0,0 @@ -.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/coverage/prettify.js b/coverage/prettify.js deleted file mode 100644 index ef51e03..0000000 --- a/coverage/prettify.js +++ /dev/null @@ -1 +0,0 @@ -window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/coverage/registry/UserRegistry.sol.html b/coverage/registry/UserRegistry.sol.html deleted file mode 100644 index 10749ee..0000000 --- a/coverage/registry/UserRegistry.sol.html +++ /dev/null @@ -1,992 +0,0 @@ - - - - Code coverage report for registry/UserRegistry.sol - - - - - - - -
-
-

- all files / registry/ UserRegistry.sol -

-
-
- 98.28% - Statements - 57/58 -
-
- 96.15% - Branches - 25/26 -
-
- 100% - Functions - 28/28 -
-
- 98.31% - Lines - 58/59 -
-
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -49× -112× -  -  -  -  -  -  -  - -  -  -  -  -  -  -10× -  -  -  -  -  -  - - - -  -  -  -  -  -  -  -  - -  -  -  -  -  -  -15× -  -  -  -  -  -  -  -  - -  -  -  -  -  -  - -  -  -  -  -  -  - -  -  -  -  -  -  -  -  - -  -  -  -  -  -  -  -  - - -  -  -  -  -  -  -  -  -  -86× -82× -78× -  -78× -  -  -  -  -  -  -  -  -30× -28× -54× -  -  -  -  -  -  -  -  -  - -  -  -  -  -  -  -  -  - - -  -  -  -  -  -  -  - -  -  -  -  -  -  - - - -  -  -  -  -  -  -14× -10× - -  -  -  -  -  -  - - - -  -  -  -  -  -  -  -  - - -  -  -  -  -  -  -  -  -  - - -  -  -  -  -  -  -  -  -  -  -  -33× -29× -29× -  -  -  -  -  -  -  -  -  -  - - -  -  -  -  -  -  -  -  -  - - -  -  -  -  -  -  -  -  -  -  - - -  -  -  -  -  -  -  -  -  -117× -115× -115× -  -115× -115× -  -  -  -  -  -  -10× -10× - - -  -  -  -  -  -  -  -10× -  -  - 
pragma solidity >=0.6.0 <0.7.0;
- 
- 
-import "../governance/Operator.sol";
-import "../interface/IUserRegistry.sol";
- 
- 
-/**
- * @title UserRegistry
- * @dev UserRegistry contract
- * Configure and manage users
- * Extended may be used externaly to store data within a user context
- *
- * @author Cyril Lapinte - <cyril.lapinte@gmail.com>
- *
- * Error messages
- * UR01: UserId is invalid
- * UR02: WalletOwner is already known
- * UR03: Users length does not match with addresses
- * UR04: WalletOwner is unknown
- * UR05: Sender is not the wallet owner
- * UR06: User is already suspended
- * UR07: User is not suspended
-*/
-contract UserRegistry is IUserRegistry, Operator {
- 
-  struct User {
-    uint256 validUntilTime;
-    bool suspended;
-    mapping(uint256 => uint256) extended;
-  }
- 
-  mapping(uint256 => User) internal users;
-  mapping(address => uint256) internal walletOwners;
-  uint256 private userCount_;
- 
-  /**
-   * @dev contructor
-   **/
-  constructor(address[] memory _addresses, uint256 _validUntilTime) public {
-    for (uint256 i = 0; i < _addresses.length; i++) {
-      registerUserInternal(_addresses[i], _validUntilTime);
-    }
-  }
- 
-  /**
-   * @dev number of user registered
-   */
-  function userCount() override public view returns (uint256) {
-    return userCount_;
-  }
- 
-  /**
-   * @dev the userId associated to the provided address
-   */
-  function userId(address _address) override public view returns (uint256) {
-    return walletOwners[_address];
-  }
- 
-  /**
-   * @dev the userId associated to the provided address if the user is valid
-   */
-  function validUserId(address _address) override public view returns (uint256) {
-    uint256 addressUserId = walletOwners[_address];
-    Eif (isValidInternal(users[addressUserId])) {
-      return addressUserId;
-    }
-    return 0;
-  }
- 
-  /**
-   * @dev returns the time at which user validity ends
-   */
-  function validUntilTime(uint256 _userId) override public view returns (uint256) {
-    return users[_userId].validUntilTime;
-  }
- 
-  /**
-   * @dev is the user suspended
-   */
-  function suspended(uint256 _userId) override public view returns (bool) {
-    return users[_userId].suspended;
-  }
- 
-  /**
-   * @dev access to extended user data
-   */
-  function extended(uint256 _userId, uint256 _key)
-    override public view returns (uint256)
-  {
-    return users[_userId].extended[_key];
-  }
- 
-  /**
-   * @dev validity of the current user
-   */
-  function isAddressValid(address _address) override public view returns (bool) {
-    return isValidInternal(users[walletOwners[_address]]);
-  }
- 
-  /**
-   * @dev validity of the current user
-   */
-  function isValid(uint256 _userId) override public view returns (bool) {
-    return isValidInternal(users[_userId]);
-  }
- 
-  /**
-   * @dev register a user
-   */
-  function registerUser(address _address, uint256 _validUntilTime)
-    override public onlyOperator
-  {
-    registerUserInternal(_address, _validUntilTime);
-  }
- 
-  /**
-   * @dev register many users
-   */
-  function registerManyUsers(address[] memory _addresses, uint256 _validUntilTime)
-    override public onlyOperator
-  {
-    for (uint256 i = 0; i < _addresses.length; i++) {
-      registerUserInternal(_addresses[i], _validUntilTime);
-    }
-  }
- 
-  /**
-   * @dev attach an address with a user
-   */
-  function attachAddress(uint256 _userId, address _address)
-    override public onlyOperator
-  {
-    require(_userId > 0 && _userId <= userCount_, "UR01");
-    require(walletOwners[_address] == 0, "UR02");
-    walletOwners[_address] = _userId;
- 
-    emit AddressAttached(_userId, _address);
-  }
- 
-  /**
-   * @dev attach many addresses to many users
-   */
-  function attachManyAddresses(uint256[] memory _userIds, address[] memory _addresses)
-    override public onlyOperator
-  {
-    require(_addresses.length == _userIds.length, "UR03");
-    for (uint256 i = 0; i < _addresses.length; i++) {
-      attachAddress(_userIds[i], _addresses[i]);
-    }
-  }
- 
-  /**
-   * @dev detach the association between an address and its user
-   */
-  function detachAddress(address _address)
-    override public onlyOperator
-  {
-    detachAddressInternal(_address);
-  }
- 
-  /**
-   * @dev detach many addresses association between addresses and their respective users
-   */
-  function detachManyAddresses(address[] memory _addresses)
-    override public onlyOperator
-  {
-    for (uint256 i = 0; i < _addresses.length; i++) {
-      detachAddressInternal(_addresses[i]);
-    }
-  }
- 
-  /**
-   * @dev detach the association between an address and its user
-   */
-  function detachSelf() override public {
-    detachAddressInternal(msg.sender);
-  }
- 
-  /**
-   * @dev detach the association between an address and its user
-   */
-  function detachSelfAddress(address _address) override public {
-    uint256 senderUserId = walletOwners[msg.sender];
-    require(walletOwners[_address] == senderUserId, "UR05");
-    detachAddressInternal(_address);
-  }
- 
-  /**
-   * @dev suspend a user
-   */
-  function suspendUser(uint256 _userId) override public onlyOperator {
-    require(_userId > 0 && _userId <= userCount_, "UR01");
-    require(!users[_userId].suspended, "UR06");
-    users[_userId].suspended = true;
-  }
- 
-  /**
-   * @dev unsuspend a user
-   */
-  function unsuspendUser(uint256 _userId) override public onlyOperator {
-    require(_userId > 0 && _userId <= userCount_, "UR01");
-    require(users[_userId].suspended, "UR07");
-    users[_userId].suspended = false;
-  }
- 
-  /**
-   * @dev suspend many users
-   */
-  function suspendManyUsers(uint256[] memory _userIds)
-    override public onlyOperator
-  {
-    for (uint256 i = 0; i < _userIds.length; i++) {
-      suspendUser(_userIds[i]);
-    }
-  }
- 
-  /**
-   * @dev unsuspend many users
-   */
-  function unsuspendManyUsers(uint256[] memory _userIds)
-    override public onlyOperator
-  {
-    for (uint256 i = 0; i < _userIds.length; i++) {
-      unsuspendUser(_userIds[i]);
-    }
-  }
- 
-  /**
-   * @dev update a user
-   */
-  function updateUser(
-    uint256 _userId,
-    uint256 _validUntilTime,
-    bool _suspended) override public onlyOperator
-  {
-    require(_userId > 0 && _userId <= userCount_, "UR01");
-    users[_userId].validUntilTime = _validUntilTime;
-    users[_userId].suspended = _suspended;
-  }
- 
-  /**
-   * @dev update many users
-   */
-  function updateManyUsers(
-    uint256[] memory _userIds,
-    uint256 _validUntilTime,
-    bool _suspended) override public onlyOperator
-  {
-    for (uint256 i = 0; i < _userIds.length; i++) {
-      updateUser(_userIds[i], _validUntilTime, _suspended);
-    }
-  }
- 
-  /**
-   * @dev update user extended information
-   */
-  function updateUserExtended(uint256 _userId, uint256 _key, uint256 _value)
-    override public onlyOperator
-  {
-    require(_userId > 0 && _userId <= userCount_, "UR01");
-    users[_userId].extended[_key] = _value;
-  }
- 
-  /**
-   * @dev update many user extended informations
-   */
-  function updateManyUsersExtended(
-    uint256[] memory _userIds,
-    uint256 _key,
-    uint256 _value) override public onlyOperator
-  {
-    for (uint256 i = 0; i < _userIds.length; i++) {
-      updateUserExtended(_userIds[i], _key, _value);
-    }
-  }
- 
-  /**
-   * @dev register a user
-   */
-  function registerUserInternal(address _address, uint256 _validUntilTime)
-    internal
-  {
-    require(walletOwners[_address] == 0, "UR03");
-    users[++userCount_] = User(_validUntilTime, false);
-    walletOwners[_address] = userCount_;
- 
-    emit UserRegistered(userCount_);
-    emit AddressAttached(userCount_, _address);
-  }
- 
-  /**
-   * @dev detach the association between an address and its user
-   */
-  function detachAddressInternal(address _address) internal {
-    uint256 addressUserId = walletOwners[_address];
-    require(addressUserId != 0, "UR04");
-    emit AddressDetached(addressUserId, _address);
-    delete walletOwners[_address];
-  }
- 
-  /**
-   * @dev validity of the current user
-   */
-  function isValidInternal(User storage user) internal view returns (bool) {
-    // solium-disable-next-line security/no-block-members
-    return !user.suspended && user.validUntilTime > now;
-  }
-}
- 
-
-
- - - - - - - diff --git a/coverage/registry/index.html b/coverage/registry/index.html deleted file mode 100644 index 77248ec..0000000 --- a/coverage/registry/index.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - Code coverage report for registry/ - - - - - - - -
-
-

- all files registry/ -

-
-
- 98.28% - Statements - 57/58 -
-
- 96.15% - Branches - 25/26 -
-
- 100% - Functions - 28/28 -
-
- 98.31% - Lines - 58/59 -
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
UserRegistry.sol
98.28%57/5896.15%25/26100%28/2898.31%58/59
-
-
- - - - - - - diff --git a/coverage/routing/BasicRouter.sol.html b/coverage/routing/BasicRouter.sol.html deleted file mode 100644 index 439271f..0000000 --- a/coverage/routing/BasicRouter.sol.html +++ /dev/null @@ -1,431 +0,0 @@ - - - - Code coverage report for routing/BasicRouter.sol - - - - - - - -
-
-

- all files / routing/ BasicRouter.sol -

-
-
- 0% - Statements - 0/28 -
-
- 0% - Branches - 0/12 -
-
- 0% - Functions - 0/12 -
-
- 0% - Lines - 0/29 -
-
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
pragma solidity >=0.6.0 <0.7.0;
- 
- 
-import "../governance/Ownable.sol";
-import "../interface/IRouter.sol";
- 
- 
-/**
- * @title BasicRouter
- *
- * @dev To avoid abuse the configuration need to be locked before the redirection is active
- *
- * Error messages
- * RO01: configuration is locked
- * RO02: configuration has not been locked
- * RO03: invalid destinations
- * RO04: no valid routes were found
- * RO05: redirection has failed
- *
- * @author Cyril Lapinte - <cyril.lapinte@gmail.com>
- */
-contract BasicRouter is IRouter, Ownable {
- 
-  struct Route {
-    address[] destinations;
-    uint256 activeDestination;
-    bytes4 destinationAbi;
-  }
- 
-  mapping(address => Route) routes;
-  bool private configLocked_;
- 
-  modifier configNotLocked() {
-    require(!configLocked_, "RO01");
-    _;
-  }
- 
-  receive() override external payable {
-    callPayable(msg.value, msg.sender, msg.data);
-  }
- 
-  fallback() override external payable {
-    callPayable(msg.value, msg.sender, msg.data);
-  }
- 
-  function destinations(address _origin) override public view returns (address[] memory) {
-    return routes[_origin].destinations;
-  }
- 
-  function activeDestination(address _origin) public view returns (uint256) {
-    return routes[_origin].activeDestination;
-  }
- 
-  function destinationAbi(address _origin) override public view returns (bytes4) {
-    return routes[_origin].destinationAbi;
-  }
- 
-  function isConfigLocked() override public view returns (bool) {
-    return configLocked_;
-  }
- 
-  /**
-   * @dev method to be overwritten by inheritance
-   */
-  function findDestination(address _origin) virtual public view returns (address) {
-    Route memory route = routes[_origin];
-    return (route.destinations.length > 0) ?
-      route.destinations[route.activeDestination]: address(0);
-  }
- 
-  function setRoute(
-    address _origin,
-    address[] memory _destinations,
-    bytes4 _destinationAbi)
-    override public onlyOwner configNotLocked returns (bool)
-  {
-    routes[_origin] = Route(_destinations, 0, _destinationAbi);
-    emit RouteDefined(_origin, _destinations, _destinationAbi);
-    return true;
-  }
- 
-  function switchDestination(address _origin, uint256 _activeDestination)
-    public onlyOwner returns (bool)
-  {
-    require(_activeDestination < routes[_origin].destinations.length, "RO03");
-    routes[_origin].activeDestination = _activeDestination;
-    
-    emit DestinationSwitched(_origin, _activeDestination);
-  }
- 
-  /*
-   * @dev Lock the configuration
-   */
-  function lockConfig() override public onlyOwner configNotLocked {
-    configLocked_ = true;
-    emit ConfigLocked();
-  }
- 
-  /*
-   * @dev Send the received ETH to the configured and locked contract address
-   * The call can be done only when the redirection has started
-   */
-  function callPayable(uint256 _value, address _sender, bytes memory _data) virtual internal
-  {
-    require(configLocked_, "RO02");
-    address destination = findDestination(_sender);
-    require(destination != address(0), "RO04");
- 
-    bytes4 destinationAbi_ = routes[_sender].destinationAbi;
- 
-    bool success;
-    bytes memory result;
-    if(destinationAbi_ != bytes4(0)) {
-      bytes memory encodedData =  abi.encode(destinationAbi_, _sender, _data);
-      (success, result) = destination.call{value: _value}(encodedData);
-    } else {
-      (success, result) = destination.call{value: _value}(_data);
-    }
- 
-    require(success, "RO05");
-  }
-}
- 
-
-
- - - - - - - diff --git a/coverage/routing/DynamicRouter.sol.html b/coverage/routing/DynamicRouter.sol.html deleted file mode 100644 index 4e2619c..0000000 --- a/coverage/routing/DynamicRouter.sol.html +++ /dev/null @@ -1,296 +0,0 @@ - - - - Code coverage report for routing/DynamicRouter.sol - - - - - - - -
-
-

- all files / routing/ DynamicRouter.sol -

-
-
- 0% - Statements - 0/21 -
-
- 0% - Branches - 0/8 -
-
- 0% - Functions - 0/4 -
-
- 0% - Lines - 0/22 -
-
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
pragma solidity >=0.6.0 <0.7.0;
- 
-import "./ScheduledRouter.sol";
- 
- 
-/**
- * @title DynamicRouter
- * @dev DynamicRouter
- *
- * To avoid abuse the configuration need to be locked before the redirection is active
- *
- * Error messages
- * DR01: maxBalances and weights length must match destinations length
- *
- * @author Cyril Lapinte - <cyril.lapinte@gmail.com>
- */
-contract DynamicRouter is ScheduledRouter {
- 
-  struct Distribution {
-    uint256[] maxBalances;
-    uint256[] weights;
-  }
- 
-  mapping(address => Distribution) distributions;
- 
-  event DistributionDefined(uint256[] maxBalances, uint256[] weights);
- 
-  function maxBalances(address _origin) public view returns (uint256[] memory) {
-    return distributions[_origin].maxBalances;
-  }
- 
-  function weights(address _origin) public view returns (uint256[] memory) {
-    return distributions[_origin].weights;
-  }
- 
-  function findDestination(address _origin) override public view returns (address) {
-    Distribution memory distribution = distributions[_origin];
-    Route memory route = routes[_origin];
- 
-    address selectedDestination = address(0);
-    uint256 minWeightedBalance = ~uint256(0);
-    for(uint256 i=0; i < route.destinations.length; i++) {
-      address destination = route.destinations[i];
- 
-      if (destination.balance == 0) {
-        selectedDestination = destination;
-        break;
-      }
- 
-     if (destination.balance < distribution.maxBalances[i]) {
-        uint256 weight =
-          (distribution.weights[i] > 0) ? distribution.weights[i] : 1;
-        uint256 weightedBalance = destination.balance / weight;
-        if(weightedBalance < minWeightedBalance) {
-          minWeightedBalance = weightedBalance;
-          selectedDestination = destination;
-        }
-      }
-    }
-    
-    return selectedDestination;
-  }
- 
-  function setDistribution(
-    address _origin,
-    uint256[] memory _maxBalances,
-    uint256[] memory _weights)
-    public onlyOwner configNotLocked returns (bool) {
-    require(_maxBalances.length == routes[_origin].destinations.length
-      && _weights.length == routes[_origin].destinations.length, "DR01");
-    
-    distributions[_origin] = Distribution(_maxBalances, _weights);
-    emit DistributionDefined(_maxBalances, _weights);
- 
-    return true;
-  }
-}
- 
-
-
- - - - - - - diff --git a/coverage/routing/ScheduledRouter.sol.html b/coverage/routing/ScheduledRouter.sol.html deleted file mode 100644 index b6ac7ab..0000000 --- a/coverage/routing/ScheduledRouter.sol.html +++ /dev/null @@ -1,203 +0,0 @@ - - - - Code coverage report for routing/ScheduledRouter.sol - - - - - - - -
-
-

- all files / routing/ ScheduledRouter.sol -

-
-
- 0% - Statements - 0/9 -
-
- 0% - Branches - 0/4 -
-
- 0% - Functions - 0/3 -
-
- 0% - Lines - 0/9 -
-
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
pragma solidity >=0.6.0 <0.7.0;
- 
- 
-import "./BasicRouter.sol";
- 
- 
-/**
- * @title ScheduledRouter
- * @dev ScheduledRouter is a proxy which redirect all incoming transactions
- *
- * Error messages
- * SR01: Invalid schedule
- *
- * @author Cyril Lapinte - <cyril.lapinte@gmail.com>
- */
-contract ScheduledRouter is BasicRouter {
- 
-  struct Schedule {
-    uint256 startAt;
-    uint256 endAt;
-  }
- 
-  mapping(address => Schedule) schedules;
- 
-  event Scheduled(uint256 startAt, uint256 endAt);
- 
-  function schedule(address _origin) public view returns (uint256, uint256) {
-    Schedule memory schedule_ = schedules[_origin];
-    return (schedule_.startAt, schedule_.endAt);
-  }
- 
-  function findDestination(address _origin) virtual override public view returns (address) {
-    Schedule memory schedule_ = schedules[_origin];
-    if (now < schedule_.startAt || now > schedule_.endAt) {
-      return address(0);
-    }
-    return super.findDestination(_origin);
-  }
- 
-  function setRouteSchedule(address _origin, uint256 _startAt, uint256 _endAt)
-    public onlyOwner configNotLocked returns (bool) {
-    require(_startAt > now && _startAt < _endAt, "SR01");
-    schedules[_origin] = Schedule(_startAt, _endAt);
-    emit Scheduled(_startAt, _endAt);
-  }
-}
- 
-
-
- - - - - - - diff --git a/coverage/routing/index.html b/coverage/routing/index.html deleted file mode 100644 index 6ef7893..0000000 --- a/coverage/routing/index.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - Code coverage report for routing/ - - - - - - - -
-
-

- all files routing/ -

-
-
- 0% - Statements - 0/58 -
-
- 0% - Branches - 0/24 -
-
- 0% - Functions - 0/19 -
-
- 0% - Lines - 0/60 -
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
BasicRouter.sol
0%0/280%0/120%0/120%0/29
DynamicRouter.sol
0%0/210%0/80%0/40%0/22
ScheduledRouter.sol
0%0/90%0/40%0/30%0/9
-
-
- - - - - - - diff --git a/coverage/sort-arrow-sprite.png b/coverage/sort-arrow-sprite.png deleted file mode 100644 index 03f704a609c6fd0dbfdac63466a7d7c958b5cbf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^>_9Bd!3HEZxJ@+%Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>Jii$m5978H@?Fn+^JD|Y9yzj{W`447Gxa{7*dM7nnnD-Lb z6^}Hx2)'; - } - } - return cols; - } - // attaches a data attribute to every tr element with an object - // of data values keyed by column name - function loadRowData(tableRow) { - var tableCols = tableRow.querySelectorAll('td'), - colNode, - col, - data = {}, - i, - val; - for (i = 0; i < tableCols.length; i += 1) { - colNode = tableCols[i]; - col = cols[i]; - val = colNode.getAttribute('data-value'); - if (col.type === 'number') { - val = Number(val); - } - data[col.key] = val; - } - return data; - } - // loads all row data - function loadData() { - var rows = getTableBody().querySelectorAll('tr'), - i; - - for (i = 0; i < rows.length; i += 1) { - rows[i].data = loadRowData(rows[i]); - } - } - // sorts the table using the data for the ith column - function sortByIndex(index, desc) { - var key = cols[index].key, - sorter = function (a, b) { - a = a.data[key]; - b = b.data[key]; - return a < b ? -1 : a > b ? 1 : 0; - }, - finalSorter = sorter, - tableBody = document.querySelector('.coverage-summary tbody'), - rowNodes = tableBody.querySelectorAll('tr'), - rows = [], - i; - - if (desc) { - finalSorter = function (a, b) { - return -1 * sorter(a, b); - }; - } - - for (i = 0; i < rowNodes.length; i += 1) { - rows.push(rowNodes[i]); - tableBody.removeChild(rowNodes[i]); - } - - rows.sort(finalSorter); - - for (i = 0; i < rows.length; i += 1) { - tableBody.appendChild(rows[i]); - } - } - // removes sort indicators for current column being sorted - function removeSortIndicators() { - var col = getNthColumn(currentSort.index), - cls = col.className; - - cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); - col.className = cls; - } - // adds sort indicators for current column being sorted - function addSortIndicators() { - getNthColumn(currentSort.index).className += currentSort.desc ? ' sorted-desc' : ' sorted'; - } - // adds event listeners for all sorter widgets - function enableUI() { - var i, - el, - ithSorter = function ithSorter(i) { - var col = cols[i]; - - return function () { - var desc = col.defaultDescSort; - - if (currentSort.index === i) { - desc = !currentSort.desc; - } - sortByIndex(i, desc); - removeSortIndicators(); - currentSort.index = i; - currentSort.desc = desc; - addSortIndicators(); - }; - }; - for (i =0 ; i < cols.length; i += 1) { - if (cols[i].sortable) { - // add the click event handler on the th so users - // dont have to click on those tiny arrows - el = getNthColumn(i).querySelector('.sorter').parentElement; - if (el.addEventListener) { - el.addEventListener('click', ithSorter(i)); - } else { - el.attachEvent('onclick', ithSorter(i)); - } - } - } - } - // adds sorting functionality to the UI - return function () { - if (!getTable()) { - return; - } - cols = loadColumns(); - loadData(cols); - addSortIndicators(); - enableUI(); - }; -})(); - -window.addEventListener('load', addSorting); diff --git a/coverage/token/DummyToken.sol.html b/coverage/token/DummyToken.sol.html deleted file mode 100644 index 2235600..0000000 --- a/coverage/token/DummyToken.sol.html +++ /dev/null @@ -1,602 +0,0 @@ - - - - Code coverage report for token/DummyToken.sol - - - - - - - -
-
-

- all files / token/ DummyToken.sol -

-
-
- 0% - Statements - 0/59 -
-
- 0% - Branches - 0/18 -
-
- 0% - Functions - 0/24 -
-
- 0% - Lines - 0/59 -
-
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
pragma solidity >=0.6.0 <0.7.0;
- 
- 
-import "../interface/IERC20.sol";
-import "../math/SafeMath.sol";
-import "./ERC20Token.sol";
- 
- 
-/**
- * @title Dummy ERC20 token
- * @dev ERC20 token default implementation
- */
-contract DummyToken is IERC20 {
-  using SafeMath for uint256;
- 
-  string public name_;
-  string public symbol_;
-  uint256 public decimal_;
-  uint256 public totalSupply_;
- 
-  uint256 public rate_;
-  uint256 public rateAt_;
- 
-  IERC20 twin_;
- 
-  mapping(address => uint256) private balances;
-  mapping (address => mapping (address => uint256)) internal allowed;
- 
-  constructor(
-    string memory _name,
-    string memory _symbol,
-    uint256 _decimal,
-    uint256 _totalSupply) public
-  {
-    name_ = _name;
-    symbol_ = _symbol;
-    decimal_ = _decimal;
-    totalSupply_ = _totalSupply;
-    balances[msg.sender] = _totalSupply;
- 
-    rate_ = 1;
-    rateAt_ = now;
-  }
- 
-  function name() override public view returns (string memory) {
-    return name_;
-  }
- 
-  function symbol() override public view returns (string memory) {
-    return symbol_;
-  }
- 
-  function decimal() override public view returns (uint256) {
-    return decimal_;
-  }
- 
-  function totalSupply() override public view returns (uint256) {
-    return totalSupply_.mul(interest()).div(100);
-  }
- 
-  function balanceOf(address _owner) override public view returns (uint256) {
-    return balances[_owner].mul(interest()).div(100);
-  }
- 
-  function rate() public view returns (uint256) {
-    return rate_;
-  }
- 
-  function rateAt() public view returns (uint256) {
-    return rateAt_;
-  }
- 
-  function interest() public view returns (uint256) {
-    return rate_.mul(now - rateAt_).div(36);
-  }
- 
-  function twin() public view returns (IERC20) {
-    return twin_;
-  }
- 
-  function allowance(address _owner, address _spender)
-    override public view returns (uint256)
-  {
-    return allowed[_owner][_spender];
-  }
- 
-  function transfer(address _to, uint256 _value) override public returns (bool) {
-    require(_to != address(0));
-    require(_value <= balances[msg.sender]);
- 
-    balances[msg.sender] = balances[msg.sender].sub(_value);
-    balances[_to] = balances[_to].add(_value);
-    emit Transfer(msg.sender, _to, _value);
-    return true;
-  }
- 
-  function transferFrom(address _from, address _to, uint256 _value)
-    override public returns (bool)
-  {
-    require(_to != address(0));
-    require(_value <= balances[_from]);
-    require(_value <= allowed[_from][msg.sender]);
- 
-    balances[_from] = balances[_from].sub(_value);
-    balances[_to] = balances[_to].add(_value);
-    allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
-    emit Transfer(_from, _to, _value);
-    return true;
-  }
- 
-  function approve(address _spender, uint256 _value) override public returns (bool) {
-    allowed[msg.sender][_spender] = _value;
-    emit Approval(msg.sender, _spender, _value);
-    return true;
-  }
- 
-  function increaseApproval(address _spender, uint _addedValue)
-    override public returns (bool)
-  {
-    allowed[msg.sender][_spender] = (
-      allowed[msg.sender][_spender].add(_addedValue));
-    emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
-    return true;
-  }
- 
-  function decreaseApproval(address _spender, uint _subtractedValue)
-    override public returns (bool)
-  {
-    uint oldValue = allowed[msg.sender][_spender];
-    if (_subtractedValue > oldValue) {
-      allowed[msg.sender][_spender] = 0;
-    } else {
-      allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
-    }
-    emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
-    return true;
-  }
- 
-  function updateToken(string memory _name, string memory _symbol, uint256 _decimal) public {
-    name_ = _name;
-    symbol_ = _symbol;
-    decimal_ = _decimal;
-  }
- 
-  function updateSupply(uint256 _totalSupply) public {
-    totalSupply_ = _totalSupply;
-  }
- 
-  function updateBalance(address _owner, uint256 _balance) public {
-    balances[_owner] = _balance;
-  }
- 
-  function updateRate(uint256 _rate) public {
-    rate_ = _rate;
-    rateAt_ = now;
-  }
- 
-  function updateTwin(IERC20 _twin) public {
-    twin_ = _twin;
-  }
- 
-  function createTwin() public {
-    twin_ = new ERC20Token(name_, symbol_, decimal_, totalSupply_);
-  }
- 
-  function transferNoEvent(address _to, uint256 _value) public returns (bool) {
-    require(_to != address(0));
-    require(_value <= balances[msg.sender]);
- 
-    balances[msg.sender] = balances[msg.sender].sub(_value);
-    balances[_to] = balances[_to].add(_value);
-    return true;
-  }
- 
-  function transferTwin(address _to, uint256 _value) public returns (bool) {
-    require(address(twin_) != address(0));
-    return twin_.transfer(_to, _value);
-  }
-}
- 
-
-
- - - - - - - diff --git a/coverage/token/ERC20Token.sol.html b/coverage/token/ERC20Token.sol.html deleted file mode 100644 index 0396755..0000000 --- a/coverage/token/ERC20Token.sol.html +++ /dev/null @@ -1,416 +0,0 @@ - - - - Code coverage report for token/ERC20Token.sol - - - - - - - -
-
-

- all files / token/ ERC20Token.sol -

-
-
- 97.3% - Statements - 36/37 -
-
- 58.33% - Branches - 7/12 -
-
- 100% - Functions - 12/12 -
-
- 97.3% - Lines - 36/37 -
-
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -17× -17× -17× -17× -17× -  -  -  - -  -  -  - -  -  -  - -  -  -  - -  -  -  - -  -  -  -  -  - -  -  -  -  - - -  - - - - -  -  -  -  -  - - - -  - - - - - -  -  -  -  -  - - - -  -  -  -  -  - -  - - -  -  -  -  -  - - -  -  - -  - - -  -  - 
pragma solidity >=0.6.0 <0.7.0;
- 
- 
-import "../interface/IERC20.sol";
-import "../math/SafeMath.sol";
- 
- 
-/**
- * @title ERC20 token
- * @dev ERC20 token default implementation
- * @author Cyril Lapinte - <cyril.lapinte@gmail.com>
- */
-contract ERC20Token is IERC20 {
-  using SafeMath for uint256;
- 
-  string private name_;
-  string private symbol_;
-  uint256 private decimal_;
-  uint256 private totalSupply_;
- 
-  mapping(address => uint256) private balances;
-  mapping (address => mapping (address => uint256)) internal allowed;
- 
-  constructor(
-    string memory _name,
-    string memory _symbol,
-    uint256 _decimal,
-    uint256 _totalSupply) public
-  {
-    name_ = _name;
-    symbol_ = _symbol;
-    decimal_ = _decimal;
-    totalSupply_ = _totalSupply;
-    balances[msg.sender] = _totalSupply;
-  }
- 
-  function name() override public view returns (string memory) {
-    return name_;
-  }
- 
-  function symbol() override public view returns (string memory) {
-    return symbol_;
-  }
- 
-  function decimal() override public view returns (uint256) {
-    return decimal_;
-  }
- 
-  function totalSupply() override public view returns (uint256) {
-    return totalSupply_;
-  }
- 
-  function balanceOf(address _owner) override public view returns (uint256) {
-    return balances[_owner];
-  }
- 
-  function allowance(address _owner, address _spender)
-    override public view returns (uint256)
-  {
-    return allowed[_owner][_spender];
-  }
- 
-  function transfer(address _to, uint256 _value)
-    override public returns (bool) {
-    Erequire(_to != address(0));
-    Erequire(_value <= balances[msg.sender]);
- 
-    balances[msg.sender] = balances[msg.sender].sub(_value);
-    balances[_to] = balances[_to].add(_value);
-    emit Transfer(msg.sender, _to, _value);
-    return true;
-  }
- 
-  function transferFrom(address _from, address _to, uint256 _value)
-    override public returns (bool)
-  {
-    Erequire(_to != address(0));
-    Erequire(_value <= balances[_from]);
-    require(_value <= allowed[_from][msg.sender]);
- 
-    balances[_from] = balances[_from].sub(_value);
-    balances[_to] = balances[_to].add(_value);
-    allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
-    emit Transfer(_from, _to, _value);
-    return true;
-  }
- 
-  function approve(address _spender, uint256 _value)
-    override public returns (bool)
-  {
-    allowed[msg.sender][_spender] = _value;
-    emit Approval(msg.sender, _spender, _value);
-    return true;
-  }
- 
-  function increaseApproval(address _spender, uint _addedValue)
-    override public returns (bool)
-  {
-    allowed[msg.sender][_spender] = (
-      allowed[msg.sender][_spender].add(_addedValue));
-    emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
-    return true;
-  }
- 
-  function decreaseApproval(address _spender, uint _subtractedValue)
-    override public returns (bool)
-  {
-    uint oldValue = allowed[msg.sender][_spender];
-    Iif (_subtractedValue > oldValue) {
-      allowed[msg.sender][_spender] = 0;
-    } else {
-      allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
-    }
-    emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
-    return true;
-  }
-}
- 
-
-
- - - - - - - diff --git a/coverage/token/index.html b/coverage/token/index.html deleted file mode 100644 index a3e5b66..0000000 --- a/coverage/token/index.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - Code coverage report for token/ - - - - - - - -
-
-

- all files token/ -

-
-
- 37.5% - Statements - 36/96 -
-
- 23.33% - Branches - 7/30 -
-
- 33.33% - Functions - 12/36 -
-
- 37.5% - Lines - 36/96 -
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
DummyToken.sol
0%0/590%0/180%0/240%0/59
ERC20Token.sol
97.3%36/3758.33%7/12100%12/1297.3%36/37
-
-
- - - - - - -