diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 9396a04..0000000 Binary files a/.DS_Store and /dev/null differ diff --git a/.eslintrc.js b/.eslintrc.js index ad07911..31c2df9 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -18,6 +18,7 @@ module.exports = { 'mocha/no-mocha-arrows': 0, 'no-console': 0, 'no-underscore-dangle': 0, + 'no-use-before-define': 0, 'object-curly-newline': 0, }, }; diff --git a/.gitignore b/.gitignore index 753daae..a07d7a8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,16 +1,21 @@ -./node_modules -node_modules -.env -yarn-error.log -artifacts/**/*.json - -#Buidler files -cache -deployments -bin - -#coverage -coverage -.coverage_cache -.coverage_contracts -.coverage_artifacts \ No newline at end of file +./node_modules +node_modules +.env +yarn-error.log +artifacts/**/*.json + +#Buidler files +cache +deployments +bin + +#coverage +coverage +coverage.json +.coverage_cache +.coverage_contracts +.coverage_artifacts + +miner*.json +.DS_Store +.DS_Store? \ No newline at end of file diff --git a/README.md b/README.md index f032d67..e504a78 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,6 @@ -# contracts -Elastic DAO Contracts +# Elastic DAO Contracts +Contracts for the Elastic DAO platform. + +This project uses [Hardhat](https://hardhat.org) + + diff --git a/coverage.json b/coverage.json deleted file mode 100644 index 92b92c3..0000000 --- a/coverage.json +++ /dev/null @@ -1 +0,0 @@ -{"src/core/ElasticDAO.sol":{"l":{"19":0,"20":0,"21":0,"24":13,"25":13,"28":13,"29":12,"32":65,"33":65,"34":65,"37":65,"38":65,"39":65,"41":65,"42":62,"51":27,"52":27,"54":27,"55":27,"56":27,"67":21,"69":21,"85":0,"86":0,"87":0,"99":12,"101":12,"104":12,"106":12,"108":12,"112":28,"114":27,"115":27,"116":27,"117":27,"119":27,"121":27,"122":81,"125":27,"126":27,"132":0,"136":6,"140":0,"146":65,"150":276,"158":0,"163":39,"164":39,"168":0,"169":0},"path":"/mnt/d/Projects/ElasticDAO/contracts/src/core/ElasticDAO.sol","s":{"1":0,"2":0,"3":13,"4":13,"5":13,"6":65,"7":65,"8":65,"9":65,"10":65,"11":65,"12":27,"13":27,"14":27,"15":27,"16":27,"17":21,"18":21,"19":0,"20":0,"21":0,"22":12,"23":12,"24":12,"25":12,"26":12,"27":28,"28":27,"29":27,"30":27,"31":27,"32":27,"33":27,"34":81,"35":27,"36":27,"37":0,"38":6,"39":0,"40":65,"41":276,"42":0,"43":39,"44":39,"45":0,"46":0},"b":{"1":[0,0],"2":[12,1],"3":[65,0],"4":[62,3],"5":[27,1]},"f":{"1":0,"2":13,"3":65,"4":65,"5":27,"6":21,"7":0,"8":12,"9":28,"10":0,"11":6,"12":0,"13":65,"14":276,"15":0,"16":39,"17":0},"fnMap":{"1":{"name":"onlyAfterSummoning","line":18,"loc":{"start":{"line":18,"column":2},"end":{"line":22,"column":2}}},"2":{"name":"onlyAfterTokenInitialized","line":23,"loc":{"start":{"line":23,"column":2},"end":{"line":30,"column":2}}},"3":{"name":"onlyBeforeSummoning","line":31,"loc":{"start":{"line":31,"column":2},"end":{"line":35,"column":2}}},"4":{"name":"onlySummoners","line":36,"loc":{"start":{"line":36,"column":2},"end":{"line":43,"column":2}}},"5":{"name":"constructor","line":45,"loc":{"start":{"line":45,"column":2},"end":{"line":57,"column":2}}},"6":{"name":"initializeToken","line":66,"loc":{"start":{"line":59,"column":2},"end":{"line":78,"column":2}}},"7":{"name":"initializeModule","line":83,"loc":{"start":{"line":80,"column":2},"end":{"line":88,"column":2}}},"8":{"name":"seedSummoning","line":97,"loc":{"start":{"line":92,"column":2},"end":{"line":109,"column":2}}},"9":{"name":"summon","line":111,"loc":{"start":{"line":111,"column":2},"end":{"line":127,"column":2}}},"10":{"name":"getDAO","line":131,"loc":{"start":{"line":131,"column":2},"end":{"line":133,"column":2}}},"11":{"name":"getEcosystem","line":135,"loc":{"start":{"line":135,"column":2},"end":{"line":137,"column":2}}},"12":{"name":"getModuleAddress","line":139,"loc":{"start":{"line":139,"column":2},"end":{"line":141,"column":2}}},"13":{"name":"_getDAO","line":145,"loc":{"start":{"line":145,"column":2},"end":{"line":147,"column":2}}},"14":{"name":"_getEcosystem","line":149,"loc":{"start":{"line":149,"column":2},"end":{"line":151,"column":2}}},"15":{"name":"_getElasticModule","line":153,"loc":{"start":{"line":153,"column":2},"end":{"line":160,"column":2}}},"16":{"name":"_getToken","line":162,"loc":{"start":{"line":162,"column":2},"end":{"line":165,"column":2}}},"17":{"name":"_getTokenHolder","line":167,"loc":{"start":{"line":167,"column":2},"end":{"line":174,"column":2}}}},"statementMap":{"1":{"start":{"line":19,"column":4},"end":{"line":19,"column":39}},"2":{"start":{"line":20,"column":4},"end":{"line":20,"column":60}},"3":{"start":{"line":24,"column":4},"end":{"line":24,"column":57}},"4":{"start":{"line":25,"column":4},"end":{"line":25,"column":663}},"5":{"start":{"line":28,"column":4},"end":{"line":28,"column":77}},"6":{"start":{"line":32,"column":4},"end":{"line":32,"column":39}},"7":{"start":{"line":33,"column":4},"end":{"line":33,"column":73}},"8":{"start":{"line":37,"column":4},"end":{"line":37,"column":58}},"9":{"start":{"line":38,"column":4},"end":{"line":38,"column":68}},"10":{"start":{"line":39,"column":4},"end":{"line":39,"column":64}},"11":{"start":{"line":41,"column":4},"end":{"line":41,"column":55}},"12":{"start":{"line":51,"column":4},"end":{"line":51,"column":49}},"13":{"start":{"line":52,"column":4},"end":{"line":52,"column":98}},"14":{"start":{"line":54,"column":4},"end":{"line":54,"column":74}},"15":{"start":{"line":55,"column":4},"end":{"line":55,"column":79}},"16":{"start":{"line":56,"column":4},"end":{"line":56,"column":74}},"17":{"start":{"line":67,"column":4},"end":{"line":67,"column":57}},"18":{"start":{"line":69,"column":4},"end":{"line":69,"column":2161}},"19":{"start":{"line":85,"column":4},"end":{"line":85,"column":57}},"20":{"start":{"line":86,"column":4},"end":{"line":86,"column":71}},"21":{"start":{"line":87,"column":4},"end":{"line":87,"column":52}},"22":{"start":{"line":99,"column":4},"end":{"line":99,"column":45}},"23":{"start":{"line":101,"column":4},"end":{"line":101,"column":30}},"24":{"start":{"line":104,"column":4},"end":{"line":104,"column":97}},"25":{"start":{"line":106,"column":4},"end":{"line":106,"column":65}},"26":{"start":{"line":108,"column":4},"end":{"line":108,"column":62}},"27":{"start":{"line":112,"column":4},"end":{"line":112,"column":98}},"28":{"start":{"line":114,"column":4},"end":{"line":114,"column":58}},"29":{"start":{"line":115,"column":4},"end":{"line":115,"column":68}},"30":{"start":{"line":116,"column":4},"end":{"line":116,"column":45}},"31":{"start":{"line":117,"column":4},"end":{"line":117,"column":77}},"32":{"start":{"line":119,"column":4},"end":{"line":119,"column":66}},"33":{"start":{"line":121,"column":4},"end":{"line":121,"column":3705}},"34":{"start":{"line":122,"column":6},"end":{"line":122,"column":64}},"35":{"start":{"line":125,"column":4},"end":{"line":125,"column":22}},"36":{"start":{"line":126,"column":4},"end":{"line":126,"column":54}},"37":{"start":{"line":132,"column":4},"end":{"line":132,"column":20}},"38":{"start":{"line":136,"column":4},"end":{"line":136,"column":26}},"39":{"start":{"line":140,"column":4},"end":{"line":140,"column":51}},"40":{"start":{"line":146,"column":4},"end":{"line":146,"column":74}},"41":{"start":{"line":150,"column":4},"end":{"line":150,"column":70}},"42":{"start":{"line":158,"column":4},"end":{"line":158,"column":4828}},"43":{"start":{"line":163,"column":4},"end":{"line":163,"column":57}},"44":{"start":{"line":164,"column":4},"end":{"line":164,"column":91}},"45":{"start":{"line":168,"column":4},"end":{"line":168,"column":57}},"46":{"start":{"line":169,"column":4},"end":{"line":169,"column":5236}}},"branchMap":{"1":{"line":20,"type":"if","locations":[{"start":{"line":20,"column":4},"end":{"line":20,"column":4}},{"start":{"line":20,"column":4},"end":{"line":20,"column":4}}]},"2":{"line":28,"type":"if","locations":[{"start":{"line":28,"column":4},"end":{"line":28,"column":4}},{"start":{"line":28,"column":4},"end":{"line":28,"column":4}}]},"3":{"line":33,"type":"if","locations":[{"start":{"line":33,"column":4},"end":{"line":33,"column":4}},{"start":{"line":33,"column":4},"end":{"line":33,"column":4}}]},"4":{"line":41,"type":"if","locations":[{"start":{"line":41,"column":4},"end":{"line":41,"column":4}},{"start":{"line":41,"column":4},"end":{"line":41,"column":4}}]},"5":{"line":112,"type":"if","locations":[{"start":{"line":112,"column":4},"end":{"line":112,"column":4}},{"start":{"line":112,"column":4},"end":{"line":112,"column":4}}]}}},"src/interfaces/IERC20.sol":{"l":{},"path":"/mnt/d/Projects/ElasticDAO/contracts/src/interfaces/IERC20.sol","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}},"src/libraries/ElasticMath.sol":{"l":{"32":0,"33":0,"40":0,"58":0,"71":0,"88":134,"98":268,"108":24},"path":"/mnt/d/Projects/ElasticDAO/contracts/src/libraries/ElasticMath.sol","s":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":134,"7":268,"8":24},"b":{},"f":{"1":0,"2":0,"3":0,"4":134,"5":268,"6":24},"fnMap":{"1":{"name":"deltaE","line":24,"loc":{"start":{"line":24,"column":2},"end":{"line":41,"column":2}}},"2":{"name":"mDash","line":53,"loc":{"start":{"line":53,"column":2},"end":{"line":59,"column":2}}},"3":{"name":"revamp","line":70,"loc":{"start":{"line":70,"column":2},"end":{"line":72,"column":2}}},"4":{"name":"t","line":83,"loc":{"start":{"line":83,"column":2},"end":{"line":89,"column":2}}},"5":{"name":"wmul","line":97,"loc":{"start":{"line":97,"column":2},"end":{"line":99,"column":2}}},"6":{"name":"wdiv","line":107,"loc":{"start":{"line":107,"column":2},"end":{"line":109,"column":2}}}},"statementMap":{"1":{"start":{"line":32,"column":4},"end":{"line":32,"column":58}},"2":{"start":{"line":33,"column":4},"end":{"line":33,"column":951}},"3":{"start":{"line":40,"column":4},"end":{"line":40,"column":22}},"4":{"start":{"line":58,"column":4},"end":{"line":58,"column":60}},"5":{"start":{"line":71,"column":4},"end":{"line":71,"column":57}},"6":{"start":{"line":88,"column":4},"end":{"line":88,"column":35}},"7":{"start":{"line":98,"column":4},"end":{"line":98,"column":90}},"8":{"start":{"line":108,"column":4},"end":{"line":108,"column":72}}},"branchMap":{}},"src/libraries/SafeMath.sol":{"l":{"29":735,"30":735,"32":735,"46":0,"64":0,"65":0,"67":0,"84":292,"85":0,"88":292,"89":292,"91":292,"107":186,"127":186,"128":186,"131":186,"147":0,"167":0,"168":0,"172":0,"173":0,"175":0,"177":0,"179":0,"180":0,"181":0},"path":"/mnt/d/Projects/ElasticDAO/contracts/src/libraries/SafeMath.sol","s":{"1":735,"2":735,"3":735,"4":0,"5":0,"6":0,"7":0,"8":292,"9":0,"10":292,"11":292,"12":292,"13":186,"14":186,"15":186,"16":186,"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},"b":{"1":[735,0],"2":[0,0],"3":[0,292],"4":[292,0],"5":[186,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0]},"f":{"1":735,"2":0,"3":0,"4":292,"5":186,"6":186,"7":0,"8":0,"9":0},"fnMap":{"1":{"name":"add","line":28,"loc":{"start":{"line":28,"column":2},"end":{"line":33,"column":2}}},"2":{"name":"sub","line":45,"loc":{"start":{"line":45,"column":2},"end":{"line":47,"column":2}}},"3":{"name":"sub","line":59,"loc":{"start":{"line":59,"column":2},"end":{"line":68,"column":2}}},"4":{"name":"mul","line":80,"loc":{"start":{"line":80,"column":2},"end":{"line":92,"column":2}}},"5":{"name":"div","line":106,"loc":{"start":{"line":106,"column":2},"end":{"line":108,"column":2}}},"6":{"name":"div","line":122,"loc":{"start":{"line":122,"column":2},"end":{"line":132,"column":2}}},"7":{"name":"mod","line":146,"loc":{"start":{"line":146,"column":2},"end":{"line":148,"column":2}}},"8":{"name":"mod","line":162,"loc":{"start":{"line":162,"column":2},"end":{"line":169,"column":2}}},"9":{"name":"pow","line":171,"loc":{"start":{"line":171,"column":2},"end":{"line":183,"column":2}}}},"statementMap":{"1":{"start":{"line":29,"column":4},"end":{"line":29,"column":21}},"2":{"start":{"line":30,"column":4},"end":{"line":30,"column":49}},"3":{"start":{"line":32,"column":4},"end":{"line":32,"column":12}},"4":{"start":{"line":46,"column":4},"end":{"line":46,"column":54}},"5":{"start":{"line":64,"column":4},"end":{"line":64,"column":32}},"6":{"start":{"line":65,"column":4},"end":{"line":65,"column":21}},"7":{"start":{"line":67,"column":4},"end":{"line":67,"column":12}},"8":{"start":{"line":84,"column":4},"end":{"line":84,"column":2356}},"9":{"start":{"line":85,"column":6},"end":{"line":85,"column":14}},"10":{"start":{"line":88,"column":4},"end":{"line":88,"column":21}},"11":{"start":{"line":89,"column":4},"end":{"line":89,"column":59}},"12":{"start":{"line":91,"column":4},"end":{"line":91,"column":12}},"13":{"start":{"line":107,"column":4},"end":{"line":107,"column":50}},"14":{"start":{"line":127,"column":4},"end":{"line":127,"column":31}},"15":{"start":{"line":128,"column":4},"end":{"line":128,"column":21}},"16":{"start":{"line":131,"column":4},"end":{"line":131,"column":12}},"17":{"start":{"line":147,"column":4},"end":{"line":147,"column":48}},"18":{"start":{"line":167,"column":4},"end":{"line":167,"column":32}},"19":{"start":{"line":168,"column":4},"end":{"line":168,"column":16}},"20":{"start":{"line":172,"column":4},"end":{"line":172,"column":5030}},"21":{"start":{"line":173,"column":6},"end":{"line":173,"column":14}},"22":{"start":{"line":174,"column":11},"end":{"line":174,"column":5078}},"23":{"start":{"line":175,"column":6},"end":{"line":175,"column":17}},"24":{"start":{"line":176,"column":11},"end":{"line":176,"column":5129}},"25":{"start":{"line":177,"column":6},"end":{"line":177,"column":14}},"26":{"start":{"line":179,"column":6},"end":{"line":179,"column":22}},"27":{"start":{"line":180,"column":6},"end":{"line":180,"column":71}},"28":{"start":{"line":180,"column":55},"end":{"line":180,"column":70}},"29":{"start":{"line":181,"column":6},"end":{"line":181,"column":14}}},"branchMap":{"1":{"line":30,"type":"if","locations":[{"start":{"line":30,"column":4},"end":{"line":30,"column":4}},{"start":{"line":30,"column":4},"end":{"line":30,"column":4}}]},"2":{"line":64,"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":64,"column":4}},{"start":{"line":64,"column":4},"end":{"line":64,"column":4}}]},"3":{"line":84,"type":"if","locations":[{"start":{"line":84,"column":4},"end":{"line":84,"column":4}},{"start":{"line":84,"column":4},"end":{"line":84,"column":4}}]},"4":{"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}}]},"5":{"line":127,"type":"if","locations":[{"start":{"line":127,"column":4},"end":{"line":127,"column":4}},{"start":{"line":127,"column":4},"end":{"line":127,"column":4}}]},"6":{"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}}]},"7":{"line":172,"type":"if","locations":[{"start":{"line":172,"column":4},"end":{"line":172,"column":4}},{"start":{"line":172,"column":4},"end":{"line":172,"column":4}}]},"8":{"line":174,"type":"if","locations":[{"start":{"line":174,"column":11},"end":{"line":174,"column":11}},{"start":{"line":174,"column":11},"end":{"line":174,"column":11}}]},"9":{"line":176,"type":"if","locations":[{"start":{"line":176,"column":11},"end":{"line":176,"column":11}},{"start":{"line":176,"column":11},"end":{"line":176,"column":11}}]}}},"src/models/BalanceChange.sol":{"l":{"39":2,"40":2,"41":2,"43":2,"44":1,"45":1,"46":1,"49":1,"50":1,"53":2,"61":0,"69":93,"73":93,"77":93,"81":93,"82":93,"84":93,"92":2},"path":"/mnt/d/Projects/ElasticDAO/contracts/src/models/BalanceChange.sol","s":{"1":2,"2":2,"3":2,"4":2,"5":1,"6":1,"7":1,"8":1,"9":1,"10":2,"11":0,"12":93,"13":93,"14":93,"15":93,"16":93,"17":93,"18":2},"b":{"1":[1,1]},"f":{"1":3,"2":2,"3":0,"4":93,"5":2},"fnMap":{"1":{"name":"constructor","line":14,"loc":{"start":{"line":14,"column":2},"end":{"line":14,"column":32}}},"2":{"name":"deserialize","line":34,"loc":{"start":{"line":34,"column":2},"end":{"line":54,"column":2}}},"3":{"name":"exists","line":56,"loc":{"start":{"line":56,"column":2},"end":{"line":62,"column":2}}},"4":{"name":"serialize","line":68,"loc":{"start":{"line":68,"column":2},"end":{"line":85,"column":2}}},"5":{"name":"_exists","line":87,"loc":{"start":{"line":87,"column":2},"end":{"line":93,"column":2}}}},"statementMap":{"1":{"start":{"line":39,"column":4},"end":{"line":39,"column":18}},"2":{"start":{"line":40,"column":4},"end":{"line":40,"column":38}},"3":{"start":{"line":41,"column":4},"end":{"line":41,"column":22}},"4":{"start":{"line":43,"column":4},"end":{"line":43,"column":1248}},"5":{"start":{"line":44,"column":6},"end":{"line":44,"column":98}},"6":{"start":{"line":45,"column":6},"end":{"line":45,"column":98}},"7":{"start":{"line":46,"column":6},"end":{"line":46,"column":1500}},"8":{"start":{"line":49,"column":6},"end":{"line":49,"column":78}},"9":{"start":{"line":50,"column":6},"end":{"line":50,"column":78}},"10":{"start":{"line":53,"column":4},"end":{"line":53,"column":17}},"11":{"start":{"line":61,"column":4},"end":{"line":61,"column":45}},"12":{"start":{"line":69,"column":4},"end":{"line":69,"column":2122}},"13":{"start":{"line":73,"column":4},"end":{"line":73,"column":2256}},"14":{"start":{"line":77,"column":4},"end":{"line":77,"column":2390}},"15":{"start":{"line":81,"column":4},"end":{"line":81,"column":93}},"16":{"start":{"line":82,"column":4},"end":{"line":82,"column":93}},"17":{"start":{"line":84,"column":4},"end":{"line":84,"column":94}},"18":{"start":{"line":92,"column":4},"end":{"line":92,"column":78}}},"branchMap":{"1":{"line":43,"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":43,"column":4}},{"start":{"line":43,"column":4},"end":{"line":43,"column":4}}]}}},"src/models/DAO.sol":{"l":{"28":157,"30":157,"31":157,"32":157,"33":157,"36":157,"45":0,"49":81,"59":65,"67":54,"68":54,"69":54,"71":54,"72":27,"73":81,"74":81,"78":54,"82":157},"path":"/mnt/d/Projects/ElasticDAO/contracts/src/models/DAO.sol","s":{"1":157,"2":157,"3":157,"4":157,"5":157,"6":157,"7":0,"8":81,"9":65,"10":54,"11":54,"12":54,"13":54,"14":27,"15":81,"16":81,"17":54,"18":157},"b":{"1":[157,0],"2":[27,27]},"f":{"1":3,"2":157,"3":0,"4":81,"5":65,"6":54,"7":157},"fnMap":{"1":{"name":"constructor","line":12,"loc":{"start":{"line":12,"column":2},"end":{"line":12,"column":32}}},"2":{"name":"deserialize","line":27,"loc":{"start":{"line":27,"column":2},"end":{"line":37,"column":2}}},"3":{"name":"exists","line":44,"loc":{"start":{"line":44,"column":2},"end":{"line":46,"column":2}}},"4":{"name":"getSummoner","line":48,"loc":{"start":{"line":48,"column":2},"end":{"line":50,"column":2}}},"5":{"name":"isSummoner","line":58,"loc":{"start":{"line":58,"column":2},"end":{"line":60,"column":2}}},"6":{"name":"serialize","line":66,"loc":{"start":{"line":66,"column":2},"end":{"line":79,"column":2}}},"7":{"name":"_exists","line":81,"loc":{"start":{"line":81,"column":2},"end":{"line":83,"column":2}}}},"statementMap":{"1":{"start":{"line":28,"column":4},"end":{"line":28,"column":22}},"2":{"start":{"line":30,"column":4},"end":{"line":30,"column":791}},"3":{"start":{"line":31,"column":6},"end":{"line":31,"column":66}},"4":{"start":{"line":32,"column":6},"end":{"line":32,"column":90}},"5":{"start":{"line":33,"column":6},"end":{"line":33,"column":72}},"6":{"start":{"line":36,"column":4},"end":{"line":36,"column":17}},"7":{"start":{"line":45,"column":4},"end":{"line":45,"column":25}},"8":{"start":{"line":49,"column":4},"end":{"line":49,"column":75}},"9":{"start":{"line":59,"column":4},"end":{"line":59,"column":82}},"10":{"start":{"line":67,"column":4},"end":{"line":67,"column":69}},"11":{"start":{"line":68,"column":4},"end":{"line":68,"column":93}},"12":{"start":{"line":69,"column":4},"end":{"line":69,"column":75}},"13":{"start":{"line":71,"column":4},"end":{"line":71,"column":2248}},"14":{"start":{"line":72,"column":6},"end":{"line":72,"column":2315}},"15":{"start":{"line":73,"column":8},"end":{"line":73,"column":89}},"16":{"start":{"line":74,"column":8},"end":{"line":74,"column":90}},"17":{"start":{"line":78,"column":4},"end":{"line":78,"column":62}},"18":{"start":{"line":82,"column":4},"end":{"line":82,"column":58}}},"branchMap":{"1":{"line":30,"type":"if","locations":[{"start":{"line":30,"column":4},"end":{"line":30,"column":4}},{"start":{"line":30,"column":4},"end":{"line":30,"column":4}}]},"2":{"line":71,"type":"if","locations":[{"start":{"line":71,"column":4},"end":{"line":71,"column":4}},{"start":{"line":71,"column":4},"end":{"line":71,"column":4}}]}}},"src/models/Ecosystem.sol":{"l":{"38":702,"39":702,"40":702,"43":702,"46":702,"47":702,"50":702,"53":702,"56":702,"59":702,"62":702,"67":702,"76":1,"84":51,"88":51,"92":51,"93":51,"97":51,"101":51,"105":51,"106":51,"110":51,"112":51,"116":703},"path":"/mnt/d/Projects/ElasticDAO/contracts/src/models/Ecosystem.sol","s":{"1":702,"2":702,"3":702,"4":702,"5":702,"6":702,"7":702,"8":702,"9":702,"10":702,"11":702,"12":702,"13":1,"14":51,"15":51,"16":51,"17":51,"18":51,"19":51,"20":51,"21":51,"22":51,"23":51,"24":703},"b":{"1":[702,0]},"f":{"1":3,"2":702,"3":1,"4":51,"5":703},"fnMap":{"1":{"name":"constructor","line":14,"loc":{"start":{"line":14,"column":2},"end":{"line":14,"column":32}}},"2":{"name":"deserialize","line":37,"loc":{"start":{"line":37,"column":2},"end":{"line":68,"column":2}}},"3":{"name":"exists","line":75,"loc":{"start":{"line":75,"column":2},"end":{"line":77,"column":2}}},"4":{"name":"serialize","line":83,"loc":{"start":{"line":83,"column":2},"end":{"line":113,"column":2}}},"5":{"name":"_exists","line":115,"loc":{"start":{"line":115,"column":2},"end":{"line":117,"column":2}}}},"statementMap":{"1":{"start":{"line":38,"column":4},"end":{"line":38,"column":1204}},"2":{"start":{"line":39,"column":6},"end":{"line":39,"column":24}},"3":{"start":{"line":40,"column":6},"end":{"line":40,"column":1261}},"4":{"start":{"line":43,"column":6},"end":{"line":43,"column":1395}},"5":{"start":{"line":46,"column":6},"end":{"line":46,"column":95}},"6":{"start":{"line":47,"column":6},"end":{"line":47,"column":1615}},"7":{"start":{"line":50,"column":6},"end":{"line":50,"column":1741}},"8":{"start":{"line":53,"column":6},"end":{"line":53,"column":1875}},"9":{"start":{"line":56,"column":6},"end":{"line":56,"column":2003}},"10":{"start":{"line":59,"column":6},"end":{"line":59,"column":2123}},"11":{"start":{"line":62,"column":6},"end":{"line":62,"column":2253}},"12":{"start":{"line":67,"column":4},"end":{"line":67,"column":17}},"13":{"start":{"line":76,"column":4},"end":{"line":76,"column":25}},"14":{"start":{"line":84,"column":4},"end":{"line":84,"column":2789}},"15":{"start":{"line":88,"column":4},"end":{"line":88,"column":2922}},"16":{"start":{"line":92,"column":4},"end":{"line":92,"column":92}},"17":{"start":{"line":93,"column":4},"end":{"line":93,"column":3138}},"18":{"start":{"line":97,"column":4},"end":{"line":97,"column":3263}},"19":{"start":{"line":101,"column":4},"end":{"line":101,"column":3396}},"20":{"start":{"line":105,"column":4},"end":{"line":105,"column":98}},"21":{"start":{"line":106,"column":4},"end":{"line":106,"column":3624}},"22":{"start":{"line":110,"column":4},"end":{"line":110,"column":96}},"23":{"start":{"line":112,"column":4},"end":{"line":112,"column":62}},"24":{"start":{"line":116,"column":4},"end":{"line":116,"column":58}}},"branchMap":{"1":{"line":38,"type":"if","locations":[{"start":{"line":38,"column":4},"end":{"line":38,"column":4}},{"start":{"line":38,"column":4},"end":{"line":38,"column":4}}]}}},"src/models/ElasticModule.sol":{"l":{"31":0,"32":0,"34":0,"35":0,"38":0,"48":0,"56":0,"61":0,"65":0},"path":"/mnt/d/Projects/ElasticDAO/contracts/src/models/ElasticModule.sol","s":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0},"b":{"1":[0,0]},"f":{"1":0,"2":0,"3":0,"4":0},"fnMap":{"1":{"name":"deserialize","line":26,"loc":{"start":{"line":26,"column":2},"end":{"line":39,"column":2}}},"2":{"name":"exists","line":47,"loc":{"start":{"line":47,"column":2},"end":{"line":49,"column":2}}},"3":{"name":"serialize","line":55,"loc":{"start":{"line":55,"column":2},"end":{"line":62,"column":2}}},"4":{"name":"_exists","line":64,"loc":{"start":{"line":64,"column":2},"end":{"line":66,"column":2}}}},"statementMap":{"1":{"start":{"line":31,"column":4},"end":{"line":31,"column":22}},"2":{"start":{"line":32,"column":4},"end":{"line":32,"column":22}},"3":{"start":{"line":34,"column":4},"end":{"line":34,"column":978}},"4":{"start":{"line":35,"column":6},"end":{"line":35,"column":96}},"5":{"start":{"line":38,"column":4},"end":{"line":38,"column":17}},"6":{"start":{"line":48,"column":4},"end":{"line":48,"column":32}},"7":{"start":{"line":56,"column":4},"end":{"line":56,"column":1603}},"8":{"start":{"line":61,"column":4},"end":{"line":61,"column":75}},"9":{"start":{"line":65,"column":4},"end":{"line":65,"column":65}}},"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}}]}}},"src/models/EternalModel.sol":{"l":{"30":1041,"37":431,"39":431,"46":6399,"53":1330,"60":0,"67":0,"69":0,"81":1296,"89":282,"97":540,"105":633,"113":0,"121":0,"132":0,"139":0,"141":0,"148":0,"155":0,"162":0,"169":0},"path":"/mnt/d/Projects/ElasticDAO/contracts/src/models/EternalModel.sol","s":{"1":1041,"2":431,"3":431,"4":6399,"5":1330,"6":0,"7":0,"8":0,"9":1296,"10":282,"11":540,"12":633,"13":0,"14":0,"15":0},"b":{"1":[431,0],"2":[0,0],"3":[0,0]},"f":{"1":1041,"2":431,"3":6399,"4":1330,"5":0,"6":0,"7":1296,"8":282,"9":540,"10":633,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0},"fnMap":{"1":{"name":"getUint","line":29,"loc":{"start":{"line":29,"column":2},"end":{"line":31,"column":2}}},"2":{"name":"getString","line":36,"loc":{"start":{"line":36,"column":2},"end":{"line":40,"column":2}}},"3":{"name":"getAddress","line":45,"loc":{"start":{"line":45,"column":2},"end":{"line":47,"column":2}}},"4":{"name":"getBool","line":52,"loc":{"start":{"line":52,"column":2},"end":{"line":54,"column":2}}},"5":{"name":"getInt","line":59,"loc":{"start":{"line":59,"column":2},"end":{"line":61,"column":2}}},"6":{"name":"getBytes","line":66,"loc":{"start":{"line":66,"column":2},"end":{"line":70,"column":2}}},"7":{"name":"setUint","line":80,"loc":{"start":{"line":80,"column":2},"end":{"line":82,"column":2}}},"8":{"name":"setString","line":88,"loc":{"start":{"line":88,"column":2},"end":{"line":90,"column":2}}},"9":{"name":"setAddress","line":96,"loc":{"start":{"line":96,"column":2},"end":{"line":98,"column":2}}},"10":{"name":"setBool","line":104,"loc":{"start":{"line":104,"column":2},"end":{"line":106,"column":2}}},"11":{"name":"setInt","line":112,"loc":{"start":{"line":112,"column":2},"end":{"line":114,"column":2}}},"12":{"name":"setBytes","line":120,"loc":{"start":{"line":120,"column":2},"end":{"line":122,"column":2}}},"13":{"name":"deleteUint","line":131,"loc":{"start":{"line":131,"column":2},"end":{"line":133,"column":2}}},"14":{"name":"deleteString","line":138,"loc":{"start":{"line":138,"column":2},"end":{"line":142,"column":2}}},"15":{"name":"deleteAddress","line":147,"loc":{"start":{"line":147,"column":2},"end":{"line":149,"column":2}}},"16":{"name":"deleteBool","line":154,"loc":{"start":{"line":154,"column":2},"end":{"line":156,"column":2}}},"17":{"name":"deleteInt","line":161,"loc":{"start":{"line":161,"column":2},"end":{"line":163,"column":2}}},"18":{"name":"deleteBytes","line":168,"loc":{"start":{"line":168,"column":2},"end":{"line":170,"column":2}}}},"statementMap":{"1":{"start":{"line":30,"column":4},"end":{"line":30,"column":30}},"2":{"start":{"line":37,"column":4},"end":{"line":37,"column":52}},"3":{"start":{"line":39,"column":4},"end":{"line":39,"column":32}},"4":{"start":{"line":46,"column":4},"end":{"line":46,"column":33}},"5":{"start":{"line":53,"column":4},"end":{"line":53,"column":30}},"6":{"start":{"line":60,"column":4},"end":{"line":60,"column":29}},"7":{"start":{"line":67,"column":4},"end":{"line":67,"column":52}},"8":{"start":{"line":69,"column":4},"end":{"line":69,"column":31}},"9":{"start":{"line":81,"column":4},"end":{"line":81,"column":31}},"10":{"start":{"line":89,"column":4},"end":{"line":89,"column":33}},"11":{"start":{"line":97,"column":4},"end":{"line":97,"column":34}},"12":{"start":{"line":105,"column":4},"end":{"line":105,"column":31}},"13":{"start":{"line":113,"column":4},"end":{"line":113,"column":30}},"14":{"start":{"line":121,"column":4},"end":{"line":121,"column":32}},"15":{"start":{"line":139,"column":4},"end":{"line":139,"column":52}}},"branchMap":{"1":{"line":37,"type":"if","locations":[{"start":{"line":37,"column":4},"end":{"line":37,"column":4}},{"start":{"line":37,"column":4},"end":{"line":37,"column":4}}]},"2":{"line":67,"type":"if","locations":[{"start":{"line":67,"column":4},"end":{"line":67,"column":4}},{"start":{"line":67,"column":4},"end":{"line":67,"column":4}}]},"3":{"line":139,"type":"if","locations":[{"start":{"line":139,"column":4},"end":{"line":139,"column":4}},{"start":{"line":139,"column":4},"end":{"line":139,"column":4}}]}}},"src/models/Token.sol":{"l":{"36":137,"38":137,"39":137,"40":137,"41":137,"42":137,"43":137,"44":137,"45":137,"46":137,"49":137,"58":13,"66":114,"67":114,"68":114,"69":114,"70":114,"71":114,"72":114,"73":114,"75":114,"79":150},"path":"/mnt/d/Projects/ElasticDAO/contracts/src/models/Token.sol","s":{"1":137,"2":137,"3":137,"4":137,"5":137,"6":137,"7":137,"8":137,"9":137,"10":137,"11":137,"12":13,"13":114,"14":114,"15":114,"16":114,"17":114,"18":114,"19":114,"20":114,"21":114,"22":150},"b":{"1":[137,0]},"f":{"1":3,"2":137,"3":13,"4":114,"5":150},"fnMap":{"1":{"name":"constructor","line":16,"loc":{"start":{"line":16,"column":2},"end":{"line":16,"column":32}}},"2":{"name":"deserialize","line":35,"loc":{"start":{"line":35,"column":2},"end":{"line":50,"column":2}}},"3":{"name":"exists","line":57,"loc":{"start":{"line":57,"column":2},"end":{"line":59,"column":2}}},"4":{"name":"serialize","line":65,"loc":{"start":{"line":65,"column":2},"end":{"line":76,"column":2}}},"5":{"name":"_exists","line":78,"loc":{"start":{"line":78,"column":2},"end":{"line":80,"column":2}}}},"statementMap":{"1":{"start":{"line":36,"column":4},"end":{"line":36,"column":22}},"2":{"start":{"line":38,"column":4},"end":{"line":38,"column":1071}},"3":{"start":{"line":39,"column":6},"end":{"line":39,"column":80}},"4":{"start":{"line":40,"column":6},"end":{"line":40,"column":76}},"5":{"start":{"line":41,"column":6},"end":{"line":41,"column":58}},"6":{"start":{"line":42,"column":6},"end":{"line":42,"column":68}},"7":{"start":{"line":43,"column":6},"end":{"line":43,"column":58}},"8":{"start":{"line":44,"column":6},"end":{"line":44,"column":90}},"9":{"start":{"line":45,"column":6},"end":{"line":45,"column":66}},"10":{"start":{"line":46,"column":6},"end":{"line":46,"column":70}},"11":{"start":{"line":49,"column":4},"end":{"line":49,"column":17}},"12":{"start":{"line":58,"column":4},"end":{"line":58,"column":25}},"13":{"start":{"line":66,"column":4},"end":{"line":66,"column":69}},"14":{"start":{"line":67,"column":4},"end":{"line":67,"column":73}},"15":{"start":{"line":68,"column":4},"end":{"line":68,"column":83}},"16":{"start":{"line":69,"column":4},"end":{"line":69,"column":79}},"17":{"start":{"line":70,"column":4},"end":{"line":70,"column":61}},"18":{"start":{"line":71,"column":4},"end":{"line":71,"column":71}},"19":{"start":{"line":72,"column":4},"end":{"line":72,"column":61}},"20":{"start":{"line":73,"column":4},"end":{"line":73,"column":93}},"21":{"start":{"line":75,"column":4},"end":{"line":75,"column":62}},"22":{"start":{"line":79,"column":4},"end":{"line":79,"column":58}}},"branchMap":{"1":{"line":38,"type":"if","locations":[{"start":{"line":38,"column":4},"end":{"line":38,"column":4}},{"start":{"line":38,"column":4},"end":{"line":38,"column":4}}]}}},"src/models/TokenHolder.sol":{"l":{"34":95,"35":95,"37":95,"38":29,"39":29,"42":95,"52":0,"60":93,"61":93,"63":93,"67":95},"path":"/mnt/d/Projects/ElasticDAO/contracts/src/models/TokenHolder.sol","s":{"1":95,"2":95,"3":95,"4":29,"5":29,"6":95,"7":0,"8":93,"9":93,"10":93,"11":95},"b":{"1":[29,66]},"f":{"1":3,"2":95,"3":0,"4":93,"5":95},"fnMap":{"1":{"name":"constructor","line":14,"loc":{"start":{"line":14,"column":2},"end":{"line":14,"column":32}}},"2":{"name":"deserialize","line":29,"loc":{"start":{"line":29,"column":2},"end":{"line":43,"column":2}}},"3":{"name":"exists","line":51,"loc":{"start":{"line":51,"column":2},"end":{"line":53,"column":2}}},"4":{"name":"serialize","line":59,"loc":{"start":{"line":59,"column":2},"end":{"line":64,"column":2}}},"5":{"name":"_exists","line":66,"loc":{"start":{"line":66,"column":2},"end":{"line":68,"column":2}}}},"statementMap":{"1":{"start":{"line":34,"column":4},"end":{"line":34,"column":22}},"2":{"start":{"line":35,"column":4},"end":{"line":35,"column":38}},"3":{"start":{"line":37,"column":4},"end":{"line":37,"column":1059}},"4":{"start":{"line":38,"column":6},"end":{"line":38,"column":85}},"5":{"start":{"line":39,"column":6},"end":{"line":39,"column":83}},"6":{"start":{"line":42,"column":4},"end":{"line":42,"column":17}},"7":{"start":{"line":52,"column":4},"end":{"line":52,"column":40}},"8":{"start":{"line":60,"column":4},"end":{"line":60,"column":94}},"9":{"start":{"line":61,"column":4},"end":{"line":61,"column":92}},"10":{"start":{"line":63,"column":4},"end":{"line":63,"column":83}},"11":{"start":{"line":67,"column":4},"end":{"line":67,"column":73}}},"branchMap":{"1":{"line":37,"type":"if","locations":[{"start":{"line":37,"column":4},"end":{"line":37,"column":4}},{"start":{"line":37,"column":4},"end":{"line":37,"column":4}}]}}},"src/services/Configurator.sol":{"l":{"30":27,"31":27,"32":27,"33":27,"34":27,"35":27,"36":27,"48":27,"50":27,"53":27,"54":27,"55":27,"56":27,"57":27,"58":27,"61":27,"62":27,"64":27,"89":21,"91":21,"92":21,"93":21,"94":21,"95":21,"96":21,"97":21,"98":21,"99":21,"100":21,"102":21,"103":21,"104":21,"112":21},"path":"/mnt/d/Projects/ElasticDAO/contracts/src/services/Configurator.sol","s":{"1":27,"2":27,"3":27,"4":27,"5":27,"6":27,"7":27,"8":27,"9":27,"10":27,"11":27,"12":27,"13":27,"14":27,"15":27,"16":27,"17":27,"18":27,"19":21,"20":21,"21":21,"22":21,"23":21,"24":21,"25":21,"26":21,"27":21,"28":21,"29":21,"30":21,"31":21,"32":21,"33":21},"b":{},"f":{"1":27,"2":27,"3":21,"4":21},"fnMap":{"1":{"name":"buildDAO","line":24,"loc":{"start":{"line":24,"column":2},"end":{"line":37,"column":2}}},"2":{"name":"buildEcosystem","line":44,"loc":{"start":{"line":44,"column":2},"end":{"line":65,"column":2}}},"3":{"name":"buildToken","line":80,"loc":{"start":{"line":80,"column":2},"end":{"line":105,"column":2}}},"4":{"name":"_getEcosystem","line":107,"loc":{"start":{"line":107,"column":2},"end":{"line":113,"column":2}}}},"statementMap":{"1":{"start":{"line":30,"column":4},"end":{"line":30,"column":51}},"2":{"start":{"line":31,"column":4},"end":{"line":31,"column":24}},"3":{"start":{"line":32,"column":4},"end":{"line":32,"column":19}},"4":{"start":{"line":33,"column":4},"end":{"line":33,"column":45}},"5":{"start":{"line":34,"column":4},"end":{"line":34,"column":23}},"6":{"start":{"line":35,"column":4},"end":{"line":35,"column":29}},"7":{"start":{"line":36,"column":4},"end":{"line":36,"column":28}},"8":{"start":{"line":48,"column":4},"end":{"line":48,"column":74}},"9":{"start":{"line":50,"column":4},"end":{"line":50,"column":30}},"10":{"start":{"line":53,"column":4},"end":{"line":53,"column":75}},"11":{"start":{"line":54,"column":4},"end":{"line":54,"column":55}},"12":{"start":{"line":55,"column":4},"end":{"line":55,"column":67}},"13":{"start":{"line":56,"column":4},"end":{"line":56,"column":75}},"14":{"start":{"line":57,"column":4},"end":{"line":57,"column":71}},"15":{"start":{"line":58,"column":4},"end":{"line":58,"column":59}},"16":{"start":{"line":61,"column":4},"end":{"line":61,"column":63}},"17":{"start":{"line":62,"column":4},"end":{"line":62,"column":61}},"18":{"start":{"line":64,"column":4},"end":{"line":64,"column":40}},"19":{"start":{"line":89,"column":4},"end":{"line":89,"column":79}},"20":{"start":{"line":91,"column":4},"end":{"line":91,"column":59}},"21":{"start":{"line":92,"column":4},"end":{"line":92,"column":37}},"22":{"start":{"line":93,"column":4},"end":{"line":93,"column":33}},"23":{"start":{"line":94,"column":4},"end":{"line":94,"column":15}},"24":{"start":{"line":95,"column":4},"end":{"line":95,"column":19}},"25":{"start":{"line":96,"column":4},"end":{"line":96,"column":32}},"26":{"start":{"line":97,"column":4},"end":{"line":97,"column":47}},"27":{"start":{"line":98,"column":4},"end":{"line":98,"column":21}},"28":{"start":{"line":99,"column":4},"end":{"line":99,"column":25}},"29":{"start":{"line":100,"column":4},"end":{"line":100,"column":87}},"30":{"start":{"line":102,"column":4},"end":{"line":102,"column":48}},"31":{"start":{"line":103,"column":4},"end":{"line":103,"column":57}},"32":{"start":{"line":104,"column":4},"end":{"line":104,"column":32}},"33":{"start":{"line":112,"column":4},"end":{"line":112,"column":51}}},"branchMap":{}},"src/services/Registrator.sol":{"l":{"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"32":0},"path":"/mnt/d/Projects/ElasticDAO/contracts/src/services/Registrator.sol","s":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0},"b":{},"f":{"1":0,"2":0},"fnMap":{"1":{"name":"registerModule","line":17,"loc":{"start":{"line":17,"column":2},"end":{"line":25,"column":2}}},"2":{"name":"_getEcosystem","line":27,"loc":{"start":{"line":27,"column":2},"end":{"line":33,"column":2}}}},"statementMap":{"1":{"start":{"line":18,"column":4},"end":{"line":18,"column":67}},"2":{"start":{"line":19,"column":4},"end":{"line":19,"column":91}},"3":{"start":{"line":20,"column":4},"end":{"line":20,"column":47}},"4":{"start":{"line":21,"column":4},"end":{"line":21,"column":34}},"5":{"start":{"line":22,"column":4},"end":{"line":22,"column":29}},"6":{"start":{"line":23,"column":4},"end":{"line":23,"column":49}},"7":{"start":{"line":24,"column":4},"end":{"line":24,"column":48}},"8":{"start":{"line":32,"column":4},"end":{"line":32,"column":51}}},"branchMap":{}},"src/tokens/ElasticGovernanceToken.sol":{"l":{"26":93,"27":93,"31":21,"32":21,"45":0,"64":0,"65":0,"74":1,"75":1,"77":1,"79":1,"88":1,"89":1,"90":1,"92":1,"93":1,"95":1,"100":1,"101":1,"102":1,"104":0,"105":0,"108":1,"109":1,"112":1,"120":0,"130":0,"132":0,"134":0,"135":0,"145":0,"146":0,"155":93,"157":93,"165":0,"174":0,"187":0,"188":0,"200":0,"201":0,"219":0,"221":0,"223":0,"224":0,"226":0,"229":0,"239":0,"240":0,"242":0,"244":0,"248":93,"250":93,"252":93,"253":93,"255":93,"257":93,"259":93,"260":93,"261":93,"263":93,"264":93,"266":93,"274":0,"276":0,"277":0,"279":0,"280":0,"282":0,"283":0,"285":0,"286":0,"287":0,"289":0,"298":93,"299":93,"301":93,"302":93,"303":93,"305":93,"307":93,"309":93,"310":93,"314":93,"316":93,"317":93,"319":0,"321":93,"323":93,"333":2,"335":2,"339":377,"343":95,"347":94},"path":"/mnt/d/Projects/ElasticDAO/contracts/src/tokens/ElasticGovernanceToken.sol","s":{"1":93,"2":21,"3":21,"4":0,"5":0,"6":0,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":0,"21":0,"22":1,"23":1,"24":1,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":93,"33":93,"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":93,"51":93,"52":93,"53":93,"54":93,"55":93,"56":93,"57":93,"58":93,"59":93,"60":93,"61":93,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":93,"74":93,"75":93,"76":93,"77":93,"78":93,"79":93,"80":93,"81":93,"82":93,"83":93,"84":93,"85":0,"86":93,"87":93,"88":2,"89":2,"90":377,"91":95,"92":94},"b":{"1":[93,0],"2":[1,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[93,0]},"f":{"1":93,"2":21,"3":0,"4":0,"5":1,"6":1,"7":0,"8":0,"9":0,"10":93,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":93,"18":0,"19":93,"20":2,"21":377,"22":95,"23":94},"fnMap":{"1":{"name":"onlyDAO","line":25,"loc":{"start":{"line":25,"column":2},"end":{"line":28,"column":2}}},"2":{"name":"constructor","line":30,"loc":{"start":{"line":30,"column":2},"end":{"line":33,"column":2}}},"3":{"name":"allowance","line":44,"loc":{"start":{"line":44,"column":2},"end":{"line":46,"column":2}}},"4":{"name":"approve","line":63,"loc":{"start":{"line":63,"column":2},"end":{"line":66,"column":2}}},"5":{"name":"balanceOf","line":73,"loc":{"start":{"line":73,"column":2},"end":{"line":80,"column":2}}},"6":{"name":"balanceOfAt","line":87,"loc":{"start":{"line":87,"column":2},"end":{"line":113,"column":2}}},"7":{"name":"decimals","line":119,"loc":{"start":{"line":119,"column":2},"end":{"line":121,"column":2}}},"8":{"name":"decreaseAllowance","line":129,"loc":{"start":{"line":129,"column":2},"end":{"line":136,"column":2}}},"9":{"name":"increaseAllowance","line":144,"loc":{"start":{"line":144,"column":2},"end":{"line":147,"column":2}}},"10":{"name":"mint","line":154,"loc":{"start":{"line":154,"column":2},"end":{"line":158,"column":2}}},"11":{"name":"name","line":164,"loc":{"start":{"line":164,"column":2},"end":{"line":166,"column":2}}},"12":{"name":"symbol","line":173,"loc":{"start":{"line":173,"column":2},"end":{"line":175,"column":2}}},"13":{"name":"totalSupply","line":186,"loc":{"start":{"line":186,"column":2},"end":{"line":189,"column":2}}},"14":{"name":"transfer","line":199,"loc":{"start":{"line":199,"column":2},"end":{"line":202,"column":2}}},"15":{"name":"transferFrom","line":214,"loc":{"start":{"line":214,"column":2},"end":{"line":230,"column":2}}},"16":{"name":"_approve","line":234,"loc":{"start":{"line":234,"column":2},"end":{"line":245,"column":2}}},"17":{"name":"_mint","line":247,"loc":{"start":{"line":247,"column":2},"end":{"line":267,"column":2}}},"18":{"name":"_transfer","line":269,"loc":{"start":{"line":269,"column":2},"end":{"line":290,"column":2}}},"19":{"name":"_updateBalance","line":292,"loc":{"start":{"line":292,"column":2},"end":{"line":324,"column":2}}},"20":{"name":"_getBalanceChange","line":328,"loc":{"start":{"line":328,"column":2},"end":{"line":336,"column":2}}},"21":{"name":"_getEcosystem","line":338,"loc":{"start":{"line":338,"column":2},"end":{"line":340,"column":2}}},"22":{"name":"_getTokenHolder","line":342,"loc":{"start":{"line":342,"column":2},"end":{"line":344,"column":2}}},"23":{"name":"_getToken","line":346,"loc":{"start":{"line":346,"column":2},"end":{"line":348,"column":2}}}},"statementMap":{"1":{"start":{"line":26,"column":4},"end":{"line":26,"column":67}},"2":{"start":{"line":31,"column":4},"end":{"line":31,"column":27}},"3":{"start":{"line":32,"column":4},"end":{"line":32,"column":49}},"4":{"start":{"line":45,"column":4},"end":{"line":45,"column":40}},"5":{"start":{"line":64,"column":4},"end":{"line":64,"column":42}},"6":{"start":{"line":65,"column":4},"end":{"line":65,"column":15}},"7":{"start":{"line":74,"column":4},"end":{"line":74,"column":45}},"8":{"start":{"line":75,"column":4},"end":{"line":75,"column":71}},"9":{"start":{"line":77,"column":4},"end":{"line":77,"column":67}},"10":{"start":{"line":79,"column":4},"end":{"line":79,"column":12}},"11":{"start":{"line":88,"column":4},"end":{"line":88,"column":17}},"12":{"start":{"line":89,"column":4},"end":{"line":89,"column":22}},"13":{"start":{"line":90,"column":4},"end":{"line":90,"column":8}},"14":{"start":{"line":92,"column":4},"end":{"line":92,"column":71}},"15":{"start":{"line":93,"column":4},"end":{"line":93,"column":80}},"16":{"start":{"line":95,"column":4},"end":{"line":95,"column":3196}},"17":{"start":{"line":100,"column":6},"end":{"line":100,"column":3342}},"18":{"start":{"line":101,"column":8},"end":{"line":101,"column":63}},"19":{"start":{"line":102,"column":8},"end":{"line":102,"column":66}},"20":{"start":{"line":104,"column":8},"end":{"line":104,"column":63}},"21":{"start":{"line":105,"column":8},"end":{"line":105,"column":66}},"22":{"start":{"line":108,"column":6},"end":{"line":108,"column":27}},"23":{"start":{"line":109,"column":6},"end":{"line":109,"column":51}},"24":{"start":{"line":112,"column":4},"end":{"line":112,"column":12}},"25":{"start":{"line":120,"column":4},"end":{"line":120,"column":13}},"26":{"start":{"line":130,"column":4},"end":{"line":130,"column":92}},"27":{"start":{"line":132,"column":4},"end":{"line":132,"column":74}},"28":{"start":{"line":134,"column":4},"end":{"line":134,"column":47}},"29":{"start":{"line":135,"column":4},"end":{"line":135,"column":15}},"30":{"start":{"line":145,"column":4},"end":{"line":145,"column":95}},"31":{"start":{"line":146,"column":4},"end":{"line":146,"column":15}},"32":{"start":{"line":155,"column":4},"end":{"line":155,"column":27}},"33":{"start":{"line":157,"column":4},"end":{"line":157,"column":15}},"34":{"start":{"line":165,"column":4},"end":{"line":165,"column":27}},"35":{"start":{"line":174,"column":4},"end":{"line":174,"column":29}},"36":{"start":{"line":187,"column":4},"end":{"line":187,"column":45}},"37":{"start":{"line":188,"column":4},"end":{"line":188,"column":69}},"38":{"start":{"line":200,"column":4},"end":{"line":200,"column":38}},"39":{"start":{"line":201,"column":4},"end":{"line":201,"column":15}},"40":{"start":{"line":219,"column":4},"end":{"line":219,"column":97}},"41":{"start":{"line":221,"column":4},"end":{"line":221,"column":33}},"42":{"start":{"line":223,"column":4},"end":{"line":223,"column":7178}},"43":{"start":{"line":224,"column":6},"end":{"line":224,"column":91}},"44":{"start":{"line":226,"column":6},"end":{"line":226,"column":68}},"45":{"start":{"line":229,"column":4},"end":{"line":229,"column":15}},"46":{"start":{"line":239,"column":4},"end":{"line":239,"column":72}},"47":{"start":{"line":240,"column":4},"end":{"line":240,"column":72}},"48":{"start":{"line":242,"column":4},"end":{"line":242,"column":42}},"49":{"start":{"line":244,"column":4},"end":{"line":244,"column":44}},"50":{"start":{"line":248,"column":4},"end":{"line":248,"column":45}},"51":{"start":{"line":250,"column":4},"end":{"line":250,"column":71}},"52":{"start":{"line":252,"column":4},"end":{"line":252,"column":79}},"53":{"start":{"line":253,"column":4},"end":{"line":253,"column":65}},"54":{"start":{"line":255,"column":4},"end":{"line":255,"column":70}},"55":{"start":{"line":257,"column":4},"end":{"line":257,"column":57}},"56":{"start":{"line":259,"column":4},"end":{"line":259,"column":57}},"57":{"start":{"line":260,"column":4},"end":{"line":260,"column":59}},"58":{"start":{"line":261,"column":4},"end":{"line":261,"column":32}},"59":{"start":{"line":263,"column":4},"end":{"line":263,"column":83}},"60":{"start":{"line":264,"column":4},"end":{"line":264,"column":44}},"61":{"start":{"line":266,"column":4},"end":{"line":266,"column":47}},"62":{"start":{"line":274,"column":4},"end":{"line":274,"column":45}},"63":{"start":{"line":276,"column":4},"end":{"line":276,"column":72}},"64":{"start":{"line":277,"column":4},"end":{"line":277,"column":68}},"65":{"start":{"line":279,"column":4},"end":{"line":279,"column":79}},"66":{"start":{"line":280,"column":4},"end":{"line":280,"column":65}},"67":{"start":{"line":282,"column":4},"end":{"line":282,"column":79}},"68":{"start":{"line":283,"column":4},"end":{"line":283,"column":74}},"69":{"start":{"line":285,"column":4},"end":{"line":285,"column":89}},"70":{"start":{"line":286,"column":4},"end":{"line":286,"column":48}},"71":{"start":{"line":287,"column":4},"end":{"line":287,"column":46}},"72":{"start":{"line":289,"column":4},"end":{"line":289,"column":37}},"73":{"start":{"line":298,"column":4},"end":{"line":298,"column":47}},"74":{"start":{"line":299,"column":4},"end":{"line":299,"column":43}},"75":{"start":{"line":301,"column":4},"end":{"line":301,"column":43}},"76":{"start":{"line":302,"column":4},"end":{"line":302,"column":42}},"77":{"start":{"line":303,"column":4},"end":{"line":303,"column":45}},"78":{"start":{"line":305,"column":4},"end":{"line":305,"column":29}},"79":{"start":{"line":307,"column":4},"end":{"line":307,"column":29}},"80":{"start":{"line":309,"column":4},"end":{"line":309,"column":43}},"81":{"start":{"line":310,"column":4},"end":{"line":310,"column":41}},"82":{"start":{"line":314,"column":4},"end":{"line":314,"column":63}},"83":{"start":{"line":316,"column":4},"end":{"line":316,"column":10176}},"84":{"start":{"line":317,"column":6},"end":{"line":317,"column":74}},"85":{"start":{"line":319,"column":6},"end":{"line":319,"column":74}},"86":{"start":{"line":321,"column":4},"end":{"line":321,"column":84}},"87":{"start":{"line":323,"column":4},"end":{"line":323,"column":23}},"88":{"start":{"line":333,"column":4},"end":{"line":333,"column":81}},"89":{"start":{"line":335,"column":4},"end":{"line":335,"column":90}},"90":{"start":{"line":339,"column":4},"end":{"line":339,"column":67}},"91":{"start":{"line":343,"column":4},"end":{"line":343,"column":97}},"92":{"start":{"line":347,"column":4},"end":{"line":347,"column":78}}},"branchMap":{"1":{"line":26,"type":"if","locations":[{"start":{"line":26,"column":4},"end":{"line":26,"column":4}},{"start":{"line":26,"column":4},"end":{"line":26,"column":4}}]},"2":{"line":100,"type":"if","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":6}},{"start":{"line":100,"column":6},"end":{"line":100,"column":6}}]},"3":{"line":132,"type":"if","locations":[{"start":{"line":132,"column":4},"end":{"line":132,"column":4}},{"start":{"line":132,"column":4},"end":{"line":132,"column":4}}]},"4":{"line":219,"type":"if","locations":[{"start":{"line":219,"column":4},"end":{"line":219,"column":4}},{"start":{"line":219,"column":4},"end":{"line":219,"column":4}}]},"5":{"line":223,"type":"if","locations":[{"start":{"line":223,"column":4},"end":{"line":223,"column":4}},{"start":{"line":223,"column":4},"end":{"line":223,"column":4}}]},"6":{"line":239,"type":"if","locations":[{"start":{"line":239,"column":4},"end":{"line":239,"column":4}},{"start":{"line":239,"column":4},"end":{"line":239,"column":4}}]},"7":{"line":240,"type":"if","locations":[{"start":{"line":240,"column":4},"end":{"line":240,"column":4}},{"start":{"line":240,"column":4},"end":{"line":240,"column":4}}]},"8":{"line":316,"type":"if","locations":[{"start":{"line":316,"column":4},"end":{"line":316,"column":4}},{"start":{"line":316,"column":4},"end":{"line":316,"column":4}}]}}}} \ No newline at end of file diff --git a/deploy/balance.js b/deploy/balance.js deleted file mode 100644 index e53a55c..0000000 --- a/deploy/balance.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = async ({ getNamedAccounts, deployments }) => { - const { deploy, log } = deployments; - const { agent } = await getNamedAccounts(); - - const balanceModel = await deploy('Balance', { - from: agent, - args: [], - }); - - if (balanceModel.newlyDeployed) { - log(`##### ElasticDAO: BalanceModel has been deployed: ${balanceModel.address}`); - } -}; -module.exports.tags = ['Balance']; diff --git a/deploy/balanceMultipliers.js b/deploy/balanceMultipliers.js deleted file mode 100644 index ff1f6b2..0000000 --- a/deploy/balanceMultipliers.js +++ /dev/null @@ -1,16 +0,0 @@ -module.exports = async ({ getNamedAccounts, deployments }) => { - const { deploy, log } = deployments; - const { agent } = await getNamedAccounts(); - - const balanceMultipliersModel = await deploy('BalanceMultipliers', { - from: agent, - args: [], - }); - - if (balanceMultipliersModel.newlyDeployed) { - log( - `##### ElasticDAO: BalanceMultipliersModel has been deployed: ${balanceMultipliersModel.address}`, - ); - } -}; -module.exports.tags = ['BalanceMultipliers']; diff --git a/deploy/configurator.js b/deploy/configurator.js deleted file mode 100644 index bc16c1e..0000000 --- a/deploy/configurator.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = async ({ getNamedAccounts, deployments }) => { - const { deploy, log } = deployments; - const { agent } = await getNamedAccounts(); - - const configurator = await deploy('Configurator', { - from: agent, - args: [], - }); - - if (configurator.newlyDeployed) { - log(`##### ElasticDAO: Configurator has been deployed: ${configurator.address}`); - } -}; -module.exports.tags = ['Configurator']; diff --git a/deploy/elasticDAO.js b/deploy/elasticDAO.js new file mode 100644 index 0000000..692cee9 --- /dev/null +++ b/deploy/elasticDAO.js @@ -0,0 +1,14 @@ +module.exports = async ({ getNamedAccounts, deployments }) => { + const { deploy, log } = deployments; + const { agent } = await getNamedAccounts(); + + const elasticDAO = await deploy('ElasticDAO', { + from: agent, + args: [], + }); + + if (elasticDAO.newlyDeployed) { + log(`##### ElasticDAO: ElasticDAO has been deployed: ${elasticDAO.address}`); + } +}; +module.exports.tags = ['ElasticDAO']; diff --git a/deploy/elasticDAOFactory.js b/deploy/elasticDAOFactory.js index 9e94592..f47ef2e 100644 --- a/deploy/elasticDAOFactory.js +++ b/deploy/elasticDAOFactory.js @@ -1,17 +1,28 @@ +const { ethers } = require('ethers'); +const hre = require('hardhat').ethers; + module.exports = async ({ getNamedAccounts, deployments }) => { const { deploy, log } = deployments; const { agent } = await getNamedAccounts(); const Ecosystem = await deployments.get('Ecosystem'); + const ElasticDAO = await deployments.get('ElasticDAO'); const elasticDAOFactory = await deploy('ElasticDAOFactory', { from: agent, - args: [Ecosystem.address], + args: [], }); + const factory = new ethers.Contract( + elasticDAOFactory.address, + elasticDAOFactory.abi, + hre.provider.getSigner(agent), + ); + await factory.initialize(Ecosystem.address, ElasticDAO.address); + if (elasticDAOFactory.newlyDeployed) { log(`##### ElasticDAO: ElasticDAOFactory has been deployed: ${elasticDAOFactory.address}`); } }; module.exports.tags = ['ElasticDAOFactory']; -module.exports.dependencies = ['Ecosystem']; +module.exports.dependencies = ['Ecosystem', 'ElasticDAO', 'ElasticGovernanceToken']; diff --git a/deploy/elasticGovernanceToken.js b/deploy/elasticGovernanceToken.js new file mode 100644 index 0000000..537fac9 --- /dev/null +++ b/deploy/elasticGovernanceToken.js @@ -0,0 +1,16 @@ +module.exports = async ({ getNamedAccounts, deployments }) => { + const { deploy, log } = deployments; + const { agent } = await getNamedAccounts(); + + const elasticGovernanceToken = await deploy('ElasticGovernanceToken', { + from: agent, + args: [], + }); + + if (elasticGovernanceToken.newlyDeployed) { + log( + `##### ElasticDAO: ElasticGovernanceToken has been deployed: ${elasticGovernanceToken.address}`, + ); + } +}; +module.exports.tags = ['ElasticGovernanceToken']; diff --git a/deploy/elasticModule.js b/deploy/elasticModule.js deleted file mode 100644 index 7e52d12..0000000 --- a/deploy/elasticModule.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = async ({ getNamedAccounts, deployments }) => { - const { deploy, log } = deployments; - const { agent } = await getNamedAccounts(); - - const elasticModule = await deploy('ElasticModule', { - from: agent, - args: [], - }); - - if (elasticModule.newlyDeployed) { - log(`##### ElasticDAO: Elastic Module Model has been deployed: ${elasticModule.address}`); - } -}; -module.exports.tags = ['ElasticModule']; diff --git a/deploy/informationalVote.js b/deploy/informationalVote.js deleted file mode 100644 index 0a9a4bf..0000000 --- a/deploy/informationalVote.js +++ /dev/null @@ -1,47 +0,0 @@ -module.exports = async ({ getNamedAccounts, deployments }) => { - const { deploy, log } = deployments; - const { agent } = await getNamedAccounts(); - - const informationalVoteBallot = await deploy('InformationalVoteBallot', { - from: agent, - args: [], - }); - - const informationalVoteSettings = await deploy('InformationalVoteSettings', { - from: agent, - args: [], - }); - - const informationalVoteVote = await deploy('InformationalVote', { - from: agent, - args: [], - }); - - const informationalVoteFactory = await deploy('InformationalVoteFactory', { - from: agent, - args: [], - }); - - if (informationalVoteBallot.newlyDeployed) { - log( - `##### ElasticDAO: InformationalVoteBallot has been deployed: ${informationalVoteBallot.address}`, - ); - } - - if (informationalVoteSettings.newlyDeployed) { - log( - `##### ElasticDAO: InformationalVoteSettings has been deployed: ${informationalVoteSettings.address}`, - ); - } - - if (informationalVoteVote.newlyDeployed) { - log(`##### ElasticDAO: InformationalVote has been deployed: ${informationalVoteVote.address}`); - } - - if (informationalVoteFactory.newlyDeployed) { - log( - `##### ElasticDAO: InformationalVoteFactory has been deployed: ${informationalVoteFactory.address}`, - ); - } -}; -module.exports.tags = ['InformationalVote']; diff --git a/deploy/initialDeployment.js b/deploy/initialDeployment.js index 82eeb77..64bdba5 100644 --- a/deploy/initialDeployment.js +++ b/deploy/initialDeployment.js @@ -5,9 +5,6 @@ module.exports = async ({ getNamedAccounts, deployments }) => { const { log } = deployments; const { agent } = await getNamedAccounts(); - const Balance = await deployments.get('Balance'); - const BalanceMultipliers = await deployments.get('BalanceMultipliers'); - const Configurator = await deployments.get('Configurator'); const Dao = await deployments.get('DAO'); const Ecosystem = await deployments.get('Ecosystem'); const ecosystemStorage = new ethers.Contract( @@ -15,26 +12,19 @@ module.exports = async ({ getNamedAccounts, deployments }) => { Ecosystem.abi, hre.provider.getSigner(agent), ); - const ElasticModule = await deployments.get('ElasticModule'); - const Registrator = await deployments.get('Registrator'); + const ElasticGovernanceToken = await deployments.get('ElasticGovernanceToken'); const Token = await deployments.get('Token'); const TokenHolder = await deployments.get('TokenHolder'); const ecosystemStructArray = [ ethers.constants.AddressZero, // Models - Balance.address, - BalanceMultipliers.address, Dao.address, Ecosystem.address, - ElasticModule.address, TokenHolder.address, Token.address, - // Services - Configurator.address, - Registrator.address, // Tokens - ethers.constants.AddressZero, + ElasticGovernanceToken.address, ]; await ecosystemStorage.functions.serialize(ecosystemStructArray); @@ -43,16 +33,10 @@ module.exports = async ({ getNamedAccounts, deployments }) => { }; module.exports.tags = ['initialDeployment']; module.exports.dependencies = [ - 'Balance', - 'BalanceMultipliers', - 'Configurator', 'DAO', 'Ecosystem', 'ElasticDAOFactory', - 'ElasticModule', - 'InformationalVote', - 'TransactionalVote', - 'Registrator', + 'ElasticGovernanceToken', 'Token', 'TokenHolder', ]; diff --git a/deploy/registrator.js b/deploy/registrator.js deleted file mode 100644 index 20a435c..0000000 --- a/deploy/registrator.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = async ({ getNamedAccounts, deployments }) => { - const { deploy, log } = deployments; - const { agent } = await getNamedAccounts(); - - const registrator = await deploy('Registrator', { - from: agent, - args: [], - }); - - if (registrator.newlyDeployed) { - log(`##### ElasticDAO: Registrator has been deployed: ${registrator.address}`); - } -}; -module.exports.tags = ['Registrator']; diff --git a/deploy/transactionalVote.js b/deploy/transactionalVote.js deleted file mode 100644 index 3dfe7e6..0000000 --- a/deploy/transactionalVote.js +++ /dev/null @@ -1,47 +0,0 @@ -module.exports = async ({ getNamedAccounts, deployments }) => { - const { deploy, log } = deployments; - const { agent } = await getNamedAccounts(); - - const transactionalBallot = await deploy('TransactionalVoteBallot', { - from: agent, - args: [], - }); - - const transactionalSettings = await deploy('TransactionalVoteSettings', { - from: agent, - args: [], - }); - - const transactionalVote = await deploy('TransactionalVote', { - from: agent, - args: [], - }); - - const transactionalFactory = await deploy('TransactionalVoteFactory', { - from: agent, - args: [], - }); - - if (transactionalBallot.newlyDeployed) { - log( - `##### ElasticDAO: TransactionalVoteBallot has been deployed: ${transactionalBallot.address}`, - ); - } - - if (transactionalSettings.newlyDeployed) { - log( - `##### ElasticDAO: TransactionalVoteSettings has been deployed: ${transactionalSettings.address}`, - ); - } - - if (transactionalVote.newlyDeployed) { - log(`##### ElasticDAO: TransactionalVote has been deployed: ${transactionalVote.address}`); - } - - if (transactionalFactory.newlyDeployed) { - log( - `##### ElasticDAO: TransactionalVoteFactory has been deployed: ${transactionalFactory.address}`, - ); - } -}; -module.exports.tags = ['TransactionalVote']; diff --git a/hardhat.config.js b/hardhat.config.js index a7cb271..53aeb70 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -1,4 +1,5 @@ /* eslint no-undef: 0 */ +/* eslint operator-linebreak: 0 */ require('dotenv').config(); require('@nomiclabs/hardhat-waffle'); @@ -7,8 +8,20 @@ require('hardhat-gas-reporter'); require('@nomiclabs/hardhat-etherscan'); require('hardhat-deploy'); require('hardhat-contract-sizer'); +require('solidity-coverage'); +const ALCHEMY_KEY = process.env.ALCHEMY_KEY || ''; const ETHERSCAN_API_KEY = process.env.ETHERSCAN || ''; +const KOVAN_PRIVATE_KEY = + process.env.KOVAN_PRIVATE_KEY || + '0000000000000000000000000000000000000000000000000000000000000000'; +const MAINNET_PRIVATE_KEY = + process.env.MAINNET_PRIVATE_KEY || + '0000000000000000000000000000000000000000000000000000000000000000'; +const ROPSTEN_PRIVATE_KEY = + process.env.ROPSTEN_PRIVATE_KEY || + '0000000000000000000000000000000000000000000000000000000000000000'; +const TESTNET_SEED = process.env.TESTNET_SEED || ''; // Tasks task('seed', 'Seed account with Buidler ETH') @@ -43,10 +56,34 @@ module.exports = { hardhat: { gasPrice: 0, blockGasLimit: 100000000, + allowUnlimitedContractSize: true, }, coverage: { url: 'http://127.0.0.1:8555', }, + edaoTestnet: { + url: 'https://node.edao.app', + chainId: 420, + accounts: { + mnemonic: TESTNET_SEED, + count: 10, + }, + }, + kovan: { + url: `https://eth-kovan.alchemyapi.io/v2/${ALCHEMY_KEY}`, + chainId: 42, + accounts: [`0x${KOVAN_PRIVATE_KEY}`], + }, + mainnet: { + url: `https://eth-mainnet.alchemyapi.io/v2/${ALCHEMY_KEY}`, + chainId: 1, + accounts: [`0x${MAINNET_PRIVATE_KEY}`], + }, + ropsten: { + url: `https://eth-ropsten.alchemyapi.io/v2/${ALCHEMY_KEY}`, + chainId: 3, + accounts: [`0x${ROPSTEN_PRIVATE_KEY}`], + }, }, gasReporter: { src: 'src', @@ -72,13 +109,13 @@ module.exports = { agent: { default: 0, }, - summoner: { + summoner1: { default: 1, }, - summoner1: { + summoner2: { default: 2, }, - summoner2: { + summoner3: { default: 3, }, }, diff --git a/package.json b/package.json index 23a27bb..deee9da 100644 --- a/package.json +++ b/package.json @@ -1,16 +1,16 @@ { "name": "contracts", - "version": "1.0.0", + "version": "0.9.0", "description": "Elastic DAO Contracts", "main": "index.js", "repository": "git@github.com:elasticdao/contracts.git", - "author": "alleycatdev ", + "author": "ElasticDAO Core ", "license": "GPLv3", "type": "module", "scripts": { "compile": "npx hardhat compile", "console": "npx hardhat console", - "coverage": "npx hardhat coverage --network coverage --solcoverjs ./.solcover.js", + "coverage": "npx hardhat coverage --temp artifacts", "deploy": "npx hardhat deploy", "ethereum": "yarn lint && npx hardhat node", "lint": "yarn run prettier && yarn run lint:es6 && yarn run lint:solidity && yarn run lint:tests", @@ -22,35 +22,38 @@ "prettier:es6": "prettier --write ./*.js --write deploy/*.js --write deploy/**/*.js", "prettier:solidity": "prettier --write src/**/*.sol --write src/**/**/*.sol --write src/**/**/**/*.sol", "prettier:tests": "yarn compile && prettier --write test/**/*.js test/*.js", + "seed": "npx hardhat seed --network localhost --account", "test": "yarn run prettier:tests && yarn run lint:tests && npx hardhat test --deploy-fixture" }, "dependencies": { - "@elastic-dao/sdk": "0.0.9", - "@nomiclabs/hardhat-ethers": "^2.0.0", - "@nomiclabs/hardhat-etherscan": "^2.0.1", - "@nomiclabs/hardhat-waffle": "^2.0.0", - "bignumber.js": "^9.0.1", - "dotenv": "^8.2.0", - "ethereum-waffle": "^3.0.2", - "ethers": "^5.0.8", - "hardhat": "^2.0.0", - "hardhat-contract-sizer": "^2.0.2", - "hardhat-deploy": "^0.7.0-beta.28", - "hardhat-gas-reporter": "^1.0.1", - "scrypt": "^6.0.3", - "solc": "0.7.2" + "@elastic-dao/sdk": "0.9.0-beta11", + "@nomiclabs/hardhat-ethers": "2.0.1", + "@nomiclabs/hardhat-etherscan": "2.1.1", + "@nomiclabs/hardhat-waffle": "2.0.1", + "@openzeppelin/contracts": "3.4.0", + "@pie-dao/proxy": "^1.0.0", + "bignumber.js": "9.0.1", + "dotenv": "8.2.0", + "env": "^0.0.2", + "ethereum-waffle": "3.2.1", + "ethers": "5.0.26", + "hardhat": "2.0.8", + "hardhat-contract-sizer": "2.0.2", + "hardhat-deploy": "0.7.0-beta.45", + "hardhat-gas-reporter": "1.0.4", + "scrypt": "6.0.3", + "solc": "0.7.2", + "solidity-coverage": "0.7.14" }, "devDependencies": { - "chai": "^4.2.0", - "eslint": "^7.9.0", - "eslint-config-airbnb-base": "^14.2.0", - "eslint-plugin-import": "^2.22.0", - "eslint-plugin-mocha": "^8.0.0", - "mocha": "^8.1.1", - "prettier": "^2.1.1", - "prettier-plugin-solidity": "^1.0.0-alpha.57", - "rollup-plugin-inject": "^3.0.2", - "solhint": "^3.2.0", - "solidity-coverage": "^0.7.10" + "chai": "4.2.0", + "eslint": "7.18.0", + "eslint-config-airbnb-base": "14.2.1", + "eslint-plugin-import": "2.22.1", + "eslint-plugin-mocha": "8.0.0", + "mocha": "8.2.1", + "prettier": "2.2.1", + "prettier-plugin-solidity": "1.0.0-beta.3", + "solhint": "3.3.2" } } diff --git a/src/core/ElasticDAO.sol b/src/core/ElasticDAO.sol index 9426f21..25e3666 100644 --- a/src/core/ElasticDAO.sol +++ b/src/core/ElasticDAO.sol @@ -2,22 +2,47 @@ pragma solidity 0.7.2; pragma experimental ABIEncoderV2; +import '../interfaces/IUniswapV2Pair.sol'; + import '../libraries/ElasticMath.sol'; -import '../libraries/SafeMath.sol'; import '../models/DAO.sol'; import '../models/Ecosystem.sol'; import '../models/Token.sol'; -import '../services/Configurator.sol'; -import '../services/Registrator.sol'; - -contract ElasticDAO { - address internal ecosystemModelAddress; - address internal deployer; +import '@openzeppelin/contracts/utils/ReentrancyGuard.sol'; + +import '@pie-dao/proxy/contracts/PProxy.sol'; +import 'hardhat/console.sol'; + +/** + * @dev The ElasticDAO contract outlines and defines all the functionality + * such as initialize, Join, exit, etc for an elasticDAO. + * + * It also serves as the vault for ElasticDAO. + */ +contract ElasticDAO is ReentrancyGuard { + address public deployer; + address public ecosystemModelAddress; + address public controller; address[] public summoners; + address[] public liquidityPools; + bool public initialized; event ElasticGovernanceTokenDeployed(address indexed tokenAddress); + event MaxVotingLambdaChanged(uint256 value); + event ControllerChanged(address value); + event ExitDAO(address indexed memberAddress, uint256 shareAmount, uint256 ethAmount); + event FailedToFullyPenalize( + address indexed memberAddress, + uint256 attemptedAmount, + uint256 actualAmount + ); + event JoinDAO(address indexed memberAddress, uint256 shareAmount, uint256 ethAmount); + event LiquidityPoolAdded(address indexed poolAddress); + event LiquidityPoolRemoved(address indexed poolAddress); + event SeedDAO(address indexed summonerAddress, uint256 amount); + event SummonedDAO(address indexed summonedBy); modifier onlyAfterSummoning() { DAO.Instance memory dao = _getDAO(); @@ -26,10 +51,12 @@ contract ElasticDAO { } modifier onlyAfterTokenInitialized() { Ecosystem.Instance memory ecosystem = _getEcosystem(); - bool tokenInitialized = Token(_getEcosystem().tokenModelAddress).exists( - ecosystem.governanceTokenAddress, - ecosystem - ); + + bool tokenInitialized = + Token(ecosystem.tokenModelAddress).exists( + ecosystem.governanceTokenAddress, + ecosystem.daoAddress + ); require(tokenInitialized, 'ElasticDAO: Please call initializeToken first'); _; } @@ -38,7 +65,14 @@ contract ElasticDAO { require(dao.summoned == false, 'ElasticDAO: DAO must not be summoned'); _; } - + modifier onlyController() { + require(msg.sender == controller, 'ElasticDAO: Only controller'); + _; + } + modifier onlyDeployer() { + require(msg.sender == deployer, 'ElasticDAO: Only deployer'); + _; + } modifier onlySummoners() { Ecosystem.Instance memory ecosystem = _getEcosystem(); DAO daoContract = DAO(ecosystem.daoModelAddress); @@ -48,36 +82,86 @@ contract ElasticDAO { require(summonerCheck, 'ElasticDAO: Only summoners'); _; } + modifier onlyWhenOpen() { + require(address(this).balance > 0, 'ElasticDAO: This DAO is closed'); + _; + } - constructor( + /** + * @notice Initializes and builds the ElasticDAO struct + * + * @param _ecosystemModelAddress - the address of the ecosystem model + * @param _controller the address which can control the core DAO functions + * @param _summoners - an array containing the addresses of the summoners + * @param _name - the name of the DAO + * @param _maxVotingLambda - the maximum amount of lambda that can be used to vote in the DAO + * + * @dev + * Requirements: + * - The DAO cannot already be initialized + * - The ecosystem model address cannot be the zero address + * - The DAO must have atleast one summoner to summon the DAO + */ + function initialize( address _ecosystemModelAddress, + address _controller, address[] memory _summoners, string memory _name, - uint256 _numberOfSummoners - ) { - ecosystemModelAddress = _ecosystemModelAddress; + uint256 _maxVotingLambda + ) external nonReentrant { + require(initialized == false, 'ElasticDAO: Already initialized'); + require( + _ecosystemModelAddress != address(0) && _controller != address(0), + 'ElasticDAO: Address Zero' + ); + require(_summoners.length > 0, 'ElasticDAO: At least 1 summoner required'); + + for (uint256 i = 0; i < _summoners.length; i += 1) { + if (_summoners[i] == address(0)) { + revert('ElasticDAO: Summoner address can not be zero address'); + } + } + + controller = _controller; deployer = msg.sender; - Ecosystem.Instance memory defaults = Ecosystem(_ecosystemModelAddress).deserialize(address(0)); summoners = _summoners; - Configurator configurator = Configurator(defaults.configuratorAddress); - Ecosystem.Instance memory ecosystem = configurator.buildEcosystem(defaults); - configurator.buildDAO(_summoners, _name, _numberOfSummoners, ecosystem); + Ecosystem.Instance memory defaults = Ecosystem(_ecosystemModelAddress).deserialize(address(0)); + Ecosystem.Instance memory ecosystem = _buildEcosystem(controller, defaults); + ecosystemModelAddress = ecosystem.ecosystemModelAddress; + + bool success = _buildDAO(_summoners, _name, _maxVotingLambda, ecosystem); + initialized = true; + require(success, 'ElasticDAO: Build DAO Failed'); } - function exitDAO(uint256 _deltaLambda) public onlyAfterSummoning { - // burn the shares - Token.Instance memory token = _getToken(); - ElasticGovernanceToken tokenContract = ElasticGovernanceToken(token.uuid); - tokenContract.burnShares(msg.sender, _deltaLambda); + function addLiquidityPool(address _poolAddress) + external + onlyController + nonReentrant + returns (bool) + { + liquidityPools.push(_poolAddress); - // eth to be transfered = ( deltaLambda/lambda ) * totalEthInTheDAO - uint256 ratioOfShares = ElasticMath.wdiv(_deltaLambda, token.lambda); - uint256 ethToBeTransfered = ElasticMath.wmul(ratioOfShares, address(this).balance); - // transfer the eth - msg.sender.transfer(ethToBeTransfered); + emit LiquidityPoolAdded(_poolAddress); } + /** + * @notice initializes the token of the DAO + * + * @param _name - name of the token + * @param _symbol - symbol of the token + * @param _eByL -the amount of lambda a summoner gets(per ETH) during the seeding phase of the DAO + * @param _elasticity the value by which the cost of entering the DAO increases ( on every join ) + * @param _k - is the constant token multiplier + * it increases the number of tokens that each member of the DAO has with respect to their lambda + * @param _maxLambdaPurchase - is the maximum amount of lambda that can be purchased per wallet + * + * @dev emits ElasticGovernanceTokenDeployed event + * @dev + * Requirements: + * - Only the deployer of the DAO can initialize the Token + */ function initializeToken( string memory _name, string memory _symbol, @@ -85,61 +169,103 @@ contract ElasticDAO { uint256 _elasticity, uint256 _k, uint256 _maxLambdaPurchase - ) external onlyBeforeSummoning { - require(msg.sender == deployer, 'ElasticDAO: Only deployer can initialize the Token'); + ) external onlyBeforeSummoning onlyDeployer nonReentrant { Ecosystem.Instance memory ecosystem = _getEcosystem(); - Token.Instance memory token = Configurator(ecosystem.configuratorAddress).buildToken( - _name, - _symbol, - _eByL, - _elasticity, - _k, - _maxLambdaPurchase, - ecosystem - ); + Token.Instance memory token = + _buildToken( + controller, + _name, + _symbol, + _eByL, + _elasticity, + _k, + _maxLambdaPurchase, + ecosystem + ); + emit ElasticGovernanceTokenDeployed(token.uuid); } - function initializeModule(address _moduleAddress, string memory _name) - external - // onlySummoners - TODO: Replace this with a permission - { - Ecosystem.Instance memory ecosystem = _getEcosystem(); - Registrator registrator = Registrator(ecosystem.registratorAddress); - registrator.registerModule(_moduleAddress, _name, ecosystem); + /** + * @notice this function is to be used for exiting the DAO + * for the underlying ETH value of _deltaLambda + * + * The eth value of _deltaLambda is calculated using: + * + * eth to be transfered = ( deltaLambda/lambda ) * totalEthInTheDAO + * + * @param _deltaLambda - the amount of lambda the address exits with + * + * Requirement: + * - ETH transfer must be successful + * @dev emits ExitDAO event + */ + function exit(uint256 _deltaLambda) external onlyAfterSummoning nonReentrant { + // burn the shares + Token.Instance memory token = _getToken(); + ElasticGovernanceToken tokenContract = ElasticGovernanceToken(token.uuid); + + // eth to be transfered = ( deltaLambda/lambda ) * totalEthInTheDAO + uint256 ratioOfShares = ElasticMath.wdiv(_deltaLambda, token.lambda); + uint256 ethToBeTransfered = ElasticMath.wmul(ratioOfShares, address(this).balance); + // transfer the eth + tokenContract.burnShares(msg.sender, _deltaLambda); + (bool success, ) = msg.sender.call{ value: ethToBeTransfered }(''); + require(success, 'ElasticDAO: Exit Failed'); + emit ExitDAO(msg.sender, _deltaLambda, ethToBeTransfered); } - function join(uint256 _deltaLambda) public payable onlyAfterSummoning { - Token.Instance memory token = _getToken(); + /** + * @notice this function returns the length of the liquidity pools array + * + */ + function getLiquidityPoolCount() public view returns (uint256) { + return liquidityPools.length; + } - require( - _deltaLambda <= token.maxLambdaPurchase, - 'ElasticDAO: Cannot purchase that many shares at once' - ); + /** + * @notice this function is used to join the DAO after it has been summoned + * Joining the DAO is syntactically equal to minting _deltaLambda for the function caller. + * + * Based on the current state of the DAO, capitalDelta, deltaE, mDash are calulated, + * after which maxTokenLambda is minted for the address calling the function. + * + * @dev documentation and further math regarding capitalDelta, deltaE, + * mDash can be found at ../libraries/ElasticMath.sol + * @dev emits the JoinDAO event + * + * @dev Requirements: + * (The value of maxLambdaPurchase is set during the initialzing of the DAO) + * The correct value of ETH, calculated via deltaE, + * must be sent in the transaction by the calling address + * The token contract should be successfully be able to mint token.makxLambdaPurchase + */ + function join() external payable onlyAfterSummoning onlyWhenOpen nonReentrant { + Token.Instance memory token = _getToken(); ElasticGovernanceToken tokenContract = ElasticGovernanceToken(token.uuid); - uint256 capitalDelta = ElasticMath.capitalDelta( - // at this stage address(this).balance has the eth present in it(before function join), - // along with msg.value - // hence msg.value is subtracted from capitalDelta because capitalDelta is calculated - // with the eth present in the contract prior to recieving msg.value - address(this).balance - msg.value, - tokenContract.totalSupply() - ); - uint256 deltaE = ElasticMath.deltaE( - _deltaLambda, - capitalDelta, - token.k, - token.elasticity, - token.lambda, - token.m - ); - - require(deltaE == msg.value, 'ElasticDAO: Incorrect ETH amount'); + uint256 capitalDelta = + ElasticMath.capitalDelta( + // the current totalBalance of the DAO is inclusive of msg.value, + // capitalDelta is to be calculated without the msg.value + SafeMath.sub(address(this).balance, msg.value), + tokenContract.totalSupply() + ); + uint256 deltaE = + ElasticMath.deltaE( + token.maxLambdaPurchase, + capitalDelta, + token.k, + token.elasticity, + token.lambda, + token.m + ); + + require(msg.value >= deltaE, 'ElasticDAO: Incorrect ETH amount'); // mdash - uint256 lambdaDash = SafeMath.add(_deltaLambda, token.lambda); + uint256 lambdaDash = SafeMath.add(token.maxLambdaPurchase, token.lambda); uint256 mDash = ElasticMath.mDash(lambdaDash, token.lambda, token.m); // serialize the token @@ -149,54 +275,314 @@ contract ElasticDAO { tokenStorage.serialize(token); // tokencontract mint shares - tokenContract.mintShares(msg.sender, _deltaLambda); + bool success = tokenContract.mintShares(msg.sender, token.maxLambdaPurchase); + require(success, 'ElasticDAO: Mint Shares Failed during Join'); + + for (uint256 i = 0; i < liquidityPools.length; i += 1) { + IUniswapV2Pair(liquidityPools[i]).sync(); + } + + // return extra ETH + if (success && msg.value > deltaE) { + (success, ) = msg.sender.call{ value: SafeMath.sub(msg.value, deltaE) }(''); + require(success, 'ElasticDAO: TransactionFailed'); + } + + emit JoinDAO(msg.sender, token.maxLambdaPurchase, msg.value); } - // Summoning + /** + * @notice penalizes @param _addresses with @param _amounts respectively + * + * @param _addresses - an array of addresses + * @param _amounts - an array containing the amounts each address has to be penalized respectively + * + * @dev Requirement: + * - Each address must have a corresponding amount to be penalized with + */ + function penalize(address[] memory _addresses, uint256[] memory _amounts) + external + onlyController + nonReentrant + { + require( + _addresses.length == _amounts.length, + 'ElasticDAO: An amount is required for each address' + ); + + ElasticGovernanceToken tokenContract = ElasticGovernanceToken(_getToken().uuid); + + for (uint256 i = 0; i < _addresses.length; i += 1) { + uint256 lambda = tokenContract.balanceOfInShares(_addresses[i]); + + if (lambda < _amounts[i]) { + if (lambda != 0) { + tokenContract.burnShares(_addresses[i], lambda); + } + + FailedToFullyPenalize(_addresses[i], _amounts[i], lambda); + } else { + tokenContract.burnShares(_addresses[i], _amounts[i]); + } + } + } + + function removeLiquidityPool(address _poolAddress) + external + onlyController + nonReentrant + returns (bool) + { + for (uint256 i = 0; i < liquidityPools.length; i += 1) { + if (liquidityPools[i] == _poolAddress) { + liquidityPools[i] = liquidityPools[liquidityPools.length - 1]; + liquidityPools.pop(); + } + } + emit LiquidityPoolRemoved(_poolAddress); + } + + /** + * @notice rewards @param _addresess with @param _amounts respectively + * + * @param _addresses - an array of addresses + * @param _amounts - an array containing the amounts each address has to be rewarded respectively + * + * @dev Requirement: + * - Each address must have a corresponding amount to be rewarded with + */ + function reward(address[] memory _addresses, uint256[] memory _amounts) + external + onlyController + nonReentrant + { + require( + _addresses.length == _amounts.length, + 'ElasticDAO: An amount is required for each address' + ); + + ElasticGovernanceToken tokenContract = ElasticGovernanceToken(_getToken().uuid); + + for (uint256 i = 0; i < _addresses.length; i += 1) { + tokenContract.mintShares(_addresses[i], _amounts[i]); + } + } + + /** + * @notice sets the controller of the DAO, + * The controller of the DAO handles various responsibilities of the DAO, + * such as burning and minting tokens on behalf of the DAO + * + * @param _controller - the new address of the controller of the DAO + * + * @dev emits ControllerChanged event + * @dev Requirements: + * - The controller must not be the 0 address + * - The controller of the DAO should successfully be set as the burner of the tokens of the DAO + * - The controller of the DAO should successfully be set as the minter of the tokens of the DAO + */ + function setController(address _controller) external onlyController nonReentrant { + require(_controller != address(0), 'ElasticDAO: Address Zero'); + + controller = _controller; + + // Update minter / burner + ElasticGovernanceToken tokenContract = ElasticGovernanceToken(_getToken().uuid); + bool success = tokenContract.setBurner(controller); + require(success, 'ElasticDAO: Set Burner failed during setController'); + success = tokenContract.setMinter(controller); + require(success, 'ElasticDAO: Set Minter failed during setController'); + + emit ControllerChanged(controller); + } + + /** + * @notice sets the max voting lambda value for the DAO + * @param _maxVotingLambda - the value of the maximum amount of lambda that can be used for voting + * @dev emits MaxVotingLambdaChanged event + */ + function setMaxVotingLambda(uint256 _maxVotingLambda) external onlyController nonReentrant { + Ecosystem.Instance memory ecosystem = _getEcosystem(); + DAO daoStorage = DAO(ecosystem.daoModelAddress); + DAO.Instance memory dao = daoStorage.deserialize(address(this), ecosystem); + dao.maxVotingLambda = _maxVotingLambda; + daoStorage.serialize(dao); + + emit MaxVotingLambdaChanged(_maxVotingLambda); + } + + /** + * @notice seeds the DAO, + * Essentially transferring of ETH by a summoner address, in return for lambda is seeding the DAO, + * The lambda receieved is given by: + * Lambda = Eth / eByL + * + * @dev seeding of the DAO occurs after the DAO has been initialized, + * and before the DAO has been summoned + * @dev emits the SeedDAO event + */ function seedSummoning() - public + external payable onlyBeforeSummoning onlySummoners onlyAfterTokenInitialized + nonReentrant { Token.Instance memory token = _getToken(); uint256 deltaE = msg.value; uint256 deltaLambda = ElasticMath.wdiv(deltaE, token.eByL); ElasticGovernanceToken(token.uuid).mintShares(msg.sender, deltaLambda); + + emit SeedDAO(msg.sender, deltaLambda); } - function summon(uint256 _deltaLambda) public onlyBeforeSummoning onlySummoners { + /** + * @notice summons the DAO, + * Summoning the DAO results in all summoners getting _deltaLambda + * after which people can enter the DAO using the join function + * + * @param _deltaLambda - the amount of lambda each summoner address receives + * + * @dev emits SummonedDAO event + * @dev Requirement: + * The DAO must be seeded with ETH during the seeding phase + * (This is to facilitate capitalDelta calculations after the DAO has been summoned). + * + * @dev documentation and further math regarding capitalDelta + * can be found at ../libraries/ElasticMath.sol + */ + function summon(uint256 _deltaLambda) external onlyBeforeSummoning onlySummoners nonReentrant { require(address(this).balance > 0, 'ElasticDAO: Please seed DAO with ETH to set ETH:EGT ratio'); Ecosystem.Instance memory ecosystem = _getEcosystem(); DAO daoContract = DAO(ecosystem.daoModelAddress); DAO.Instance memory dao = daoContract.deserialize(address(this), ecosystem); - Token.Instance memory token = Token(ecosystem.tokenModelAddress).deserialize( - ecosystem.governanceTokenAddress, - ecosystem - ); + Token.Instance memory token = + Token(ecosystem.tokenModelAddress).deserialize(ecosystem.governanceTokenAddress, ecosystem); ElasticGovernanceToken tokenContract = ElasticGovernanceToken(token.uuid); - for (uint256 i = 0; i < dao.numberOfSummoners; i = SafeMath.add(i, 1)) { + // number of summoners can not grow unboundly. it is fixed limit. + for (uint256 i = 0; i < dao.numberOfSummoners; i += 1) { tokenContract.mintShares(daoContract.getSummoner(dao, i), _deltaLambda); } dao.summoned = true; daoContract.serialize(dao); + + emit SummonedDAO(msg.sender); } // Getters - function getDAO() public view returns (DAO.Instance memory) { + function getDAO() external view returns (DAO.Instance memory) { return _getDAO(); } - function getEcosystem() public view returns (Ecosystem.Instance memory) { + function getEcosystem() external view returns (Ecosystem.Instance memory) { return _getEcosystem(); } + /** + * @dev creates DAO.Instance record + * @param _summoners addresses of the summoners + * @param _name name of the DAO + * @param _ecosystem instance of Ecosystem the DAO uses + * @param _maxVotingLambda - the maximum amount of lambda that can be used to vote in the DAO + * @return bool true + */ + function _buildDAO( + address[] memory _summoners, + string memory _name, + uint256 _maxVotingLambda, + Ecosystem.Instance memory _ecosystem + ) internal returns (bool) { + DAO daoStorage = DAO(_ecosystem.daoModelAddress); + DAO.Instance memory dao; + + dao.uuid = address(this); + dao.ecosystem = _ecosystem; + dao.maxVotingLambda = _maxVotingLambda; + dao.name = _name; + dao.summoned = false; + dao.summoners = _summoners; + daoStorage.serialize(dao); + + return true; + } + + /** + * @dev Deploys proxies leveraging the implementation contracts found on the + * default Ecosystem.Instance record. + * @param _controller the address which can control the core DAO functions + * @param _defaults instance of Ecosystem with the implementation addresses + * @return ecosystem Ecosystem.Instance + */ + function _buildEcosystem(address _controller, Ecosystem.Instance memory _defaults) + internal + returns (Ecosystem.Instance memory ecosystem) + { + ecosystem.daoAddress = address(this); + ecosystem.daoModelAddress = _deployProxy(_defaults.daoModelAddress, _controller); + ecosystem.ecosystemModelAddress = _deployProxy(_defaults.ecosystemModelAddress, _controller); + ecosystem.governanceTokenAddress = _deployProxy(_defaults.governanceTokenAddress, _controller); + ecosystem.tokenHolderModelAddress = _deployProxy( + _defaults.tokenHolderModelAddress, + _controller + ); + ecosystem.tokenModelAddress = _deployProxy(_defaults.tokenModelAddress, _controller); + + Ecosystem(ecosystem.ecosystemModelAddress).serialize(ecosystem); + return ecosystem; + } + + /** + * @dev creates a Token.Instance record and initializes the ElasticGovernanceToken. + * @param _controller the address which can control the core DAO functions + * @param _name name of the token + * @param _symbol symbol of the token + * @param _eByL initial ETH/token ratio + * @param _elasticity the percentage by which capitalDelta should increase + * @param _k a constant, initially set by the DAO + * @param _maxLambdaPurchase maximum amount of lambda (shares) that can be + * minted on each call to the join function in ElasticDAO.sol + * @param _ecosystem the DAO's ecosystem instance + * @return token Token.Instance + */ + function _buildToken( + address _controller, + string memory _name, + string memory _symbol, + uint256 _eByL, + uint256 _elasticity, + uint256 _k, + uint256 _maxLambdaPurchase, + Ecosystem.Instance memory _ecosystem + ) internal returns (Token.Instance memory token) { + token.eByL = _eByL; + token.ecosystem = _ecosystem; + token.elasticity = _elasticity; + token.k = _k; + token.lambda = 0; + token.m = 1000000000000000000; + token.maxLambdaPurchase = _maxLambdaPurchase; + token.name = _name; + token.symbol = _symbol; + token.uuid = _ecosystem.governanceTokenAddress; + + // initialize the token within the ecosystem + return + ElasticGovernanceToken(token.uuid).initialize(_controller, _controller, _ecosystem, token); + } + + function _deployProxy(address _implementationAddress, address _owner) internal returns (address) { + PProxy proxy = new PProxy(); + proxy.setImplementation(_implementationAddress); + proxy.setProxyOwner(_owner); + return address(proxy); + } + // Private function _getDAO() internal view returns (DAO.Instance memory) { diff --git a/src/core/ElasticDAOFactory.sol b/src/core/ElasticDAOFactory.sol index cdf1a13..ca5dd8e 100644 --- a/src/core/ElasticDAOFactory.sol +++ b/src/core/ElasticDAOFactory.sol @@ -3,67 +3,210 @@ pragma solidity 0.7.2; pragma experimental ABIEncoderV2; import './ElasticDAO.sol'; + import '../models/Ecosystem.sol'; +import '@openzeppelin/contracts/utils/ReentrancyGuard.sol'; + +import '@pie-dao/proxy/contracts/PProxy.sol'; -// This contract is the facory contract for ElasticDAO -contract ElasticDAOFactory { - address internal ecosystemModelAddress; +/** + * @dev The factory contract for ElasticDAO + * Deploys ElasticDAO's and also sets all the required parameters and permissions, + * Collects a fee which is later used by ELasticDAO for further development of the project. + */ +contract ElasticDAOFactory is ReentrancyGuard { + address public ecosystemModelAddress; + address public elasticDAOImplementationAddress; + address public manager; address payable feeAddress; address[] public deployedDAOAddresses; - uint256 public deployedDAOCount = 0; + uint256 public fee; + bool public initialized = false; - event DAODeployed(address indexed daoAddress); + event DeployedDAO(address indexed daoAddress); + event ElasticDAOImplementationAddressUpdated(address indexed elasticDAOImplementationAddress); event FeeAddressUpdated(address indexed feeReceiver); - event FeesCollected(address treasuryAddress, uint256 amount); + event FeesCollected(address indexed feeAddress, uint256 amount); + event FeeUpdated(uint256 amount); + event ManagerUpdated(address indexed newManager); + + modifier onlyManager() { + require(manager == msg.sender, 'ElasticDAO: Only manager'); + _; + } + + /** + * @notice Initializes the ElasticDAO factory + * + * @param _ecosystemModelAddress - the address of the ecosystem model + * @dev + * Requirements: + * - The factory cannot already be initialized + * - The ecosystem model address cannot be the zero address + */ + function initialize(address _ecosystemModelAddress, address _elasticDAOImplementationAddress) + external + nonReentrant + { + require(initialized == false, 'ElasticDAO: Factory already initialized'); + require( + _ecosystemModelAddress != address(0) && _elasticDAOImplementationAddress != address(0), + 'ElasticDAO: Address Zero' + ); - constructor(address _ecosystemModelAddress) { ecosystemModelAddress = _ecosystemModelAddress; + elasticDAOImplementationAddress = _elasticDAOImplementationAddress; + fee = 250000000000000000; + initialized = true; + manager = msg.sender; + } + + /** + * @notice collects the fees sent to this contract + * + * @dev emits FeesCollected event + * Requirement: + * - The fee collection transaction should be successful + */ + function collectFees() external nonReentrant { + require(feeAddress != address(0), 'ElasticDAO: No feeAddress set'); + + uint256 amount = address(this).balance; + + (bool success, ) = feeAddress.call{ value: amount }(''); + require(success, 'ElasticDAO: TransactionFailed'); + emit FeesCollected(address(feeAddress), amount); } /** - * @dev deploys DAO and initializes token - * and stores the address of the deployed DAO + * @notice deploys DAO and initializes token and stores the address of the deployed DAO + * + * @param _summoners - an array containing address of summoners + * @param _nameOfDAO - the name of the DAO + * @param _nameOfToken - the name of the token + * @param _eByL-the amount of lambda a summoner gets(per ETH) during the seeding phase of the DAO + * @param _elasticity-the value by which the cost of entering the DAO increases ( on every join ) + * @param _k - is the constant token multiplier, + * it increases the number of tokens that each member of the DAO has with respect to their lambda + * @param _maxLambdaPurchase - is the maximum amount of lambda that can be purchased per wallet + * @param _maxVotingLambda - is the maximum amount of lambda that can be used to vote + * + * @dev emits DeployedDAO event + * @dev + * Requirement: + * - The fee required should be sent in the call to the function */ function deployDAOAndToken( address[] memory _summoners, string memory _nameOfDAO, - uint256 _numberOfSummoners, string memory _nameOfToken, string memory _symbol, uint256 _eByL, uint256 _elasticity, uint256 _k, - uint256 _maxLambdaPurchase - ) public payable { - // create the DAO - ElasticDAO elasticDAO = new ElasticDAO( + uint256 _maxLambdaPurchase, + uint256 _maxVotingLambda + ) external payable nonReentrant { + require(fee == msg.value, 'ElasticDAO: A fee is required to deploy a DAO'); + + // Deploy the DAO behind PProxy + PProxy proxy = new PProxy(); + proxy.setImplementation(elasticDAOImplementationAddress); + proxy.setProxyOwner(msg.sender); + + address payable daoAddress = address(proxy); + + // initialize the DAO + ElasticDAO(daoAddress).initialize( ecosystemModelAddress, + msg.sender, _summoners, _nameOfDAO, - _numberOfSummoners + _maxVotingLambda ); + deployedDAOAddresses.push(daoAddress); + // initialize the token - elasticDAO.initializeToken(_nameOfToken, _symbol, _eByL, _elasticity, _k, _maxLambdaPurchase); + ElasticDAO(daoAddress).initializeToken( + _nameOfToken, + _symbol, + _eByL, + _elasticity, + _k, + _maxLambdaPurchase + ); + emit DeployedDAO(daoAddress); + } - deployedDAOAddresses.push(address(elasticDAO)); - deployedDAOCount = SafeMath.add(deployedDAOCount, 1); - emit DAODeployed(address(elasticDAO)); + /** + * @notice returns deployed DAO count + */ + function deployedDAOCount() external view returns (uint256) { + return deployedDAOAddresses.length; } - function updateFeeAddress(address _feeReceiver) external { - // TODO: NEEDS MODIFIER!!! THIS SHOULD ONLY BE UPDATEABLE BY A TRANSACTIONAL VOTE + /** + * @notice updates the address of the elasticDAO implementation + * @param _elasticDAOImplementationAddress - the new address + * @dev emits ElasticDAOImplementationAddressUpdated event + * @dev Requirement: + * - The elasticDAO implementation address cannot be zero address + */ + function updateElasticDAOImplementationAddress(address _elasticDAOImplementationAddress) + external + onlyManager + nonReentrant + { + require(_elasticDAOImplementationAddress != address(0), 'ElasticDAO: Address Zero'); + + elasticDAOImplementationAddress = _elasticDAOImplementationAddress; + emit ElasticDAOImplementationAddressUpdated(_elasticDAOImplementationAddress); + } + + /** + * @notice updates the fee required to deploy a DAQ + * + * @param _amount - the new amount of the fees + * + * @dev emits FeeUpdated event + */ + function updateFee(uint256 _amount) external onlyManager nonReentrant { + fee = _amount; + emit FeeUpdated(fee); + } + + /** + * @notice updates the address of the fee reciever + * + * @param _feeReceiver - the new address of the fee reciever + * + * @dev emits FeeAddressUpdated event + * @dev + * Requirement: + * - The fee receiver address cannot be zero address + */ + function updateFeeAddress(address _feeReceiver) external onlyManager nonReentrant { + require(_feeReceiver != address(0), 'ElasticDAO: Address Zero'); feeAddress = payable(_feeReceiver); emit FeeAddressUpdated(_feeReceiver); } - function collectFees() external { - // TODO: NEEDS MODIFIER!!! THIS SHOULD ONLY BE UPDATEABLE BY A TRANSACTIONAL VOTE - uint256 amount = address(this).balance; + /** + * @notice updates the manager address + * + * @param _newManager - the address of the new manager + * + * @dev Requirement + * - Address of the manager cannot be zero + * @dev emits ManagerUpdated event + */ + function updateManager(address _newManager) external onlyManager nonReentrant { + require(_newManager != address(0), 'ElasticDAO: Address Zero'); - feeAddress.transfer(amount); - emit FeesCollected(address(feeAddress), amount); + manager = _newManager; + emit ManagerUpdated(manager); } receive() external payable {} diff --git a/src/interfaces/IERC20.sol b/src/interfaces/IERC20.sol deleted file mode 100644 index 7b768eb..0000000 --- a/src/interfaces/IERC20.sol +++ /dev/null @@ -1,79 +0,0 @@ -// SPDX-License-Identifier: GPLv3 -pragma solidity 0.7.2; - -/** - * @dev Interface of the ERC20 standard as defined in the EIP. - */ -interface IERC20 { - /** - * @dev Emitted when the allowance of a @param _spender for @param _owner is set by - * a call to {approve} - * @param _amount is the new allowance - */ - event Approval(address indexed _owner, address indexed _spender, uint256 _amount); - - /** - * @dev Emitted when @param _amount tokens are moved from the @param _from account - * to @param _to account - */ - event Transfer(address indexed _from, address indexed _to, uint256 _amount); - - /** - * @dev Returns the remaining number of tokens that @param _spender will be - * allowed to spend on behalf of @param _owner through {transferFrom}. This is - * zero by default - * - * This value changes when {approve} or {transferFrom} are called - */ - function allowance(address _owner, address _spender) external view returns (uint256); - - /** - * @dev Sets @param _amount as the allowance of @param _spender over the caller's tokens - * - * Returns a boolean value indicating whether the operation succeeded - * - * IMPORTANT: Beware that changing an allowance with this method brings the risk - * that someone may use both the old and the new allowance by unfortunate - * transaction ordering. One possible solution to mitigate this race - * condition is to first reduce the spender's allowance to 0 and set the - * desired value afterwards: - * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 - * - * Emits an {Approval} event - */ - function approve(address _spender, uint256 _amount) external returns (bool); - - /** - * @dev Returns the amount of tokens owned by @param _account. - */ - function balanceOf(address _account) external view returns (uint256); - - /** - * @dev Returns the amount of tokens in existence - */ - function totalSupply() external view returns (uint256); - - /** - * @dev Moves @param _amount tokens from the caller's account to @param _to address - * - * Returns a boolean value indicating whether the operation succeeded - * - * Emits a {Transfer} event - */ - function transfer(address _to, uint256 _amount) external returns (bool); - - /** - * @dev Moves @param _amount tokens from @param _from to @param _to using the - * allowance mechanism. @param _amount is then deducted from the caller's - * allowance - * - * Returns a boolean value indicating whether the operation succeeded - * - * Emits a {Transfer} event - */ - function transferFrom( - address _from, - address _to, - uint256 _amount - ) external returns (bool); -} diff --git a/src/interfaces/IElasticToken.sol b/src/interfaces/IElasticToken.sol index 2e807e5..b975108 100644 --- a/src/interfaces/IElasticToken.sol +++ b/src/interfaces/IElasticToken.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPLv3 pragma solidity 0.7.2; -import './IERC20.sol'; +import '@openzeppelin/contracts/token/ERC20/IERC20.sol'; interface IElasticToken is IERC20 { /** @@ -11,25 +11,6 @@ interface IElasticToken is IERC20 { */ function balanceOfInShares(address _account) external view returns (uint256 lambda); - /** - * @dev Returns the amount of tokens owned by @param _account at @param _blockNumber. - * @param _account - address of the account - * @param _blockNumber - the blockNumber at which the balance is to be checked at - * @return t uint256 - t is the number of tokens - */ - function balanceOfAt(address _account, uint256 _blockNumber) external view returns (uint256 t); - - /** - * @dev Returns the amount of shares owned by @param _account at @param _blockNumber. - * @param _account - address of the account - * @param _blockNumber - the blockNumber at which the balance of shares is to be checked at - * @return lambda uint256 - lambda is the number of shares - */ - function balanceOfInSharesAt(address _account, uint256 _blockNumber) - external - view - returns (uint256 lambda); - /** * @dev Reduces the balance(tokens) of @param _account by @param _amount * @param _account address of the account @@ -46,6 +27,14 @@ interface IElasticToken is IERC20 { */ function burnShares(address _account, uint256 _amount) external returns (bool); + /** + * @dev mints @param _amount tokens for @param _account + * @param _account - the address of the account for whom the token have to be minted to + * @param _amount - the amount of tokens to be minted + * @return bool + */ + function mint(address _account, uint256 _amount) external returns (bool); + /** * @dev mints @param _amount of shares for @param _account * @param _account address of the account diff --git a/src/interfaces/IUniswapV2Pair.sol b/src/interfaces/IUniswapV2Pair.sol new file mode 100644 index 0000000..cf29237 --- /dev/null +++ b/src/interfaces/IUniswapV2Pair.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: GPLv3 +pragma solidity 0.7.2; + +interface IUniswapV2Pair { + function sync() external; +} diff --git a/src/libraries/ElasticMath.sol b/src/libraries/ElasticMath.sol index dd39187..0e39ac9 100644 --- a/src/libraries/ElasticMath.sol +++ b/src/libraries/ElasticMath.sol @@ -4,30 +4,52 @@ pragma solidity 0.7.2; import './SafeMath.sol'; /** - * This library does the Elastic math + * @dev Provides functions for performing ElasticDAO specific math. + * + * These functions correspond with functions provided by the JS SDK and should + * always be used instead of doing calculations within other contracts to avoid + * any inconsistencies in the math. + * + * Notes: + * + * - Dash values represent the state after a transaction has completed successfully. + * - Non-dash values represent the current state, before the transaction has completed. + * - Lambda is the math term for shares. We typically expose the value to users as + * shares instead of lambda because it's easier to grok. */ - library ElasticMath { + /** + * @dev calculates the value of capitalDelta; the amount of ETH backing each + * governance token. + * @param totalEthValue amount of ETH in the DAO contract + * @param totalSupplyOfTokens number of tokens in existance + * + * capitalDelta = totalEthValue / totalSupplyOfTokens + * @return uint256 + */ function capitalDelta(uint256 totalEthValue, uint256 totalSupplyOfTokens) internal pure returns (uint256) { - return (wdiv(totalEthValue, totalSupplyOfTokens)); + return wdiv(totalEthValue, totalSupplyOfTokens); } /** - * @dev calculates the value of deltaE + * @dev calculates the value of deltaE; the amount of ETH required to mint deltaLambda * @param deltaLambda = lambdaDash - lambda - * @param capitalDeltaValue is the Eth/Egt ratio - * @param k is a constant, initially set by the DAO - * @param elasticity is the value of elasticity, initially set by the DAO - * @param lambda = Current outstanding shares - * @param m = Current share modifier + * @param capitalDeltaValue the ETH/token ratio; see capitalDelta(uint256, uint256) + * @param k constant token multiplier - it increases the number of tokens + * that each member of the DAO has with respect to their lambda + * @param elasticity the percentage by which capitalDelta (cost of entering the DAO) + * should increase on every join + * @param lambda outstanding shares + * @param m - lambda modifier - it's value increases every time someone joins the DAO * + * lambdaDash = deltaLambda + lambda * mDash = ( lambdaDash / lambda ) * m - * deltaE = ( capitalDelta * k ( ( lambdaDash * mDash * ( 1 + elasticity ) ) - lambda * m ) - * @return deltaEValue uint256 + * deltaE = capitalDelta * k * ( lambdaDash * mDash * ( 1 + elasticity ) - lambda * m ) + * @return uint256 */ function deltaE( uint256 deltaLambda, @@ -36,91 +58,112 @@ library ElasticMath { uint256 elasticity, uint256 lambda, uint256 m - ) internal pure returns (uint256 deltaEValue) { + ) internal pure returns (uint256) { uint256 lambdaDash = SafeMath.add(deltaLambda, lambda); - deltaEValue = wmul( - wmul(capitalDeltaValue, k), - SafeMath.sub( - wmul(lambdaDash, wmul(mDash(lambdaDash, lambda, m), revamp(elasticity))), - wmul(lambda, m) - ) - ); - return deltaEValue; + + return + wmul( + wmul(capitalDeltaValue, k), + SafeMath.sub( + wmul(lambdaDash, wmul(mDash(lambdaDash, lambda, m), revamp(elasticity))), + wmul(lambda, m) + ) + ); } + /** + * @dev calculates the lambda value given t, k, & m + * @param tokens t value; number of tokens for which lambda should be calculated + * @param k constant token multiplier - it increases the number of tokens + * that each member of the DAO has with respect to their lambda + * @param m - lambda modifier - it's value increases every time someone joins the DAO + * + * lambda = t / ( m * k) + * @return uint256 + */ function lambdaFromT( - uint256 t, + uint256 tokens, uint256 k, uint256 m - ) internal pure returns (uint256 lambda) { - return wdiv(t, wmul(k, m)); + ) internal pure returns (uint256) { + return wdiv(tokens, wmul(k, m)); } /** - * @dev returns the value of mDash - * mDash = New share modifier - * @param m = Current share modifier - * @param lambda = Current outstanding shares - * @param lambdaDash = New outstanding shares + * @dev calculates the future share modifier given the future value of + * lambda (lambdaDash), the current value of lambda, and the current share modifier + * @param m current share modifier + * @param lambda current outstanding shares + * @param lambdaDash future outstanding shares * * mDash = ( lambdaDash / lambda ) * m - * @return mDashValue uint256 + * @return uint256 */ function mDash( uint256 lambdaDash, uint256 lambda, uint256 m - ) internal pure returns (uint256 mDashValue) { + ) internal pure returns (uint256) { return wmul(wdiv(lambdaDash, lambda), m); } /** - * @dev returns the value of revamp - * @param elasticity is the value of elasticity initially set by the DAO - * upto 18 decimal points of precision + * @dev calculates the value of revamp + * @param elasticity the percentage by which capitalDelta should increase * - * Essentially takes in the value of elasticity and - * and returns the value of ( 1 + elasticity ) with 18 decimals of precision - * @return revampValue uint256 + * revamp = 1 + elasticity + * @return uint256 */ - function revamp(uint256 elasticity) internal pure returns (uint256 revampValue) { - return SafeMath.add(elasticity, SafeMath.pow(10, 18)); + function revamp(uint256 elasticity) internal pure returns (uint256) { + return SafeMath.add(elasticity, 1000000000000000000); } /** - * @dev returns the value of the total tokens in the DAO - * @param lambda = Current outstanding shares - * @param k is a constant, initially set by the DAO - * @param m = Current share modifier + * @dev calculates the number of tokens represented by lambda given k & m + * @param lambda shares + * @param k a constant, initially set by the DAO + * @param m share modifier * - * t = ( lambda * m * k ) - * @return tokens uint256 + * t = lambda * m * k + * @return uint256 */ function t( uint256 lambda, uint256 k, uint256 m - ) internal pure returns (uint256 tokens) { + ) internal view returns (uint256) { + if (lambda == 0) { + return 0; + } + return wmul(wmul(lambda, k), m); } /** - * @dev multiplies two float values, - * required since soldity does not handle floating point values + * @dev multiplies two float values, required since solidity does not handle + * floating point values + * + * inspiration: https://github.com/dapphub/ds-math/blob/master/src/math.sol + * * @return uint256 */ - // inspiration: https://github.com/dapphub/ds-math/blob/master/src/math.sol function wmul(uint256 a, uint256 b) internal pure returns (uint256) { - return SafeMath.add(SafeMath.mul(a, b), 1000000000000000000 / 2) / 1000000000000000000; + return + SafeMath.div( + SafeMath.add(SafeMath.mul(a, b), SafeMath.div(1000000000000000000, 2)), + 1000000000000000000 + ); } /** - * @dev divides two float values, - * required since soldity does not handle floating point values + * @dev divides two float values, required since solidity does not handle + * floating point values. + * + * inspiration: https://github.com/dapphub/ds-math/blob/master/src/math.sol + * * @return uint256 */ - // inspiration: https://github.com/dapphub/ds-math/blob/master/src/math.sol function wdiv(uint256 a, uint256 b) internal pure returns (uint256) { - return SafeMath.add(SafeMath.mul(a, 1000000000000000000), b / 2) / b; + return SafeMath.div(SafeMath.add(SafeMath.mul(a, 1000000000000000000), SafeMath.div(b, 2)), b); } } diff --git a/src/libraries/SafeMath.sol b/src/libraries/SafeMath.sol index 8ec7c7f..c07faef 100644 --- a/src/libraries/SafeMath.sol +++ b/src/libraries/SafeMath.sol @@ -43,27 +43,8 @@ library SafeMath { * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { - return sub(a, b, 'SafeMath: subtraction overflow'); - } - - /** - * @dev Returns the subtraction of two unsigned integers, reverting with custom message on - * overflow (when the result is negative). - * - * Counterpart to Solidity's `-` operator. - * - * Requirements: - * - * - Subtraction cannot overflow. - */ - function sub( - uint256 a, - uint256 b, - string memory errorMessage - ) internal pure returns (uint256) { - require(b <= a, errorMessage); + require(b <= a, 'SafeMath: subtraction overflow'); uint256 c = a - b; - return c; } @@ -91,22 +72,6 @@ library SafeMath { return c; } - /** - * @dev Returns the integer division of two unsigned integers. Reverts on - * division by zero. The result is rounded towards zero. - * - * Counterpart to Solidity's `/` operator. Note: this function uses a - * `revert` opcode (which leaves remaining gas untouched) while Solidity - * uses an invalid opcode to revert (consuming all remaining gas). - * - * Requirements: - * - * - The divisor cannot be zero. - */ - function div(uint256 a, uint256 b) internal pure returns (uint256) { - return div(a, b, 'SafeMath: division by zero'); - } - /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. @@ -116,76 +81,13 @@ library SafeMath { * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: - * * - The divisor cannot be zero. */ - function div( - uint256 a, - uint256 b, - string memory errorMessage - ) internal pure returns (uint256) { - require(b > 0, errorMessage); + function div(uint256 a, uint256 b) internal pure returns (uint256) { + // Solidity only automatically asserts when dividing by 0 uint256 c = a / b; - // assert(a == b * c + a % b); // There is no case in which this doesn't hold + require(c > 0, 'SafeMath: division by zero'); return c; } - - /** - * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), - * Reverts when dividing by zero. - * - * Counterpart to Solidity's `%` operator. This function uses a `revert` - * opcode (which leaves remaining gas untouched) while Solidity uses an - * invalid opcode to revert (consuming all remaining gas). - * - * Requirements: - * - * - The divisor cannot be zero. - */ - function mod(uint256 a, uint256 b) internal pure returns (uint256) { - return mod(a, b, 'SafeMath: modulo by zero'); - } - - /** - * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), - * Reverts with custom message when dividing by zero. - * - * Counterpart to Solidity's `%` operator. This function uses a `revert` - * opcode (which leaves remaining gas untouched) while Solidity uses an - * invalid opcode to revert (consuming all remaining gas). - * - * Requirements: - * - * - The divisor cannot be zero. - */ - function mod( - uint256 a, - uint256 b, - string memory errorMessage - ) internal pure returns (uint256) { - require(b != 0, errorMessage); - return a % b; - } - - function pow(uint256 base, uint256 exponent) internal pure returns (uint256) { - if (exponent == 0) { - return 1; - } else if (exponent == 1) { - return base; - } else if (base == 0 && exponent != 0) { - return 0; - } else { - uint256 z = base; - for (uint256 i = 1; i < exponent; i = add(i, 1)) z = mul(z, base); - return z; - } - } - - /** - * @dev Returns the largest of two numbers. - */ - function max(uint256 a, uint256 b) internal pure returns (uint256) { - return a >= b ? a : b; - } } diff --git a/src/models/Balance.sol b/src/models/Balance.sol deleted file mode 100644 index c1351bd..0000000 --- a/src/models/Balance.sol +++ /dev/null @@ -1,160 +0,0 @@ -// SPDX-License-Identifier: GPLv3 -pragma solidity 0.7.2; -pragma experimental ABIEncoderV2; - -import './EternalModel.sol'; -import '../libraries/SafeMath.sol'; - -import './BalanceMultipliers.sol'; -import './Token.sol'; -import './TokenHolder.sol'; - -/// @author ElasticDAO - https://ElasticDAO.org -/// @notice This contract is used for storing token balance change data -/// @dev ElasticDAO network contracts can read/write from this contract -// Serialize -> Translation of data from the concerned struct to key-value pairs -/// Deserialize -> Translation of data from the key-value pairs to a struct -contract Balance is EternalModel { - struct Instance { - uint256 blockNumber; - uint256 index; // tokenHolder.counter - uint256 k; - uint256 m; - uint256 lambda; - Ecosystem.Instance ecosystem; - Token.Instance token; - TokenHolder.Instance tokenHolder; - } - - function deserialize( - uint256 _blockNumber, - Ecosystem.Instance memory _ecosystem, - Token.Instance memory _token, - TokenHolder.Instance memory _tokenHolder - ) public view returns (Instance memory record) { - record = _findByBlockNumber(_blockNumber, _tokenHolder.counter, 0, _token, _tokenHolder); - - record.ecosystem = _ecosystem; - record.token = _token; - record.tokenHolder = _tokenHolder; - - BalanceMultipliers.Instance memory balanceMultipliers = BalanceMultipliers( - record - .ecosystem - .balanceMultipliersModelAddress - ) - .deserialize(_blockNumber, record.ecosystem, record.token); - - record.blockNumber = _blockNumber; - record.k = balanceMultipliers.k; - record.m = balanceMultipliers.m; - - return record; - } - - function exists( - uint256, - Ecosystem.Instance memory, - Token.Instance memory, - TokenHolder.Instance memory - ) external pure returns (bool) { - return true; - } - - /** - * @dev serializes Instance struct - * @param record Instance - */ - function serialize(Instance memory record) external { - setUint( - keccak256( - abi.encode(record.token.uuid, record.tokenHolder.account, record.index, 'blockNumber') - ), - record.blockNumber - ); - setUint( - keccak256(abi.encode(record.token.uuid, record.tokenHolder.account, record.index, 'lambda')), - record.lambda - ); - - BalanceMultipliers.Instance memory balanceMultipliers; - balanceMultipliers.blockNumber = record.blockNumber; - balanceMultipliers.index = record.token.counter; - balanceMultipliers.k = record.k; - balanceMultipliers.m = record.m; - balanceMultipliers.ecosystem = record.ecosystem; - balanceMultipliers.token = record.token; - BalanceMultipliers(record.ecosystem.balanceMultipliersModelAddress).serialize( - balanceMultipliers - ); - Token(record.ecosystem.tokenModelAddress).incrementCounter(record.token.uuid); - } - - function _findByBlockNumber( - uint256 _blockNumber, - uint256 _numberOfRecords, - uint256 _offset, - Token.Instance memory _token, - TokenHolder.Instance memory _tokenHolder - ) internal view returns (Instance memory record) { - if (_numberOfRecords == 0) { - record.blockNumber = _blockNumber; - record.lambda = 0; - return record; - } - - if (_numberOfRecords == 1) { - uint256 index = SafeMath.add(_offset, _numberOfRecords); - record.blockNumber = getUint( - keccak256(abi.encode(_token.uuid, _tokenHolder.account, index, 'blockNumber')) - ); - - if (record.blockNumber == 0 || record.blockNumber > _blockNumber) { - if (_offset == 0) { - record.blockNumber = getUint( - keccak256(abi.encode(_token.uuid, _tokenHolder.account, 0, 'blockNumber')) - ); - if (record.blockNumber == 0 || record.blockNumber > _blockNumber) { - record.lambda = 0; - return record; - } - record.lambda = getUint( - keccak256(abi.encode(_token.uuid, _tokenHolder.account, 0, 'lambda')) - ); - return record; - } - return - _findByBlockNumber( - _blockNumber, - _numberOfRecords, - SafeMath.sub(_offset, 1), - _token, - _tokenHolder - ); - } - record.lambda = getUint( - keccak256(abi.encode(_token.uuid, _tokenHolder.account, index, 'lambda')) - ); - return record; - } - - uint256 half = SafeMath.div(_numberOfRecords, 2); - uint256 middleIndex = SafeMath.add(half, _offset); - record.blockNumber = getUint( - keccak256(abi.encode(_token.uuid, _tokenHolder.account, middleIndex, 'blockNumber')) - ); - - if (record.blockNumber > _blockNumber) { - return _findByBlockNumber(_blockNumber, half, _offset, _token, _tokenHolder); - } - - if (record.blockNumber < _blockNumber) { - return _findByBlockNumber(_blockNumber, half, middleIndex, _token, _tokenHolder); - } - - record.lambda = getUint( - keccak256(abi.encode(_token.uuid, _tokenHolder.account, middleIndex, 'lambda')) - ); - return record; - } -} diff --git a/src/models/BalanceMultipliers.sol b/src/models/BalanceMultipliers.sol deleted file mode 100644 index a9f7963..0000000 --- a/src/models/BalanceMultipliers.sol +++ /dev/null @@ -1,111 +0,0 @@ -// SPDX-License-Identifier: GPLv3 -pragma solidity 0.7.2; -pragma experimental ABIEncoderV2; - -import './EternalModel.sol'; -import '../libraries/SafeMath.sol'; - -import './Token.sol'; -import './TokenHolder.sol'; - -/// @author ElasticDAO - https://ElasticDAO.org -/// @notice This contract is used for storing token balance change data -/// @dev ElasticDAO network contracts can read/write from this contract -// Serialize -> Translation of data from the concerned struct to key-value pairs -/// Deserialize -> Translation of data from the key-value pairs to a struct -contract BalanceMultipliers is EternalModel { - struct Instance { - uint256 blockNumber; - uint256 index; // counter - uint256 k; - uint256 m; - Ecosystem.Instance ecosystem; - Token.Instance token; - } - - function deserialize( - uint256 _blockNumber, - Ecosystem.Instance memory _ecosystem, - Token.Instance memory _token - ) public view returns (Instance memory record) { - record = _findByBlockNumber(_blockNumber, _token.counter, 0, _token); - record.blockNumber = _blockNumber; - record.ecosystem = _ecosystem; - record.token = _token; - return record; - } - - function exists( - uint256, - Ecosystem.Instance memory, - Token.Instance memory - ) external pure returns (bool) { - return true; - } - - /** - * @dev serializes Instance struct - * @param record Instance - */ - function serialize(Instance memory record) external { - setUint( - keccak256(abi.encode(record.token.uuid, record.index, 'blockNumber')), - record.blockNumber - ); - setUint(keccak256(abi.encode(record.token.uuid, record.index, 'k')), record.k); - setUint(keccak256(abi.encode(record.token.uuid, record.index, 'm')), record.m); - } - - function _findByBlockNumber( - uint256 _blockNumber, - uint256 _numberOfRecords, - uint256 _offset, - Token.Instance memory _token - ) internal view returns (Instance memory record) { - if (_numberOfRecords == 0) { - record.blockNumber = _blockNumber; - record.k = 0; - record.m = 0; - return record; - } - - if (_numberOfRecords == 1) { - uint256 index = SafeMath.add(_offset, _numberOfRecords); - record.blockNumber = getUint(keccak256(abi.encode(_token.uuid, index, 'blockNumber'))); - - if (record.blockNumber == 0 || record.blockNumber > _blockNumber) { - if (_offset == 0) { - record.blockNumber = getUint(keccak256(abi.encode(_token.uuid, 0, 'blockNumber'))); - if (record.blockNumber == 0 || record.blockNumber > _blockNumber) { - record.k = 0; - record.m = 0; - return record; - } - record.k = getUint(keccak256(abi.encode(_token.uuid, 0, 'k'))); - record.m = getUint(keccak256(abi.encode(_token.uuid, 0, 'm'))); - return record; - } - return _findByBlockNumber(_blockNumber, _numberOfRecords, SafeMath.sub(_offset, 1), _token); - } - record.k = getUint(keccak256(abi.encode(_token.uuid, index, 'k'))); - record.m = getUint(keccak256(abi.encode(_token.uuid, index, 'm'))); - return record; - } - - uint256 half = SafeMath.div(_numberOfRecords, 2); - uint256 middleIndex = SafeMath.add(half, _offset); - record.blockNumber = getUint(keccak256(abi.encode(_token.uuid, middleIndex, 'blockNumber'))); - - if (record.blockNumber > _blockNumber) { - return _findByBlockNumber(_blockNumber, half, _offset, _token); - } - - if (record.blockNumber < _blockNumber) { - return _findByBlockNumber(_blockNumber, half, middleIndex, _token); - } - - record.k = getUint(keccak256(abi.encode(_token.uuid, middleIndex, 'k'))); - record.m = getUint(keccak256(abi.encode(_token.uuid, middleIndex, 'm'))); - return record; - } -} diff --git a/src/models/DAO.sol b/src/models/DAO.sol index 1494787..ff59f73 100644 --- a/src/models/DAO.sol +++ b/src/models/DAO.sol @@ -2,23 +2,29 @@ pragma solidity 0.7.2; pragma experimental ABIEncoderV2; +import '@openzeppelin/contracts/utils/ReentrancyGuard.sol'; + import './Ecosystem.sol'; import './EternalModel.sol'; -import '../libraries/SafeMath.sol'; -/// @author ElasticDAO - https://ElasticDAO.org -/// @notice This contract is used for storing core dao data -/// @dev ElasticDAO network contracts can read/write from this contract -contract DAO is EternalModel { +/** + * @author ElasticDAO - https://ElasticDAO.org + * @notice This contract is used for storing core DAO data + * @dev ElasticDAO network contracts can read/write from this contract + */ +contract DAO is EternalModel, ReentrancyGuard { struct Instance { address uuid; address[] summoners; bool summoned; string name; + uint256 maxVotingLambda; uint256 numberOfSummoners; Ecosystem.Instance ecosystem; } + event Serialized(address indexed uuid); + /** * @dev deserializes Instance struct * @param _uuid - address of the unique user ID @@ -33,6 +39,7 @@ contract DAO is EternalModel { record.ecosystem = _ecosystem; if (_exists(_uuid)) { + record.maxVotingLambda = getUint(keccak256(abi.encode(_uuid, 'maxVotingLambda'))); record.name = getString(keccak256(abi.encode(_uuid, 'name'))); record.numberOfSummoners = getUint(keccak256(abi.encode(_uuid, 'numberOfSummoners'))); record.summoned = getBool(keccak256(abi.encode(_uuid, 'summoned'))); @@ -42,11 +49,11 @@ contract DAO is EternalModel { } /** - * @dev checks if @param _uuid and @param _name exist + * @dev checks if @param _uuid exists * @param _uuid - address of the unique user ID * @return recordExists bool */ - function exists(address _uuid, Ecosystem.Instance memory) external view returns (bool) { + function exists(address _uuid) external view returns (bool) { return _exists(_uuid); } @@ -66,21 +73,27 @@ contract DAO is EternalModel { /** * @dev serializes Instance struct - * @param record Instance + * @param _record Instance */ - function serialize(Instance memory record) external { - setString(keccak256(abi.encode(record.uuid, 'name')), record.name); - setUint(keccak256(abi.encode(record.uuid, 'numberOfSummoners')), record.numberOfSummoners); - setBool(keccak256(abi.encode(record.uuid, 'summoned')), record.summoned); - - if (record.summoners.length == record.numberOfSummoners) { - for (uint256 i = 0; i < record.numberOfSummoners; i = SafeMath.add(i, 1)) { - setBool(keccak256(abi.encode(record.uuid, 'summoner', record.summoners[i])), true); - setAddress(keccak256(abi.encode(record.uuid, 'summoners', i)), record.summoners[i]); + function serialize(Instance memory _record) external nonReentrant { + require(msg.sender == _record.uuid, 'ElasticDAO: Unauthorized'); + + setUint(keccak256(abi.encode(_record.uuid, 'maxVotingLambda')), _record.maxVotingLambda); + setString(keccak256(abi.encode(_record.uuid, 'name')), _record.name); + setBool(keccak256(abi.encode(_record.uuid, 'summoned')), _record.summoned); + + if (_record.summoners.length > 0) { + _record.numberOfSummoners = _record.summoners.length; + setUint(keccak256(abi.encode(_record.uuid, 'numberOfSummoners')), _record.numberOfSummoners); + for (uint256 i = 0; i < _record.numberOfSummoners; i += 1) { + setBool(keccak256(abi.encode(_record.uuid, 'summoner', _record.summoners[i])), true); + setAddress(keccak256(abi.encode(_record.uuid, 'summoners', i)), _record.summoners[i]); } } - setBool(keccak256(abi.encode(record.uuid, 'exists')), true); + setBool(keccak256(abi.encode(_record.uuid, 'exists')), true); + + emit Serialized(_record.uuid); } function _exists(address _uuid) internal view returns (bool) { diff --git a/src/models/Ecosystem.sol b/src/models/Ecosystem.sol index 6492091..9dde4b6 100644 --- a/src/models/Ecosystem.sol +++ b/src/models/Ecosystem.sol @@ -2,32 +2,32 @@ pragma solidity 0.7.2; pragma experimental ABIEncoderV2; +import '@openzeppelin/contracts/utils/ReentrancyGuard.sol'; + import './EternalModel.sol'; -import '../libraries/SafeMath.sol'; -/// @author ElasticDAO - https://ElasticDAO.org -/// @notice This contract is used for storing core dao data -/// @dev ElasticDAO network contracts can read/write from this contract -/// Serialize -> Translation of data from the concerned struct to key-value pairs -/// Deserialize -> Translation of data from the key-value pairs to a struct -contract Ecosystem is EternalModel { +/** + * @title ElasticDAO ecosystem + * @author ElasticDAO - https://ElasticDAO.org + * @notice This contract is used for storing core dao data + * @dev ElasticDAO network contracts can read/write from this contract + * @dev Serialize - Translation of data from the concerned struct to key-value pairs + * @dev Deserialize - Translation of data from the key-value pairs to a struct + */ +contract Ecosystem is EternalModel, ReentrancyGuard { struct Instance { address daoAddress; // Models - address balanceModelAddress; - address balanceMultipliersModelAddress; address daoModelAddress; address ecosystemModelAddress; - address elasticModuleModelAddress; address tokenHolderModelAddress; address tokenModelAddress; - // Services - address configuratorAddress; - address registratorAddress; // Tokens address governanceTokenAddress; } + event Serialized(address indexed _daoAddress); + /** * @dev deserializes Instance struct * @param _daoAddress - address of the unique user ID @@ -36,28 +36,13 @@ contract Ecosystem is EternalModel { function deserialize(address _daoAddress) external view returns (Instance memory record) { if (_exists(_daoAddress)) { record.daoAddress = _daoAddress; - record.balanceModelAddress = getAddress( - keccak256(abi.encode(record.daoAddress, 'balanceModelAddress')) - ); - record.balanceMultipliersModelAddress = getAddress( - keccak256(abi.encode(record.daoAddress, 'balanceMultipliersModelAddress')) - ); - record.configuratorAddress = getAddress( - keccak256(abi.encode(record.daoAddress, 'configuratorAddress')) - ); record.daoModelAddress = getAddress( keccak256(abi.encode(record.daoAddress, 'daoModelAddress')) ); record.ecosystemModelAddress = address(this); - record.elasticModuleModelAddress = getAddress( - keccak256(abi.encode(record.daoAddress, 'elasticModuleModelAddress')) - ); record.governanceTokenAddress = getAddress( keccak256(abi.encode(record.daoAddress, 'governanceTokenAddress')) ); - record.registratorAddress = getAddress( - keccak256(abi.encode(record.daoAddress, 'registratorAddress')) - ); record.tokenHolderModelAddress = getAddress( keccak256(abi.encode(record.daoAddress, 'tokenHolderModelAddress')) ); @@ -70,7 +55,7 @@ contract Ecosystem is EternalModel { } /** - * @dev checks if @param _daoAddress and @param _name exist + * @dev checks if @param _daoAddress * @param _daoAddress - address of the unique user ID * @return recordExists bool */ @@ -80,44 +65,36 @@ contract Ecosystem is EternalModel { /** * @dev serializes Instance struct - * @param record Instance + * @param _record Instance */ - function serialize(Instance memory record) external { - setAddress( - keccak256(abi.encode(record.daoAddress, 'balanceModelAddress')), - record.balanceModelAddress - ); - setAddress( - keccak256(abi.encode(record.daoAddress, 'balanceMultipliersModelAddress')), - record.balanceMultipliersModelAddress - ); - setAddress( - keccak256(abi.encode(record.daoAddress, 'configuratorAddress')), - record.configuratorAddress - ); - setAddress(keccak256(abi.encode(record.daoAddress, 'daoModelAddress')), record.daoModelAddress); - setAddress( - keccak256(abi.encode(record.daoAddress, 'elasticModuleModelAddress')), - record.elasticModuleModelAddress + function serialize(Instance memory _record) external nonReentrant { + bool recordExists = _exists(_record.daoAddress); + + require( + msg.sender == _record.daoAddress || (_record.daoAddress == address(0) && !recordExists), + 'ElasticDAO: Unauthorized' ); + setAddress( - keccak256(abi.encode(record.daoAddress, 'governanceTokenAddress')), - record.governanceTokenAddress + keccak256(abi.encode(_record.daoAddress, 'daoModelAddress')), + _record.daoModelAddress ); setAddress( - keccak256(abi.encode(record.daoAddress, 'registratorAddress')), - record.registratorAddress + keccak256(abi.encode(_record.daoAddress, 'governanceTokenAddress')), + _record.governanceTokenAddress ); setAddress( - keccak256(abi.encode(record.daoAddress, 'tokenHolderModelAddress')), - record.tokenHolderModelAddress + keccak256(abi.encode(_record.daoAddress, 'tokenHolderModelAddress')), + _record.tokenHolderModelAddress ); setAddress( - keccak256(abi.encode(record.daoAddress, 'tokenModelAddress')), - record.tokenModelAddress + keccak256(abi.encode(_record.daoAddress, 'tokenModelAddress')), + _record.tokenModelAddress ); - setBool(keccak256(abi.encode(record.daoAddress, 'exists')), true); + setBool(keccak256(abi.encode(_record.daoAddress, 'exists')), true); + + emit Serialized(_record.daoAddress); } function _exists(address _daoAddress) internal view returns (bool recordExists) { diff --git a/src/models/ElasticModule.sol b/src/models/ElasticModule.sol deleted file mode 100644 index 58703b1..0000000 --- a/src/models/ElasticModule.sol +++ /dev/null @@ -1,72 +0,0 @@ -// SPDX-License-Identifier: GPLv3 -pragma solidity 0.7.2; -pragma experimental ABIEncoderV2; - -import './DAO.sol'; -import './EternalModel.sol'; -import '../libraries/SafeMath.sol'; - -/// @author ElasticDAO - https://ElasticDAO.org -/// @notice This contract is used for storing token data -/// @dev ElasticDAO network contracts can read/write from this contract -/// Serialize -> Translation of data from the concerned struct to key-value pairs -/// Deserialize -> Translation of data from the key-value pairs to a struct -contract ElasticModule is EternalModel { - struct Instance { - address uuid; - string name; - DAO.Instance dao; - Ecosystem.Instance ecosystem; - } - - function deserialize(address _uuid, DAO.Instance memory _dao) - external - view - returns (Instance memory record) - { - record.uuid = _uuid; - record.dao = _dao; - record.name = getString(keccak256(abi.encode(record.dao.uuid, record.uuid))); - - return record; - } - - function deserializeByName(string memory _name, DAO.Instance memory _dao) - external - view - returns (Instance memory record) - { - record.uuid = getAddress(keccak256(abi.encode(_dao.uuid, _name))); - record.dao = _dao; - record.name = _name; - - return record; - } - - function exists(address _uuid, DAO.Instance memory _dao) - external - view - returns (bool recordExists) - { - return _exists(_uuid, _dao); - } - - /** - * @dev serializes Instance struct - * @param record Instance - */ - function serialize(Instance memory record) external { - setAddress(keccak256(abi.encode(record.dao.uuid, record.name)), record.uuid); - setString(keccak256(abi.encode(record.dao.uuid, record.uuid)), record.name); - - setBool(keccak256(abi.encode(record.dao.uuid, record.uuid, 'exists')), true); - } - - function _exists(address _uuid, DAO.Instance memory _dao) - internal - view - returns (bool recordExists) - { - return getBool(keccak256(abi.encode(_dao.uuid, _uuid, 'exists'))); - } -} diff --git a/src/models/EternalModel.sol b/src/models/EternalModel.sol index 479f721..4ebdc3a 100644 --- a/src/models/EternalModel.sol +++ b/src/models/EternalModel.sol @@ -2,11 +2,13 @@ pragma solidity 0.7.2; pragma experimental ABIEncoderV2; -/// @author ElasticDAO - https://ElasticDAO.org -/// @title Implementation of Eternal Storage -/// (https://fravoll.github.io/solidity-patterns/eternal_storage.html) -/// @notice This contract is used for storing contract network data -/// @dev ElasticDAO network contracts can read/write from this contract +/** + * @title Implementation of Eternal Storage for ElasticDAO - + * - (https://fravoll.github.io/solidity-patterns/eternal_storage.html) + * @author ElasticDAO - https://ElasticDAO.org + * @notice This contract is used for storing contract network data + * @dev ElasticDAO network contracts can read/write from this contract + */ contract EternalModel { struct Storage { mapping(bytes32 => address) addressStorage; @@ -19,153 +21,87 @@ contract EternalModel { Storage internal s; - ////////////////////////////// - /// @notice Getter Functions - ///////////////////////////// + /** + * @notice Getter Functions + */ - /// @notice Get stored contract data in uint256 format - /// @param _key bytes32 location should be keccak256 and abi.encodePacked - /// @return uint256 _value from storage _key location + /** + * @notice Gets stored contract data in unit256 format + * @param _key bytes32 location should be keccak256 and abi.encodePacked + * @return uint256 _value from storage _key location + */ function getUint(bytes32 _key) internal view returns (uint256) { return s.uIntStorage[_key]; } - /// @notice Get stored contract data in string format - /// @param _key bytes32 location should be keccak256 and abi.encodePacked - /// @return string _value from storage _key location + /** + * @notice Get stored contract data in string format + * @param _key bytes32 location should be keccak256 and abi.encodePacked + * @return string _value from storage _key location + */ function getString(bytes32 _key) internal view returns (string memory) { - require(_key[0] != 0, 'ElasticDAO: Zero Address'); - return s.stringStorage[_key]; } - /// @notice Get stored contract data in address format - /// @param _key bytes32 location should be keccak256 and abi.encodePacked - /// @return address _value from storage _key location + /** + * @notice Get stored contract data in address format + * @param _key bytes32 location should be keccak256 and abi.encodePacked + * @return address _value from storage _key location + */ function getAddress(bytes32 _key) internal view returns (address) { return s.addressStorage[_key]; } - /// @notice Get stored contract data in bool format - /// @param _key bytes32 location should be keccak256 and abi.encodePacked - /// @return bool _value from storage _key location + /** + * @notice Get stored contract data in bool format + * @param _key bytes32 location should be keccak256 and abi.encodePacked + * @return bool _value from storage _key location + */ function getBool(bytes32 _key) internal view returns (bool) { return s.boolStorage[_key]; } - /// @notice Get stored contract data in int256 format - /// @param _key bytes32 location should be keccak256 and abi.encodePacked - /// @return int256 _value from storage _key location - function getInt(bytes32 _key) internal view returns (int256) { - return s.intStorage[_key]; - } - - /// @notice Get stored contract data in bytes format - /// @param _key bytes32 location should be keccak256 and abi.encodePacked - /// @return bytes _value from storage _key location - function getBytes(bytes32 _key) internal view returns (bytes memory) { - require(_key[0] != 0, 'ElasticDAO: Zero Address'); - - return s.bytesStorage[_key]; - } - - ////////////////////////////// - /// @notice Setter Functions - ///////////////////////////// + /** + * @notice Setters Functions + */ - /// @notice Store contract data in uint256 format - /// @dev restricted to latest ElasticDAO Networks contracts - /// @param _key bytes32 location should be keccak256 and abi.encodePacked - /// @param _value uint256 value + /** + * @notice Store contract data in uint256 format + * @dev restricted to latest ElasticDAO Networks contracts + * @param _key bytes32 location should be keccak256 and abi.encodePacked + * @param _value uint256 value + */ function setUint(bytes32 _key, uint256 _value) internal { s.uIntStorage[_key] = _value; } - /// @notice Store contract data in string format - /// @dev restricted to latest ElasticDAO Networks contracts - /// @param _key bytes32 location should be keccak256 and abi.encodePacked - /// @param _value string value + /** + * @notice Store contract data in string format + * @dev restricted to latest ElasticDAO Networks contracts + * @param _key bytes32 location should be keccak256 and abi.encodePacked + * @param _value string value + */ function setString(bytes32 _key, string memory _value) internal { s.stringStorage[_key] = _value; } - /// @notice Store contract data in address format - /// @dev restricted to latest ElasticDAO Networks contracts - /// @param _key bytes32 location should be keccak256 and abi.encodePacked - /// @param _value address value + /** + * @notice Store contract data in address format + * @dev restricted to latest ElasticDAO Networks contracts + * @param _key bytes32 location should be keccak256 and abi.encodePacked + * @param _value address value + */ function setAddress(bytes32 _key, address _value) internal { s.addressStorage[_key] = _value; } - /// @notice Store contract data in bool format - /// @dev restricted to latest ElasticDAO Networks contracts - /// @param _key bytes32 location should be keccak256 and abi.encodePacked - /// @param _value bool value + /** + * @notice Store contract data in bool format + * @dev restricted to latest ElasticDAO Networks contracts + * @param _key bytes32 location should be keccak256 and abi.encodePacked + * @param _value bool value + */ function setBool(bytes32 _key, bool _value) internal { s.boolStorage[_key] = _value; } - - /// @notice Store contract data in int256 format - /// @dev restricted to latest ElasticDAO Networks contracts - /// @param _key bytes32 location should be keccak256 and abi.encodePacked - /// @param _value int256 value - function setInt(bytes32 _key, int256 _value) internal { - s.intStorage[_key] = _value; - } - - /// @notice Store contract data in bytes format - /// @dev restricted to latest ElasticDAO Networks contracts - /// @param _key bytes32 location should be keccak256 and abi.encodePacked - /// @param _value bytes value - function setBytes(bytes32 _key, bytes memory _value) internal { - s.bytesStorage[_key] = _value; - } - - ////////////////////////////// - /// @notice Delete Functions - ///////////////////////////// - - /// @notice Delete stored contract data in bytes format - /// @dev restricted to latest ElasticDAO Networks contracts - /// @param _key bytes32 location should be keccak256 and abi.encodePacked - function deleteUint(bytes32 _key) internal { - delete s.uIntStorage[_key]; - } - - /// @notice Delete stored contract data in string format - /// @dev restricted to latest ElasticDAO Networks contracts - /// @param _key bytes32 location should be keccak256 and abi.encodePacked - function deleteString(bytes32 _key) internal { - require(_key[0] != 0, 'ElasticDAO: Zero Address'); - - delete s.stringStorage[_key]; - } - - /// @notice Delete stored contract data in address format - /// @dev restricted to latest ElasticDAO Networks contracts - /// @param _key bytes32 location should be keccak256 and abi.encodePacked - function deleteAddress(bytes32 _key) internal { - delete s.addressStorage[_key]; - } - - /// @notice Delete stored contract data in bool format - /// @dev restricted to latest ElasticDAO Networks contracts - /// @param _key bytes32 location should be keccak256 and abi.encodePacked - function deleteBool(bytes32 _key) internal { - delete s.boolStorage[_key]; - } - - /// @notice Delete stored contract data in int256 format - /// @dev restricted to latest ElasticDAO Networks contracts - /// @param _key bytes32 location should be keccak256 and abi.encodePacked - function deleteInt(bytes32 _key) internal { - delete s.intStorage[_key]; - } - - /// @notice Delete stored contract data in bytes format - /// @dev restricted to latest ElasticDAO Networks contracts - /// @param _key bytes32 location should be keccak256 and abi.encodePacked - function deleteBytes(bytes32 _key) internal { - delete s.bytesStorage[_key]; - } } diff --git a/src/models/Token.sol b/src/models/Token.sol index 991479f..e671023 100644 --- a/src/models/Token.sol +++ b/src/models/Token.sol @@ -1,24 +1,25 @@ // SPDX-License-Identifier: GPLv3 pragma solidity 0.7.2; pragma experimental ABIEncoderV2; +import '@openzeppelin/contracts/utils/ReentrancyGuard.sol'; import './Ecosystem.sol'; import './EternalModel.sol'; -import '../libraries/SafeMath.sol'; - import '../tokens/ElasticGovernanceToken.sol'; -/// @author ElasticDAO - https://ElasticDAO.org -/// @notice This contract is used for storing token data -/// @dev ElasticDAO network contracts can read/write from this contract -/// Serialize -> Translation of data from the concerned struct to key-value pairs -/// Deserialize -> Translation of data from the key-value pairs to a struct -contract Token is EternalModel { +/** + * @title A data storage for EGT (Elastic Governance Token) + * @notice More info about EGT could be found in ./tokens/ElasticGovernanceToken.sol + * @notice This contract is used for storing token data + * @dev ElasticDAO network contracts can read/write from this contract + * Serialize - Translation of data from the concerned struct to key-value pairs + * Deserialize - Translation of data from the key-value pairs to a struct + */ +contract Token is EternalModel, ReentrancyGuard { struct Instance { address uuid; string name; string symbol; - uint256 counter; // passed as ID to balance multipliers uint256 eByL; uint256 elasticity; uint256 k; @@ -29,6 +30,8 @@ contract Token is EternalModel { Ecosystem.Instance ecosystem; } + event Serialized(address indexed uuid); + /** * @dev deserializes Instance struct * @param _uuid - address of the unique user ID @@ -42,55 +45,93 @@ contract Token is EternalModel { record.uuid = _uuid; record.ecosystem = _ecosystem; - if (_exists(_uuid)) { - record.counter = getUint(keccak256(abi.encode(_uuid, 'counter'))); - record.eByL = getUint(keccak256(abi.encode(_uuid, 'eByL'))); - record.elasticity = getUint(keccak256(abi.encode(_uuid, 'elasticity'))); - record.k = getUint(keccak256(abi.encode(_uuid, 'k'))); - record.lambda = getUint(keccak256(abi.encode(_uuid, 'lambda'))); - record.m = getUint(keccak256(abi.encode(_uuid, 'm'))); - record.maxLambdaPurchase = getUint(keccak256(abi.encode(_uuid, 'maxLambdaPurchase'))); - record.name = getString(keccak256(abi.encode(_uuid, 'name'))); - record.numberOfTokenHolders = getUint(keccak256(abi.encode(_uuid, 'numberOfTokenHolders'))); - record.symbol = getString(keccak256(abi.encode(_uuid, 'symbol'))); + if (_exists(_uuid, _ecosystem.daoAddress)) { + record.eByL = getUint(keccak256(abi.encode(_uuid, record.ecosystem.daoAddress, 'eByL'))); + record.elasticity = getUint( + keccak256(abi.encode(_uuid, record.ecosystem.daoAddress, 'elasticity')) + ); + record.k = getUint(keccak256(abi.encode(_uuid, record.ecosystem.daoAddress, 'k'))); + record.lambda = getUint(keccak256(abi.encode(_uuid, record.ecosystem.daoAddress, 'lambda'))); + record.m = getUint(keccak256(abi.encode(_uuid, record.ecosystem.daoAddress, 'm'))); + record.maxLambdaPurchase = getUint( + keccak256(abi.encode(_uuid, record.ecosystem.daoAddress, 'maxLambdaPurchase')) + ); + record.name = getString(keccak256(abi.encode(_uuid, record.ecosystem.daoAddress, 'name'))); + record.numberOfTokenHolders = getUint( + keccak256(abi.encode(_uuid, record.ecosystem.daoAddress, 'numberOfTokenHolders')) + ); + record.symbol = getString( + keccak256(abi.encode(_uuid, record.ecosystem.daoAddress, 'symbol')) + ); } return record; } - function exists(address _uuid, Ecosystem.Instance memory) external view returns (bool) { - return _exists(_uuid); - } - - function incrementCounter(address _uuid) external { - uint256 counter = getUint(keccak256(abi.encode(_uuid, 'counter'))); - setUint(keccak256(abi.encode(_uuid, 'counter')), SafeMath.add(counter, 1)); + function exists(address _uuid, address _daoAddress) external view returns (bool) { + return _exists(_uuid, _daoAddress); } /** * @dev serializes Instance struct - * @param record Instance + * @param _record Instance */ - function serialize(Instance memory record) external { - setString(keccak256(abi.encode(record.uuid, 'name')), record.name); - setString(keccak256(abi.encode(record.uuid, 'symbol')), record.symbol); - setUint(keccak256(abi.encode(record.uuid, 'eByL')), record.eByL); - setUint(keccak256(abi.encode(record.uuid, 'elasticity')), record.elasticity); - setUint(keccak256(abi.encode(record.uuid, 'k')), record.k); - setUint(keccak256(abi.encode(record.uuid, 'lambda')), record.lambda); - setUint(keccak256(abi.encode(record.uuid, 'm')), record.m); - setUint(keccak256(abi.encode(record.uuid, 'maxLambdaPurchase')), record.maxLambdaPurchase); + function serialize(Instance memory _record) external nonReentrant { + require( + msg.sender == _record.uuid || + (msg.sender == _record.ecosystem.daoAddress && + _exists(_record.uuid, _record.ecosystem.daoAddress)), + 'ElasticDAO: Unauthorized' + ); - setBool(keccak256(abi.encode(record.uuid, 'exists')), true); + setString( + keccak256(abi.encode(_record.uuid, _record.ecosystem.daoAddress, 'name')), + _record.name + ); + setString( + keccak256(abi.encode(_record.uuid, _record.ecosystem.daoAddress, 'symbol')), + _record.symbol + ); + setUint( + keccak256(abi.encode(_record.uuid, _record.ecosystem.daoAddress, 'eByL')), + _record.eByL + ); + setUint( + keccak256(abi.encode(_record.uuid, _record.ecosystem.daoAddress, 'elasticity')), + _record.elasticity + ); + setUint(keccak256(abi.encode(_record.uuid, _record.ecosystem.daoAddress, 'k')), _record.k); + setUint( + keccak256(abi.encode(_record.uuid, _record.ecosystem.daoAddress, 'lambda')), + _record.lambda + ); + setUint(keccak256(abi.encode(_record.uuid, _record.ecosystem.daoAddress, 'm')), _record.m); + setUint( + keccak256(abi.encode(_record.uuid, _record.ecosystem.daoAddress, 'maxLambdaPurchase')), + _record.maxLambdaPurchase + ); + + setBool(keccak256(abi.encode(_record.uuid, _record.ecosystem.daoAddress, 'exists')), true); + + emit Serialized(_record.uuid); } - function updateNumberOfTokenHolders(Instance memory record, uint256 numberOfTokenHolders) + function updateNumberOfTokenHolders(Instance memory _record, uint256 numberOfTokenHolders) external + nonReentrant { - setUint(keccak256(abi.encode(record.uuid, 'numberOfTokenHolders')), numberOfTokenHolders); + require( + msg.sender == _record.uuid && _exists(_record.uuid, _record.ecosystem.daoAddress), + 'ElasticDAO: Unauthorized' + ); + + setUint( + keccak256(abi.encode(_record.uuid, _record.ecosystem.daoAddress, 'numberOfTokenHolders')), + numberOfTokenHolders + ); } - function _exists(address _uuid) internal view returns (bool) { - return getBool(keccak256(abi.encode(_uuid, 'exists'))); + function _exists(address _uuid, address _daoAddress) internal view returns (bool) { + return getBool(keccak256(abi.encode(_uuid, _daoAddress, 'exists'))); } } diff --git a/src/models/TokenHolder.sol b/src/models/TokenHolder.sol index c3af9a8..7c27550 100644 --- a/src/models/TokenHolder.sol +++ b/src/models/TokenHolder.sol @@ -2,25 +2,30 @@ pragma solidity 0.7.2; pragma experimental ABIEncoderV2; +import '@openzeppelin/contracts/utils/ReentrancyGuard.sol'; + import './Ecosystem.sol'; import './EternalModel.sol'; import './Token.sol'; -import '../libraries/SafeMath.sol'; -/// @author ElasticDAO - https://ElasticDAO.org -/// @notice This contract is used for storing token data -/// @dev ElasticDAO network contracts can read/write from this contract -// Serialize -> Translation of data from the concerned struct to key-value pairs -/// Deserialize -> Translation of data from the key-value pairs to a struct -contract TokenHolder is EternalModel { +/** + * @title a data storage for Token holders + * @author ElasticDAO - https://ElasticDAO.org + * @notice This contract is used for storing token data + * @dev ElasticDAO network contracts can read/write from this contract + * Serialize - Translation of data from the concerned struct to key-value pairs + * Deserialize - Translation of data from the key-value pairs to a struct + */ +contract TokenHolder is EternalModel, ReentrancyGuard { struct Instance { address account; - uint256 counter; uint256 lambda; Ecosystem.Instance ecosystem; Token.Instance token; } + event Serialized(address indexed account, address indexed token); + function deserialize( address _account, Ecosystem.Instance memory _ecosystem, @@ -30,39 +35,31 @@ contract TokenHolder is EternalModel { record.ecosystem = _ecosystem; record.token = _token; - if (_exists(_account, _ecosystem, _token)) { - record.counter = getUint(keccak256(abi.encode(record.token.uuid, record.account, 'counter'))); + if (_exists(_account, _token)) { record.lambda = getUint(keccak256(abi.encode(record.token.uuid, record.account, 'lambda'))); } return record; } - function exists( - address _account, - Ecosystem.Instance memory _ecosystem, - Token.Instance memory _token - ) external view returns (bool recordExists) { - return _exists(_account, _ecosystem, _token); + function exists(address _account, Token.Instance memory _token) external view returns (bool) { + return _exists(_account, _token); } /** * @dev serializes Instance struct - * @param record Instance + * @param _record Instance */ - function serialize(Instance memory record) external { - // TODO: make counter increments consistent with the approach used in Token - setUint(keccak256(abi.encode(record.token.uuid, record.account, 'counter')), record.counter); - setUint(keccak256(abi.encode(record.token.uuid, record.account, 'lambda')), record.lambda); + function serialize(Instance memory _record) external nonReentrant { + require(msg.sender == _record.token.uuid, 'ElasticDAO: Unauthorized'); + + setUint(keccak256(abi.encode(_record.token.uuid, _record.account, 'lambda')), _record.lambda); + setBool(keccak256(abi.encode(_record.token.uuid, _record.account, 'exists')), true); - setBool(keccak256(abi.encode(record.token.uuid, record.account, 'exists')), true); + emit Serialized(_record.account, _record.token.uuid); } - function _exists( - address _account, - Ecosystem.Instance memory, - Token.Instance memory _token - ) internal view returns (bool recordExists) { + function _exists(address _account, Token.Instance memory _token) internal view returns (bool) { return getBool(keccak256(abi.encode(_token.uuid, _account, 'exists'))); } } diff --git a/src/modules/InformationalVote/Factory.sol b/src/modules/InformationalVote/Factory.sol deleted file mode 100644 index aee2b0a..0000000 --- a/src/modules/InformationalVote/Factory.sol +++ /dev/null @@ -1,35 +0,0 @@ -// SPDX-License-Identifier: GPLv3 -pragma solidity 0.7.2; -pragma experimental ABIEncoderV2; - -import '../../core/ElasticDAO.sol'; -import './Manager.sol'; - -contract InformationalVoteFactory { - event ManagerDeployed(address indexed managerAddress); - - function deployManager( - address _ballotModelAddress, - address payable _elasticDAOAddress, - address _settingsModelAddress, - address _voteModelAddress, - address _votingTokenAddress, - bool _hasPenalty, - uint256[10] memory _settings - ) external { - // creates the manager of the informationalVote Module - InformationalVoteManager manager = new InformationalVoteManager( - _ballotModelAddress, - _settingsModelAddress, - _voteModelAddress - ); - - // initializes the informationalVoteModule via the manager - manager.initialize(_votingTokenAddress, _hasPenalty, _settings); - - // register the module in ElasticDAO - ElasticDAO elasticDAO = ElasticDAO(_elasticDAOAddress); - elasticDAO.initializeModule(address(manager), 'InformationalVoteModule'); - emit ManagerDeployed(address(manager)); - } -} diff --git a/src/modules/InformationalVote/Manager.sol b/src/modules/InformationalVote/Manager.sol deleted file mode 100644 index 4c41a17..0000000 --- a/src/modules/InformationalVote/Manager.sol +++ /dev/null @@ -1,305 +0,0 @@ -// SPDX-License-Identifier: GPLv3 -pragma solidity 0.7.2; -pragma experimental ABIEncoderV2; - -import './models/Ballot.sol'; -import './models/Settings.sol'; -import './models/Vote.sol'; - -import '../../interfaces/IElasticToken.sol'; -import '../../libraries/ElasticMath.sol'; - -/// @author ElasticDAO - https://ElasticDAO.org -/// @notice This contract is used for interacting with informational votes -/// @dev ElasticDAO network contracts can read/write from this contract -contract InformationalVoteManager { - address public ballotModelAddress; - address public settingsModelAddress; - address public voteModelAddress; - bool public initialized; - - event CreateVote(uint256 index); - - constructor( - address _ballotModelAddress, - address _settingsModelAddress, - address _voteModelAddress - ) { - ballotModelAddress = _ballotModelAddress; - initialized = false; - settingsModelAddress = _settingsModelAddress; - voteModelAddress = _voteModelAddress; - } - - /** - * @dev Initializes the InformationalVote Manager - * @param _votingTokenAddress - the address of the voting Token - * @param _hasPenalty - whether the vote has a penalty or not - * @param _settings - an array of all the vote related settings - */ - function initialize( - address _votingTokenAddress, - bool _hasPenalty, - uint256[10] memory _settings - ) external { - require(initialized == false, 'ElasticDAO: Informational Vote Manager already initialized.'); - InformationalVoteSettings settingsContract = InformationalVoteSettings(settingsModelAddress); - InformationalVoteSettings.Instance memory settings; - settings.managerAddress = address(this); - settings.votingTokenAddress = _votingTokenAddress; - settings.hasPenalty = _hasPenalty; - settings.approval = _settings[0]; - settings.counter = 0; - settings.maxSharesPerTokenHolder = _settings[1]; - settings.minBlocksForPenalty = _settings[2]; - settings.minDurationInBlocks = _settings[3]; - settings.minPenaltyInShares = _settings[4]; - settings.minRewardInShares = _settings[5]; - settings.minSharesToCreate = _settings[6]; - settings.penalty = _settings[7]; - settings.quorum = _settings[8]; - settings.reward = _settings[9]; - settingsContract.serialize(settings); - initialized = true; - } - - /** - * @dev Applies penalties to @param _addressesToPenalize - * @param _index - ID of the specific vote - * @param _addressesToPenalize - An array of all the addresses to be penalized - * - * The function does the following checks: - * Whether the @param _index is a valid vote ID - * Whether the vote has already passed or not - * Whether the vote is currently active - * Whether the vote has reached quoroum or not - * Whether the InformationalVote has a penalty or not - * - * Penalization - - * VotePenalty - The penalty on the vote - * balanceOfInShares - The amount of shares owned by a specific address - * DeltaLambda - The change in the number of shares - * Delatalambda = balanceOfInShares * VotePenalty - * - * Summary of penalization - Delatalambda is calculated, and those many shares are burnt - * for the specific account - * - * Summary: If the vote has a valid ID, isApproved, isActive, has NOT reached quoroum, - * has a penalty on it then the @param _addressesToPenalize are penalized - * - */ - function applyPenalty(uint256 _index, address[] memory _addressesToPenalize) external { - InformationalVoteSettings.Instance memory settings = _getSettings(); - require(_voteExists(_index, settings), 'ElasticDAO: Invalid vote id.'); - InformationalVote.Instance memory vote = _getVote(_index, settings); - require(vote.isApproved == false, 'ElasticDAO: Cannot penalize a vote that passed.'); - require(vote.isActive == false, 'ElasticDAO: Cannot penalize an active vote.'); - require( - vote.hasReachedQuorum == false, - 'ElasticDAO: Cannot penalize a vote that has reached quorum.' - ); - require(vote.hasPenalty, 'ElasticDAO: This vote has no penalty.'); - InformationalVoteBallot ballotContract = InformationalVoteBallot(ballotModelAddress); - IElasticToken tokenContract = IElasticToken(vote.votingTokenAddress); - - for (uint256 i = 0; i < _addressesToPenalize.length; i = SafeMath.add(i, 1)) { - if (ballotContract.exists(_addressesToPenalize[i], settings, vote) == false) { - InformationalVoteBallot.Instance memory ballot; - ballot.voter = _addressesToPenalize[i]; - ballot.settings = settings; - ballot.vote = vote; - ballot.wasPenalized = true; - uint256 deltaLambda = ElasticMath.wmul( - tokenContract.balanceOfInShares(_addressesToPenalize[i]), - vote.penalty - ); - ballot.lambda = deltaLambda; - ballotContract.serialize(ballot); - tokenContract.burnShares(_addressesToPenalize[i], deltaLambda); - } - } - } - - /** - * @dev casts the vote ballot - * @param _index - the ID of the vote - * @param _yna - YesNoAbstain value - 0 for Yes, 1 for No, 2 for abstain - * votingLambda - The current number of shares the voter has - * lambdaAtStartingBlock - the number of shares the voter has on vote creation - * - * Essentially, by comparing lambdaAtStartingBlock and votingLambda, - * a voter is only allowed to vote with the number of shares they had when the vote was created, - * and if the number of shares exceeds the maximum number of shares per token holder, - * voter can only vote with the maximum number of shares per token holder, - */ - function castBallot(uint256 _index, uint256 _yna) external { - InformationalVoteSettings.Instance memory settings = _getSettings(); - require(_voteExists(_index, settings), 'ElasticDAO: Invalid vote id.'); - InformationalVote.Instance memory vote = _getVote(_index, settings); - require(vote.isActive, 'ElasticDAO: InformationalVote is not active or has ended.'); - require(_voteNotExpired(vote), 'ElasticDAO: InformationalVote is not active or has ended.'); - require(_yna < 3, 'ElasticDAO: Invalid _yna value. Use 0 for yes, 1 for no, 2 for abstain.'); - IElasticToken tokenContract = IElasticToken(vote.votingTokenAddress); - - uint256 votingLambda = tokenContract.balanceOfInShares(msg.sender); - uint256 lambdaAtStartingBlock = tokenContract.balanceOfInSharesAt( - msg.sender, - vote.startOnBlock - ); - if (lambdaAtStartingBlock < votingLambda) { - votingLambda = lambdaAtStartingBlock; - } - if (vote.maxSharesPerTokenHolder < votingLambda) { - votingLambda = vote.maxSharesPerTokenHolder; - } - - InformationalVoteBallot.Instance memory existingBallot = InformationalVoteBallot( - ballotModelAddress - ) - .deserialize(msg.sender, settings, vote); - - if (existingBallot.lambda > 0) { - if (existingBallot.yna == 0) { - vote.yesLambda = SafeMath.sub(vote.yesLambda, existingBallot.lambda); - } else if (existingBallot.yna == 1) { - vote.noLambda = SafeMath.sub(vote.noLambda, existingBallot.lambda); - } else { - vote.abstainLambda = SafeMath.sub(vote.abstainLambda, existingBallot.lambda); - } - } - - if (_yna == 0) { - vote.yesLambda = SafeMath.add(vote.yesLambda, votingLambda); - } else if (_yna == 1) { - vote.noLambda = SafeMath.add(vote.noLambda, votingLambda); - } else { - vote.abstainLambda = SafeMath.add(vote.abstainLambda, votingLambda); - } - - uint256 lambda = SafeMath.add(SafeMath.add(vote.yesLambda, vote.noLambda), vote.abstainLambda); - vote.isApproved = false; - if (lambda >= vote.quorumLambda) { - vote.hasReachedQuorum = true; - - if (vote.yesLambda >= vote.approvalLambda) { - vote.isApproved = true; - } - } - - InformationalVoteBallot.Instance memory ballot; - ballot.lambda = votingLambda; - ballot.settings = settings; - ballot.vote = vote; - ballot.voter = msg.sender; - ballot.yna = _yna; - - InformationalVoteBallot(ballotModelAddress).serialize(ballot); - InformationalVote(voteModelAddress).serialize(vote); - - if (existingBallot.lambda == 0) { - tokenContract.mintShares(msg.sender, ElasticMath.wmul(votingLambda, vote.reward)); - } - } - - /** - * @dev Creates the vote - * @param _proposal - the vote proposal - * @param _endOnBlock - the block on which the vote ends - * - * The vote manager should be initialized prior to creating the vote - * The vote creator must have the minimum number of votes required to create a vote - * The vote duration cannot be lesser than the minimum duration of a vote - * - * @return uint256 - the InformationalVote ID - */ - function createVote(string memory _proposal, uint256 _endOnBlock) external returns (uint256) { - require(initialized, 'ElasticDAO: InformationalVote Manager not initialized'); - InformationalVoteSettings.Instance memory settings = _getSettings(); - IElasticToken tokenContract = IElasticToken(settings.votingTokenAddress); - require( - tokenContract.balanceOfInShares(msg.sender) >= settings.minSharesToCreate, - 'ElasticDAO: Not enough shares to create vote' - ); - require( - SafeMath.sub(_endOnBlock, block.number) >= settings.minDurationInBlocks, - 'ElasticDAO: InformationalVote period too short' - ); - - InformationalVote voteContract = InformationalVote(voteModelAddress); - InformationalVote.Instance memory vote; - vote.settings = settings; - vote.author = msg.sender; - vote.hasPenalty = settings.hasPenalty; - vote.hasReachedQuorum = false; - vote.isActive = true; - vote.isApproved = false; - vote.proposal = _proposal; - vote.abstainLambda = 0; - vote.approval = 0; - vote.endOnBlock = _endOnBlock; - vote.index = settings.counter; - vote.maxSharesPerTokenHolder = settings.maxSharesPerTokenHolder; - vote.minBlocksForPenalty = settings.minBlocksForPenalty; - vote.noLambda = 0; - vote.penalty = settings.penalty; - vote.quorum = settings.quorum; - - uint256 maxVotingShares = ElasticMath.wmul( - tokenContract.numberOfTokenHolders(), - settings.maxSharesPerTokenHolder - ); - uint256 totalSupplyInShares = tokenContract.totalSupplyInShares(); - if (totalSupplyInShares < maxVotingShares) { - vote.quorumLambda = ElasticMath.wmul(totalSupplyInShares, settings.quorum); - vote.approvalLambda = ElasticMath.wmul(totalSupplyInShares, settings.approval); - } else { - vote.quorumLambda = ElasticMath.wmul(maxVotingShares, settings.quorum); - vote.approvalLambda = ElasticMath.wmul(maxVotingShares, settings.approval); - } - - vote.reward = settings.reward; - vote.startOnBlock = block.number; - vote.votingTokenAddress = settings.votingTokenAddress; - vote.yesLambda = 0; - voteContract.serialize(vote); - InformationalVoteSettings(settingsModelAddress).incrementCounter(address(this)); - - emit CreateVote(vote.index); - } - - function getSettings() external view returns (InformationalVoteSettings.Instance memory) { - return _getSettings(); - } - - // Private - - function _getSettings() internal view returns (InformationalVoteSettings.Instance memory) { - return InformationalVoteSettings(settingsModelAddress).deserialize(address(this)); - } - - function _getVote(uint256 _index, InformationalVoteSettings.Instance memory _settings) - internal - view - returns (InformationalVote.Instance memory) - { - return InformationalVote(voteModelAddress).deserialize(_index, _settings); - } - - function _voteExists(uint256 _index, InformationalVoteSettings.Instance memory _settings) - internal - view - returns (bool) - { - return InformationalVote(voteModelAddress).exists(_index, _settings); - } - - function _voteNotExpired(InformationalVote.Instance memory vote) internal returns (bool) { - if (vote.endOnBlock <= block.number) { - vote.isActive = false; - InformationalVote(voteModelAddress).serialize(vote); - return false; - } - - return true; - } -} diff --git a/src/modules/InformationalVote/models/Ballot.sol b/src/modules/InformationalVote/models/Ballot.sol deleted file mode 100644 index e4b5df8..0000000 --- a/src/modules/InformationalVote/models/Ballot.sol +++ /dev/null @@ -1,96 +0,0 @@ -// SPDX-License-Identifier: GPLv3 -pragma solidity 0.7.2; -pragma experimental ABIEncoderV2; - -import '../../../models/EternalModel.sol'; -import '../../../libraries/SafeMath.sol'; -import './Settings.sol'; -import './Vote.sol'; - -/// @author ElasticDAO - https://ElasticDAO.org -/// @notice This contract is used for storing information vote data -/// @dev ElasticDAO network contracts can read/write from this contract -// Serialize -> Translation of data from the concerned struct to key-value pairs -/// Deserialize -> Translation of data from the key-value pairs to a struct -contract InformationalVoteBallot is EternalModel { - constructor() EternalModel() {} - - struct Instance { - address voter; - bool wasPenalized; - uint256 lambda; - uint256 yna; - InformationalVoteSettings.Instance settings; - InformationalVote.Instance vote; - } - - function deserialize( - address _voter, - InformationalVoteSettings.Instance memory _settings, - InformationalVote.Instance memory _vote - ) external view returns (Instance memory record) { - record.voter = _voter; - record.settings = _settings; - record.vote = _vote; - - if (_exists(_voter, _settings, _vote)) { - record.lambda = getUint( - keccak256(abi.encode(_settings.managerAddress, _vote.index, _voter, 'lambda')) - ); - record.wasPenalized = getBool( - keccak256(abi.encode(_settings.managerAddress, _vote.index, _voter, 'wasPenalized')) - ); - record.yna = getUint( - keccak256(abi.encode(_settings.managerAddress, _vote.index, _voter, 'yna')) - ); - } - - return record; - } - - function exists( - address _voter, - InformationalVoteSettings.Instance memory _settings, - InformationalVote.Instance memory _vote - ) external view returns (bool recordExists) { - return _exists(_voter, _settings, _vote); - } - - /** - * @dev serializes Instance struct - * @param record Instance - */ - function serialize(Instance memory record) external { - setBool( - keccak256( - abi.encode(record.settings.managerAddress, record.vote.index, record.voter, 'wasPenalized') - ), - record.wasPenalized - ); - setUint( - keccak256( - abi.encode(record.settings.managerAddress, record.vote.index, record.voter, 'lambda') - ), - record.lambda - ); - setUint( - keccak256(abi.encode(record.settings.managerAddress, record.vote.index, record.voter, 'yna')), - record.yna - ); - - setBool( - keccak256( - abi.encode(record.settings.managerAddress, record.vote.index, record.voter, 'exists') - ), - true - ); - } - - function _exists( - address _voter, - InformationalVoteSettings.Instance memory _settings, - InformationalVote.Instance memory _vote - ) internal view returns (bool recordExists) { - return getBool(keccak256(abi.encode(_settings.managerAddress, _vote.index, _voter, 'exists'))); - } -} diff --git a/src/modules/InformationalVote/models/Settings.sol b/src/modules/InformationalVote/models/Settings.sol deleted file mode 100644 index 6bd82a3..0000000 --- a/src/modules/InformationalVote/models/Settings.sol +++ /dev/null @@ -1,133 +0,0 @@ -// SPDX-License-Identifier: GPLv3 -pragma solidity 0.7.2; -pragma experimental ABIEncoderV2; - -import '../../../models/EternalModel.sol'; -import '../../../libraries/SafeMath.sol'; - -/// @author ElasticDAO - https://ElasticDAO.org -/// @notice This contract is used for storing information vote settings data -/// @dev ElasticDAO network contracts can read/write from this contract -// Serialize -> Translation of data from the concerned struct to key-value pairs -/// Deserialize -> Translation of data from the key-value pairs to a struct -contract InformationalVoteSettings is EternalModel { - struct Instance { - address managerAddress; - address votingTokenAddress; - bool hasPenalty; - uint256 approval; - uint256 counter; - uint256 maxSharesPerTokenHolder; - uint256 minBlocksForPenalty; - uint256 minDurationInBlocks; - uint256 minPenaltyInShares; - uint256 minRewardInShares; - uint256 minSharesToCreate; - uint256 penalty; - uint256 quorum; - uint256 reward; - } - - /** - * @dev deserializes Instance struct - * @param _managerAddress - address of the unique manager instance - * @return record Instance - */ - function deserialize(address _managerAddress) external view returns (Instance memory record) { - record.managerAddress = _managerAddress; - - if (_exists(_managerAddress)) { - record.approval = getUint(keccak256(abi.encode(_managerAddress, 'approval'))); - record.counter = getUint(keccak256(abi.encode(_managerAddress, 'counter'))); - record.hasPenalty = getBool(keccak256(abi.encode(_managerAddress, 'hasPenalty'))); - record.maxSharesPerTokenHolder = getUint( - keccak256(abi.encode(_managerAddress, 'maxSharesPerTokenHolder')) - ); - record.minBlocksForPenalty = getUint( - keccak256(abi.encode(_managerAddress, 'minBlocksForPenalty')) - ); - record.minDurationInBlocks = getUint( - keccak256(abi.encode(_managerAddress, 'minDurationInBlocks')) - ); - record.minSharesToCreate = getUint( - keccak256(abi.encode(_managerAddress, 'minSharesToCreate')) - ); - record.minPenaltyInShares = getUint( - keccak256(abi.encode(_managerAddress, 'minPenaltyInShares')) - ); - record.minRewardInShares = getUint( - keccak256(abi.encode(_managerAddress, 'minRewardInShares')) - ); - record.penalty = getUint(keccak256(abi.encode(_managerAddress, 'penalty'))); - record.quorum = getUint(keccak256(abi.encode(_managerAddress, 'quorum'))); - record.reward = getUint(keccak256(abi.encode(_managerAddress, 'reward'))); - record.votingTokenAddress = getAddress( - keccak256(abi.encode(_managerAddress, 'votingTokenAddress')) - ); - } - - return record; - } - - function exists(address _managerAddress) external view returns (bool recordExists) { - return _exists(_managerAddress); - } - - /** - * @dev increments counter for the @param _managerAddress - * @param _managerAddress - address of the unique manager instance - */ - function incrementCounter(address _managerAddress) external { - setUint( - keccak256(abi.encode(_managerAddress, 'counter')), - SafeMath.add(getUint(keccak256(abi.encode(_managerAddress, 'counter'))), 1) - ); - } - - /** - * @dev serializes Instance struct - * @param record Instance - */ - function serialize(Instance memory record) external { - setBool(keccak256(abi.encode(record.managerAddress, 'hasPenalty')), record.hasPenalty); - setUint(keccak256(abi.encode(record.managerAddress, 'approval')), record.approval); - setUint(keccak256(abi.encode(record.managerAddress, 'counter')), record.counter); - setUint( - keccak256(abi.encode(record.managerAddress, 'maxSharesPerTokenHolder')), - record.maxSharesPerTokenHolder - ); - setUint( - keccak256(abi.encode(record.managerAddress, 'minBlocksForPenalty')), - record.minBlocksForPenalty - ); - setUint( - keccak256(abi.encode(record.managerAddress, 'minDurationInBlocks')), - record.minDurationInBlocks - ); - setUint( - keccak256(abi.encode(record.managerAddress, 'minPenaltyInShares')), - record.minPenaltyInShares - ); - setUint( - keccak256(abi.encode(record.managerAddress, 'minRewardInShares')), - record.minRewardInShares - ); - setUint( - keccak256(abi.encode(record.managerAddress, 'minSharesToCreate')), - record.minSharesToCreate - ); - setUint(keccak256(abi.encode(record.managerAddress, 'penalty')), record.penalty); - setUint(keccak256(abi.encode(record.managerAddress, 'quorum')), record.quorum); - setUint(keccak256(abi.encode(record.managerAddress, 'reward')), record.reward); - setAddress( - keccak256(abi.encode(record.managerAddress, 'votingTokenAddress')), - record.votingTokenAddress - ); - - setBool(keccak256(abi.encode(record.managerAddress, 'exists')), true); - } - - function _exists(address _managerAddress) internal view returns (bool recordExists) { - return getBool(keccak256(abi.encode(_managerAddress, 'exists'))); - } -} diff --git a/src/modules/InformationalVote/models/Vote.sol b/src/modules/InformationalVote/models/Vote.sol deleted file mode 100644 index 9b8f381..0000000 --- a/src/modules/InformationalVote/models/Vote.sol +++ /dev/null @@ -1,228 +0,0 @@ -// SPDX-License-Identifier: GPLv3 -pragma solidity 0.7.2; -pragma experimental ABIEncoderV2; - -import '../../../models/EternalModel.sol'; -import '../../../libraries/SafeMath.sol'; -import './Settings.sol'; - -/// @author ElasticDAO - https://ElasticDAO.org -/// @notice This contract is used for storing information vote data -/// @dev ElasticDAO network contracts can read/write from this contract -// Serialize -> Translation of data from the concerned struct to key-value pairs -/// Deserialize -> Translation of data from the key-value pairs to a struct -contract InformationalVote is EternalModel { - struct Instance { - address author; - address votingTokenAddress; - bool hasPenalty; - bool hasReachedQuorum; - bool isActive; - bool isApproved; - string proposal; - uint256 abstainLambda; - uint256 approval; - uint256 approvalLambda; - uint256 endOnBlock; - uint256 index; - uint256 maxSharesPerTokenHolder; - uint256 minBlocksForPenalty; - uint256 minPenaltyInShares; - uint256 minRewardInShares; - uint256 noLambda; - uint256 penalty; - uint256 quorum; - uint256 quorumLambda; - uint256 reward; - uint256 startOnBlock; - uint256 yesLambda; - InformationalVoteSettings.Instance settings; - } - - function deserialize(uint256 _index, InformationalVoteSettings.Instance memory _settings) - external - view - returns (Instance memory record) - { - record.index = _index; - record.settings = _settings; - - if (_exists(_index, _settings)) { - record.abstainLambda = getUint( - keccak256(abi.encode(_settings.managerAddress, _index, 'abstainLambda')) - ); - record.approval = getUint( - keccak256(abi.encode(_settings.managerAddress, _index, 'approval')) - ); - record.approvalLambda = getUint( - keccak256(abi.encode(_settings.managerAddress, _index, 'approvalLambda')) - ); - record.author = getAddress(keccak256(abi.encode(_settings.managerAddress, _index, 'author'))); - record.endOnBlock = getUint( - keccak256(abi.encode(_settings.managerAddress, _index, 'endOnBlock')) - ); - record.hasPenalty = getBool( - keccak256(abi.encode(_settings.managerAddress, _index, 'hasPenalty')) - ); - record.hasReachedQuorum = getBool( - keccak256(abi.encode(_settings.managerAddress, _index, 'hasReachedQuorum')) - ); - record.isActive = getBool( - keccak256(abi.encode(_settings.managerAddress, _index, 'isActive')) - ); - record.isApproved = getBool( - keccak256(abi.encode(_settings.managerAddress, _index, 'isApproved')) - ); - record.maxSharesPerTokenHolder = getUint( - keccak256(abi.encode(_settings.managerAddress, _index, 'maxSharesPerTokenHolder')) - ); - record.minBlocksForPenalty = getUint( - keccak256(abi.encode(_settings.managerAddress, _index, 'minBlocksForPenalty')) - ); - record.minPenaltyInShares = getUint( - keccak256(abi.encode(_settings.managerAddress, _index, 'minPenaltyInShares')) - ); - record.minRewardInShares = getUint( - keccak256(abi.encode(_settings.managerAddress, _index, 'minRewardInShares')) - ); - record.noLambda = getUint( - keccak256(abi.encode(_settings.managerAddress, _index, 'noLambda')) - ); - record.penalty = getUint(keccak256(abi.encode(_settings.managerAddress, _index, 'penalty'))); - record.proposal = getString( - keccak256(abi.encode(_settings.managerAddress, _index, 'proposal')) - ); - record.quorum = getUint(keccak256(abi.encode(_settings.managerAddress, _index, 'quorum'))); - record.quorumLambda = getUint( - keccak256(abi.encode(_settings.managerAddress, _index, 'quorumLambda')) - ); - record.reward = getUint(keccak256(abi.encode(_settings.managerAddress, _index, 'reward'))); - record.startOnBlock = getUint( - keccak256(abi.encode(_settings.managerAddress, _index, 'startOnBlock')) - ); - record.votingTokenAddress = getAddress( - keccak256(abi.encode(_settings.managerAddress, _index, 'votingTokenAddress')) - ); - record.yesLambda = getUint( - keccak256(abi.encode(_settings.managerAddress, _index, 'yesLambda')) - ); - } - - return record; - } - - function exists(uint256 _index, InformationalVoteSettings.Instance memory _settings) - external - view - returns (bool recordExists) - { - return _exists(_index, _settings); - } - - /** - * @dev serializes Instance struct - * @param record Instance - */ - function serialize(Instance memory record) external { - setAddress( - keccak256(abi.encode(record.settings.managerAddress, record.index, 'author')), - record.author - ); - setAddress( - keccak256(abi.encode(record.settings.managerAddress, record.index, 'votingTokenAddress')), - record.votingTokenAddress - ); - setBool( - keccak256(abi.encode(record.settings.managerAddress, record.index, 'hasPenalty')), - record.hasPenalty - ); - setBool( - keccak256(abi.encode(record.settings.managerAddress, record.index, 'hasReachedQuorum')), - record.hasReachedQuorum - ); - setBool( - keccak256(abi.encode(record.settings.managerAddress, record.index, 'isActive')), - record.isActive - ); - setBool( - keccak256(abi.encode(record.settings.managerAddress, record.index, 'isApproved')), - record.isApproved - ); - setString( - keccak256(abi.encode(record.settings.managerAddress, record.index, 'proposal')), - record.proposal - ); - setUint( - keccak256(abi.encode(record.settings.managerAddress, record.index, 'abstainLambda')), - record.abstainLambda - ); - setUint( - keccak256(abi.encode(record.settings.managerAddress, record.index, 'approval')), - record.approval - ); - setUint( - keccak256(abi.encode(record.settings.managerAddress, record.index, 'approvalLambda')), - record.approvalLambda - ); - setUint( - keccak256(abi.encode(record.settings.managerAddress, record.index, 'endOnBlock')), - record.endOnBlock - ); - setUint( - keccak256( - abi.encode(record.settings.managerAddress, record.index, 'maxSharesPerTokenHolder') - ), - record.maxSharesPerTokenHolder - ); - setUint( - keccak256(abi.encode(record.settings.managerAddress, record.index, 'minBlocksForPenalty')), - record.minBlocksForPenalty - ); - setUint( - keccak256(abi.encode(record.settings.managerAddress, record.index, 'minPenaltyInShares')), - record.minPenaltyInShares - ); - setUint( - keccak256(abi.encode(record.settings.managerAddress, record.index, 'minRewardInShares')), - record.minRewardInShares - ); - setUint( - keccak256(abi.encode(record.settings.managerAddress, record.index, 'noLambda')), - record.noLambda - ); - setUint( - keccak256(abi.encode(record.settings.managerAddress, record.index, 'penalty')), - record.penalty - ); - setUint( - keccak256(abi.encode(record.settings.managerAddress, record.index, 'quorum')), - record.quorum - ); - setUint( - keccak256(abi.encode(record.settings.managerAddress, record.index, 'quorumLambda')), - record.quorumLambda - ); - setUint( - keccak256(abi.encode(record.settings.managerAddress, record.index, 'reward')), - record.reward - ); - setUint( - keccak256(abi.encode(record.settings.managerAddress, record.index, 'startOnBlock')), - record.startOnBlock - ); - setUint( - keccak256(abi.encode(record.settings.managerAddress, record.index, 'yesLambda')), - record.yesLambda - ); - - setBool(keccak256(abi.encode(record.settings.managerAddress, record.index, 'exists')), true); - } - - function _exists(uint256 _index, InformationalVoteSettings.Instance memory _settings) - internal - view - returns (bool recordExists) - { - return getBool(keccak256(abi.encode(_settings.managerAddress, _index, 'exists'))); - } -} diff --git a/src/modules/TransactionalVote/Factory.sol b/src/modules/TransactionalVote/Factory.sol deleted file mode 100644 index 46bd73c..0000000 --- a/src/modules/TransactionalVote/Factory.sol +++ /dev/null @@ -1,38 +0,0 @@ -// SPDX-License-Identifier: GPLv3 -pragma solidity 0.7.2; -pragma experimental ABIEncoderV2; - -import '../../core/ElasticDAO.sol'; -import './Manager.sol'; - -contract TransactionalVoteFactory { - event ManagerDeployed(address indexed managerAddress); - - function deployManager( - address _ballotModelAddress, - address payable _elasticDAOAddress, - address _settingsModelAddress, - address payable _vaultAddress, - address _voteModelAddress, - address _votingTokenAddress, - bool _hasPenalty, - uint256[10] memory _settings - ) external { - // creates the manager of the informationalVote Module - TransactionalVoteManager manager = new TransactionalVoteManager( - _ballotModelAddress, - _settingsModelAddress, - _vaultAddress, - _voteModelAddress - ); - - // initializes the informationalVoteModule via the manager - manager.initialize(_votingTokenAddress, _hasPenalty, _settings); - - // register the module in ElasticDAO - ElasticDAO elasticDAO = ElasticDAO(_elasticDAOAddress); - elasticDAO.initializeModule(address(manager), 'TransactionalVoteModule'); - - emit ManagerDeployed(address(manager)); - } -} diff --git a/src/modules/TransactionalVote/Manager.sol b/src/modules/TransactionalVote/Manager.sol deleted file mode 100644 index e47ef8a..0000000 --- a/src/modules/TransactionalVote/Manager.sol +++ /dev/null @@ -1,564 +0,0 @@ -// SPDX-License-Identifier: GPLv3 -pragma solidity 0.7.2; -pragma experimental ABIEncoderV2; - -import './models/Ballot.sol'; -import './models/Settings.sol'; -import './models/Vote.sol'; -import './Operation.sol'; - -import '../../interfaces/IElasticToken.sol'; -import '../../libraries/ElasticMath.sol'; - -/// @author ElasticDAO - https://ElasticDAO.org -/// @notice This contract is used for interacting with informational votes -/// @dev ElasticDAO network contracts can read/write from this contract -contract TransactionalVoteManager { - //keccak256( - // "SafeTx(address to,uint256 value,bytes data,uint8 operation,uint256 safeTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce)" - //); - bytes32 - private constant SAFE_TX_TYPEHASH = 0xbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d8; - //keccak256( - // "EIP712Domain(address verifyingContract)" - //); - bytes32 - private constant DOMAIN_SEPARATOR_TYPEHASH = 0x035aff83d86937d35b32e04f0ddc6ff469290eef2f1b692d8a815c89404d4749; - - event CreateVote(uint256 index); - event ExecutionFailure(bytes32 txHash, uint256 payment); - event ExecutionSuccess(bytes32 txHash, uint256 payment); - - address public ballotModelAddress; - address public settingsModelAddress; - address payable public vaultAddress; - address public voteModelAddress; - bool public initialized; - uint256 public nonce; - bytes32 public domainSeparator; - - constructor( - address _ballotModelAddress, - address _settingsModelAddress, - address payable _vaultAddress, - address _voteModelAddress - ) { - ballotModelAddress = _ballotModelAddress; - initialized = false; - settingsModelAddress = _settingsModelAddress; - vaultAddress = _vaultAddress; - voteModelAddress = _voteModelAddress; - } - - /** - * @dev Initializes the TransactionalVote Manager - * @param _votingTokenAddress - the address of the voting Token - * @param _hasPenalty - whether the vote has a penalty or not - * @param _settings - an array of all the vote related settings - */ - function initialize( - address _votingTokenAddress, - bool _hasPenalty, - uint256[10] memory _settings - ) external { - require(initialized == false, 'ElasticDAO: Transactional Vote Manager already initialized.'); - TransactionalVoteSettings settingsContract = TransactionalVoteSettings(settingsModelAddress); - TransactionalVoteSettings.Instance memory settings; - settings.managerAddress = address(this); - settings.votingTokenAddress = _votingTokenAddress; - settings.hasPenalty = _hasPenalty; - settings.approval = _settings[0]; - settings.counter = 0; - settings.maxSharesPerTokenHolder = _settings[1]; - settings.minBlocksForPenalty = _settings[2]; - settings.minDurationInBlocks = _settings[3]; - settings.minPenaltyInShares = _settings[4]; - settings.minRewardInShares = _settings[5]; - settings.minSharesToCreate = _settings[6]; - settings.penalty = _settings[7]; - settings.quorum = _settings[8]; - settings.reward = _settings[9]; - domainSeparator = keccak256(abi.encode(DOMAIN_SEPARATOR_TYPEHASH, this)); - - settingsContract.serialize(settings); - initialized = true; - } - - /** - * @dev Applies penalties to @param _addressesToPenalize - * @param _index - ID of the specific vote - * @param _addressesToPenalize - An array of all the addresses to be penalized - * - * The function does the following checks: - * Whether the @param _index is a valid vote ID - * Whether the vote has already passed or not - * Whether the vote is currently active - * Whether the vote has reached quoroum or not - * Whether the TransactionalVote has a penalty or not - * - * Penalization - - * VotePenalty - The penalty on the vote - * balanceOfInShares - The amount of shares owned by a specific address - * DeltaLambda - The change in the number of shares - * Delatalambda = balanceOfInShares * VotePenalty - * - * Summary of penalization - Delatalambda is calculated, and those many shares are burnt - * for the specific account - * - * Summary: If the vote has a valid ID, isApproved, isActive, has NOT reached quoroum, - * has a penalty on it then the @param _addressesToPenalize are penalized - * - */ - function applyPenalty(uint256 _index, address[] memory _addressesToPenalize) external { - TransactionalVoteSettings.Instance memory settings = _getSettings(); - require(_voteExists(_index, settings), 'ElasticDAO: Invalid vote id.'); - TransactionalVote.Instance memory vote = _getVote(_index, settings); - require(vote.isApproved == false, 'ElasticDAO: Cannot penalize a vote that passed.'); - require(vote.isActive == false, 'ElasticDAO: Cannot penalize an active vote.'); - require( - vote.hasReachedQuorum == false, - 'ElasticDAO: Cannot penalize a vote that has reached quorum.' - ); - require(vote.hasPenalty, 'ElasticDAO: This vote has no penalty.'); - TransactionalVoteBallot ballotContract = TransactionalVoteBallot(ballotModelAddress); - IElasticToken tokenContract = IElasticToken(vote.votingTokenAddress); - - for (uint256 i = 0; i < _addressesToPenalize.length; i = SafeMath.add(i, 1)) { - if (ballotContract.exists(_addressesToPenalize[i], settings, vote) == false) { - TransactionalVoteBallot.Instance memory ballot; - ballot.settings = settings; - ballot.vote = vote; - ballot.voter = _addressesToPenalize[i]; - ballot.wasPenalized = true; - uint256 deltaLambda = ElasticMath.wmul( - tokenContract.balanceOfInShares(_addressesToPenalize[i]), - vote.penalty - ); - ballot.lambda = deltaLambda; - ballotContract.serialize(ballot); - tokenContract.burnShares(_addressesToPenalize[i], deltaLambda); - } - } - } - - /** - * @dev casts the vote ballot - * @param _index - the ID of the vote - * @param _yna - YesNoAbstain value - 0 for Yes, 1 for No, 2 for abstain - * votingLambda - The current number of shares the voter has - * lambdaAtStartingBlock - the number of shares the voter has on vote creation - * - * Essentially, by comparing lambdaAtStartingBlock and votingLambda, - * a voter is only allowed to vote with the number of shares they had when the vote was created, - * and if the number of shares exceeds the maximum number of shares per token holder, - * voter can only vote with the maximum number of shares per token holder, - */ - function castBallot(uint256 _index, uint256 _yna) external { - TransactionalVoteSettings.Instance memory settings = _getSettings(); - require(_voteExists(_index, settings), 'ElasticDAO: Invalid vote id.'); - TransactionalVote.Instance memory vote = _getVote(_index, settings); - require(vote.isActive, 'ElasticDAO: TransactionalVote is not active or has ended.'); - require(_voteNotExpired(vote), 'ElasticDAO: TransactionalVote is not active or has ended.'); - require(_yna < 3, 'ElasticDAO: Invalid _yna value. Use 0 for yes, 1 for no, 2 for abstain.'); - IElasticToken tokenContract = IElasticToken(vote.votingTokenAddress); - - uint256 votingLambda = tokenContract.balanceOfInShares(msg.sender); - uint256 lambdaAtStartingBlock = tokenContract.balanceOfInSharesAt( - msg.sender, - vote.startOnBlock - ); - if (lambdaAtStartingBlock < votingLambda) { - votingLambda = lambdaAtStartingBlock; - } - if (vote.maxSharesPerTokenHolder < votingLambda) { - votingLambda = vote.maxSharesPerTokenHolder; - } - - TransactionalVoteBallot.Instance memory existingBallot = TransactionalVoteBallot( - ballotModelAddress - ) - .deserialize(msg.sender, settings, vote); - - if (existingBallot.lambda > 0) { - if (existingBallot.yna == 0) { - vote.yesLambda = SafeMath.sub(vote.yesLambda, existingBallot.lambda); - } else if (existingBallot.yna == 1) { - vote.noLambda = SafeMath.sub(vote.noLambda, existingBallot.lambda); - } else { - vote.abstainLambda = SafeMath.sub(vote.abstainLambda, existingBallot.lambda); - } - } - - if (_yna == 0) { - vote.yesLambda = SafeMath.add(vote.yesLambda, votingLambda); - } else if (_yna == 1) { - vote.noLambda = SafeMath.add(vote.noLambda, votingLambda); - } else { - vote.abstainLambda = SafeMath.add(vote.abstainLambda, votingLambda); - } - - uint256 lambda = SafeMath.add(SafeMath.add(vote.yesLambda, vote.noLambda), vote.abstainLambda); - vote.isApproved = false; - if (lambda >= vote.quorumLambda) { - vote.hasReachedQuorum = true; - - if (lambda >= vote.approvalLambda) { - vote.isApproved = true; - } - } - - TransactionalVoteBallot.Instance memory ballot; - ballot.lambda = votingLambda; - ballot.settings = settings; - ballot.vote = vote; - ballot.voter = msg.sender; - ballot.yna = _yna; - - TransactionalVoteBallot(ballotModelAddress).serialize(ballot); - TransactionalVote(voteModelAddress).serialize(vote); - - if (existingBallot.lambda == 0) { - tokenContract.mintShares(msg.sender, ElasticMath.wmul(votingLambda, vote.reward)); - } - } - - function createVote( - address _to, - uint256 _value, - bytes memory _data, - Operation _operation, - uint256 _safeTxGas, - uint256 _baseGas, - uint256 _endOnBlock - ) external returns (uint256) { - require(initialized, 'ElasticDAO: TransactionalVote Manager not initialized'); - TransactionalVoteSettings.Instance memory settings = _getSettings(); - IElasticToken tokenContract = IElasticToken(settings.votingTokenAddress); - require( - tokenContract.balanceOfInShares(msg.sender) >= settings.minSharesToCreate, - 'ElasticDAO: Not enough shares to create vote' - ); - require( - SafeMath.sub(_endOnBlock, block.number) >= settings.minDurationInBlocks, - 'ElasticDAO: TransactionalVote period too short' - ); - bytes memory zero; - require( - _value > 0, - 'ElasticDAO: Transaction must either transfer value or call another contract function' - ); - if (keccak256(abi.encodePacked(_data)) == keccak256(abi.encodePacked(zero))) { - revert( - 'ElasticDAO: Transaction must either transfer value or call another contract function' - ); - } - - TransactionalVote voteContract = TransactionalVote(voteModelAddress); - TransactionalVote.Instance memory vote; - vote.settings = settings; - vote.abstainLambda = 0; - vote.approval = 0; - vote.author = msg.sender; - vote.baseGas = _baseGas; - vote.data = _data; - vote.endOnBlock = _endOnBlock; - vote.hasPenalty = settings.hasPenalty; - vote.hasReachedQuorum = false; - vote.index = settings.counter; - vote.isActive = true; - vote.isApproved = false; - vote.maxSharesPerTokenHolder = settings.maxSharesPerTokenHolder; - vote.minBlocksForPenalty = settings.minBlocksForPenalty; - vote.noLambda = 0; - vote.operation = _operation; - vote.penalty = settings.penalty; - vote.quorum = settings.quorum; - - uint256 maxVotingShares = ElasticMath.wmul( - tokenContract.numberOfTokenHolders(), - settings.maxSharesPerTokenHolder - ); - uint256 totalSupplyInShares = tokenContract.totalSupplyInShares(); - if (totalSupplyInShares < maxVotingShares) { - vote.quorumLambda = ElasticMath.wmul(totalSupplyInShares, settings.quorum); - vote.approvalLambda = ElasticMath.wmul(totalSupplyInShares, settings.approval); - } else { - vote.quorumLambda = ElasticMath.wmul(maxVotingShares, settings.quorum); - vote.approvalLambda = ElasticMath.wmul(maxVotingShares, settings.approval); - } - - vote.reward = settings.reward; - vote.safeTxGas = _safeTxGas; - vote.startOnBlock = block.number; - vote.to = _to; - vote.value = _value; - vote.votingTokenAddress = settings.votingTokenAddress; - vote.yesLambda = 0; - voteContract.serialize(vote); - TransactionalVoteSettings(settingsModelAddress).incrementCounter(address(this)); - - emit CreateVote(vote.index); - } - - /** - * @dev executes arbitrary transaction when safe abi function signature is passed into data. Based on Gnosis Safe. - * @param _gasPrice - Gas price that should be used for the payment calculation. - * @param _gasToken - Token address (or 0 if ETH) that is used for the payment. - * @param _index - the vote index id. - * @return success bool - */ - function execute( - address _gasToken, - uint256 _gasPrice, - uint256 _index - ) external returns (bool success) { - TransactionalVoteSettings.Instance memory settings = _getSettings(); - TransactionalVote.Instance memory vote = _getVote(_index, settings); - - require(!vote.isExecuted, 'ElasticDAO: Vote has already been executed'); - require(vote.isApproved, 'ElasticDAO: Can not call unless vote is successful'); - - vote.isExecuted = true; - TransactionalVote voteContract = TransactionalVote(voteModelAddress); - voteContract.serialize(vote); - - success = _executeTransaction( - vote.to, - vote.value, - vote.data, - vote.operation, - vote.safeTxGas, - vote.baseGas, - _gasPrice, - _gasToken, - vaultAddress - ); - - if (!success) { - revert('ElasticDAO: Transaction Failed'); - } - - return true; - } - - function getSettings() external view returns (TransactionalVoteSettings.Instance memory) { - return _getSettings(); - } - - // Private - function _executeTransaction( - address _to, - uint256 _value, - bytes memory _data, - Operation _operation, - uint256 _safeTxGas, - uint256 _baseGas, - uint256 _gasPrice, - address _gasToken, - address payable _refundReceiver - ) internal returns (bool success) { - bytes32 txHash; - - // use scope to limit variable lifetime and prevent `stack to deep` errors - { - bytes memory txHashData = _encodeTransactionData( - _to, - _value, - _data, - _operation, - _safeTxGas, - _baseGas, - _gasPrice, - _gasToken, - _refundReceiver - ); - - // increment nonce - SafeMath.add(nonce, 1); - // hash transaction data - txHash = keccak256(txHashData); - } - - // We require some gas to emit the events (at least 2500) after the execution and some to perform code until the execution (500) - // We also include the 1/64 in the check that is not send along with a call to counteract potential shortings because of EIP-150 - require( - gasleft() >= SafeMath.max((_safeTxGas * 64) / 63, (_safeTxGas + 2500) + 500), - 'ElasticDAO: Not enough gas to execute safe transaction' - ); - - // use scope to limit variable lifetime and prevent `stack to deep` errors - { - uint256 gasUsed = gasleft(); - // If the gasPrice is 0 we assume that nearly all available gas can be used (it is always more than safeTxGas) - // We only substract 2500 (compared to the 3000 before) to ensure that the amount passed is still higher than safeTxGas - success = _handleCall( - _to, - _value, - _data, - _operation, - _gasPrice == 0 ? (gasleft() - 2500) : _safeTxGas - ); - gasUsed = SafeMath.sub(gasUsed, gasleft()); - - // We transfer the calculated tx costs to the tx.origin to avoid sending it to intermediate contracts that have made calls - uint256 payment = 0; - if (_gasPrice > 0) { - payment = _handlePayment(gasUsed, _baseGas, _gasPrice, _gasToken, _refundReceiver); - } - - if (success) { - emit ExecutionSuccess(txHash, payment); - } else { - emit ExecutionFailure(txHash, payment); - } - } - } - - function _handlePayment( - uint256 _gasUsed, - uint256 _baseGas, - uint256 _gasPrice, - address _gasToken, - address payable _refundReceiver - ) private returns (uint256 payment) { - address payable receiver = _refundReceiver == address(0) ? tx.origin : _refundReceiver; - - if (_gasToken == address(0)) { - // For ETH we will only adjust the gas price to not be higher than the actual used gas price - payment = SafeMath.mul( - SafeMath.add(_gasUsed, _baseGas), - _gasPrice < tx.gasprice ? _gasPrice : tx.gasprice - ); - - require(receiver.send(payment), 'Elastic DAO: Could not pay gas costs with token'); - } else { - payment = SafeMath.mul(SafeMath.add(_gasUsed, _baseGas), _gasPrice); - - require(_transferToken(_gasToken, receiver, payment)); - } - } - - function _encodeTransactionData( - address _to, - uint256 _value, - bytes memory _data, - Operation _operation, - uint256 _safeTxGas, - uint256 _baseGas, - uint256 _gasPrice, - address _gasToken, - address _refundReceiver - ) internal view returns (bytes memory) { - bytes32 safeTxHash = keccak256( - abi.encode( - SAFE_TX_TYPEHASH, - _to, - _value, - keccak256(_data), - _operation, - _safeTxGas, - _baseGas, - _gasPrice, - _gasToken, - _refundReceiver, - nonce - ) - ); - - return abi.encodePacked(bytes1(0x19), bytes1(0x01), domainSeparator, safeTxHash); - } - - function _handleCall( - address _to, - uint256 _value, - bytes memory _data, - Operation _operation, - uint256 _txGas - ) internal returns (bool success) { - if (_operation == Operation.Call) success = _executeCall(_to, _value, _data, _txGas); - else if (_operation == Operation.DelegateCall) - success = _executeDelegateCall(_to, _data, _txGas); - else success = false; - } - - function _executeCall( - address to, - uint256 value, - bytes memory data, - uint256 txGas - ) internal returns (bool success) { - // solium-disable-next-line security/no-inline-assembly - assembly { - success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0) - } - } - - function _executeDelegateCall( - address to, - bytes memory data, - uint256 txGas - ) internal returns (bool success) { - // solium-disable-next-line security/no-inline-assembly - assembly { - success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0) - } - } - - /// @dev Transfers a token and returns if it was a success - /// @param token Token that should be transferred - /// @param receiver Receiver to whom the token should be transferred - /// @param amount The amount of tokens that should be transferred - function _transferToken( - address token, - address receiver, - uint256 amount - ) internal returns (bool transferred) { - bytes memory data = abi.encodeWithSignature('transfer(address,uint256)', receiver, amount); - assembly { - let success := call(sub(gas(), 10000), token, 0, add(data, 0x20), mload(data), 0, 0) - let ptr := mload(0x40) - mstore(0x40, add(ptr, returndatasize())) - returndatacopy(ptr, 0, returndatasize()) - switch returndatasize() - case 0 { - transferred := success - } - case 0x20 { - transferred := iszero(or(iszero(success), iszero(mload(ptr)))) - } - default { - transferred := 0 - } - } - } - - function _getSettings() internal view returns (TransactionalVoteSettings.Instance memory) { - return TransactionalVoteSettings(settingsModelAddress).deserialize(address(this)); - } - - function _getVote(uint256 _index, TransactionalVoteSettings.Instance memory _settings) - internal - view - returns (TransactionalVote.Instance memory) - { - return TransactionalVote(voteModelAddress).deserialize(_index, _settings); - } - - function _voteExists(uint256 _index, TransactionalVoteSettings.Instance memory _settings) - internal - view - returns (bool) - { - return TransactionalVote(voteModelAddress).exists(_index, _settings); - } - - function _voteNotExpired(TransactionalVote.Instance memory vote) internal returns (bool) { - if (vote.endOnBlock <= block.number) { - vote.isActive = false; - TransactionalVote(voteModelAddress).serialize(vote); - return false; - } - - return true; - } -} diff --git a/src/modules/TransactionalVote/Operation.sol b/src/modules/TransactionalVote/Operation.sol deleted file mode 100644 index 8649ae0..0000000 --- a/src/modules/TransactionalVote/Operation.sol +++ /dev/null @@ -1,5 +0,0 @@ -// SPDX-License-Identifier: GPLv3 -pragma solidity 0.7.2; -pragma experimental ABIEncoderV2; - -enum Operation { Call, DelegateCall } diff --git a/src/modules/TransactionalVote/models/Ballot.sol b/src/modules/TransactionalVote/models/Ballot.sol deleted file mode 100644 index c15d452..0000000 --- a/src/modules/TransactionalVote/models/Ballot.sol +++ /dev/null @@ -1,96 +0,0 @@ -// SPDX-License-Identifier: GPLv3 -pragma solidity 0.7.2; -pragma experimental ABIEncoderV2; - -import '../../../models/EternalModel.sol'; -import '../../../libraries/SafeMath.sol'; -import './Settings.sol'; -import './Vote.sol'; - -/// @author ElasticDAO - https://ElasticDAO.org -/// @notice This contract is used for storing information vote data -/// @dev ElasticDAO network contracts can read/write from this contract -// Serialize -> Translation of data from the concerned struct to key-value pairs -/// Deserialize -> Translation of data from the key-value pairs to a struct -contract TransactionalVoteBallot is EternalModel { - constructor() EternalModel() {} - - struct Instance { - address voter; - bool wasPenalized; - uint256 lambda; - uint256 yna; - TransactionalVoteSettings.Instance settings; - TransactionalVote.Instance vote; - } - - function deserialize( - address _voter, - TransactionalVoteSettings.Instance memory _settings, - TransactionalVote.Instance memory _vote - ) external view returns (Instance memory record) { - record.voter = _voter; - record.settings = _settings; - record.vote = _vote; - - if (_exists(_voter, _settings, _vote)) { - record.lambda = getUint( - keccak256(abi.encode(_settings.managerAddress, _vote.index, _voter, 'lambda')) - ); - record.wasPenalized = getBool( - keccak256(abi.encode(_settings.managerAddress, _vote.index, _voter, 'wasPenalized')) - ); - record.yna = getUint( - keccak256(abi.encode(_settings.managerAddress, _vote.index, _voter, 'yna')) - ); - } - - return record; - } - - function exists( - address _voter, - TransactionalVoteSettings.Instance memory _settings, - TransactionalVote.Instance memory _vote - ) external view returns (bool recordExists) { - return _exists(_voter, _settings, _vote); - } - - /** - * @dev serializes Instance struct - * @param record Instance - */ - function serialize(Instance memory record) external { - setBool( - keccak256( - abi.encode(record.settings.managerAddress, record.vote.index, record.voter, 'wasPenalized') - ), - record.wasPenalized - ); - setUint( - keccak256( - abi.encode(record.settings.managerAddress, record.vote.index, record.voter, 'lambda') - ), - record.lambda - ); - setUint( - keccak256(abi.encode(record.settings.managerAddress, record.vote.index, record.voter, 'yna')), - record.yna - ); - - setBool( - keccak256( - abi.encode(record.settings.managerAddress, record.vote.index, record.voter, 'exists') - ), - true - ); - } - - function _exists( - address _voter, - TransactionalVoteSettings.Instance memory _settings, - TransactionalVote.Instance memory _vote - ) internal view returns (bool recordExists) { - return getBool(keccak256(abi.encode(_settings.managerAddress, _vote.index, _voter, 'exists'))); - } -} diff --git a/src/modules/TransactionalVote/models/Settings.sol b/src/modules/TransactionalVote/models/Settings.sol deleted file mode 100644 index a43ac43..0000000 --- a/src/modules/TransactionalVote/models/Settings.sol +++ /dev/null @@ -1,133 +0,0 @@ -// SPDX-License-Identifier: GPLv3 -pragma solidity 0.7.2; -pragma experimental ABIEncoderV2; - -import '../../../models/EternalModel.sol'; -import '../../../libraries/SafeMath.sol'; - -/// @author ElasticDAO - https://ElasticDAO.org -/// @notice This contract is used for storing information vote settings data -/// @dev ElasticDAO network contracts can read/write from this contract -// Serialize -> Translation of data from the concerned struct to key-value pairs -/// Deserialize -> Translation of data from the key-value pairs to a struct -contract TransactionalVoteSettings is EternalModel { - struct Instance { - address managerAddress; - address votingTokenAddress; - bool hasPenalty; - uint256 approval; - uint256 counter; - uint256 maxSharesPerTokenHolder; - uint256 minBlocksForPenalty; - uint256 minDurationInBlocks; - uint256 minPenaltyInShares; - uint256 minRewardInShares; - uint256 minSharesToCreate; - uint256 penalty; - uint256 quorum; - uint256 reward; - } - - /** - * @dev deserializes Instance struct - * @param _managerAddress - address of the unique manager instance - * @return record Instance - */ - function deserialize(address _managerAddress) external view returns (Instance memory record) { - record.managerAddress = _managerAddress; - - if (_exists(_managerAddress)) { - record.approval = getUint(keccak256(abi.encode(_managerAddress, 'approval'))); - record.counter = getUint(keccak256(abi.encode(_managerAddress, 'counter'))); - record.hasPenalty = getBool(keccak256(abi.encode(_managerAddress, 'hasPenalty'))); - record.maxSharesPerTokenHolder = getUint( - keccak256(abi.encode(_managerAddress, 'maxSharesPerTokenHolder')) - ); - record.minBlocksForPenalty = getUint( - keccak256(abi.encode(_managerAddress, 'minBlocksForPenalty')) - ); - record.minDurationInBlocks = getUint( - keccak256(abi.encode(_managerAddress, 'minDurationInBlocks')) - ); - record.minSharesToCreate = getUint( - keccak256(abi.encode(_managerAddress, 'minSharesToCreate')) - ); - record.minPenaltyInShares = getUint( - keccak256(abi.encode(_managerAddress, 'minPenaltyInShares')) - ); - record.minRewardInShares = getUint( - keccak256(abi.encode(_managerAddress, 'minRewardInShares')) - ); - record.penalty = getUint(keccak256(abi.encode(_managerAddress, 'penalty'))); - record.quorum = getUint(keccak256(abi.encode(_managerAddress, 'quorum'))); - record.reward = getUint(keccak256(abi.encode(_managerAddress, 'reward'))); - record.votingTokenAddress = getAddress( - keccak256(abi.encode(_managerAddress, 'votingTokenAddress')) - ); - } - - return record; - } - - function exists(address _managerAddress) external view returns (bool recordExists) { - return _exists(_managerAddress); - } - - /** - * @dev increments counter for the @param _managerAddress - * @param _managerAddress - address of the unique manager instance - */ - function incrementCounter(address _managerAddress) external { - setUint( - keccak256(abi.encode(_managerAddress, 'counter')), - SafeMath.add(getUint(keccak256(abi.encode(_managerAddress, 'counter'))), 1) - ); - } - - /** - * @dev serializes Instance struct - * @param record Instance - */ - function serialize(Instance memory record) external { - setBool(keccak256(abi.encode(record.managerAddress, 'hasPenalty')), record.hasPenalty); - setUint(keccak256(abi.encode(record.managerAddress, 'approval')), record.approval); - setUint(keccak256(abi.encode(record.managerAddress, 'counter')), record.counter); - setUint( - keccak256(abi.encode(record.managerAddress, 'maxSharesPerTokenHolder')), - record.maxSharesPerTokenHolder - ); - setUint( - keccak256(abi.encode(record.managerAddress, 'minBlocksForPenalty')), - record.minBlocksForPenalty - ); - setUint( - keccak256(abi.encode(record.managerAddress, 'minDurationInBlocks')), - record.minDurationInBlocks - ); - setUint( - keccak256(abi.encode(record.managerAddress, 'minPenaltyInShares')), - record.minPenaltyInShares - ); - setUint( - keccak256(abi.encode(record.managerAddress, 'minRewardInShares')), - record.minRewardInShares - ); - setUint( - keccak256(abi.encode(record.managerAddress, 'minSharesToCreate')), - record.minSharesToCreate - ); - setUint(keccak256(abi.encode(record.managerAddress, 'penalty')), record.penalty); - setUint(keccak256(abi.encode(record.managerAddress, 'quorum')), record.quorum); - setUint(keccak256(abi.encode(record.managerAddress, 'reward')), record.reward); - setAddress( - keccak256(abi.encode(record.managerAddress, 'votingTokenAddress')), - record.votingTokenAddress - ); - - setBool(keccak256(abi.encode(record.managerAddress, 'exists')), true); - } - - function _exists(address _managerAddress) internal view returns (bool recordExists) { - return getBool(keccak256(abi.encode(_managerAddress, 'exists'))); - } -} diff --git a/src/modules/TransactionalVote/models/Vote.sol b/src/modules/TransactionalVote/models/Vote.sol deleted file mode 100644 index fcd6108..0000000 --- a/src/modules/TransactionalVote/models/Vote.sol +++ /dev/null @@ -1,273 +0,0 @@ -// SPDX-License-Identifier: GPLv3 -pragma solidity 0.7.2; -pragma experimental ABIEncoderV2; - -import '../Operation.sol'; -import './Settings.sol'; - -import '../../../models/EternalModel.sol'; -import '../../../libraries/SafeMath.sol'; - -/// @author ElasticDAO - https://ElasticDAO.org -/// @notice This contract is used for storing information vote data -/// @dev ElasticDAO network contracts can read/write from this contract -// Serialize -> Translation of data from the concerned struct to key-value pairs -/// Deserialize -> Translation of data from the key-value pairs to a struct -contract TransactionalVote is EternalModel { - mapping(bytes32 => Operation) operations; - - struct Instance { - address author; - address to; - address votingTokenAddress; - bool hasPenalty; - bool hasReachedQuorum; - bool isActive; - bool isApproved; - bool isExecuted; - bytes data; - string proposal; - uint256 abstainLambda; - uint256 approval; - uint256 approvalLambda; - uint256 baseGas; - uint256 endOnBlock; - uint256 index; - uint256 maxSharesPerTokenHolder; - uint256 minBlocksForPenalty; - uint256 minPenaltyInShares; - uint256 minRewardInShares; - uint256 noLambda; - uint256 penalty; - uint256 quorum; - uint256 quorumLambda; - uint256 reward; - uint256 safeTxGas; - uint256 startOnBlock; - uint256 value; - uint256 yesLambda; - Operation operation; - TransactionalVoteSettings.Instance settings; - } - - function deserialize(uint256 _index, TransactionalVoteSettings.Instance memory _settings) - external - view - returns (Instance memory record) - { - record.index = _index; - record.settings = _settings; - - if (_exists(_index, _settings)) { - record.abstainLambda = getUint( - keccak256(abi.encode(_index, _settings.managerAddress, 'abstainLambda')) - ); - record.approval = getUint( - keccak256(abi.encode(_index, _settings.managerAddress, 'approval')) - ); - record.approvalLambda = getUint( - keccak256(abi.encode(_index, _settings.managerAddress, 'approvalLambda')) - ); - record.author = getAddress(keccak256(abi.encode(_index, _settings.managerAddress, 'author'))); - record.baseGas = getUint(keccak256(abi.encode(_index, _settings.managerAddress, 'baseGas'))); - record.data = getBytes(keccak256(abi.encode(_index, _settings.managerAddress, 'data'))); - record.endOnBlock = getUint( - keccak256(abi.encode(_index, _settings.managerAddress, 'endOnBlock')) - ); - record.hasPenalty = getBool( - keccak256(abi.encode(_index, _settings.managerAddress, 'hasPenalty')) - ); - record.hasReachedQuorum = getBool( - keccak256(abi.encode(_index, _settings.managerAddress, 'hasReachedQuorum')) - ); - record.isActive = getBool( - keccak256(abi.encode(_index, _settings.managerAddress, 'isActive')) - ); - record.isApproved = getBool( - keccak256(abi.encode(_index, _settings.managerAddress, 'isApproved')) - ); - record.isExecuted = getBool( - keccak256(abi.encode(_index, _settings.managerAddress, 'isExecuted')) - ); - record.maxSharesPerTokenHolder = getUint( - keccak256(abi.encode(_index, _settings.managerAddress, 'maxSharesPerTokenHolder')) - ); - record.minBlocksForPenalty = getUint( - keccak256(abi.encode(_index, _settings.managerAddress, 'minBlocksForPenalty')) - ); - record.minPenaltyInShares = getUint( - keccak256(abi.encode(_index, _settings.managerAddress, 'minPenaltyInShares')) - ); - record.minRewardInShares = getUint( - keccak256(abi.encode(_index, _settings.managerAddress, 'minRewardInShares')) - ); - record.noLambda = getUint( - keccak256(abi.encode(_index, _settings.managerAddress, 'noLambda')) - ); - record.penalty = getUint(keccak256(abi.encode(_index, _settings.managerAddress, 'penalty'))); - record.proposal = getString( - keccak256(abi.encode(_index, _settings.managerAddress, 'proposal')) - ); - record.quorum = getUint(keccak256(abi.encode(_index, _settings.managerAddress, 'quorum'))); - record.quorumLambda = getUint( - keccak256(abi.encode(_index, _settings.managerAddress, 'quorumLambda')) - ); - record.reward = getUint(keccak256(abi.encode(_index, _settings.managerAddress, 'reward'))); - record.safeTxGas = getUint( - keccak256(abi.encode(_index, _settings.managerAddress, 'safeTxGas')) - ); - record.startOnBlock = getUint( - keccak256(abi.encode(_index, _settings.managerAddress, 'startOnBlock')) - ); - record.to = getAddress(keccak256(abi.encode(_index, _settings.managerAddress, 'to'))); - record.value = getUint(keccak256(abi.encode(_index, _settings.managerAddress, 'value'))); - record.votingTokenAddress = getAddress( - keccak256(abi.encode(_index, _settings.managerAddress, 'votingTokenAddress')) - ); - record.yesLambda = getUint( - keccak256(abi.encode(_index, _settings.managerAddress, 'yesLambda')) - ); - } - - return record; - } - - function exists(uint256 _index, TransactionalVoteSettings.Instance memory _settings) - external - view - returns (bool recordExists) - { - return _exists(_index, _settings); - } - - /** - * @dev serializes Instance struct - * @param record Instance - */ - function serialize(Instance memory record) external { - setAddress( - keccak256(abi.encode(record.index, record.settings.managerAddress, 'author')), - record.author - ); - setAddress( - keccak256(abi.encode(record.index, record.settings.managerAddress, 'to')), - record.to - ); - setAddress( - keccak256(abi.encode(record.index, record.settings.managerAddress, 'votingTokenAddress')), - record.votingTokenAddress - ); - setBool( - keccak256(abi.encode(record.index, record.settings.managerAddress, 'hasPenalty')), - record.hasPenalty - ); - setBool( - keccak256(abi.encode(record.index, record.settings.managerAddress, 'hasReachedQuorum')), - record.hasReachedQuorum - ); - setBool( - keccak256(abi.encode(record.index, record.settings.managerAddress, 'isActive')), - record.isActive - ); - setBool( - keccak256(abi.encode(record.index, record.settings.managerAddress, 'isApproved')), - record.isApproved - ); - setBool( - keccak256(abi.encode(record.index, record.settings.managerAddress, 'isExecuted')), - record.isExecuted - ); - setString( - keccak256(abi.encode(record.index, record.settings.managerAddress, 'proposal')), - record.proposal - ); - setBytes( - keccak256(abi.encode(record.index, record.settings.managerAddress, 'data')), - record.data - ); - setUint( - keccak256(abi.encode(record.index, record.settings.managerAddress, 'abstainLambda')), - record.abstainLambda - ); - setUint( - keccak256(abi.encode(record.index, record.settings.managerAddress, 'approval')), - record.approval - ); - setUint( - keccak256(abi.encode(record.index, record.settings.managerAddress, 'approvalLambda')), - record.approvalLambda - ); - setUint( - keccak256(abi.encode(record.index, record.settings.managerAddress, 'baseGas')), - record.baseGas - ); - setUint( - keccak256(abi.encode(record.index, record.settings.managerAddress, 'endOnBlock')), - record.endOnBlock - ); - setUint( - keccak256( - abi.encode(record.index, record.settings.managerAddress, 'maxSharesPerTokenHolder') - ), - record.maxSharesPerTokenHolder - ); - setUint( - keccak256(abi.encode(record.index, record.settings.managerAddress, 'minBlocksForPenalty')), - record.minBlocksForPenalty - ); - setUint( - keccak256(abi.encode(record.index, record.settings.managerAddress, 'minPenaltyInShares')), - record.minPenaltyInShares - ); - setUint( - keccak256(abi.encode(record.index, record.settings.managerAddress, 'minRewardInShares')), - record.minRewardInShares - ); - setUint( - keccak256(abi.encode(record.index, record.settings.managerAddress, 'noLambda')), - record.noLambda - ); - setUint( - keccak256(abi.encode(record.index, record.settings.managerAddress, 'penalty')), - record.penalty - ); - setUint( - keccak256(abi.encode(record.index, record.settings.managerAddress, 'quorum')), - record.quorum - ); - setUint( - keccak256(abi.encode(record.index, record.settings.managerAddress, 'quorumLambda')), - record.quorumLambda - ); - setUint( - keccak256(abi.encode(record.index, record.settings.managerAddress, 'reward')), - record.reward - ); - setUint( - keccak256(abi.encode(record.index, record.settings.managerAddress, 'safeTxGas')), - record.safeTxGas - ); - setUint( - keccak256(abi.encode(record.index, record.settings.managerAddress, 'startOnBlock')), - record.startOnBlock - ); - setUint( - keccak256(abi.encode(record.index, record.settings.managerAddress, 'value')), - record.value - ); - setUint( - keccak256(abi.encode(record.index, record.settings.managerAddress, 'yesLambda')), - record.yesLambda - ); - - setBool(keccak256(abi.encode(record.index, record.settings.managerAddress, 'exists')), true); - } - - function _exists(uint256 _index, TransactionalVoteSettings.Instance memory _settings) - internal - view - returns (bool recordExists) - { - return getBool(keccak256(abi.encode(_index, _settings.managerAddress, 'exists'))); - } -} diff --git a/src/services/Configurator.sol b/src/services/Configurator.sol deleted file mode 100644 index 7689eb5..0000000 --- a/src/services/Configurator.sol +++ /dev/null @@ -1,111 +0,0 @@ -// SPDX-License-Identifier: GPLv3 -pragma solidity 0.7.2; -pragma experimental ABIEncoderV2; - -import '../models/DAO.sol'; -import '../models/Ecosystem.sol'; -import '../models/Token.sol'; - -import '../tokens/ElasticGovernanceToken.sol'; - -/// @author ElasticDAO - https://ElasticDAO.org -/// @notice This contract is used for configuring ElasticDAOs -/// @dev ElasticDAO network contracts can read/write from this contract -contract Configurator { - /** - * @dev creates DAO.Instance record - * @param _summoners - an array of the addresses of the summoners - * @param _name - the name of the DAO - * @param _numberOfSummoners - the number of summoners - * @param _ecosystem - an instance of Ecosystem - * @return dao DAO.Instance - */ - - function buildDAO( - address[] memory _summoners, - string memory _name, - uint256 _numberOfSummoners, - Ecosystem.Instance memory _ecosystem - ) external returns (DAO.Instance memory dao) { - DAO daoStorage = DAO(_ecosystem.daoModelAddress); - dao.uuid = msg.sender; - dao.ecosystem = _ecosystem; - dao.name = _name; - dao.numberOfSummoners = _numberOfSummoners; - dao.summoned = false; - dao.summoners = _summoners; - daoStorage.serialize(dao); - return dao; - } - - /** - * @dev duplicates the ecosystem contract address defaults - * @param defaults - An instance of the Ecosystem - * @return ecosystem Ecosystem.Instance - */ - function buildEcosystem(Ecosystem.Instance memory defaults) - external - returns (Ecosystem.Instance memory ecosystem) - { - Ecosystem ecosystemStorage = Ecosystem(defaults.ecosystemModelAddress); - - ecosystem.daoAddress = msg.sender; - - // Models - ecosystem.balanceModelAddress = defaults.balanceModelAddress; - ecosystem.balanceMultipliersModelAddress = defaults.balanceMultipliersModelAddress; - ecosystem.daoModelAddress = defaults.daoModelAddress; - ecosystem.ecosystemModelAddress = defaults.ecosystemModelAddress; - ecosystem.elasticModuleModelAddress = defaults.elasticModuleModelAddress; - ecosystem.tokenHolderModelAddress = defaults.tokenHolderModelAddress; - ecosystem.tokenModelAddress = defaults.tokenModelAddress; - - // Services - ecosystem.configuratorAddress = defaults.configuratorAddress; - ecosystem.registratorAddress = defaults.registratorAddress; - - ecosystemStorage.serialize(ecosystem); - return ecosystem; - } - - /** - * @dev creates a governance token and it's storage - * @param _name - the name of the token - * @param _name - the symbol of the token - * @param _eByL is the initial Eth/Egt ratio before the DAO has been summoned - * @param _elasticity is the value of elasticity, initially set by the DAO - * @param _k is a constant, initially set by the DAO - * @param _maxLambdaPurchase - the maximum amount of lambda(shares) that can be - * purchased by an account - * m - initital share modifier = 1 - * @param _ecosystem - ecosystem instance - * @return token Token.Instance - */ - function buildToken( - string memory _name, - string memory _symbol, - uint256 _eByL, - uint256 _elasticity, - uint256 _k, - uint256 _maxLambdaPurchase, - Ecosystem.Instance memory _ecosystem - ) external returns (Token.Instance memory token) { - Token tokenStorage = Token(_ecosystem.tokenModelAddress); - token.eByL = _eByL; - token.ecosystem = _ecosystem; - token.elasticity = _elasticity; - token.k = _k; - token.lambda = 0; - token.m = 1000000000000000000; - token.maxLambdaPurchase = _maxLambdaPurchase; - token.name = _name; - token.symbol = _symbol; - token.uuid = address(new ElasticGovernanceToken(msg.sender, _ecosystem.ecosystemModelAddress)); - - _ecosystem.governanceTokenAddress = token.uuid; - Ecosystem(_ecosystem.ecosystemModelAddress).serialize(_ecosystem); - tokenStorage.serialize(token); - - return token; - } -} diff --git a/src/services/Registrator.sol b/src/services/Registrator.sol deleted file mode 100644 index 88809f4..0000000 --- a/src/services/Registrator.sol +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: GPLv3 -pragma solidity 0.7.2; -pragma experimental ABIEncoderV2; - -import '../models/Ecosystem.sol'; -import '../models/ElasticModule.sol'; - -/// @author ElasticDAO - https://ElasticDAO.org -/// @notice This contract is used for registering ElasticDAO modules -/// @dev ElasticDAO network contracts can read/write from this contract -contract Registrator { - function registerModule( - address _moduleAddress, - string memory _name, - Ecosystem.Instance memory _ecosystem - ) external { - ElasticModule elasticModuleStorage = ElasticModule(_ecosystem.elasticModuleModelAddress); - ElasticModule.Instance memory elasticModule; - elasticModule.dao = DAO(_ecosystem.daoModelAddress).deserialize(msg.sender, _ecosystem); - elasticModule.name = _name; - elasticModule.uuid = _moduleAddress; // TODO: Check against TBD whitelist - elasticModuleStorage.serialize(elasticModule); - } -} diff --git a/src/tokens/ElasticGovernanceToken.sol b/src/tokens/ElasticGovernanceToken.sol index 85b403f..692577b 100644 --- a/src/tokens/ElasticGovernanceToken.sol +++ b/src/tokens/ElasticGovernanceToken.sol @@ -4,52 +4,107 @@ pragma experimental ABIEncoderV2; import '../interfaces/IElasticToken.sol'; -import '../libraries/SafeMath.sol'; import '../libraries/ElasticMath.sol'; -import '../models/Balance.sol'; +import '../core/ElasticDAO.sol'; import '../models/DAO.sol'; import '../models/Ecosystem.sol'; import '../models/Token.sol'; import '../models/TokenHolder.sol'; +import '@openzeppelin/contracts/utils/ReentrancyGuard.sol'; + /** - * @dev Implementation of the IERC20 interface + * @dev ElasticGovernanceToken contract outlines and defines all the functionality + * of an ElasticGovernanceToken and also serves as it's storage */ -contract ElasticGovernanceToken is IElasticToken { - address daoAddress; - address ecosystemModelAddress; +contract ElasticGovernanceToken is IElasticToken, ReentrancyGuard { + address public burner; + address public daoAddress; + address public ecosystemModelAddress; + address public minter; + bool public initialized; mapping(address => mapping(address => uint256)) private _allowances; modifier onlyDAO() { - require(msg.sender == daoAddress, 'ElasticDAO: Not authorized.'); + require(msg.sender == daoAddress, 'ElasticDAO: Not authorized'); _; } - constructor(address _daoAddress, address _ecosystemModelAddress) IERC20() { - daoAddress = _daoAddress; - ecosystemModelAddress = _ecosystemModelAddress; + modifier onlyDAOorBurner() { + require(msg.sender == daoAddress || msg.sender == burner, 'ElasticDAO: Not authorized'); + _; + } + + modifier onlyDAOorMinter() { + require(msg.sender == daoAddress || msg.sender == minter, 'ElasticDAO: Not authorized'); + _; } /** - * @dev Returns the remaining number of tokens that @param _spender will be + * @notice initializes the ElasticGovernanceToken + * + * @param _burner - the address which can burn tokens + * @param _minter - the address which can mint tokens + * @param _ecosystem - Ecosystem Instance + * @param _token - Token Instance + * + * @dev Requirements: + * - The token should not already be initialized + * - The address of the burner cannot be zero + * - The address of the deployed ElasticDAO cannot be zero + * - The address of the ecosystemModelAddress cannot be zero + * - The address of the minter cannot be zero + * + * @return bool + */ + function initialize( + address _burner, + address _minter, + Ecosystem.Instance memory _ecosystem, + Token.Instance memory _token + ) external nonReentrant returns (Token.Instance memory) { + require(initialized == false, 'ElasticDAO: Already initialized'); + require(_burner != address(0), 'ElasticDAO: Address Zero'); + require(_ecosystem.daoAddress != address(0), 'ElasticDAO: Address Zero'); + require(_ecosystem.ecosystemModelAddress != address(0), 'ElasticDAO: Address Zero'); + require(_minter != address(0), 'ElasticDAO: Address Zero'); + + initialized = true; + burner = _burner; + daoAddress = _ecosystem.daoAddress; + ecosystemModelAddress = _ecosystem.ecosystemModelAddress; + minter = _minter; + + Token tokenStorage = Token(_ecosystem.tokenModelAddress); + tokenStorage.serialize(_token); + + return _token; + } + + /** + * @notice Returns the remaining number of tokens that @param _spender will be * allowed to spend on behalf of @param _owner through {transferFrom}. This is * zero by default + * * @param _spender - the address of the spender * @param _owner - the address of the owner - * This value changes when {approve} or {transferFrom} are called + * + * @dev This value changes when {approve} or {transferFrom} are called + * * @return uint256 */ - function allowance(address _owner, address _spender) external override view returns (uint256) { + function allowance(address _owner, address _spender) external view override returns (uint256) { return _allowances[_owner][_spender]; } /** - * @dev Sets @param _amount as the allowance of @param _spender over the caller's tokens + * @notice Sets @param _amount as the allowance of @param _spender over the caller's tokens + * * @param _spender - the address of the spender - * Returns a boolean value indicating whether the operation succeeded * + * @dev * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race @@ -57,20 +112,38 @@ contract ElasticGovernanceToken is IElasticToken { * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * - * Emits an {Approval} event + * @dev Emits an {Approval} event + * * @return bool */ - function approve(address _spender, uint256 _amount) external override returns (bool) { + function approve(address _spender, uint256 _amount) + external + override + nonReentrant + returns (bool) + { _approve(msg.sender, _spender, _amount); return true; } /** - * @dev Returns the amount of tokens owned by @param _account. + * @notice Returns the amount of tokens owned by @param _account using ElasticMath + * * @param _account - address of the account + * + * @dev the number of tokens is given by: + * t = lambda * m * k + * + * t - number of tokens + * m - lambda modifier - it's value increases every time someone joins the DAO + * k - constant token multiplier - it increases the number of tokens + * that each member of the DAO has with respect to their lambda + * + * Further math and documentaion of 't' can be found at ../libraries/ElasticMath.sol + * * @return uint256 */ - function balanceOf(address _account) external override view returns (uint256) { + function balanceOf(address _account) external view override returns (uint256) { Token.Instance memory token = _getToken(); TokenHolder.Instance memory tokenHolder = _getTokenHolder(_account); uint256 t = ElasticMath.t(tokenHolder.lambda, token.k, token.m); @@ -79,80 +152,83 @@ contract ElasticGovernanceToken is IElasticToken { } /** - * @dev Returns the amount of shares owned by @param _account. + * @notice Returns the amount of shares ( lambda ) owned by _account. + * * @param _account - address of the account + * * @return lambda uint256 - lambda is the number of shares */ - function balanceOfInShares(address _account) external override view returns (uint256 lambda) { + function balanceOfInShares(address _account) external view override returns (uint256) { TokenHolder.Instance memory tokenHolder = _getTokenHolder(_account); return tokenHolder.lambda; } /** - * @dev Returns the amount of tokens owned by @param _account at the specific @param _blockNumber - * @param _account - address of the account - * @param _blockNumber - the blockNumber at which the balance is to be checked at - * @return t uint256 - the number of tokens - */ - function balanceOfAt(address _account, uint256 _blockNumber) - external - override - view - returns (uint256 t) - { - t = 0; - Balance.Instance memory balance = _balanceAt(_account, _blockNumber); - if (balance.blockNumber <= _blockNumber) { - t = ElasticMath.t(balance.lambda, balance.m, balance.k); - } - return t; - } - - /** - * @dev Returns the amount of shares owned by @param _account at @param _blockNumber. - * @param _account - address of the account - * @param _blockNumber - the blockNumber at which the balance of shares has to be checked at - * @return lambda uint256 - lambda is the number of shares + * @notice Returns the amount of tokens @param _account can vote with, using ElasticMath + * + * @param _account - the address of the account + * + * @dev checks if @param _account has more or less lambda than maxVotingLambda, + * based on which number of tokens (t) @param _account can vote with is calculated. + * Further math and documentaion of 't' can be found at ../libraries/ElasticMath.sol + * + * @return balance uint256 numberOfTokens (t) */ - function balanceOfInSharesAt(address _account, uint256 _blockNumber) - external - override - view - returns (uint256 lambda) - { - Balance.Instance memory balance = _balanceAt(_account, _blockNumber); + function balanceOfVoting(address _account) external view returns (uint256 balance) { + Token.Instance memory token = _getToken(); + TokenHolder.Instance memory tokenHolder = _getTokenHolder(_account); + uint256 maxVotingLambda = _getDAO().maxVotingLambda; - if (balance.blockNumber > _blockNumber) { - return 0; + if (tokenHolder.lambda > maxVotingLambda) { + return ElasticMath.t(maxVotingLambda, token.k, token.m); + } else { + return ElasticMath.t(tokenHolder.lambda, token.k, token.m); } - - return balance.lambda; } /** - * @dev Reduces the balance(tokens) of @param _account by @param _amount + * @notice Reduces the balance(tokens) of @param _account by _amount + * * @param _account address of the account + * * @param _amount - the amount by which the number of tokens is to be reduced + * * @return bool */ - function burn(address _account, uint256 _amount) external override onlyDAO returns (bool) { + function burn(address _account, uint256 _amount) + external + override + onlyDAOorBurner + nonReentrant + returns (bool) + { _burn(_account, _amount); return true; } /** - * @dev Reduces the balance(shares) of @param _account by @param _amount + * @notice Reduces the balance(lambda) of @param _account by _amount + * * @param _account - address of the account + * * @param _amount - the amount by which the number of shares has to be reduced + * * @return bool */ - function burnShares(address _account, uint256 _amount) external override returns (bool) { + function burnShares(address _account, uint256 _amount) + external + override + onlyDAOorBurner + nonReentrant + returns (bool) + { _burnShares(_account, _amount); return true; } /** - * @dev returns the number of decimals + * @notice returns the number of decimals + * * @return 18 */ function decimals() external pure returns (uint256) { @@ -160,38 +236,56 @@ contract ElasticGovernanceToken is IElasticToken { } /** - * @dev decreases the allowance of @param _spender by @param _subtractedValue + * @notice decreases the allowance of @param _spender by _subtractedValue + * * @param _spender - address of the spender * @param _subtractedValue - the value the allowance has to be decreased by + * + * @dev Requirement: + * Allowance cannot be lower than 0 + * * @return bool */ - function decreaseAllowance(address _spender, uint256 _subtractedValue) external returns (bool) { + function decreaseAllowance(address _spender, uint256 _subtractedValue) + external + nonReentrant + returns (bool) + { uint256 newAllowance = SafeMath.sub(_allowances[msg.sender][_spender], _subtractedValue); - - require(newAllowance > 0, 'ElasticDAO: Allowance decrease less than 0'); - _approve(msg.sender, _spender, newAllowance); return true; } /** - * @dev increases the allowance of @param _spender by @param _addedValue + * @notice increases the allowance of @param _spender by _addedValue + * * @param _spender - address of the spender * @param _addedValue - the value the allowance has to be increased by + * * @return bool */ - function increaseAllowance(address _spender, uint256 _addedValue) external returns (bool) { + function increaseAllowance(address _spender, uint256 _addedValue) + external + nonReentrant + returns (bool) + { _approve(msg.sender, _spender, SafeMath.add(_allowances[msg.sender][_spender], _addedValue)); return true; } /** * @dev mints @param _amount tokens for @param _account - * @param _amount - the amount of tokens to be minted * @param _account - the address of the account for whom the token have to be minted to + * @param _amount - the amount of tokens to be minted * @return bool */ - function mint(address _account, uint256 _amount) external onlyDAO returns (bool) { + function mint(address _account, uint256 _amount) + external + override + onlyDAOorMinter + nonReentrant + returns (bool) + { _mint(_account, _amount); return true; @@ -203,7 +297,13 @@ contract ElasticGovernanceToken is IElasticToken { * @param _amount - the amount of shares to be minted * @return bool */ - function mintShares(address _account, uint256 _amount) external override returns (bool) { + function mintShares(address _account, uint256 _amount) + external + override + onlyDAOorMinter + nonReentrant + returns (bool) + { _mintShares(_account, _amount); return true; } @@ -216,13 +316,57 @@ contract ElasticGovernanceToken is IElasticToken { return _getToken().name; } - function numberOfTokenHolders() external override view returns (uint256) { + /** + * @notice Returns the number of token holders of ElasticGovernanceToken + * + * @return uint256 numberOfTokenHolders + */ + function numberOfTokenHolders() external view override returns (uint256) { return _getToken().numberOfTokenHolders; } + /** + * @notice sets the burner of the ElasticGovernanceToken + * a Burner is an address that can burn tokens(reduce the amount of tokens in circulation) + * + * @param _burner - the address of the burner + * + * @dev Requirement: + * - Address of the burner cannot be zero address + * + * @return bool + */ + function setBurner(address _burner) external onlyDAO nonReentrant returns (bool) { + require(_burner != address(0), 'ElasticDAO: Address Zero'); + + burner = _burner; + + return true; + } + + /** + * @notice sets the minter of the ElasticGovernanceToken + * a Minter is an address that can mint tokens(increase the amount of tokens in circulation) + * + * @param _minter - address of the minter + * + * @dev Requirement: + * - Address of the minter cannot be zero address + * + * @return bool + */ + function setMinter(address _minter) external onlyDAO nonReentrant returns (bool) { + require(_minter != address(0), 'ElasticDAO: Address Zero'); + + minter = _minter; + + return true; + } + /** * @dev Returns the symbol of the token, usually a shorter version of the * name. + * * @return string - the symbol of the token */ function symbol() external view returns (string memory) { @@ -230,20 +374,29 @@ contract ElasticGovernanceToken is IElasticToken { } /** - * @dev returns the totalSupply of tokens in thee DAO + * @notice returns the totalSupply of tokens in the DAO + * + * @dev * t - the total number of tokens in the DAO * lambda - the total number of shares outstanding in the DAO currently * m - current value of the share modifier * k - constant * t = ( lambda * m * k ) + * Further math and documentaion of 't' can be found at ../libraries/ElasticMath.sol + * * @return uint256 - the value of t */ - function totalSupply() external override view returns (uint256) { + function totalSupply() external view override returns (uint256) { Token.Instance memory token = _getToken(); return ElasticMath.t(token.lambda, token.k, token.m); } - function totalSupplyInShares() external override view returns (uint256) { + /** + * @notice Returns the current lambda value + * + * @return uint256 lambda + */ + function totalSupplyInShares() external view override returns (uint256) { Token.Instance memory token = _getToken(); return token.lambda; } @@ -256,7 +409,7 @@ contract ElasticGovernanceToken is IElasticToken { * Emits a {Transfer} event * @return bool */ - function transfer(address _to, uint256 _amount) external override returns (bool) { + function transfer(address _to, uint256 _amount) external override nonReentrant returns (bool) { _transfer(msg.sender, _to, _amount); return true; } @@ -275,17 +428,15 @@ contract ElasticGovernanceToken is IElasticToken { address _from, address _to, uint256 _amount - ) external override returns (bool) { + ) external override nonReentrant returns (bool) { require(msg.sender == _from || _amount <= _allowances[_from][msg.sender], 'ERC20: Bad Caller'); - _transfer(_from, _to, _amount); - if (msg.sender != _from && _allowances[_from][msg.sender] != uint256(-1)) { _allowances[_from][msg.sender] = SafeMath.sub(_allowances[_from][msg.sender], _amount); - - emit Approval(msg.sender, _to, _allowances[_from][msg.sender]); + emit Approval(_from, msg.sender, _allowances[_from][msg.sender]); } + _transfer(_from, _to, _amount); return true; } @@ -304,19 +455,6 @@ contract ElasticGovernanceToken is IElasticToken { emit Approval(_owner, _spender, _amount); } - function _balanceAt(address _account, uint256 _blockNumber) - internal - view - returns (Balance.Instance memory) - { - Token.Instance memory token = _getToken(); - TokenHolder.Instance memory tokenHolder = _getTokenHolder(_account); - Ecosystem.Instance memory ecosystem = _getEcosystem(); - Balance balanceStorage = Balance(ecosystem.balanceModelAddress); - - return balanceStorage.deserialize(_blockNumber, ecosystem, token, tokenHolder); - } - function _burn(address _account, uint256 _deltaT) internal { Token.Instance memory token = _getToken(); uint256 deltaLambda = ElasticMath.lambdaFromT(_deltaT, token.k, token.m); @@ -330,7 +468,9 @@ contract ElasticGovernanceToken is IElasticToken { TokenHolder.Instance memory tokenHolder = _getTokenHolder(_account); bool alreadyTokenHolder = tokenHolder.lambda > 0; - tokenHolder = _updateBalance(token, tokenHolder, false, _deltaLambda); + uint256 deltaT = ElasticMath.t(_deltaLambda, token.k, token.m); + + tokenHolder = _updateBalance(tokenHolder, false, _deltaLambda); token.lambda = SafeMath.sub(token.lambda, _deltaLambda); tokenStorage.serialize(token); @@ -338,6 +478,7 @@ contract ElasticGovernanceToken is IElasticToken { TokenHolder tokenHolderStorage = TokenHolder(ecosystem.tokenHolderModelAddress); tokenHolderStorage.serialize(tokenHolder); _updateNumberOfTokenHolders(alreadyTokenHolder, token, tokenHolder, tokenStorage); + emit Transfer(_account, address(0), deltaT); } function _mint(address _account, uint256 _deltaT) internal { @@ -355,7 +496,7 @@ contract ElasticGovernanceToken is IElasticToken { uint256 deltaT = ElasticMath.t(_deltaLambda, token.k, token.m); - tokenHolder = _updateBalance(token, tokenHolder, true, _deltaLambda); + tokenHolder = _updateBalance(tokenHolder, true, _deltaLambda); token.lambda = SafeMath.add(token.lambda, _deltaLambda); tokenStorage.serialize(token); @@ -372,6 +513,8 @@ contract ElasticGovernanceToken is IElasticToken { address _to, uint256 _deltaT ) internal { + require(_from != _to, 'ElasticDAO: Can not transfer to self'); + Ecosystem.Instance memory ecosystem = _getEcosystem(); Token tokenStorage = Token(ecosystem.tokenModelAddress); Token.Instance memory token = tokenStorage.deserialize(address(this), ecosystem); @@ -384,8 +527,8 @@ contract ElasticGovernanceToken is IElasticToken { uint256 deltaLambda = ElasticMath.lambdaFromT(_deltaT, token.k, token.m); uint256 deltaT = ElasticMath.t(deltaLambda, token.k, token.m); - fromTokenHolder = _updateBalance(token, fromTokenHolder, false, deltaLambda); - toTokenHolder = _updateBalance(token, toTokenHolder, true, deltaLambda); + fromTokenHolder = _updateBalance(fromTokenHolder, false, deltaLambda); + toTokenHolder = _updateBalance(toTokenHolder, true, deltaLambda); TokenHolder tokenHolderStorage = TokenHolder(ecosystem.tokenHolderModelAddress); tokenHolderStorage.serialize(fromTokenHolder); @@ -397,32 +540,16 @@ contract ElasticGovernanceToken is IElasticToken { } function _updateBalance( - Token.Instance memory _token, TokenHolder.Instance memory _tokenHolder, bool _isIncreasing, uint256 _deltaLambda - ) internal returns (TokenHolder.Instance memory) { - Ecosystem.Instance memory ecosystem = _getEcosystem(); - Balance.Instance memory balance; - balance.blockNumber = block.number; - balance.ecosystem = ecosystem; - balance.index = _tokenHolder.counter; - balance.k = _token.k; - balance.m = _token.m; - balance.token = _token; - balance.tokenHolder = _tokenHolder; - _tokenHolder.counter = SafeMath.add(_tokenHolder.counter, 1); - + ) internal pure returns (TokenHolder.Instance memory) { if (_isIncreasing) { _tokenHolder.lambda = SafeMath.add(_tokenHolder.lambda, _deltaLambda); } else { _tokenHolder.lambda = SafeMath.sub(_tokenHolder.lambda, _deltaLambda); } - balance.lambda = _tokenHolder.lambda; - - Balance(ecosystem.balanceModelAddress).serialize(balance); - return _tokenHolder; } @@ -443,6 +570,11 @@ contract ElasticGovernanceToken is IElasticToken { // Private Getters + function _getDAO() internal view returns (DAO.Instance memory) { + Ecosystem.Instance memory ecosystem = _getEcosystem(); + return DAO(ecosystem.daoModelAddress).deserialize(daoAddress, ecosystem); + } + function _getEcosystem() internal view returns (Ecosystem.Instance memory) { return Ecosystem(ecosystemModelAddress).deserialize(daoAddress); } diff --git a/test/0_init.js b/test/0_init.js new file mode 100644 index 0000000..aa0536f --- /dev/null +++ b/test/0_init.js @@ -0,0 +1,8 @@ +const { deployments } = require('hardhat'); + +describe('0_init_contracts_for_testing', () => { + // this is required to make solidity-coverage work + it('Should await fixtures to enable coverage tests', async () => { + await deployments.fixture(); + }); +}); diff --git a/test/CapitalDeltaTest.js b/test/CapitalDeltaTest.js deleted file mode 100644 index 7eca044..0000000 --- a/test/CapitalDeltaTest.js +++ /dev/null @@ -1,196 +0,0 @@ -const { deployments } = require('hardhat'); -const { expect } = require('chai'); -const BigNumber = require('bignumber.js'); -const ethers = require('ethers'); -const hre = require('hardhat').ethers; -const { ONE, ONE_HUNDRED, ONE_TENTH, TWO_HUNDREDTHS } = require('./constants'); -const elasticGovernanceTokenArtifact = require('../artifacts/src/tokens/ElasticGovernanceToken.sol/ElasticGovernanceToken.json'); - -describe('ElasticDAO: CapitalDelta value of a token', () => { - let agent; - let Ecosystem; - let ElasticDAO; - let elasticDAO; - let TokenModel; - let tokenModel; - let summoner; - let summoner1; - let summoner2; - - beforeEach(async () => { - [agent, summoner, summoner1, summoner2] = await hre.getSigners(); - await deployments.fixture(); - - // required contracts - Ecosystem = await deployments.get('Ecosystem'); - - const { deploy } = deployments; - await deployments.fixture(); - - TokenModel = await deployments.get('Token'); - tokenModel = new ethers.Contract(TokenModel.address, TokenModel.abi, summoner); - - // agent is the deployer - await deploy('ElasticDAO', { - from: agent.address, - args: [ - Ecosystem.address, - [summoner.address, summoner1.address, summoner2.address], - 'ElasticDAO', - 3, - ], - }); - - ElasticDAO = await deployments.get('ElasticDAO'); - elasticDAO = new ethers.Contract(ElasticDAO.address, ElasticDAO.abi, agent); - - await elasticDAO - .initializeToken( - 'Elastic Governance Token', - 'EGT', - ONE_TENTH, // eByl value - TWO_HUNDREDTHS, // elasticity - ONE_HUNDRED, // k - ethers.constants.WeiPerEther, // max lambda purchase - ) - .catch((error) => { - console.log(error); - }); - - // can use .connect method too - elasticDAO = new ethers.Contract(ElasticDAO.address, ElasticDAO.abi, summoner); - - await elasticDAO.seedSummoning({ - value: ONE, - }); - - await elasticDAO.summon(ONE_TENTH); - }); - - it('Should return a mismatch in the values of capital delta', async () => { - const ecosystem = await elasticDAO.getEcosystem(); - // summoner is sending, but here any random address would do too - - await summoner.sendTransaction({ - to: ElasticDAO.address, - value: ONE, - }); - - const tokenInstance = await tokenModel.deserialize(ecosystem.governanceTokenAddress, ecosystem); - - const tokenInstanceContract = new ethers.Contract( - tokenInstance.uuid, - elasticGovernanceTokenArtifact.abi, - summoner, - ); - - // get the eth balance of elasticDAO - const ethBalanceElasticDAO = await hre.provider.getBalance(elasticDAO.address); - - // get the T value of the token - const totalSupplyOfToken = await tokenInstanceContract.totalSupply(); - - // calculate capital Delta - const capitalDelta = BigNumber(ethBalanceElasticDAO.toString()).dividedBy( - totalSupplyOfToken.toString(), - ); - - // calculate deltaE using capital Delta to buy ONE_TENTH shares - // deltaE = capitalDelta * k * ( (lambdaDash*mDash*revamp) - (lambda*m) ) - const elasticity = BigNumber(tokenInstance.elasticity.toString()).dividedBy(10 ** 18); - const k = BigNumber(tokenInstance.k.toString()).dividedBy(10 ** 18); - const lambda = BigNumber(tokenInstance.lambda.toString()).dividedBy(10 ** 18); - const m = BigNumber(tokenInstance.m.toString()).dividedBy(10 ** 18); - const lambdaDash = lambda.plus(0.1); - const revamp = elasticity.plus(1); - const mDash = m.multipliedBy(lambdaDash.dividedBy(lambda)); - const a = lambdaDash.multipliedBy(mDash).multipliedBy(revamp); - const b = lambda.multipliedBy(m); - const c = a.minus(b); - const deltaE = capitalDelta.multipliedBy(k).multipliedBy(c); - - // send that value of deltaE to joinDAO to buy ONE_TENTH shares - const value = deltaE.multipliedBy(10 ** 18).toFixed(0); - const tx = elasticDAO.join(TWO_HUNDREDTHS, { - value, - }); - - // transaction reverts with 'ElasticDAO: Incorrect ETH amount' - await expect(tx).to.be.revertedWith('ElasticDAO: Incorrect ETH amount'); - }); - - it('Should return a match in the values of capital delta', async () => { - const ecosystem = await elasticDAO.getEcosystem(); - // summoner is sending, but here any random address would do too - - const tokenInstance = await tokenModel.deserialize(ecosystem.governanceTokenAddress, ecosystem); - - const tokenInstanceContract = new ethers.Contract( - tokenInstance.uuid, - elasticGovernanceTokenArtifact.abi, - summoner, - ); - - // get the eth balance of elasticDAO - const ethBalanceElasticDAOBeforeJoin = await hre.provider.getBalance(elasticDAO.address); - // get the T value of the token - const totalSupplyOfToken = await tokenInstanceContract.totalSupply(); - - // calculate capital Delta - const capitalDelta = BigNumber(ethBalanceElasticDAOBeforeJoin.toString()).dividedBy( - totalSupplyOfToken.toString(), - ); - - // calculate deltaE using capital Delta to buy ONE_TENTH shares - // deltaE = capitalDelta * k * ( (lambdaDash*mDash*revamp) - (lambda*m) ) - const elasticity = BigNumber(tokenInstance.elasticity.toString()).dividedBy(10 ** 18); - const k = BigNumber(tokenInstance.k.toString()).dividedBy(10 ** 18); - const lambda = BigNumber(tokenInstance.lambda.toString()).dividedBy(10 ** 18); - const m = BigNumber(tokenInstance.m.toString()).dividedBy(10 ** 18); - const lambdaDash = lambda.plus(0.1); - const revamp = elasticity.plus(1); - const mDash = m.multipliedBy(lambdaDash.dividedBy(lambda)); - const a = lambdaDash.multipliedBy(mDash).multipliedBy(revamp); - const b = lambda.multipliedBy(m); - const c = a.minus(b); - const deltaE = capitalDelta.multipliedBy(k).multipliedBy(c); - - // send that value of deltaE to joinDAO to buy ONE_TENTH shares - const value = deltaE.multipliedBy(10 ** 18).toFixed(0); - await elasticDAO.join(ONE_TENTH, { - value, - }); - - // post join check the following values: - // check the m value- after join,previous mDash should be current m - - const tokenInstanceAfterJoin = await tokenModel.deserialize( - ecosystem.governanceTokenAddress, - ecosystem, - ); - - const mAfterJoin = BigNumber(tokenInstanceAfterJoin.m.toString()) - .dividedBy(10 ** 18) - .toString(); - await expect(mAfterJoin).to.equal(mDash.dp(18).toString()); - - // check the lambda value- after join,previous lambdaDash should be current lambda - const lambdaAfterJoin = BigNumber(tokenInstanceAfterJoin.lambda.toString()).dividedBy(10 ** 18); - - await expect(lambdaAfterJoin.dp(18).toString()).to.equal(lambdaDash.dp(18).toString()); - - // check the the total eth - which should be initial eth, plus delta e - const ethBalanceElasticDAOAfterJoin = await hre.provider.getBalance(elasticDAO.address); - // const expectedEthInElasticDAOAfterJoin = deltaE.plus( - // BigNumber(ethBalanceElasticDAOBeforeJoin.toString()), - // ); - const expectedEthInElasticDAOAfterJoin = BigNumber( - BigNumber(ethBalanceElasticDAOBeforeJoin.toString()).dividedBy(10 ** 18), - ).plus(deltaE); - await expect( - BigNumber(ethBalanceElasticDAOAfterJoin.toString()) - .dividedBy(10 ** 18) - .toString(), - ).to.equal(expectedEthInElasticDAOAfterJoin.dp(18).toString()); - }); -}); diff --git a/test/ExitDaoTest.js b/test/ExitDaoTest.js deleted file mode 100644 index 134acf2..0000000 --- a/test/ExitDaoTest.js +++ /dev/null @@ -1,74 +0,0 @@ -const { expect } = require('chai'); -// const BigNumber = require('bignumber.js'); -const ethers = require('ethers'); -const hre = require('hardhat').ethers; - -const { provider } = hre; - -const SDK = require('@elastic-dao/sdk'); -const env = require('./env'); - -describe('ElasticDAO: exitDAO ', () => { - let agent; - let dao; - let sdk; - let summoner; - let summoner1; - let summoner2; - - beforeEach(async () => { - [agent, summoner, summoner1, summoner2] = await hre.getSigners(); - - // agent is the deployer - sdk = SDK({ - account: agent.address, - contract: ({ abi, address }) => new ethers.Contract(address, abi, agent), - env: await env(), - provider, - signer: agent, - }); - - dao = await sdk.elasticDAOFactory.deployDAOAndToken( - [summoner.address, summoner1.address, summoner2.address], - 'Elastic DAO', - 3, - 'Elastic Governance Token', - 'EGT', - 0.1, - 0.02, - 100, - 1, - ); - - sdk.account = summoner.address; - sdk.contract = ({ abi, address }) => new ethers.Contract(address, abi, summoner); - sdk.signer = summoner; - - // blocknumber 21 - await dao.elasticDAO.seedSummoning({ - value: 1, - }); - - // blocknumber 22 - await dao.elasticDAO.summon(0.1); - - // refresh - await dao.elasticDAO.getDAO(); - }); - - it('should allow to exit with 1 share and corresponding eth', async () => { - // summoner exits one share -> should have 9.1 shares and ( 1 * CapitalDelta ) eth - - const elasticGovernanceToken = await dao.elasticGovernanceToken; - const postSummonBalanceOf = await elasticGovernanceToken.balanceOf(summoner.address); - - expect(postSummonBalanceOf.toNumber()).to.equal(1010); - - // post exit dao - // blockNumber 23 - await dao.elasticDAO.exitDAO(1); - - const atExitBalanceRecord = await elasticGovernanceToken.balanceOf(summoner.address); - expect(atExitBalanceRecord.toNumber()).to.equal(910); - }); -}); diff --git a/test/capitalDeltaTest.js b/test/capitalDeltaTest.js new file mode 100644 index 0000000..49b9aa5 --- /dev/null +++ b/test/capitalDeltaTest.js @@ -0,0 +1,91 @@ +const { expect } = require('chai'); + +const { capitalDelta, deltaE, mDash } = require('@elastic-dao/sdk'); + +const { ONE } = require('./constants'); +const { ethBalance, signers, summonedDAO } = require('./helpers'); + +describe('ElasticDAO: CapitalDelta value of a token', () => { + let dao; + let token; + + it('Should return a mismatch in the values of capital delta', async () => { + dao = await summonedDAO(); + token = await dao.token(); + + const { agent } = await signers(); + + // get the eth balance of elasticDAO + const ethBalanceElasticDAO = await ethBalance(dao.uuid); + + // sending a random amount of new ETH to throw the numbers off + await agent.sendTransaction({ to: dao.uuid, value: ONE }); + + // get the T value of the token + const totalSupplyOfToken = await dao.elasticGovernanceToken.totalSupply(); + + // calculate capital Delta + const cDelta = capitalDelta(ethBalanceElasticDAO, totalSupplyOfToken); + + // calculate deltaE using capital Delta to buy ONE_TENTH shares + // deltaE = capitalDelta * k * ( (lambdaDash*mDash*revamp) - (lambda*m) ) + const dE = deltaE( + token.maxLambdaPurchase, + cDelta, + token.k, + token.elasticity, + token.lambda, + token.m, + ); + + // send that value of deltaE to joinDAO to buy ONE_TENTH shares + const tx = dao.elasticDAO.join({ value: dE }); + + // transaction reverts with 'ElasticDAO: Incorrect ETH amount' + await expect(tx).to.be.revertedWith('ElasticDAO: Incorrect ETH amount'); + }); + + it('Should return a match in the values of capital delta', async () => { + dao = await summonedDAO(); + token = await dao.token(); + // get the eth balance of elasticDAO + const ethBalanceElasticDAOBeforeJoin = await ethBalance(dao.uuid); + + // get the T value of the token + const totalSupplyOfToken = await dao.elasticGovernanceToken.totalSupply(); + + // calculate capital Delta + const cDelta = capitalDelta(ethBalanceElasticDAOBeforeJoin, totalSupplyOfToken); + + // calculate deltaE using capital Delta to buy ONE_TENTH shares + // deltaE = capitalDelta * k * ( (lambdaDash*mDash*revamp) - (lambda*m) ) + const lambdaDash = token.lambda.plus(token.maxLambdaPurchase); + const dE = deltaE( + token.maxLambdaPurchase, + cDelta, + token.k, + token.elasticity, + token.lambda, + token.m, + ); + + const mD = mDash(lambdaDash, token.lambda, token.m); + + // send that value of deltaE to joinDAO to buy ONE share + await dao.elasticDAO.join({ value: dE }); + await token.refresh(); + + // post join check the following values: + // check the m value- after join,previous mDash should be current m + await expect(token.m.toString()).to.equal(mD.toString()); + await expect(token.lambda.toString()).to.equal(lambdaDash.toString()); + + // check the the total eth - which should be initial eth, plus delta e + const ethBalanceElasticDAOAfterJoin = await ethBalance(dao.uuid); + + const expectedEthInElasticDAOAfterJoin = ethBalanceElasticDAOBeforeJoin.plus(dE); + await expect(ethBalanceElasticDAOAfterJoin.toString()).to.equal( + expectedEthInElasticDAOAfterJoin.toString(), + ); + }); +}); diff --git a/test/ecosystemTests.js b/test/ecosystemTests.js index 480c84c..822798c 100644 --- a/test/ecosystemTests.js +++ b/test/ecosystemTests.js @@ -5,47 +5,29 @@ const { deployments } = require('hardhat'); describe('ElasticDAO: Ecosystem Model', () => { let agent; - let Balance; - let BalanceMultipliers; - let Configurator; - let Dao; let Ecosystem; let ecosystemStorage; - let ElasticModule; - let Registrator; - let TokenHolder; - let Token; beforeEach(async () => { [agent] = await hre.getSigners(); - await deployments.fixture(); - // setup needed contracts - Balance = await deployments.get('Balance'); - BalanceMultipliers = await deployments.get('BalanceMultipliers'); - Configurator = await deployments.get('Configurator'); - Dao = await deployments.get('DAO'); Ecosystem = await deployments.get('Ecosystem'); ecosystemStorage = new ethers.Contract(Ecosystem.address, Ecosystem.abi, agent); - ElasticModule = await deployments.get('ElasticModule'); - Registrator = await deployments.get('Registrator'); - TokenHolder = await deployments.get('TokenHolder'); - Token = await deployments.get('Token'); }); it('Should look up and return ecosystem instance record by uuid address', async () => { + const DAO = await deployments.get('DAO'); + const ElasticGovernanceToken = await deployments.get('ElasticGovernanceToken'); + const TokenHolder = await deployments.get('TokenHolder'); + const Token = await deployments.get('Token'); + const record = await ecosystemStorage.deserialize(ethers.constants.AddressZero); - expect(record.balanceModelAddress).to.equal(Balance.address); - expect(record.balanceMultipliersModelAddress).to.equal(BalanceMultipliers.address); - expect(record.configuratorAddress).to.equal(Configurator.address); expect(record.daoAddress).to.equal(ethers.constants.AddressZero); - expect(record.daoModelAddress).to.equal(Dao.address); + expect(record.daoModelAddress).to.equal(DAO.address); expect(record.ecosystemModelAddress).to.equal(Ecosystem.address); - expect(record.elasticModuleModelAddress).to.equal(ElasticModule.address); - expect(record.governanceTokenAddress).to.equal(ethers.constants.AddressZero); - expect(record.registratorAddress).to.equal(Registrator.address); + expect(record.governanceTokenAddress).to.equal(ElasticGovernanceToken.address); expect(record.tokenHolderModelAddress).to.equal(TokenHolder.address); expect(record.tokenModelAddress).to.equal(Token.address); }); diff --git a/test/elasticDAOFactoryTest.js b/test/elasticDAOFactoryTest.js index 5bea200..62d3eee 100644 --- a/test/elasticDAOFactoryTest.js +++ b/test/elasticDAOFactoryTest.js @@ -1,42 +1,177 @@ +const { deployments } = require('hardhat'); +const { ethers } = require('ethers'); const { expect } = require('chai'); -const ethers = require('ethers'); -const hre = require('hardhat').ethers; -const SDK = require('@elastic-dao/sdk'); -const { ONE, ONE_HUNDRED, ONE_TENTH, TWO_HUNDREDTHS } = require('./constants'); -const env = require('./env'); +const { newDAO, SDK, signers, summoners } = require('./helpers'); describe('ElasticDAO: Factory', () => { - let agent; - let summoner; - let summoner1; - let summoner2; + let sdk; + + beforeEach(async () => { + sdk = await SDK(); + }); it('Should allow a DAO to be deployed using the factory', async () => { - [agent, summoner, summoner1, summoner2] = await hre.getSigners(); - const { provider } = hre; - - const sdk = SDK({ - account: agent.address, - contract: ({ abi, address }) => new ethers.Contract(address, abi, agent), - env: await env(), - provider, - signer: agent, + const dao = await newDAO(); + const token = await dao.token(); + + expect(token.symbol).to.equal('EGT'); + expect(dao.ecosystem.governanceTokenAddress).to.not.equal(ethers.constants.AddressZero); + }); + + it('Should allow the fee to be updated by the manager', async () => { + const { agent } = await signers(); + + sdk.changeSigner(agent); + + const originalFee = await sdk.elasticDAOFactory.contract.fee(); + const newFee = sdk.elasticDAOFactory.toEthersBigNumber(1, 18); + const tx = await sdk.elasticDAOFactory.contract.updateFee(newFee); + const logs = await tx.wait(1); + + expect(logs.events[0].event).to.equal('FeeUpdated'); + expect(logs.events[0].args.amount.toString()).to.equal(newFee.toString()); + + await sdk.elasticDAOFactory.contract.updateFee(originalFee); + }); + + it('Should not allow the fee to be updated by a non-manager', async () => { + const { summoner2 } = await signers(); + + sdk.changeSigner(summoner2); + + await expect(sdk.elasticDAOFactory.contract.updateFee(0)).to.be.revertedWith( + 'ElasticDAO: Only manager', + ); + }); + + it('Should not allow the DAO to be deployed without the correct fee', async () => { + const { agent } = await signers(); + + sdk.changeSigner(agent); + + await expect( + sdk.elasticDAOFactory.contract.deployDAOAndToken( + await summoners(), + 'Elastic DAO', + 'Elastic Governance Token', + 'EGT', + sdk.elasticDAOFactory.toEthersBigNumber(0.1, 18), + sdk.elasticDAOFactory.toEthersBigNumber(0.02, 18), + sdk.elasticDAOFactory.toEthersBigNumber(100, 18), + sdk.elasticDAOFactory.toEthersBigNumber(1, 18), + sdk.elasticDAOFactory.toEthersBigNumber(1, 18), + { value: 0 }, + ), + ).to.be.revertedWith('ElasticDAO: A fee is required to deploy a DAO'); + }); + + it('Should updateElasticDAOImplementationAddress', async () => { + const { agent } = await signers(); + + const elasticDAO = await deployments.deploy('ElasticDAO', { + from: agent.address, + args: [], + }); + + sdk.changeSigner(agent); + + const tx = await sdk.elasticDAOFactory.contract.updateElasticDAOImplementationAddress( + elasticDAO.address, + ); + + const logs = await tx.wait(1); + + expect(logs.events[0].event).to.equal('ElasticDAOImplementationAddressUpdated'); + expect(logs.events[0].args.elasticDAOImplementationAddress).to.equal(elasticDAO.address); + }); + + it('Should not updateElasticDAOImplementationAddress when caller is not the manager', async () => { + const { agent, summoner2 } = await signers(); + + const elasticDAO = await deployments.deploy('ElasticDAO', { + from: agent.address, + args: [], }); - const dao = await sdk.elasticDAOFactory.deployDAOAndToken( - [summoner.address, summoner1.address, summoner2.address], - 'Elastic DAO', - 3, - 'Elastic Governance Token', - 'EGT', - ONE_TENTH, - TWO_HUNDREDTHS, - ONE_HUNDRED, - ONE, + sdk.changeSigner(summoner2); + + await expect( + sdk.elasticDAOFactory.contract.updateElasticDAOImplementationAddress(elasticDAO.address), + ).to.be.revertedWith('ElasticDAO: Only manager'); + }); + + it('Should not updateFeeAddress when caller is not the manager', async () => { + const { summoner2 } = await signers(); + + sdk.changeSigner(summoner2); + + await expect( + sdk.elasticDAOFactory.contract.updateFeeAddress(summoner2.address), + ).to.be.revertedWith('ElasticDAO: Only manager'); + }); + + it('Should updateManager', async () => { + const { agent, summoner2 } = await signers(); + + sdk.changeSigner(agent); + + const tx = await sdk.elasticDAOFactory.contract.updateManager(summoner2.address); + const logs = await tx.wait(1); + + expect(logs.events[0].event).to.equal('ManagerUpdated'); + expect(logs.events[0].args.newManager).to.equal(summoner2.address); + + sdk.changeSigner(summoner2); + + await sdk.elasticDAOFactory.contract.updateManager(agent.address); + }); + + it('Should not updateManager when caller is not the manager', async () => { + const { summoner2 } = await signers(); + + sdk.changeSigner(summoner2); + + await expect( + sdk.elasticDAOFactory.contract.updateManager(summoner2.address), + ).to.be.revertedWith('ElasticDAO: Only manager'); + }); + + it('Should not collect fees to the feeAddress if feeAddress is not set', async () => { + const { agent } = await signers(); + + sdk.changeSigner(agent); + await expect(sdk.elasticDAOFactory.collectFees()).to.be.revertedWith( + 'ElasticDAO: No feeAddress set', ); + }); + + it('Should updateFeeAddress', async () => { + const { agent, summoner2 } = await signers(); + + sdk.changeSigner(agent); + + const tx = await sdk.elasticDAOFactory.contract.updateFeeAddress(summoner2.address); + const logs = await tx.wait(1); + + expect(logs.events[0].event).to.equal('FeeAddressUpdated'); + expect(logs.events[0].args.feeReceiver).to.equal(summoner2.address); + }); + + it('Should collect fees to the feeAddress', async () => { + const { agent } = await signers(); + + sdk.changeSigner(agent); + + await sdk.elasticDAOFactory.contract.updateFeeAddress(agent.address); + + const feeAmountToCollect = await agent.provider.getBalance(sdk.elasticDAOFactory.address); + + const tx = await sdk.elasticDAOFactory.collectFees(); + const logs = await tx.wait(1); - expect(dao.uuid).to.not.equal(undefined); - expect(dao.ecosystem.governanceTokenAddress).to.not.equal(undefined); + expect(logs.events[0].event).to.equal('FeesCollected'); + expect(logs.events[0].args.feeAddress).to.equal(agent.address); + expect(logs.events[0].args.amount).to.equal(feeAmountToCollect); }); }); diff --git a/test/elasticDAOTests.js b/test/elasticDAOTests.js index 3fa7f77..21f18ca 100644 --- a/test/elasticDAOTests.js +++ b/test/elasticDAOTests.js @@ -1,264 +1,469 @@ const { expect } = require('chai'); -const ethers = require('ethers'); -const hre = require('hardhat').ethers; +const { ethers } = require('ethers'); +const { capitalDelta, deltaE, mDash } = require('@elastic-dao/sdk'); const { deployments } = require('hardhat'); -const elasticGovernanceTokenArtifact = require('../artifacts/src/tokens/ElasticGovernanceToken.sol/ElasticGovernanceToken.json'); -const { - ONE_HUNDRED, - ONE_TENTH, - ONE_THOUSAND_ONE_HUNDRED, - TEN, - ONE_THOUSAND, - TWO_HUNDREDTHS, -} = require('./constants'); +const hre = require('hardhat').ethers; +const { ethBalance, SDK, signers, summoners, summonedDAO } = require('./helpers'); describe('ElasticDAO: Core', () => { - let agent; - let Ecosystem; - let elasticDAO; - let ElasticDAO; - let summoner; - let summoner1; - let summoner2; - let Token; - let tokenStorage; - - beforeEach(async () => { - [agent, summoner, summoner1, summoner2] = await hre.getSigners(); - - await deployments.fixture(); - - // setup needed contracts - Ecosystem = await deployments.get('Ecosystem'); - Token = await deployments.get('Token'); - - const { deploy } = deployments; - - await deploy('ElasticDAO', { - from: agent.address, - args: [ - Ecosystem.address, - [summoner.address, summoner1.address, summoner2.address], + let dao; + + describe('before initialize', () => { + it('should revert if ecosystem model address is 0', async () => { + const sdk = await SDK(); + const { summoner1 } = await signers(); + + const args = [ + ethers.constants.AddressZero, + summoner1.address, + await summoners(), 'ElasticDAO', - 3, - ], + sdk.elasticDAOFactory.toEthersBigNumber(1, 18), + ]; + + const ElasticDAO = await hre.getContractFactory('ElasticDAO'); + const elasticDAO = await ElasticDAO.deploy(); + + await expect(elasticDAO.initialize(...args)).to.be.revertedWith('ElasticDAO: Address Zero'); }); - ElasticDAO = await deployments.get('ElasticDAO'); + it('should revert if controller address is 0', async () => { + const sdk = await SDK(); + + const Ecosystem = await deployments.get('Ecosystem'); + + const args = [ + Ecosystem.address, + ethers.constants.AddressZero, + await summoners(), + 'ElasticDAO', + sdk.elasticDAOFactory.toEthersBigNumber(1, 18), + ]; + + const ElasticDAO = await hre.getContractFactory('ElasticDAO'); + const elasticDAO = await ElasticDAO.deploy(); + + await expect(elasticDAO.initialize(...args)).to.be.revertedWith('ElasticDAO: Address Zero'); + }); }); - it('Should allow a token to be initialized', async () => { - elasticDAO = new ethers.Contract(ElasticDAO.address, ElasticDAO.abi, agent); + describe('before summoning', () => { + let sdk; + + beforeEach(async () => { + sdk = await SDK(); + const { summoner1 } = await signers(); + + const Ecosystem = await deployments.get('Ecosystem'); + + const args = [ + Ecosystem.address, + summoner1.address, + await summoners(), + 'ElasticDAO', + sdk.elasticDAOFactory.toEthersBigNumber(1, 18), + ]; + + const ElasticDAO = await hre.getContractFactory('ElasticDAO'); + const elasticDAO = await ElasticDAO.deploy(); + await elasticDAO.initialize(...args); + + dao = await sdk.models.DAO.deserialize(elasticDAO.address); + }); + + it('Should see that the model exists', async () => { + expect(await sdk.models.DAO.exists(dao.uuid)).to.equal(true); + }); - await elasticDAO - .initializeToken( + it('Should allow a token to be initialized', async () => { + await dao.elasticDAO.contract.initializeToken( 'Elastic Governance Token', 'EGT', - ONE_TENTH, - TWO_HUNDREDTHS, - ONE_HUNDRED, + dao.toEthersBigNumber(0.1, 18), + dao.toEthersBigNumber(0.02, 18), + dao.toEthersBigNumber(100, 18), ethers.constants.WeiPerEther, - ) - .catch((error) => { - console.log(error); - }); + ); - const ecosystem = await elasticDAO.getEcosystem(); + await dao.ecosystem.refresh(); - expect(ecosystem.governanceTokenAddress).to.not.equal(ethers.constants.AddressZero); - }); + expect(dao.ecosystem.governanceTokenAddress).to.not.equal(ethers.constants.AddressZero); + }); - it('Should not allow a token to be initialized if not the deployer', async () => { - elasticDAO = new ethers.Contract(ElasticDAO.address, ElasticDAO.abi, summoner); + it('Should not allow a token to be initialized if not the deployer', async () => { + const { summoner1 } = await signers(); + dao.sdk.changeSigner(summoner1); + + await expect( + dao.elasticDAO.contract.initializeToken( + 'Elastic Governance Token', + 'EGT', + dao.toEthersBigNumber(0.1, 18), + dao.toEthersBigNumber(0.02, 18), + dao.toEthersBigNumber(100, 18), + ethers.constants.WeiPerEther, + ), + ).to.be.revertedWith('ElasticDAO: Only deployer'); + }); - await expect( - elasticDAO.initializeToken( + it('Should not allow the DAO to be summoned before it has been seeded', async () => { + await dao.elasticDAO.contract.initializeToken( 'Elastic Governance Token', 'EGT', - ONE_TENTH, - TWO_HUNDREDTHS, - ONE_HUNDRED, + dao.toEthersBigNumber(0.1, 18), + dao.toEthersBigNumber(0.02, 18), + dao.toEthersBigNumber(100, 18), ethers.constants.WeiPerEther, - ), - ).to.be.revertedWith('ElasticDAO: Only deployer can initialize the Token'); - }); + ); - it('Should not allow the DAO to be summoned before it has been seeded', async () => { - elasticDAO = new ethers.Contract(ElasticDAO.address, ElasticDAO.abi, agent); + const { summoner1 } = await signers(); + dao.sdk.changeSigner(summoner1); + const token = await dao.token(); - await elasticDAO.initializeToken( - 'Elastic Governance Token', - 'EGT', - ONE_TENTH, - TWO_HUNDREDTHS, - ONE_HUNDRED, - ethers.constants.WeiPerEther, - ); + await expect( + dao.elasticDAO.contract.summon(dao.toEthersBigNumber(token.maxLambdaPurchase, 18)), + ).to.be.revertedWith('ElasticDAO: Please seed DAO with ETH to set ETH:EGT ratio'); + }); - elasticDAO = new ethers.Contract(ElasticDAO.address, ElasticDAO.abi, summoner); + it('Should allow summoners to seed', async () => { + await dao.elasticDAO.contract.initializeToken( + 'Elastic Governance Token', + 'EGT', + dao.toEthersBigNumber(0.1, 18), + dao.toEthersBigNumber(0.02, 18), + dao.toEthersBigNumber(100, 18), + ethers.constants.WeiPerEther, // lambda + ); + + const { summoner1 } = await signers(); + dao.sdk.changeSigner(summoner1); + dao = await dao.refresh(); + await dao.elasticDAO.seedSummoning({ value: 1 }); + const balance = await ethBalance(dao.uuid); + expect(balance.toNumber()).to.equal(1); + /// signers token balance is correct + + const summoner1Balance = await dao.elasticGovernanceToken.balanceOf(summoner1.address); + const summoner1Shares = await dao.elasticGovernanceToken.balanceOfInShares(summoner1.address); + expect(summoner1Balance.toNumber()).to.equal(1000); + expect(summoner1Shares.toNumber()).to.equal(10); + + /// get balance after a block + await hre.provider.send('evm_mine'); + const newBalance = await dao.elasticGovernanceToken.balanceOf(summoner1.address); + expect(newBalance.toNumber()).to.equal(1000); + }); - tokenStorage = new ethers.Contract(Token.address, Token.abi, summoner); - const ecosystem = await elasticDAO.getEcosystem(); - const token = await tokenStorage.deserialize(ecosystem.governanceTokenAddress, ecosystem); + it('Should not allow summoners to seed before token has been initialized', async () => { + const { summoner1 } = await signers(); + dao.sdk.changeSigner(summoner1); - await expect(elasticDAO.summon(token.maxLambdaPurchase)).to.be.revertedWith( - 'ElasticDAO: Please seed DAO with ETH to set ETH:EGT ratio', - ); - }); + await expect( + dao.elasticDAO.contract.seedSummoning({ value: ethers.constants.WeiPerEther }), + ).to.be.revertedWith('ElasticDAO: Please call initializeToken first'); + }); - it('Should allow summoners to seed', async () => { - elasticDAO = new ethers.Contract(ElasticDAO.address, ElasticDAO.abi, agent); + it('Should not allow non summoners to seed', async () => { + await dao.elasticDAO.contract.initializeToken( + 'Elastic Governance Token', + 'EGT', + dao.toEthersBigNumber(0.1, 18), + dao.toEthersBigNumber(0.02, 18), + dao.toEthersBigNumber(100, 18), + ethers.constants.WeiPerEther, // lambda + ); + + await expect( + dao.elasticDAO.contract.seedSummoning({ value: ethers.constants.WeiPerEther }), + ).to.be.revertedWith('ElasticDAO: Only summoners'); + }); - await elasticDAO.initializeToken( - 'Elastic Governance Token', - 'EGT', - ONE_TENTH, // capitalDelta - TWO_HUNDREDTHS, // elasticity - ONE_HUNDRED, // k - ethers.constants.WeiPerEther, // lambda - ); + it('Should not allow the DAO to be summoned by a non-summoner', async () => { + await dao.elasticDAO.contract.initializeToken( + 'Elastic Governance Token', + 'EGT', + dao.toEthersBigNumber(0.1, 18), + dao.toEthersBigNumber(0.02, 18), + dao.toEthersBigNumber(100, 18), + ethers.constants.WeiPerEther, + ); - elasticDAO = new ethers.Contract(ElasticDAO.address, ElasticDAO.abi, summoner); + const { agent, summoner1 } = await signers(); + dao.sdk.changeSigner(summoner1); - const ecosystem = await elasticDAO.getEcosystem(); + await dao.elasticDAO.seedSummoning({ value: 1 }); - const tokenContract = new ethers.Contract( - ecosystem.governanceTokenAddress, - elasticGovernanceTokenArtifact.abi, - hre.provider, - ); + dao.sdk.changeSigner(agent); - await elasticDAO.seedSummoning({ value: ethers.constants.WeiPerEther }); + await expect(dao.elasticDAO.summon(1)).to.be.revertedWith('ElasticDAO: Only summoners'); + }); - const balance = await hre.provider.getBalance(ElasticDAO.address); - expect(balance).to.equal(ethers.constants.WeiPerEther); - /// signers token balance is correct + it('Should allow the DAO to be summoned after it has been seeded', async () => { + await dao.elasticDAO.contract.initializeToken( + 'Elastic Governance Token', + 'EGT', + dao.toEthersBigNumber(0.1, 18), + dao.toEthersBigNumber(0.02, 18), + dao.toEthersBigNumber(100, 18), + ethers.constants.WeiPerEther, + ); - expect(await tokenContract.balanceOfInShares(summoner.address)).to.equal(TEN); - expect(await tokenContract.balanceOf(summoner.address)).to.equal(ONE_THOUSAND); - /// get balance at block - await hre.provider.send('evm_mine'); - const blockNumber = await hre.provider.getBlockNumber(); - await tokenContract.balanceOfAt(summoner.address, blockNumber); + const { summoner1, summoner2, summoner3 } = await signers(); + dao.sdk.changeSigner(summoner1); - expect(await tokenContract.balanceOfAt(summoner.address, blockNumber)).to.equal(ONE_THOUSAND); - }); + await dao.elasticDAO.seedSummoning({ value: 1 }); + await dao.elasticDAO.summon(1); - it('Should not allow summoners to seed before token has been initialized', async () => { - elasticDAO = new ethers.Contract(ElasticDAO.address, ElasticDAO.abi, summoner); + expect(dao.summoned).to.equal(true); - await expect( - elasticDAO.seedSummoning({ value: ethers.constants.WeiPerEther }), - ).to.be.revertedWith('ElasticDAO: Please call initializeToken first'); - }); + const summoner1balance = await dao.elasticGovernanceToken.balanceOf(summoner1.address); + const summoner2balance = await dao.elasticGovernanceToken.balanceOf(summoner2.address); + const summoner3balance = await dao.elasticGovernanceToken.balanceOf(summoner3.address); - it('Should not allow non summoners to seed', async () => { - elasticDAO = new ethers.Contract(ElasticDAO.address, ElasticDAO.abi, agent); - - await elasticDAO.initializeToken( - 'Elastic Governance Token', - 'EGT', - ONE_TENTH, // capitalDelta - TWO_HUNDREDTHS, // elasticity - ONE_HUNDRED, // k - ethers.constants.WeiPerEther, // lambda - ); - - await expect( - elasticDAO.seedSummoning({ value: ethers.constants.WeiPerEther }), - ).to.be.revertedWith('ElasticDAO: Only summoners'); - }); + expect(summoner1balance.toNumber()).to.equal(1100); + expect(summoner2balance.toNumber()).to.equal(100); + expect(summoner3balance.toNumber()).to.equal(100); + }); - it('Should not allow the DAO to be summoned by a non-summoner', async () => { - elasticDAO = new ethers.Contract(ElasticDAO.address, ElasticDAO.abi, agent); - const elasticDAOSummoner = new ethers.Contract(ElasticDAO.address, ElasticDAO.abi, summoner); + it('Should not allow the DAO to be summoned if summoner address is zero address', async () => { + const { agent } = await signers(); + + sdk.changeSigner(agent); + + await expect( + sdk.elasticDAOFactory.contract.deployDAOAndToken( + [ethers.constants.AddressZero], + 'Elastic DAO', + 'Elastic Governance Token', + 'EGT', + sdk.elasticDAOFactory.toEthersBigNumber(0.1, 18), + sdk.elasticDAOFactory.toEthersBigNumber(0.02, 18), + sdk.elasticDAOFactory.toEthersBigNumber(100, 18), + sdk.elasticDAOFactory.toEthersBigNumber(1, 18), + sdk.elasticDAOFactory.toEthersBigNumber(1, 18), + { value: sdk.elasticDAOFactory.toEthersBigNumber(0.25, 18) }, + ), + ).to.be.revertedWith('ElasticDAO: Summoner address can not be zero address'); + }); - await elasticDAO.initializeToken( - 'Elastic Governance Token', - 'EGT', - ONE_TENTH, - TWO_HUNDREDTHS, - ONE_HUNDRED, - ethers.constants.WeiPerEther, - ); + it('Should getDAO', async () => { + const getDAO = await dao.elasticDAO.contract.getDAO(); - tokenStorage = new ethers.Contract(Token.address, Token.abi, summoner); - const ecosystem = await elasticDAO.getEcosystem(); - const token = await tokenStorage.deserialize(ecosystem.governanceTokenAddress, ecosystem); + expect(getDAO.uuid.toLowerCase()).to.equal(dao.id); + }); - await elasticDAOSummoner.seedSummoning({ value: ethers.constants.WeiPerEther }); + it('Should getEcosystem', async () => { + const getEcosystem = await dao.elasticDAO.contract.getEcosystem(); - await expect(elasticDAO.summon(token.maxLambdaPurchase)).to.be.revertedWith( - 'ElasticDAO: Only summoners', - ); + expect(getEcosystem.daoAddress.toLowerCase()).to.equal(dao.id); + }); }); - it('Should allow the DAO to be summoned after it has been seeded', async () => { - elasticDAO = new ethers.Contract(ElasticDAO.address, ElasticDAO.abi, agent); - - await elasticDAO.initializeToken( - 'Elastic Governance Token', - 'EGT', - ONE_TENTH, - TWO_HUNDREDTHS, - ONE_HUNDRED, - ethers.constants.WeiPerEther, - ); - - elasticDAO = new ethers.Contract(ElasticDAO.address, ElasticDAO.abi, summoner); - tokenStorage = new ethers.Contract(Token.address, Token.abi, summoner); - const ecosystem = await elasticDAO.getEcosystem(); - const token = await tokenStorage.deserialize(ecosystem.governanceTokenAddress, ecosystem); - - await elasticDAO.seedSummoning({ value: ethers.constants.WeiPerEther }); - await elasticDAO.summon(token.maxLambdaPurchase); - - const dao = await elasticDAO.getDAO(); - expect(dao.summoned).to.equal(true); - - const tokenContract = new ethers.Contract( - ecosystem.governanceTokenAddress, - elasticGovernanceTokenArtifact.abi, - hre.provider, - ); - const summoner0balance = await tokenContract.balanceOf(summoner.address); - const summoner1balance = await tokenContract.balanceOf(summoner1.address); - const summoner2balance = await tokenContract.balanceOf(summoner2.address); - - expect(summoner0balance).to.equal(ONE_THOUSAND_ONE_HUNDRED); - expect(summoner1balance).to.equal(ONE_HUNDRED); - expect(summoner2balance).to.equal(ONE_HUNDRED); - }); + describe('after summoning', () => { + beforeEach(async () => { + dao = await summonedDAO(); + }); - it('Should not allow a token to be initialized after summoning', async () => { - elasticDAO = new ethers.Contract(ElasticDAO.address, ElasticDAO.abi, agent); + it('Should not allow a token to be initialized after summoning', async () => { + await expect( + dao.elasticDAO.contract.initializeToken( + 'Elastic Governance Token', + 'EGT', + dao.toEthersBigNumber(0.1, 18), + dao.toEthersBigNumber(0.02, 18), + dao.toEthersBigNumber(100, 18), + ethers.constants.WeiPerEther, + ), + ).to.be.revertedWith('ElasticDAO: DAO must not be summoned'); + }); - await elasticDAO.initializeToken( - 'Elastic Governance Token', - 'EGT', - ONE_TENTH, - TWO_HUNDREDTHS, - ONE_HUNDRED, - ethers.constants.WeiPerEther, - ); + it('Should not allow the caller to setController if not controller', async () => { + const { summoner1 } = await signers(); + dao.sdk.changeSigner(summoner1); - elasticDAO = new ethers.Contract(ElasticDAO.address, ElasticDAO.abi, summoner); - tokenStorage = new ethers.Contract(Token.address, Token.abi, summoner); - const ecosystem = await elasticDAO.getEcosystem(); - const token = await tokenStorage.deserialize(ecosystem.governanceTokenAddress, ecosystem); + await expect(dao.elasticDAO.contract.setController(summoner1.address)).to.be.revertedWith( + 'ElasticDAO: Only controller', + ); + }); - await elasticDAO.seedSummoning({ value: ethers.constants.WeiPerEther }); - await elasticDAO.summon(token.maxLambdaPurchase); + it('Should allow the controller to setController', async () => { + const { summoner1, agent } = await signers(); + dao.sdk.changeSigner(agent); - await expect( - elasticDAO.initializeToken( - 'Elastic Governance Token', - 'EGT', - ONE_TENTH, - TWO_HUNDREDTHS, - ONE_HUNDRED, - ethers.constants.WeiPerEther, - ), - ).to.be.revertedWith('ElasticDAO: DAO must not be summoned'); + await dao.elasticDAO.contract.setController(summoner1.address); + + const controller = await dao.elasticDAO.getController(); + expect(controller).to.equal(summoner1.address); + }); + + it('Should allow the controller to setMaxVotingLambda', async () => { + const { agent } = await signers(); + dao.sdk.changeSigner(agent); + + await dao.elasticDAO.contract.setMaxVotingLambda(dao.toEthersBigNumber(5, 18)); + + await dao.refresh(); + expect(dao.maxVotingLambda.toNumber()).to.equal(5); + }); + + it('Should not allow the caller to setMaxVotingLambda if not controller', async () => { + const { summoner1 } = await signers(); + dao.sdk.changeSigner(summoner1); + + await expect( + dao.elasticDAO.contract.setMaxVotingLambda(dao.toEthersBigNumber(5, 18)), + ).to.be.revertedWith('ElasticDAO: Only controller'); + }); + + it('Should allow to exit with 1 share and corresponding eth', async () => { + const { summoner1 } = await signers(); + + const postSummonBalanceOf = await dao.elasticGovernanceToken.balanceOf(summoner1.address); + + expect(postSummonBalanceOf.toNumber()).to.equal(1010); + + await dao.elasticDAO.exit(1); + + const atExitBalanceRecord = await dao.elasticGovernanceToken.balanceOf(summoner1.address); + expect(atExitBalanceRecord.toNumber()).to.equal(910); + }); + + it('Should not allow exit with too many shares', async () => { + const totalShares = await dao.elasticGovernanceToken.totalSupplyInShares(); + await expect(dao.elasticDAO.exit(totalShares + 1)).to.be.revertedWith( + 'SafeMath: subtraction overflow', + ); + }); + + it('Should allow multiple addresses to be rewarded', async () => { + const { agent } = await signers(); + const addresses = await summoners(); + const amount = 0.1; + const rewards = addresses.map(() => dao.elasticDAO.toEthersBigNumber(amount, 18)); + + const balances = await Promise.all( + addresses.map((address) => dao.elasticGovernanceToken.balanceOfInShares(address)), + ); + const expectedBalances = balances.map((balance) => balance.plus(amount).toNumber()); + + dao.sdk.changeSigner(agent); + + await dao.elasticDAO.contract.reward(addresses, rewards); + + const newBalances = await Promise.all( + addresses.map(async (address) => { + const balance = await dao.elasticGovernanceToken.balanceOfInShares(address); + return balance.toNumber(); + }), + ); + + for (let i = 0; i < expectedBalances.length; i += 1) { + expect(expectedBalances[i]).to.equal(newBalances[i]); + } + }); + + it('Should allow multiple addresses to be penalized', async () => { + const { agent } = await signers(); + const addresses = await summoners(); + const amount = 0.01; + const penalties = addresses.map(() => dao.elasticDAO.toEthersBigNumber(amount, 18)); + + const balances = await Promise.all( + addresses.map((address) => dao.elasticGovernanceToken.balanceOfInShares(address)), + ); + const expectedBalances = balances.map((balance) => balance.minus(amount).toNumber()); + + dao.sdk.changeSigner(agent); + + await dao.elasticDAO.contract.penalize(addresses, penalties); + + const newBalances = await Promise.all( + addresses.map(async (address) => { + const balance = await dao.elasticGovernanceToken.balanceOfInShares(address); + return balance.toNumber(); + }), + ); + + for (let i = 0; i < expectedBalances.length; i += 1) { + expect(expectedBalances[i]).to.equal(newBalances[i]); + } + }); + + it('Should allow multiple addresses to be penalized even if one tries to front run', async () => { + const { agent } = await signers(); + const addresses = await summoners(); + const amount = 0.01; + const penalties = addresses.map(() => dao.elasticDAO.toEthersBigNumber(amount, 18)); + + const balances = await Promise.all( + addresses.map((address) => dao.elasticGovernanceToken.balanceOfInShares(address)), + ); + const expectedBalances = balances.map((balance) => balance.minus(amount).toNumber()); + + // attempt to front run the penalty + await dao.elasticDAO.exit(10.09); + + dao.sdk.changeSigner(agent); + await dao.elasticDAO.contract.penalize(addresses, penalties); + + const newBalances = await Promise.all( + addresses.map(async (address) => { + const balance = await dao.elasticGovernanceToken.balanceOfInShares(address); + return balance.toNumber(); + }), + ); + + for (let i = 0; i < expectedBalances.length; i += 1) { + if (i === 0) { + expect(newBalances[i]).to.equal(0); + } else { + expect(expectedBalances[i]).to.equal(newBalances[i]); + } + } + }); + + it('Should allow a new member to join as long as they send more ETH than deltaE', async () => { + dao = await summonedDAO(); + const token = await dao.token(); + // get the eth balance of elasticDAO + const ethBalanceElasticDAOBeforeJoin = await ethBalance(dao.uuid); + + // get the T value of the token + const totalSupplyOfToken = await dao.elasticGovernanceToken.totalSupply(); + + // calculate capital Delta + const cDelta = capitalDelta(ethBalanceElasticDAOBeforeJoin, totalSupplyOfToken); + + // calculate deltaE using capital Delta to buy ONE_TENTH shares + // deltaE = capitalDelta * k * ( (lambdaDash*mDash*revamp) - (lambda*m) ) + const lambdaDash = token.lambda.plus(token.maxLambdaPurchase); + const dE = deltaE( + token.maxLambdaPurchase, + cDelta, + token.k, + token.elasticity, + token.lambda, + token.m, + ); + + const mD = mDash(lambdaDash, token.lambda, token.m); + + // send that value of deltaE to joinDAO to buy ONE share + 1 + await dao.elasticDAO.join({ value: dE.plus(1) }); + await token.refresh(); + + // post join check the following values: + // check the m value- after join,previous mDash should be current m + await expect(token.m.toString()).to.equal(mD.toString()); + await expect(token.lambda.toString()).to.equal(lambdaDash.toString()); + + // check the the total eth - which should be initial eth, plus delta e + const ethBalanceElasticDAOAfterJoin = await ethBalance(dao.uuid); + + const expectedEthInElasticDAOAfterJoin = ethBalanceElasticDAOBeforeJoin.plus(dE); + await expect(ethBalanceElasticDAOAfterJoin.toString()).to.equal( + expectedEthInElasticDAOAfterJoin.toString(), + ); + }); }); }); diff --git a/test/elasticGovernanceTokenTest.js b/test/elasticGovernanceTokenTest.js new file mode 100644 index 0000000..17230c0 --- /dev/null +++ b/test/elasticGovernanceTokenTest.js @@ -0,0 +1,198 @@ +const { expect } = require('chai'); +// const { ethers } = require('ethers'); + +const { signers, summonedDAO } = require('./helpers'); + +describe('ElasticDAO: Elastic Governance Token', () => { + let dao; + + beforeEach(async () => { + dao = await summonedDAO(); + }); + + it('Should approve 1 EGT and check the allowance', async () => { + const { summoner1, summoner2 } = await signers(); + await dao.elasticGovernanceToken.approve(summoner2.address, 1); + + const allowance = await dao.elasticGovernanceToken.allowance( + summoner1.address, + summoner2.address, + ); + + expect(allowance.toFixed()).to.equal('1'); + }); + + it('Should return maxVotingLambda if member has more shares than are votable', async () => { + const { summoner1 } = await signers(); + const balanceOfVoting = await dao.elasticGovernanceToken.balanceOfVoting(summoner1.address); + expect(balanceOfVoting.toFixed()).to.equal('100'); + }); + + it('Should get balance of votable shares for user', async () => { + const { summoner1, summoner2 } = await signers(); + await dao.elasticGovernanceToken.transfer(summoner2.address, 950); + const balanceOfVoting = await dao.elasticGovernanceToken.balanceOfVoting(summoner1.address); + expect(balanceOfVoting.toFixed()).to.equal('60'); + }); + + it('Should get token decimals', async () => { + const decimals = await dao.elasticGovernanceToken.decimals(); + + expect(decimals).to.equal('18'); + }); + + it('Should increase allowance', async () => { + const { summoner1, summoner2 } = await signers(); + await dao.elasticGovernanceToken.increaseAllowance(summoner2.address, 1); + + const allowance = await dao.elasticGovernanceToken.allowance( + summoner1.address, + summoner2.address, + ); + + expect(allowance.toFixed()).to.equal('1'); + }); + + it('Should decrease allowance', async () => { + const { summoner1, summoner2 } = await signers(); + await dao.elasticGovernanceToken.increaseAllowance(summoner2.address, 2); + await dao.elasticGovernanceToken.decreaseAllowance(summoner2.address, 1); + + const allowance = await dao.elasticGovernanceToken.allowance( + summoner1.address, + summoner2.address, + ); + + expect(allowance.toFixed()).to.equal('1'); + }); + + it('Should decrease allowance to 0', async () => { + const { summoner1, summoner2 } = await signers(); + const spenderAmount = 10; + await dao.elasticGovernanceToken.approve(summoner2.address, spenderAmount); + + await dao.elasticGovernanceToken.allowance(summoner1.address, summoner2.address); + + await dao.elasticGovernanceToken.decreaseAllowance(summoner2.address, spenderAmount); + + const newAllowance = await dao.elasticGovernanceToken.allowance( + summoner1.address, + summoner2.address, + ); + + expect(newAllowance.toString()).to.equal('0'); + }); + + it('Should mint tokens', async () => { + const { agent, summoner1 } = await signers(); + dao.sdk.changeSigner(agent); + + await dao.elasticGovernanceToken.mint(summoner1.address, 1); + const balance = await dao.elasticGovernanceToken.balanceOf(summoner1.address); + expect(balance.toFixed()).to.equal('1011'); + }); + + it('Should not mint tokens if caller is not valid minter', async () => { + const { summoner1 } = await signers(); + + await expect(dao.elasticGovernanceToken.mint(summoner1.address, 1)).to.be.revertedWith( + 'ElasticDAO: Not authorized', + ); + }); + + it('Should burn tokens', async () => { + const { agent, summoner1 } = await signers(); + + dao.sdk.changeSigner(agent); + + await dao.elasticGovernanceToken.burn(summoner1.address, 1); + const balance = await dao.elasticGovernanceToken.balanceOf(summoner1.address); + + expect(balance.toFixed()).to.equal('1009'); + }); + + it('Should not burn tokens if caller is not the valid burner', async () => { + const { summoner1 } = await signers(); + + await expect(dao.elasticGovernanceToken.burn(summoner1.address, 1)).to.be.revertedWith( + 'ElasticDAO: Not authorized', + ); + }); + + it('Should get token name', async () => { + const name = await dao.elasticGovernanceToken.name(); + + expect(name).to.equal('Elastic Governance Token'); + }); + + it('Should get token symbol', async () => { + const symbol = await dao.elasticGovernanceToken.symbol(); + + expect(symbol).to.equal('EGT'); + }); + + it('Should get number of token holders', async () => { + const numberOfTokenHolders = await dao.elasticGovernanceToken.numberOfTokenHolders(); + + expect(numberOfTokenHolders.toFixed()).to.equal('3'); + }); + + it('Should get total supply in shares', async () => { + const totalSupplyInShares = await dao.elasticGovernanceToken.totalSupplyInShares(); + + expect(totalSupplyInShares.toFixed()).to.equal('10.3'); + }); + + it('should transfer tokens a to b', async () => { + const { summoner2 } = await signers(); + + let balance = await dao.elasticGovernanceToken.balanceOf(summoner2.address); + expect(balance.toFixed()).to.equal('10'); + + await dao.elasticGovernanceToken.transfer(summoner2.address, 1); + + balance = await dao.elasticGovernanceToken.balanceOf(summoner2.address); + expect(balance.toFixed()).to.equal('11'); + }); + + it('should increase the number of members when a new member buys tokens', async () => { + const { agent, summoner1 } = await signers(); + + const balance = await dao.elasticGovernanceToken.balanceOf(summoner1.address); + const { numberOfTokenHolders } = await dao.token(); + + dao.sdk.changeSigner(summoner1); + await dao.elasticGovernanceToken.transfer(agent.address, balance.dividedBy(2)); + + const token = await dao.token(); + + expect(token.numberOfTokenHolders).to.equal(numberOfTokenHolders + 1); + }); + + it('should decrease the number of members when a member sells all of their tokens', async () => { + const { summoner2, summoner1 } = await signers(); + + const balance = await dao.elasticGovernanceToken.balanceOf(summoner1.address); + const { numberOfTokenHolders } = await dao.token(); + + dao.sdk.changeSigner(summoner1); + await dao.elasticGovernanceToken.transfer(summoner2.address, balance); + + const token = await dao.token(); + + expect(token.numberOfTokenHolders).to.equal(numberOfTokenHolders - 1); + }); + + it('should transfer tokens on behalf of a to b(transferFrom)', async () => { + const { summoner2, summoner1, agent } = await signers(); + + let balance = await dao.elasticGovernanceToken.balanceOf(summoner2.address); + + await dao.elasticGovernanceToken.approve(agent.address, 1); + dao.sdk.changeSigner(agent); + await dao.elasticGovernanceToken.transferFrom(summoner1.address, summoner2.address, 1); + + balance = await dao.elasticGovernanceToken.balanceOf(summoner2.address); + expect(balance.toFixed()).to.equal('11'); + }); +}); diff --git a/test/env.js b/test/env.js index dfba62f..2c25cce 100644 --- a/test/env.js +++ b/test/env.js @@ -1,70 +1,9 @@ const { deployments } = require('hardhat'); module.exports = async () => { - const [ - Balance, - BalanceMultipliers, - DAO, - Ecosystem, - ElasticModule, - Factory, - Token, - TokenHolder, - InformationalVote, - InformationalVoteBallot, - InformationalVoteFactory, - InformationalVoteSettings, - TransactionalVote, - TransactionalVoteBallot, - TransactionalVoteFactory, - TransactionalVoteSettings, - ] = await Promise.all([ - deployments.get('Balance'), - deployments.get('BalanceMultipliers'), - deployments.get('DAO'), - deployments.get('Ecosystem'), - deployments.get('ElasticModule'), - deployments.get('ElasticDAOFactory'), - deployments.get('Token'), - deployments.get('TokenHolder'), - deployments.get('InformationalVote'), - deployments.get('InformationalVoteBallot'), - deployments.get('InformationalVoteFactory'), - deployments.get('InformationalVoteSettings'), - deployments.get('TransactionalVote'), - deployments.get('TransactionalVoteBallot'), - deployments.get('TransactionalVoteFactory'), - deployments.get('TransactionalVoteSettings'), - ]); + const Factory = await deployments.get('ElasticDAOFactory'); const env = { - elasticDAO: { - balanceModelAddress: Balance.address, - balanceMultipliersModelAddress: BalanceMultipliers.address, - daoModelAddress: DAO.address, - ecosystemModelAddress: Ecosystem.address, - elasticModuleModelAddress: ElasticModule.address, - factoryAddress: Factory.address, - tokenModelAddress: Token.address, - tokenHolderModelAddress: TokenHolder.address, - - modules: { - informationalVote: { - ballotModelAddress: InformationalVoteBallot.address, - factoryAddress: InformationalVoteFactory.address, - settingsModelAddress: InformationalVoteSettings.address, - voteModelAddress: InformationalVote.address, - }, - transactionalVote: { - ballotModelAddress: TransactionalVoteBallot.address, - factoryAddress: TransactionalVoteFactory.address, - settingsModelAddress: TransactionalVoteSettings.address, - voteModelAddress: TransactionalVote.address, - }, - }, - }, - fees: { - deploy: 0.25, - }, + factoryAddress: Factory.address, }; return env; diff --git a/test/helpers.js b/test/helpers.js new file mode 100644 index 0000000..25d37ab --- /dev/null +++ b/test/helpers.js @@ -0,0 +1,79 @@ +const { default: BigNumber } = require('bignumber.js'); +const { ethers } = require('ethers'); +const { SDK } = require('@elastic-dao/sdk'); +const hre = require('hardhat').ethers; +const generateEnv = require('./env'); + +const contract = ({ abi, address, signer }) => new ethers.Contract(address, abi, signer); + +const ethBalance = async (address) => { + const balance = (await provider().getBalance(address)).toString(); + return BigNumber(balance) + .dividedBy(10 ** 18) + .dp(18); +}; + +const newDAO = async () => { + const { elasticDAOFactory } = await sdk(); + return elasticDAOFactory.deployDAOAndToken( + await summoners(), + 'Elastic DAO', + 'Elastic Governance Token', + 'EGT', + 0.1, + 0.02, + 100, + 1, + 1, + ); +}; + +const provider = () => hre.provider; + +const sdk = async (overrides = {}) => { + const { agent } = await signers(); + + return new SDK({ + account: agent.address, + contract: (args) => contract({ ...args, signer: agent }), + env: await generateEnv(), + provider: provider(), + signer: agent, + ...overrides, + }); +}; + +const seededDAO = async () => { + const { summoner1 } = await signers(); + + const dao = await newDAO(); + dao.sdk.contract = (args) => contract({ ...args, signer: summoner1 }); + return dao.elasticDAO.seedSummoning({ value: 1 }); +}; + +const signers = async () => { + const [agent, summoner1, summoner2, summoner3] = await hre.getSigners(); + return { agent, summoner1, summoner2, summoner3 }; +}; + +const summonedDAO = async () => { + const dao = await seededDAO(); + return dao.elasticDAO.summon(0.1); +}; + +const summoners = async () => { + const { summoner1, summoner2, summoner3 } = await signers(); + return [summoner1.address, summoner2.address, summoner3.address]; +}; + +module.exports = { + contract, + ethBalance, + newDAO, + provider, + SDK: sdk, + seededDAO, + signers, + summonedDAO, + summoners, +}; diff --git a/test/informationalVoteModuleTests.js b/test/informationalVoteModuleTests.js deleted file mode 100644 index 326fe45..0000000 --- a/test/informationalVoteModuleTests.js +++ /dev/null @@ -1,243 +0,0 @@ -const { deployments } = require('hardhat'); -const { expect } = require('chai'); -const ethers = require('ethers'); -const hre = require('hardhat').ethers; -const SDK = require('@elastic-dao/sdk'); -const generateEnv = require('./env'); -const { - FIFTY_PERCENT, - ONE_HUNDRED, - ONE_TENTH, - THIRTY_FIVE_PERCENT, - TWO_HUNDREDTHS, -} = require('./constants'); - -describe('ElasticDAO: Informational Vote Module', () => { - let agent; - let Ecosystem; - let env; - let Ballot; - let ecosystem; - let elasticDAO; - let ElasticDAO; - let informationalVoteManager; - let InformationalVoteManager; - let provider; - let Settings; - let sdk; - let summoner; - let summoner1; - let summoner2; - let Token; - let Vote; - - beforeEach(async () => { - [agent, summoner, summoner1, summoner2] = await hre.getSigners(); - provider = hre.provider; - env = await generateEnv(); - sdk = SDK({ - account: agent.address, - contract: ({ abi, address }) => new ethers.Contract(address, abi, agent), - env, - provider, - signer: agent, - }); - - await deployments.fixture(); - - // setup needed contracts - Settings = await deployments.get('InformationalVoteSettings'); - Vote = await deployments.get('InformationalVote'); - Ecosystem = await deployments.get('Ecosystem'); - - const { deploy } = deployments; - - await deploy('ElasticDAO', { - from: agent.address, - args: [ - Ecosystem.address, - [summoner.address, summoner1.address, summoner2.address], - 'ElasticDAO', - 3, - ], - }); - ElasticDAO = await deployments.get('ElasticDAO'); - Token = await deployments.get('Token'); - - elasticDAO = new ethers.Contract(ElasticDAO.address, ElasticDAO.abi, agent); - await elasticDAO - .initializeToken( - 'Elastic Governance Token', - 'EGT', - ONE_TENTH, - TWO_HUNDREDTHS, - ONE_HUNDRED, - ethers.constants.WeiPerEther, - ) - .catch((error) => { - console.log(error); - }); - - elasticDAO = new ethers.Contract(ElasticDAO.address, ElasticDAO.abi, summoner); - ecosystem = await elasticDAO.getEcosystem(); - Ballot = await deployments.get('InformationalVoteBallot'); - InformationalVoteManager = await deploy('InformationalVoteManager', { - from: agent.address, - args: [Ballot.address, Settings.address, Vote.address], - }); - informationalVoteManager = new ethers.Contract( - InformationalVoteManager.address, - InformationalVoteManager.abi, - summoner, - ); - }); - - it('Should deploy and initialize InformationalVoteManager', async () => { - await informationalVoteManager.initialize(ecosystem.governanceTokenAddress, false, [ - THIRTY_FIVE_PERCENT, // approval - ethers.constants.WeiPerEther, // maxSharesPerTokenHolder - 1000, // minBlocksForPenalty - 500, // minDurationInBlocks - TWO_HUNDREDTHS, // minPenaltyInShares - TWO_HUNDREDTHS, // minRewardInShares - ethers.constants.WeiPerEther, // minSharesToCreate - ONE_TENTH, // penalty - FIFTY_PERCENT, // quoroum - ONE_TENTH, // reward - ]); - const settingsContract = new ethers.Contract(Settings.address, Settings.abi, summoner); - const settings = await settingsContract.deserialize(InformationalVoteManager.address); - - await expect(settings.votingTokenAddress).to.be.equal(ecosystem.governanceTokenAddress); - await expect(settings.hasPenalty).to.be.equal(false); - - await expect(settings.approval).to.be.equal(THIRTY_FIVE_PERCENT); - await expect(settings.maxSharesPerTokenHolder).to.be.equal(ethers.constants.WeiPerEther); - await expect(settings.minBlocksForPenalty).to.be.equal(1000); - await expect(settings.minDurationInBlocks).to.be.equal(500); - await expect(settings.minPenaltyInShares).to.be.equal(TWO_HUNDREDTHS); - await expect(settings.minRewardInShares).to.be.equal(TWO_HUNDREDTHS); - await expect(settings.minSharesToCreate).to.be.equal(ethers.constants.WeiPerEther); - await expect(settings.penalty).to.be.equal(ONE_TENTH); - await expect(settings.quorum).to.be.equal(FIFTY_PERCENT); - await expect(settings.reward).to.be.equal(ONE_TENTH); - }); - - describe('createVote(string memory _proposal, uint256 _endBlock)', () => { - it('Should not create a vote if VoteManager is not initialized', async () => { - await expect( - informationalVoteManager.createVote('This proposal should fail', 1), - ).to.be.revertedWith('ElasticDAO: InformationalVote Manager not initialized'); - }); - - it('Should not create a vote if not enough shares to create a vote', async () => { - await informationalVoteManager.initialize(ecosystem.governanceTokenAddress, true, [ - THIRTY_FIVE_PERCENT, // approval - ethers.constants.WeiPerEther, // maxSharesPerTokenHolder - 1000, // minBlocksForPenalty - 500, // minDurationInBlocks - TWO_HUNDREDTHS, // minPenaltyInShares - TWO_HUNDREDTHS, // minRewardInShares - ethers.constants.WeiPerEther, // minSharesToCreate - ONE_TENTH, // penalty - FIFTY_PERCENT, // quoroum - ONE_TENTH, // reward - ]); - - await expect( - informationalVoteManager.createVote('This proposal should fail', 1), - ).to.be.revertedWith('ElasticDAO: Not enough shares to create vote'); - }); - - it('Should not create a vote if the duration is too short', async () => { - await informationalVoteManager.initialize(ecosystem.governanceTokenAddress, true, [ - THIRTY_FIVE_PERCENT, // approval - ethers.constants.WeiPerEther, // maxSharesPerTokenHolder - 1000, // minBlocksForPenalty - 500, // minDurationInBlocks - TWO_HUNDREDTHS, // minPenaltyInShares - TWO_HUNDREDTHS, // minRewardInShares - ethers.constants.WeiPerEther, // minSharesToCreate - ONE_TENTH, // penalty - FIFTY_PERCENT, // quoroum - ONE_TENTH, // reward - ]); - - const tokenStorage = new ethers.Contract(Token.address, Token.abi, summoner); - const token = await tokenStorage.deserialize(ecosystem.governanceTokenAddress, ecosystem); - - await elasticDAO.seedSummoning({ value: ethers.constants.WeiPerEther }); - await elasticDAO.summon(token.maxLambdaPurchase); - - await expect( - informationalVoteManager.createVote('This proposal should fail', 100), - ).to.be.revertedWith('ElasticDAO: InformationalVote period too short'); - }); - - it('Should create a vote', async () => { - await informationalVoteManager.initialize(ecosystem.governanceTokenAddress, true, [ - THIRTY_FIVE_PERCENT, // approval - ethers.constants.WeiPerEther, // maxSharesPerTokenHolder - 1000, // minBlocksForPenalty - 500, // minDurationInBlocks - TWO_HUNDREDTHS, // minPenaltyInShares - TWO_HUNDREDTHS, // minRewardInShares - ethers.constants.WeiPerEther, // minSharesToCreate - ONE_TENTH, // penalty - FIFTY_PERCENT, // quoroum - ONE_TENTH, // reward - ]); - - const settingsContract = new ethers.Contract(Settings.address, Settings.abi, summoner); - const settings = await settingsContract.deserialize(InformationalVoteManager.address); - - elasticDAO.initializeModule(informationalVoteManager.address, 'informationalVoteManager'); - - const tokenStorage = new ethers.Contract(Token.address, Token.abi, summoner); - const token = await tokenStorage.deserialize(ecosystem.governanceTokenAddress, ecosystem); - - await elasticDAO.seedSummoning({ value: ethers.constants.WeiPerEther }); - await elasticDAO.summon(token.maxLambdaPurchase); - - await informationalVoteManager.functions.createVote('First vote should be created', 1000); - await informationalVoteManager.functions.createVote('Second vote should be created', 1000); - - const voteStorage = new ethers.Contract(Vote.address, Vote.abi, summoner); - - expect(await voteStorage.exists(0, settings)).to.equal(true); - expect(await voteStorage.exists(1, settings)).to.equal(true); - - const voteRecord1 = await voteStorage.deserialize(0, settings); - const voteRecord2 = await voteStorage.deserialize(1, settings); - expect(voteRecord1.proposal).to.equal('First vote should be created'); - expect(voteRecord2.proposal).to.equal('Second vote should be created'); - }); - }); - - describe('Factory', () => { - it('Should deploy the Manager of the voteModule using the Factory', async () => { - const ivManager = await sdk.modules.informationalVote.informationalVoteFactory.deployManager( - env.elasticDAO.modules.informationalVote.ballotModelAddress, - elasticDAO.address, - env.elasticDAO.modules.informationalVote.settingsModelAddress, - env.elasticDAO.modules.informationalVote.voteModelAddress, - ecosystem.governanceTokenAddress, - true, - [ - 0.5, // approval - 1, // maxSharesPerTokenHolder - 50, // minBlocksForPenalty - 10, // minDurationInBlocks - 0.1, // minPenaltyInShares - 0.1, // minRewardInShares - 0.5, // minSharesToCreate - 0.1, // penalty - 0.6, // quoroum - 0.1, // reward - ], - ); - - expect(ivManager.address).to.not.equal(undefined); - }); - }); -}); diff --git a/test/tokenHolderModelTests.js b/test/tokenHolderModelTests.js new file mode 100644 index 0000000..a71d362 --- /dev/null +++ b/test/tokenHolderModelTests.js @@ -0,0 +1,15 @@ +const { expect } = require('chai'); + +const { signers, summonedDAO } = require('./helpers'); + +describe('ElasticDAO: TokenHolder Model', () => { + it('Should check to see if a token holder record exists by account address', async () => { + const dao = await summonedDAO(); + const { summoner1 } = await signers(); + const { TokenHolder } = dao.sdk.models; + const token = await dao.token(); + + const recordExists = await TokenHolder.exists(summoner1.address, token); + expect(recordExists).to.equal(true); + }); +}); diff --git a/testAccounts.json b/testAccounts.json new file mode 100644 index 0000000..f63b4b5 --- /dev/null +++ b/testAccounts.json @@ -0,0 +1 @@ +{"address":"c0ceb9d5a7238123b4f3637ccdddd0eee4b343fc","crypto":{"cipher":"aes-128-ctr","ciphertext":"848123d74af89520911a61569a79a28cbb112547f94c73000228f6cbe2280856","cipherparams":{"iv":"97d8ddabd075ec9e3f09ca420ebb99e0"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"e3d0c5d61a6b143af7c4d602f661597efa62d929f1b35eccd755b4ba4a8b8ed7"},"mac":"27f69041e2c3ce6f3546f5d4360a0450598db021d1e6c991eec235bbd7df68d1"},"id":"691b4586-77b1-47b9-8788-d2cb1bacb231","version":3} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 079b08c..40b2f78 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,16 +3,16 @@ "@babel/code-frame@^7.0.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" - integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== dependencies: "@babel/highlight" "^7.10.4" "@babel/helper-validator-identifier@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" - integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" + integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== "@babel/highlight@^7.10.4": version "7.10.4" @@ -23,14 +23,15 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@elastic-dao/sdk@0.0.9": - version "0.0.9" - resolved "https://registry.yarnpkg.com/@elastic-dao/sdk/-/sdk-0.0.9.tgz#bfc82a86227e1334e20f4422d282ce4b2475e999" - integrity sha512-85HYhv3sONW1+v9mYBptmJpfKPovZjnQtznSIfKbEGYphx0u4AI0kbi6v68dqVVnxnsI1Qk55TbPfycmhFYLfA== +"@elastic-dao/sdk@0.9.0-beta11": + version "0.9.0-beta11" + resolved "https://registry.yarnpkg.com/@elastic-dao/sdk/-/sdk-0.9.0-beta11.tgz#81f1b6fc67a0794c70469049691f868b00d93a55" + integrity sha512-f7fSk7JhS5ZOqHzvmiJWeRnfPfd/uoTETKRAnlZwQghNubhFS4fRDMaYpKzqJkSkHVHGBbM7M/EaGEnGfi6Lww== dependencies: "@pie-dao/utils" "^1.0.0" bignumber.js "^9.0.0" ethers "^5.0.9" + rxjs "^6.6.3" "@ensdomains/ens@^0.4.4": version "0.4.5" @@ -48,10 +49,10 @@ resolved "https://registry.yarnpkg.com/@ensdomains/resolver/-/resolver-0.2.4.tgz#c10fe28bf5efbf49bff4666d909aed0265efbc89" integrity sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA== -"@eslint/eslintrc@^0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.1.3.tgz#7d1a2b2358552cc04834c0979bd4275362e37085" - integrity sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA== +"@eslint/eslintrc@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.3.0.tgz#d736d6963d7003b6514e6324bec9c602ac340318" + integrity sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg== dependencies: ajv "^6.12.4" debug "^4.1.1" @@ -60,22 +61,22 @@ ignore "^4.0.6" import-fresh "^3.2.1" js-yaml "^3.13.1" - lodash "^4.17.19" + lodash "^4.17.20" minimatch "^3.0.4" strip-json-comments "^3.1.1" -"@ethereum-waffle/chai@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/chai/-/chai-3.0.2.tgz#5492398abbf2b64ec2524deac78777ee62d02d08" - integrity sha512-aXE6KqHmCX0aaSGqeaZP0EvhPou4Ii9g/x7u0oIuj7sYchDk09/TTeuMdFs4EKgdTc7nUpQSdpJ6GuO7pLoNbA== +"@ethereum-waffle/chai@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/chai/-/chai-3.2.1.tgz#5cb542b2a323adf0bc2dda00f48b0eb85944d8ab" + integrity sha512-0aG946J1+2Gg7WnEjtwPEWe+xwLTeBTy6LpCnGecosMf3YINkaf9Xv3Sd7CrXBR88ihCoUhfzfmOloMHIAQPAg== dependencies: - "@ethereum-waffle/provider" "^3.0.2" + "@ethereum-waffle/provider" "^3.2.1" ethers "^5.0.0" -"@ethereum-waffle/compiler@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/compiler/-/compiler-3.0.2.tgz#26dd7e63369e3c2ba458d6a26c43afe98e1e200e" - integrity sha512-PV6vtaX9szv4aFd5lXqGgfEbWFOkk2975AUDYHZQERWd9e4oerb1FNjQeXBDlYUjBX2UQ1tLlQFkqud2jcBYBg== +"@ethereum-waffle/compiler@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/compiler/-/compiler-3.2.1.tgz#612a9056285a94ce28eb57b895770ad10e438bf9" + integrity sha512-URSsbTp4g8HPHAaA4KiAD6Aya9WPx/TULfOr+YpjCJ6YWXqE9wwi3ubf9qJUQxu6W6PsiczBaQhVhpI9RLoVUA== dependencies: "@resolver-engine/imports" "^0.3.3" "@resolver-engine/imports-fs" "^0.3.3" @@ -86,723 +87,457 @@ node-fetch "^2.6.0" solc "^0.6.3" -"@ethereum-waffle/ens@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/ens/-/ens-3.0.2.tgz#0ace2f5efbcba79a763697830bf16260c0bd7460" - integrity sha512-XkOVIbUvMt5hl6ZHgceqI7smWUercCV0LQtUjXgXPTUfONsB6JSPqAE2H6cc4sXqn82Q3cPThderLvT5QNTyRA== +"@ethereum-waffle/ens@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/ens/-/ens-3.2.1.tgz#9f369112d62f7aa88d010be4d133b6d0f5e8c492" + integrity sha512-dXv/Mb8EgEYOKv2jjmkFNFCmSjNv8nPk1Gaegc0J/KXWuTU6CBOhWet7YS5joGO8ORK21MvN2qVgcQj+FYw0Dw== dependencies: "@ensdomains/ens" "^0.4.4" "@ensdomains/resolver" "^0.2.4" ethers "^5.0.1" -"@ethereum-waffle/mock-contract@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/mock-contract/-/mock-contract-3.0.2.tgz#ba0ecdd872c1eedb75a223c20d3afbea32d843f6" - integrity sha512-a3THe64cR24TxgwU2Tmk8uwZDWGv9QCKUpEhKVVArxRIF800AKMZfhIF61liXMkSVQDgivtYsayNniYxM8M11Q== +"@ethereum-waffle/mock-contract@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/mock-contract/-/mock-contract-3.2.1.tgz#bf5f63f61c9749eb3270108893a88ff161e68f58" + integrity sha512-39GMp/IqsHF+3j3XK38cWA+nX7Q6ABfMsYkuAjtfpTguTFQKXx2C1/VJZwGOyb4de2pl4bssmN37VEraB3NWbQ== dependencies: "@ethersproject/abi" "^5.0.1" ethers "^5.0.1" -"@ethereum-waffle/provider@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/provider/-/provider-3.0.2.tgz#2416237ca97c1f7d8dfca990fe85c9f27d921f4d" - integrity sha512-jIbaW4mSBZmzIRUxBSuutwucdxXWOp5e3m16ds6PRnMBNd8civ9LwPM6RqwxC8pNTq/APMf6bFqLJo4UVW3PIg== +"@ethereum-waffle/provider@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/provider/-/provider-3.2.1.tgz#d84c0603936f09afa69ecb671d56f527e9818e71" + integrity sha512-doG18hThqldsYcZIIO0YoiwV+ERx0dCVY6bkg4FKZtoymNelf15zNycb881c6QD9RnLuz6A2Jp9lmnrAD+IvYQ== dependencies: - "@ethereum-waffle/ens" "^3.0.2" + "@ethereum-waffle/ens" "^3.2.1" ethers "^5.0.1" ganache-core "^2.10.2" - -"@ethersproject/abi@5.0.9", "@ethersproject/abi@^5.0.5": - version "5.0.9" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.9.tgz#738c1c557e56d8f395a5a27caef9b0449bc85a10" - integrity sha512-ily2OufA2DTrxkiHQw5GqbkMSnNKuwZBqKsajtT0ERhZy1r9w2CpW1bmtRMIGzaqQxCdn/GEoFogexk72cBBZQ== - dependencies: - "@ethersproject/address" "^5.0.4" - "@ethersproject/bignumber" "^5.0.7" - "@ethersproject/bytes" "^5.0.4" - "@ethersproject/constants" "^5.0.4" - "@ethersproject/hash" "^5.0.4" - "@ethersproject/keccak256" "^5.0.3" - "@ethersproject/logger" "^5.0.5" - "@ethersproject/properties" "^5.0.3" - "@ethersproject/strings" "^5.0.4" - -"@ethersproject/abi@^5.0.0", "@ethersproject/abi@^5.0.0-beta.146", "@ethersproject/abi@^5.0.1", "@ethersproject/abi@^5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.2.tgz#7fe8f080aa1483fe32cd27bb5b8f2019266af1e2" - integrity sha512-Z+5f7xOgtRLu/W2l9Ry5xF7ehh9QVQ0m1vhynmTcS7DMfHgqTd1/PDFC62aw91ZPRCRZsYdZJu8ymokC5e1JSw== - dependencies: - "@ethersproject/address" "^5.0.0" - "@ethersproject/bignumber" "^5.0.0" - "@ethersproject/bytes" "^5.0.0" - "@ethersproject/constants" "^5.0.0" - "@ethersproject/hash" "^5.0.0" - "@ethersproject/keccak256" "^5.0.0" - "@ethersproject/logger" "^5.0.0" - "@ethersproject/properties" "^5.0.0" - "@ethersproject/strings" "^5.0.0" - -"@ethersproject/abstract-provider@5.0.7", "@ethersproject/abstract-provider@^5.0.4": - version "5.0.7" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.0.7.tgz#04ee3bfe43323384e7fecf6c774975b8dec4bdc9" - integrity sha512-NF16JGn6M0zZP5ZS8KtDL2Rh7yHxZbUjBIHLNHMm/0X0BephhjUWy8jqs/Zks6kDJRzNthgmPVy41Ec0RYWPYA== - dependencies: - "@ethersproject/bignumber" "^5.0.7" - "@ethersproject/bytes" "^5.0.4" - "@ethersproject/logger" "^5.0.5" - "@ethersproject/networks" "^5.0.3" - "@ethersproject/properties" "^5.0.3" - "@ethersproject/transactions" "^5.0.5" - "@ethersproject/web" "^5.0.6" - -"@ethersproject/abstract-provider@^5.0.0": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.0.2.tgz#9b4e8f4870f0691463e8d5b092c95dd5275c635d" - integrity sha512-U1s60+nG02x8FKNMoVNI6MG8SguWCoG9HJtwOqWZ38LBRMsDV4c0w4izKx98kcsN3wXw4U2/YAyJ9LlH7+/hkg== - dependencies: - "@ethersproject/bignumber" "^5.0.0" - "@ethersproject/bytes" "^5.0.0" - "@ethersproject/logger" "^5.0.0" - "@ethersproject/networks" "^5.0.0" - "@ethersproject/properties" "^5.0.0" - "@ethersproject/transactions" "^5.0.0" - "@ethersproject/web" "^5.0.0" - -"@ethersproject/abstract-signer@5.0.9", "@ethersproject/abstract-signer@^5.0.4", "@ethersproject/abstract-signer@^5.0.6": - version "5.0.9" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.0.9.tgz#238ddc06031aeb9dfceee2add965292d7dd1acbf" - integrity sha512-CM5UNmXQaA03MyYARFDDRjHWBxujO41tVle7glf5kHcQsDDULgqSVpkliLJMtPzZjOKFeCVZBHybTZDEZg5zzg== - dependencies: - "@ethersproject/abstract-provider" "^5.0.4" - "@ethersproject/bignumber" "^5.0.7" - "@ethersproject/bytes" "^5.0.4" - "@ethersproject/logger" "^5.0.5" - "@ethersproject/properties" "^5.0.3" - -"@ethersproject/abstract-signer@^5.0.0", "@ethersproject/abstract-signer@^5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.0.2.tgz#5776f888fda816de1d08ddb0e74778ecb9590f69" - integrity sha512-CzzXbeqKlgayE4YTnvvreGBG3n+HxakGXrxaGM6LjBZnOOIVSYi6HMFG8ZXls7UspRY4hvMrtnKEJKDCOngSBw== - dependencies: - "@ethersproject/abstract-provider" "^5.0.0" - "@ethersproject/bignumber" "^5.0.0" - "@ethersproject/bytes" "^5.0.0" - "@ethersproject/logger" "^5.0.0" - "@ethersproject/properties" "^5.0.0" - -"@ethersproject/address@5.0.8", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.0.5": + patch-package "^6.2.2" + postinstall-postinstall "^2.1.0" + +"@ethersproject/abi@5.0.0-beta.153": + version "5.0.0-beta.153" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.0-beta.153.tgz#43a37172b33794e4562999f6e2d555b7599a8eee" + integrity sha512-aXweZ1Z7vMNzJdLpR1CZUAIgnwjrZeUSvN9syCwlBaEBUFJmFY+HHnfuTI5vIhVs/mRkfJVrbEyl51JZQqyjAg== + dependencies: + "@ethersproject/address" ">=5.0.0-beta.128" + "@ethersproject/bignumber" ">=5.0.0-beta.130" + "@ethersproject/bytes" ">=5.0.0-beta.129" + "@ethersproject/constants" ">=5.0.0-beta.128" + "@ethersproject/hash" ">=5.0.0-beta.128" + "@ethersproject/keccak256" ">=5.0.0-beta.127" + "@ethersproject/logger" ">=5.0.0-beta.129" + "@ethersproject/properties" ">=5.0.0-beta.131" + "@ethersproject/strings" ">=5.0.0-beta.130" + +"@ethersproject/abi@5.0.10", "@ethersproject/abi@^5.0.0-beta.146", "@ethersproject/abi@^5.0.1", "@ethersproject/abi@^5.0.10", "@ethersproject/abi@^5.0.2": + version "5.0.10" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.10.tgz#c32baa919ad0e5cddabb2f3a8aed0eaeeed7fa4a" + integrity sha512-cfC3lGgotfxX3SMri4+CisOPwignoj/QGHW9J29spC4R4Qqcnk/SYuVkPFBMdLbvBp3f/pGiVqPNwont0TSXhg== + dependencies: + "@ethersproject/address" "^5.0.9" + "@ethersproject/bignumber" "^5.0.13" + "@ethersproject/bytes" "^5.0.9" + "@ethersproject/constants" "^5.0.8" + "@ethersproject/hash" "^5.0.10" + "@ethersproject/keccak256" "^5.0.7" + "@ethersproject/logger" "^5.0.8" + "@ethersproject/properties" "^5.0.7" + "@ethersproject/strings" "^5.0.8" + +"@ethersproject/abstract-provider@5.0.8", "@ethersproject/abstract-provider@^5.0.8": version "5.0.8" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.0.8.tgz#0c551659144a5a7643c6bea337149d410825298f" - integrity sha512-V87DHiZMZR6hmFYmoGaHex0D53UEbZpW75uj8AqPbjYUmi65RB4N2LPRcJXuWuN2R0Y2CxkvW6ArijWychr5FA== - dependencies: - "@ethersproject/bignumber" "^5.0.10" - "@ethersproject/bytes" "^5.0.4" - "@ethersproject/keccak256" "^5.0.3" - "@ethersproject/logger" "^5.0.5" - "@ethersproject/rlp" "^5.0.3" - -"@ethersproject/address@^5.0.0", "@ethersproject/address@^5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.0.2.tgz#80d0ddfb7d4bd0d32657747fa4bdd2defef2e00a" - integrity sha512-+rz26RKj7ujGfQynys4V9VJRbR+wpC6eL8F22q3raWMH3152Ha31GwJPWzxE/bEA+43M/zTNVwY0R53gn53L2Q== - dependencies: - "@ethersproject/bignumber" "^5.0.0" - "@ethersproject/bytes" "^5.0.0" - "@ethersproject/keccak256" "^5.0.0" - "@ethersproject/logger" "^5.0.0" - "@ethersproject/rlp" "^5.0.0" - bn.js "^4.4.0" - -"@ethersproject/base64@5.0.6", "@ethersproject/base64@^5.0.3": - version "5.0.6" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.0.6.tgz#26311ebf29ea3d0b9c300ccf3e1fdc44b7481516" - integrity sha512-HwrGn8YMiUf7bcdVvB4NJ+eWT0BtEFpDtrYxVXEbR7p/XBSJjwiR7DEggIiRvxbualMKg+EZijQWJ3az2li0uw== - dependencies: - "@ethersproject/bytes" "^5.0.4" - -"@ethersproject/base64@^5.0.0": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.0.2.tgz#48b3bb8d640a963bd8ee196cfeacd592155a0ca8" - integrity sha512-0FE5RH5cUDddOiQEDpWtyHjkSW4D5/rdJzA3KTZo8Fk5ab/Y8vdzqbamsXPyPsXU3gS+zCE5Qq4EKVOWlWLLTA== + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.0.8.tgz#880793c29bfed33dff4c2b2be7ecb9ba966d52c0" + integrity sha512-fqJXkewcGdi8LogKMgRyzc/Ls2js07yor7+g9KfPs09uPOcQLg7cc34JN+lk34HH9gg2HU0DIA5797ZR8znkfw== + dependencies: + "@ethersproject/bignumber" "^5.0.13" + "@ethersproject/bytes" "^5.0.9" + "@ethersproject/logger" "^5.0.8" + "@ethersproject/networks" "^5.0.7" + "@ethersproject/properties" "^5.0.7" + "@ethersproject/transactions" "^5.0.9" + "@ethersproject/web" "^5.0.12" + +"@ethersproject/abstract-signer@5.0.11", "@ethersproject/abstract-signer@^5.0.10", "@ethersproject/abstract-signer@^5.0.2": + version "5.0.11" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.0.11.tgz#675da9ec168905c60ee79a6da95f7157ca956f46" + integrity sha512-RKOgPSEYafknA62SrD3OCK42AllHE4YBfKYXyQeM+sBP7Nq3X5FpzeoY4uzC43P4wIhmNoTHCKQuwnX7fBqb6Q== dependencies: - "@ethersproject/bytes" "^5.0.0" + "@ethersproject/abstract-provider" "^5.0.8" + "@ethersproject/bignumber" "^5.0.13" + "@ethersproject/bytes" "^5.0.9" + "@ethersproject/logger" "^5.0.8" + "@ethersproject/properties" "^5.0.7" -"@ethersproject/basex@5.0.6", "@ethersproject/basex@^5.0.3": - version "5.0.6" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.0.6.tgz#ab95c32e48288a3d868726463506641cb1e9fb6b" - integrity sha512-Y/8dowRxBF3bsKkqEp7XN4kcFFQ0o5xxP1YyopfqkXejaOEGiD7ToQdQ0pIZpAJ5GreW56oFOTDDSO6ZcUCNYg== +"@ethersproject/address@5.0.9", "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.0.9": + version "5.0.9" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.0.9.tgz#347ef30dc8243c682574a3f23ff63f73c8f8cbf1" + integrity sha512-gKkmbZDMyGbVjr8nA5P0md1GgESqSGH7ILIrDidPdNXBl4adqbuA3OAuZx/O2oGpL6PtJ9BDa0kHheZ1ToHU3w== dependencies: - "@ethersproject/bytes" "^5.0.4" - "@ethersproject/properties" "^5.0.3" + "@ethersproject/bignumber" "^5.0.13" + "@ethersproject/bytes" "^5.0.9" + "@ethersproject/keccak256" "^5.0.7" + "@ethersproject/logger" "^5.0.8" + "@ethersproject/rlp" "^5.0.7" -"@ethersproject/basex@^5.0.0": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.0.2.tgz#13029ce0ad63674f4d4dbebf6763181fb22f0e6d" - integrity sha512-p4m2CeQqI9vma3XipRbP2iDf6zTsbroE0MEXBAYXidsoJQSvePKrC6MVRKfTzfcHej1b9wfmjVBzqhqn3FRhIA== +"@ethersproject/base64@5.0.7", "@ethersproject/base64@^5.0.7": + version "5.0.7" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.0.7.tgz#d5da73699b4a33dc92bd8e5056ad1880b262057d" + integrity sha512-S5oh5DVfCo06xwJXT8fQC68mvJfgScTl2AXvbYMsHNfIBTDb084Wx4iA9MNlEReOv6HulkS+gyrUM/j3514rSw== dependencies: - "@ethersproject/bytes" "^5.0.0" - "@ethersproject/properties" "^5.0.0" + "@ethersproject/bytes" "^5.0.9" -"@ethersproject/bignumber@5.0.12", "@ethersproject/bignumber@^5.0.10", "@ethersproject/bignumber@^5.0.7", "@ethersproject/bignumber@^5.0.8": - version "5.0.12" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.0.12.tgz#fe4a78667d7cb01790f75131147e82d6ea7e7cba" - integrity sha512-mbFZjwthx6vFlHG9owXP/C5QkNvsA+xHpDCkPPPdG2n1dS9AmZAL5DI0InNLid60rQWL3MXpEl19tFmtL7Q9jw== +"@ethersproject/basex@5.0.7", "@ethersproject/basex@^5.0.7": + version "5.0.7" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.0.7.tgz#2f7026b12c9dee6cdc7b7bf1805461836e635495" + integrity sha512-OsXnRsujGmYD9LYyJlX+cVe5KfwgLUbUJrJMWdzRWogrygXd5HvGd7ygX1AYjlu1z8W/+t2FoQnczDR/H2iBjA== dependencies: - "@ethersproject/bytes" "^5.0.8" - "@ethersproject/logger" "^5.0.5" - bn.js "^4.4.0" + "@ethersproject/bytes" "^5.0.9" + "@ethersproject/properties" "^5.0.7" -"@ethersproject/bignumber@^5.0.0", "@ethersproject/bignumber@^5.0.5": - version "5.0.5" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.0.5.tgz#31bd7e75aad46ace345fae69b1f5bb120906af1b" - integrity sha512-24ln7PV0g8ZzjcVZiLW9Wod0i+XCmK6zKkAaxw5enraTIT1p7gVOcSXFSzNQ9WYAwtiFQPvvA+TIO2oEITZNJA== +"@ethersproject/bignumber@5.0.13", "@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.0.13", "@ethersproject/bignumber@^5.0.5": + version "5.0.13" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.0.13.tgz#a5466412b3b80104097b9c694f6ae827df4353fe" + integrity sha512-b89bX5li6aK492yuPP5mPgRVgIxxBP7ksaBtKX5QQBsrZTpNOjf/MR4CjcUrAw8g+RQuD6kap9lPjFgY4U1/5A== dependencies: - "@ethersproject/bytes" "^5.0.0" - "@ethersproject/logger" "^5.0.0" + "@ethersproject/bytes" "^5.0.9" + "@ethersproject/logger" "^5.0.8" bn.js "^4.4.0" -"@ethersproject/bytes@5.0.8", "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.0.8": - version "5.0.8" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.0.8.tgz#cf1246a6a386086e590063a4602b1ffb6cc43db1" - integrity sha512-O+sJNVGzzuy51g+EMK8BegomqNIg+C2RO6vOt0XP6ac4o4saiq69FnjlsrNslaiMFVO7qcEHBsWJ9hx1tj1lMw== - dependencies: - "@ethersproject/logger" "^5.0.5" - -"@ethersproject/bytes@^5.0.0", "@ethersproject/bytes@^5.0.2": - version "5.0.3" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.0.3.tgz#b3769963ae0188a35713d343890a903bda20af9c" - integrity sha512-AyPMAlY+Amaw4Zfp8OAivm1xYPI8mqiUYmEnSUk1CnS2NrQGHEMmFJFiOJdS3gDDpgSOFhWIjZwxKq2VZpqNTA== - dependencies: - "@ethersproject/logger" "^5.0.0" - -"@ethersproject/constants@5.0.7", "@ethersproject/constants@^5.0.4": - version "5.0.7" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.0.7.tgz#44ff979e5781b17c8c6901266896c3ee745f4e7e" - integrity sha512-cbQK1UpE4hamB52Eg6DLhJoXeQ1plSzekh5Ujir1xdREdwdsZPPXKczkrWqBBR0KyywJZHN/o/hj0w8j7scSGg== - dependencies: - "@ethersproject/bignumber" "^5.0.7" - -"@ethersproject/constants@^5.0.0": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.0.2.tgz#f7ac0b320e2bbec1a5950da075015f8bc4e8fed1" - integrity sha512-nNoVlNP6bgpog7pQ2EyD1xjlaXcy1Cl4kK5v1KoskHj58EtB6TK8M8AFGi3GgHTdMldfT4eN3OsoQ/CdOTVNFA== +"@ethersproject/bytes@5.0.9", "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.2", "@ethersproject/bytes@^5.0.9": + version "5.0.9" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.0.9.tgz#2748247402ad20df69f3a3e935dc7b58c0d75c08" + integrity sha512-k+17ZViDtAugC0s7HM6rdsTWEdIYII4RPCDkPEuxKc6i40Bs+m6tjRAtCECX06wKZnrEoR9pjOJRXHJ/VLoOcA== dependencies: - "@ethersproject/bignumber" "^5.0.0" + "@ethersproject/logger" "^5.0.8" -"@ethersproject/contracts@5.0.8": +"@ethersproject/constants@5.0.8", "@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.0.8": version "5.0.8" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.0.8.tgz#71d3ba16853a1555be2e161a6741df186f81c73b" - integrity sha512-PecBL4vnsrpuks2lzzkRsOts8csJy338HNDKDIivbFmx92BVzh3ohOOv3XsoYPSXIHQvobF959W+aSk3RCZL/g== - dependencies: - "@ethersproject/abi" "^5.0.5" - "@ethersproject/abstract-provider" "^5.0.4" - "@ethersproject/abstract-signer" "^5.0.4" - "@ethersproject/address" "^5.0.4" - "@ethersproject/bignumber" "^5.0.7" - "@ethersproject/bytes" "^5.0.4" - "@ethersproject/constants" "^5.0.4" - "@ethersproject/logger" "^5.0.5" - "@ethersproject/properties" "^5.0.3" - -"@ethersproject/contracts@^5.0.0", "@ethersproject/contracts@^5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.0.2.tgz#f19ed8335ceeb6abb60f5d45641f0a2a62b6fbc5" - integrity sha512-Ud3oW8mBNIWE+WHRjvwVEwfvshn7lfYWSSKG0fPSb6baRN9mLOoNguX+VIv3W5Sne9w2utnBmxLF2ESXitw64A== - dependencies: - "@ethersproject/abi" "^5.0.0" - "@ethersproject/abstract-provider" "^5.0.0" - "@ethersproject/abstract-signer" "^5.0.0" - "@ethersproject/address" "^5.0.0" - "@ethersproject/bignumber" "^5.0.0" - "@ethersproject/bytes" "^5.0.0" - "@ethersproject/constants" "^5.0.0" - "@ethersproject/logger" "^5.0.0" - "@ethersproject/properties" "^5.0.0" - -"@ethersproject/hash@5.0.9", "@ethersproject/hash@^5.0.4": - version "5.0.9" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.0.9.tgz#81252a848185b584aa600db4a1a68cad9229a4d4" - integrity sha512-e8/i2ZDeGSgCxXT0vocL54+pMbw5oX5fNjb2E3bAIvdkh5kH29M7zz1jHu1QDZnptIuvCZepIbhUH8lxKE2/SQ== - dependencies: - "@ethersproject/abstract-signer" "^5.0.6" - "@ethersproject/address" "^5.0.5" - "@ethersproject/bignumber" "^5.0.8" - "@ethersproject/bytes" "^5.0.4" - "@ethersproject/keccak256" "^5.0.3" - "@ethersproject/logger" "^5.0.5" - "@ethersproject/properties" "^5.0.4" - "@ethersproject/strings" "^5.0.4" - -"@ethersproject/hash@^5.0.0": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.0.2.tgz#6d69558786961836d530b8b4a8714eac5388aec7" - integrity sha512-dWGvNwmVRX2bxoQQ3ciMw46Vzl1nqfL+5R8+2ZxsRXD3Cjgw1dL2mdjJF7xMMWPvPdrlhKXWSK0gb8VLwHZ8Cw== + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.0.8.tgz#50f2e23f48c0d1d0de3759ea79b68ec3e06435a1" + integrity sha512-sCc73pFBsl59eDfoQR5OCEZCRv5b0iywadunti6MQIr5lt3XpwxK1Iuzd8XSFO02N9jUifvuZRrt0cY0+NBgTg== dependencies: - "@ethersproject/bytes" "^5.0.0" - "@ethersproject/keccak256" "^5.0.0" - "@ethersproject/logger" "^5.0.0" - "@ethersproject/strings" "^5.0.0" + "@ethersproject/bignumber" "^5.0.13" -"@ethersproject/hdnode@5.0.7", "@ethersproject/hdnode@^5.0.4": - version "5.0.7" - resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.0.7.tgz#c7bce94a337ea65e37c46bab09a83e1c1a555d99" - integrity sha512-89tphqlji4y/LNE1cSaMQ3hrBtJ4lO1qWGi2hn54LiHym85DTw+zAKbA8QgmdSdJDLGR/kc9VHaIPQ+vZQ2LkQ== - dependencies: - "@ethersproject/abstract-signer" "^5.0.4" - "@ethersproject/basex" "^5.0.3" - "@ethersproject/bignumber" "^5.0.7" - "@ethersproject/bytes" "^5.0.4" - "@ethersproject/logger" "^5.0.5" - "@ethersproject/pbkdf2" "^5.0.3" - "@ethersproject/properties" "^5.0.3" - "@ethersproject/sha2" "^5.0.3" - "@ethersproject/signing-key" "^5.0.4" - "@ethersproject/strings" "^5.0.4" - "@ethersproject/transactions" "^5.0.5" - "@ethersproject/wordlists" "^5.0.4" - -"@ethersproject/hdnode@^5.0.0": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.0.2.tgz#c4f2152590a64822d0c0feb90f09cc247af657e0" - integrity sha512-QAUI5tfseTFqv00Vnbwzofqse81wN9TaL+x5GufTHIHJXgVdguxU+l39E3VYDCmO+eVAA6RCn5dJgeyra+PU2g== - dependencies: - "@ethersproject/abstract-signer" "^5.0.0" - "@ethersproject/basex" "^5.0.0" - "@ethersproject/bignumber" "^5.0.0" - "@ethersproject/bytes" "^5.0.0" - "@ethersproject/logger" "^5.0.0" - "@ethersproject/pbkdf2" "^5.0.0" - "@ethersproject/properties" "^5.0.0" - "@ethersproject/sha2" "^5.0.0" - "@ethersproject/signing-key" "^5.0.0" - "@ethersproject/strings" "^5.0.0" - "@ethersproject/transactions" "^5.0.0" - "@ethersproject/wordlists" "^5.0.0" - -"@ethersproject/json-wallets@5.0.9", "@ethersproject/json-wallets@^5.0.6": +"@ethersproject/contracts@5.0.9", "@ethersproject/contracts@^5.0.2": version "5.0.9" - resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.0.9.tgz#2e1708c2854c4ab764e35920bd1f44c948b95434" - integrity sha512-EWuFvJd8nu90dkmJwmJddxOYCvFvMkKBsZi8rxTme2XEZsHKOFnybVkoL23u7ZtApuEfTKmVcR2PTwgZwqDsKw== - dependencies: - "@ethersproject/abstract-signer" "^5.0.4" - "@ethersproject/address" "^5.0.4" - "@ethersproject/bytes" "^5.0.4" - "@ethersproject/hdnode" "^5.0.4" - "@ethersproject/keccak256" "^5.0.3" - "@ethersproject/logger" "^5.0.5" - "@ethersproject/pbkdf2" "^5.0.3" - "@ethersproject/properties" "^5.0.3" - "@ethersproject/random" "^5.0.3" - "@ethersproject/strings" "^5.0.4" - "@ethersproject/transactions" "^5.0.5" - aes-js "3.0.0" - scrypt-js "3.0.1" - -"@ethersproject/json-wallets@^5.0.0": - version "5.0.4" - resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.0.4.tgz#e09bf2d34279c6dd2b4a4d4c44db65471bacc68b" - integrity sha512-jqtb+X3rJXWG/w+Qyr7vq1V+fdc5jiLlyc6akwI3SQIHTfcuuyF+eZRd9u2/455urNwV3nuCsnrgxs2NrtHHIw== - dependencies: - "@ethersproject/abstract-signer" "^5.0.0" - "@ethersproject/address" "^5.0.0" - "@ethersproject/bytes" "^5.0.0" - "@ethersproject/hdnode" "^5.0.0" - "@ethersproject/keccak256" "^5.0.0" - "@ethersproject/logger" "^5.0.0" - "@ethersproject/pbkdf2" "^5.0.0" - "@ethersproject/properties" "^5.0.0" - "@ethersproject/random" "^5.0.0" - "@ethersproject/strings" "^5.0.0" - "@ethersproject/transactions" "^5.0.0" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.0.9.tgz#6c67c0ebe20ee1af903f7f43568401023334a181" + integrity sha512-CCTxVeDh6sjdSEbjzONhtwPjECvaHE62oGkY8M7kP0CHmgLD2SEGel0HZib8e5oQKRKGly9AKcUFW4g3rQ0AQw== + dependencies: + "@ethersproject/abi" "^5.0.10" + "@ethersproject/abstract-provider" "^5.0.8" + "@ethersproject/abstract-signer" "^5.0.10" + "@ethersproject/address" "^5.0.9" + "@ethersproject/bignumber" "^5.0.13" + "@ethersproject/bytes" "^5.0.9" + "@ethersproject/constants" "^5.0.8" + "@ethersproject/logger" "^5.0.8" + "@ethersproject/properties" "^5.0.7" + +"@ethersproject/hash@5.0.10", "@ethersproject/hash@>=5.0.0-beta.128", "@ethersproject/hash@^5.0.10": + version "5.0.10" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.0.10.tgz#41bf37428e8ddbc229ffd81c47af667174cb491a" + integrity sha512-Tf0bvs6YFhw28LuHnhlDWyr0xfcDxSXdwM4TcskeBbmXVSKLv3bJQEEEBFUcRX0fJuslR3gCVySEaSh7vuMx5w== + dependencies: + "@ethersproject/abstract-signer" "^5.0.10" + "@ethersproject/address" "^5.0.9" + "@ethersproject/bignumber" "^5.0.13" + "@ethersproject/bytes" "^5.0.9" + "@ethersproject/keccak256" "^5.0.7" + "@ethersproject/logger" "^5.0.8" + "@ethersproject/properties" "^5.0.7" + "@ethersproject/strings" "^5.0.8" + +"@ethersproject/hdnode@5.0.8", "@ethersproject/hdnode@^5.0.8": + version "5.0.8" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.0.8.tgz#2b52ede921cfbce8de49da774ec5a74025fc2bb1" + integrity sha512-Mscpjd7BBjxYSWghaNMwV0xrBBkOoCq6YEPRm9MgE24CiBlzzbfEB5DGq6hiZqhQaxPkdCUtKKqZi3nt9hx43g== + dependencies: + "@ethersproject/abstract-signer" "^5.0.10" + "@ethersproject/basex" "^5.0.7" + "@ethersproject/bignumber" "^5.0.13" + "@ethersproject/bytes" "^5.0.9" + "@ethersproject/logger" "^5.0.8" + "@ethersproject/pbkdf2" "^5.0.7" + "@ethersproject/properties" "^5.0.7" + "@ethersproject/sha2" "^5.0.7" + "@ethersproject/signing-key" "^5.0.8" + "@ethersproject/strings" "^5.0.8" + "@ethersproject/transactions" "^5.0.9" + "@ethersproject/wordlists" "^5.0.8" + +"@ethersproject/json-wallets@5.0.10", "@ethersproject/json-wallets@^5.0.10": + version "5.0.10" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.0.10.tgz#cdc9c27cb486762a3313e25f6f2fef0eb890dbaf" + integrity sha512-Ux36u+d7Dm0M5AQ+mWuHdvfGPMN8K1aaLQgwzrsD4ELTWlwRuHuQbmn7/GqeOpbfaV6POLwdYcBk2TXjlGp/IQ== + dependencies: + "@ethersproject/abstract-signer" "^5.0.10" + "@ethersproject/address" "^5.0.9" + "@ethersproject/bytes" "^5.0.9" + "@ethersproject/hdnode" "^5.0.8" + "@ethersproject/keccak256" "^5.0.7" + "@ethersproject/logger" "^5.0.8" + "@ethersproject/pbkdf2" "^5.0.7" + "@ethersproject/properties" "^5.0.7" + "@ethersproject/random" "^5.0.7" + "@ethersproject/strings" "^5.0.8" + "@ethersproject/transactions" "^5.0.9" aes-js "3.0.0" scrypt-js "3.0.1" -"@ethersproject/keccak256@5.0.6", "@ethersproject/keccak256@^5.0.3": - version "5.0.6" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.0.6.tgz#5b5ba715ef1be86efde5c271f896fa0daf0e1efe" - integrity sha512-eJ4Id/i2rwrf5JXEA7a12bG1phuxjj47mPZgDUbttuNBodhSuZF2nEO5QdpaRjmlphQ8Kt9PNqY/z7lhtJptZg== - dependencies: - "@ethersproject/bytes" "^5.0.4" - js-sha3 "0.5.7" - -"@ethersproject/keccak256@^5.0.0": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.0.2.tgz#7ed4a95bb45ee502cf4532223833740a83602797" - integrity sha512-MbroXutc0gPNYIrUjS4Aw0lDuXabdzI7+l7elRWr1G6G+W0v00e/3gbikWkCReGtt2Jnt4lQSgnflhDwQGcIhA== +"@ethersproject/keccak256@5.0.7", "@ethersproject/keccak256@>=5.0.0-beta.127", "@ethersproject/keccak256@^5.0.7": + version "5.0.7" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.0.7.tgz#2eedb5e4c160fcdf0079660f8ae362d7855ea943" + integrity sha512-zpUBmofWvx9PGfc7IICobgFQSgNmTOGTGLUxSYqZzY/T+b4y/2o5eqf/GGmD7qnTGzKQ42YlLNo+LeDP2qe55g== dependencies: - "@ethersproject/bytes" "^5.0.0" + "@ethersproject/bytes" "^5.0.9" js-sha3 "0.5.7" -"@ethersproject/logger@5.0.8", "@ethersproject/logger@^5.0.5": +"@ethersproject/logger@5.0.8", "@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.0.8": version "5.0.8" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.0.8.tgz#135c1903d35c878265f3cbf2b287042c4c20d5d4" integrity sha512-SkJCTaVTnaZ3/ieLF5pVftxGEFX56pTH+f2Slrpv7cU0TNpUZNib84QQdukd++sWUp/S7j5t5NW+WegbXd4U/A== -"@ethersproject/logger@^5.0.0": - version "5.0.4" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.0.4.tgz#09fa4765b5691233e3afb6617cb38a700f9dd2e4" - integrity sha512-alA2LiAy1LdQ/L1SA9ajUC7MvGAEQLsICEfKK4erX5qhkXE1LwLSPIzobtOWFsMHf2yrXGKBLnnpuVHprI3sAw== - -"@ethersproject/networks@5.0.6", "@ethersproject/networks@^5.0.3": - version "5.0.6" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.0.6.tgz#4d6586bbebfde1c027504ebf6dfb783b29c3803a" - integrity sha512-2Cg1N5109zzFOBfkyuPj+FfF7ioqAsRffmybJ2lrsiB5skphIAE72XNSCs4fqktlf+rwSh/5o/UXRjXxvSktZw== - dependencies: - "@ethersproject/logger" "^5.0.5" - -"@ethersproject/networks@^5.0.0": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.0.2.tgz#a49e82cf071e3618e87e3c5d69fdbcf54dc6766c" - integrity sha512-T7HVd62D4izNU2tDHf6xUDo7k4JOGX4Lk7vDmVcDKrepSWwL2OmGWrqSlkRe2a1Dnz4+1VPE6fb6+KsmSRe82g== - dependencies: - "@ethersproject/logger" "^5.0.0" - -"@ethersproject/pbkdf2@5.0.6", "@ethersproject/pbkdf2@^5.0.3": - version "5.0.6" - resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.0.6.tgz#105dbfb08cd5fcf33869b42bfdc35a3ebd978cbd" - integrity sha512-CUYciSxR/AaCoKMJk3WUW+BDhR41G3C+O9lOeZ4bR1wDhLKL2Z8p0ciF5XDEiVbmI4CToW6boVKybeVMdngRrg== - dependencies: - "@ethersproject/bytes" "^5.0.4" - "@ethersproject/sha2" "^5.0.3" - -"@ethersproject/pbkdf2@^5.0.0": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.0.2.tgz#d12c5f434bbdf6f52401eddb7d753a713dd9e4ea" - integrity sha512-OJFxdX/VtGI5M04lAzXKEOb76XBzjCOzGyko3/bMWat3ePAw7RveBOLyhm79SBs2fh21MSYgdG6JScEMHoSImw== +"@ethersproject/networks@5.0.7", "@ethersproject/networks@^5.0.7": + version "5.0.7" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.0.7.tgz#8d06e41197b27c2404d89a29ca21f741a01acbfc" + integrity sha512-dI14QATndIcUgcCBL1c5vUr/YsI5cCHLN81rF7PU+yS7Xgp2/Rzbr9+YqpC6NBXHFUASjh6GpKqsVMpufAL0BQ== dependencies: - "@ethersproject/bytes" "^5.0.0" - "@ethersproject/sha2" "^5.0.0" + "@ethersproject/logger" "^5.0.8" -"@ethersproject/properties@5.0.6", "@ethersproject/properties@^5.0.3", "@ethersproject/properties@^5.0.4": - version "5.0.6" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.0.6.tgz#44d82aaa294816fd63333e7def42426cf0e87b3b" - integrity sha512-a9DUMizYhJ0TbtuDkO9iYlb2CDlpSKqGPDr+amvlZhRspQ6jbl5Eq8jfu4SCcGlcfaTbguJmqGnyOGn1EFt6xA== +"@ethersproject/pbkdf2@5.0.7", "@ethersproject/pbkdf2@^5.0.7": + version "5.0.7" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.0.7.tgz#a36fdb7327760ec0096857053e01c923a63417da" + integrity sha512-0SNLNixPMqnosH6pyc4yPiUu/C9/Jbu+f6I8GJW9U2qNpMBddmRJviwseoha5Zw1V+Aw0Z/yvYyzIIE8yPXqLA== dependencies: - "@ethersproject/logger" "^5.0.5" + "@ethersproject/bytes" "^5.0.9" + "@ethersproject/sha2" "^5.0.7" -"@ethersproject/properties@^5.0.0": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.0.2.tgz#2facb62d2f2d968c7b3d0befa5bcc884cc565d3b" - integrity sha512-FxAisPGAOACQjMJzewl9OJG6lsGCPTm5vpUMtfeoxzAlAb2lv+kHzQPUh9h4jfAILzE8AR1jgXMzRmlhwyra1Q== - dependencies: - "@ethersproject/logger" "^5.0.0" - -"@ethersproject/providers@5.0.17": - version "5.0.17" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.0.17.tgz#f380e7831149e24e7a1c6c9b5fb1d6dfc729d024" - integrity sha512-bJnvs5X7ttU5x2ekGJYG7R3Z+spZawLFfR0IDsbaMDLiCwZOyrgk+VTBU7amSFLT0WUhWFv8WwSUB+AryCQG1Q== - dependencies: - "@ethersproject/abstract-provider" "^5.0.4" - "@ethersproject/abstract-signer" "^5.0.4" - "@ethersproject/address" "^5.0.4" - "@ethersproject/basex" "^5.0.3" - "@ethersproject/bignumber" "^5.0.7" - "@ethersproject/bytes" "^5.0.4" - "@ethersproject/constants" "^5.0.4" - "@ethersproject/hash" "^5.0.4" - "@ethersproject/logger" "^5.0.5" - "@ethersproject/networks" "^5.0.3" - "@ethersproject/properties" "^5.0.3" - "@ethersproject/random" "^5.0.3" - "@ethersproject/rlp" "^5.0.3" - "@ethersproject/sha2" "^5.0.3" - "@ethersproject/strings" "^5.0.4" - "@ethersproject/transactions" "^5.0.5" - "@ethersproject/web" "^5.0.6" +"@ethersproject/properties@5.0.7", "@ethersproject/properties@>=5.0.0-beta.131", "@ethersproject/properties@^5.0.7": + version "5.0.7" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.0.7.tgz#951d11ba592ff90bbe8ec34c5a03a5157e3b3360" + integrity sha512-812H1Rus2vjw0zbasfDI1GLNPDsoyX1pYqiCgaR1BuyKxUTbwcH1B+214l6VGe1v+F6iEVb7WjIwMjKhb4EUsg== + dependencies: + "@ethersproject/logger" "^5.0.8" + +"@ethersproject/providers@5.0.19", "@ethersproject/providers@^5.0.5": + version "5.0.19" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.0.19.tgz#94c8f1a86755ee4187911fc6250e94b1116c089a" + integrity sha512-G+flo1jK1y/rvQy6b71+Nu7qOlkOKz+XqpgqFMZslkCzGuzQRmk9Qp7Ln4soK8RSyP1e5TCujaRf1H+EZahoaw== + dependencies: + "@ethersproject/abstract-provider" "^5.0.8" + "@ethersproject/abstract-signer" "^5.0.10" + "@ethersproject/address" "^5.0.9" + "@ethersproject/basex" "^5.0.7" + "@ethersproject/bignumber" "^5.0.13" + "@ethersproject/bytes" "^5.0.9" + "@ethersproject/constants" "^5.0.8" + "@ethersproject/hash" "^5.0.10" + "@ethersproject/logger" "^5.0.8" + "@ethersproject/networks" "^5.0.7" + "@ethersproject/properties" "^5.0.7" + "@ethersproject/random" "^5.0.7" + "@ethersproject/rlp" "^5.0.7" + "@ethersproject/sha2" "^5.0.7" + "@ethersproject/strings" "^5.0.8" + "@ethersproject/transactions" "^5.0.9" + "@ethersproject/web" "^5.0.12" bech32 "1.1.4" ws "7.2.3" -"@ethersproject/providers@^5.0.0", "@ethersproject/providers@^5.0.5": - version "5.0.5" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.0.5.tgz#fa28498ce9683d1d99f6cb11e1a7fe8d4886e0ce" - integrity sha512-ZR3yFg/m8qDl7317yXOHE7tKeGfoyZIZ/imhVC4JqAH+SX1rb6bdZcSjhJfet7rLmnJSsnYLTgIiVIT85aVLgg== - dependencies: - "@ethersproject/abstract-provider" "^5.0.0" - "@ethersproject/abstract-signer" "^5.0.0" - "@ethersproject/address" "^5.0.0" - "@ethersproject/bignumber" "^5.0.0" - "@ethersproject/bytes" "^5.0.0" - "@ethersproject/constants" "^5.0.0" - "@ethersproject/hash" "^5.0.0" - "@ethersproject/logger" "^5.0.0" - "@ethersproject/networks" "^5.0.0" - "@ethersproject/properties" "^5.0.0" - "@ethersproject/random" "^5.0.0" - "@ethersproject/rlp" "^5.0.0" - "@ethersproject/strings" "^5.0.0" - "@ethersproject/transactions" "^5.0.0" - "@ethersproject/web" "^5.0.0" - ws "7.2.3" - -"@ethersproject/random@5.0.6", "@ethersproject/random@^5.0.3": - version "5.0.6" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.0.6.tgz#9be80a1065f2b8e6f321dccb3ebeb4886cac9ea4" - integrity sha512-8nsVNaZvZ9OD5NXfzE4mmz8IH/1DYJbAR95xpRxZkIuNmfn6QlMp49ccJYZWGhs6m0Zj2+FXjx3pzXfYlo9/dA== - dependencies: - "@ethersproject/bytes" "^5.0.4" - "@ethersproject/logger" "^5.0.5" - -"@ethersproject/random@^5.0.0": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.0.2.tgz#bb58aca69a85e8de506686117f050d03dac69023" - integrity sha512-kLeS+6bwz37WR2zbe69gudyoGVoUzljQO0LhifnATsZ7rW0JZ9Zgt0h5aXY7tqFDo9TvdqeCwUFdp1t3T5Fkhg== - dependencies: - "@ethersproject/bytes" "^5.0.0" - "@ethersproject/logger" "^5.0.0" - -"@ethersproject/rlp@5.0.6", "@ethersproject/rlp@^5.0.3": - version "5.0.6" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.0.6.tgz#29f9097348a3c330811997433b7df89ab51cd644" - integrity sha512-M223MTaydfmQSsvqAl0FJZDYFlSqt6cgbhnssLDwqCKYegAHE16vrFyo+eiOapYlt32XAIJm0BXlqSunULzZuQ== - dependencies: - "@ethersproject/bytes" "^5.0.4" - "@ethersproject/logger" "^5.0.5" - -"@ethersproject/rlp@^5.0.0": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.0.2.tgz#d6b550a2ac5e484f15f0f63337e522004d2e78cd" - integrity sha512-oE0M5jqQ67fi2SuMcrpoewOpEuoXaD8M9JeR9md1bXRMvDYgKXUtDHs22oevpEOdnO2DPIRabp6MVHa4aDuWmw== - dependencies: - "@ethersproject/bytes" "^5.0.0" - "@ethersproject/logger" "^5.0.0" - -"@ethersproject/sha2@5.0.6", "@ethersproject/sha2@^5.0.3": - version "5.0.6" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.0.6.tgz#175116dc10b866a0a381f6316d094bcc510bee3c" - integrity sha512-30gypDLkfkP5gE3llqi0jEuRV8m4/nvzeqmqMxiihZ7veFQHqDaGpyFeHzFim+qGeH9fq0lgYjavLvwW69+Fkw== - dependencies: - "@ethersproject/bytes" "^5.0.4" - "@ethersproject/logger" "^5.0.5" - hash.js "1.1.3" - -"@ethersproject/sha2@^5.0.0": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.0.2.tgz#baefc78c071be8729b180759eb29267129314252" - integrity sha512-VFl4qSStjQZaygpqoAHswaCY59qBm1Sm0rf8iv0tmgVsRf0pBg2nJaNf9NXXvcuJ9AYPyXl57dN8kozdC4z5Cg== - dependencies: - "@ethersproject/bytes" "^5.0.0" - "@ethersproject/logger" "^5.0.0" - hash.js "1.1.3" - -"@ethersproject/signing-key@5.0.7", "@ethersproject/signing-key@^5.0.4": +"@ethersproject/random@5.0.7", "@ethersproject/random@^5.0.7": version "5.0.7" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.0.7.tgz#d03bfc5f565efb962bafebf8e6965e70d1c46d31" - integrity sha512-JYndnhFPKH0daPcIjyhi+GMcw3srIHkQ40hGRe6DA0CdGrpMfgyfSYDQ2D8HL2lgR+Xm4SHfEB0qba6+sCyrvg== - dependencies: - "@ethersproject/bytes" "^5.0.4" - "@ethersproject/logger" "^5.0.5" - "@ethersproject/properties" "^5.0.3" - elliptic "6.5.3" - -"@ethersproject/signing-key@^5.0.0": - version "5.0.3" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.0.3.tgz#adb84360e147bfd336cb2fe114100120732dc10a" - integrity sha512-5QPZaBRGCLzfVMbFb3LcVjNR0UbTXnwDHASnQYfbzwUOnFYHKxHsrcbl/5ONGoppgi8yXgOocKqlPCFycJJVWQ== + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.0.7.tgz#e364268ce68bf6d300c36d654e622fd9d26b3a86" + integrity sha512-PxSRWwN3s+FH9AWMZU6AcWJsNQ9KzqKV6NgdeKPtxahdDjCuXxTAuzTZNXNRK+qj+Il351UnweAGd+VuZcOAlQ== dependencies: - "@ethersproject/bytes" "^5.0.0" - "@ethersproject/logger" "^5.0.0" - "@ethersproject/properties" "^5.0.0" - elliptic "6.5.3" + "@ethersproject/bytes" "^5.0.9" + "@ethersproject/logger" "^5.0.8" -"@ethersproject/solidity@5.0.7": +"@ethersproject/rlp@5.0.7", "@ethersproject/rlp@^5.0.7": version "5.0.7" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.0.7.tgz#72a3455f47a454db2dcf363992d42e9045dc7fce" - integrity sha512-dUevKUZ06p/VMLP/+cz4QUV+lA17NixucDJfm0ioWF0B3R0Lf+6wqwPchcqiAXlxkNFGIax7WNLgGMh4CkQ8iw== - dependencies: - "@ethersproject/bignumber" "^5.0.7" - "@ethersproject/bytes" "^5.0.4" - "@ethersproject/keccak256" "^5.0.3" - "@ethersproject/sha2" "^5.0.3" - "@ethersproject/strings" "^5.0.4" - -"@ethersproject/solidity@^5.0.0", "@ethersproject/solidity@^5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.0.2.tgz#431cee341ec51e022bd897b93fef04521f414756" - integrity sha512-RygurUe1hPW1LDYAPXy4471AklGWNnxgFWc3YUE6H11gzkit26jr6AyZH4Yyjw38eBBL6j0AOfQzMWm+NhxZ9g== + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.0.7.tgz#cfa4fa6415960a435b7814e1a29bdfea657e2b6e" + integrity sha512-ulUTVEuV7PT4jJTPpfhRHK57tkLEDEY9XSYJtrSNHOqdwMvH0z7BM2AKIMq4LVDlnu4YZASdKrkFGEIO712V9w== dependencies: - "@ethersproject/bignumber" "^5.0.0" - "@ethersproject/bytes" "^5.0.0" - "@ethersproject/keccak256" "^5.0.0" - "@ethersproject/sha2" "^5.0.0" - "@ethersproject/strings" "^5.0.0" + "@ethersproject/bytes" "^5.0.9" + "@ethersproject/logger" "^5.0.8" -"@ethersproject/strings@5.0.7", "@ethersproject/strings@^5.0.4": +"@ethersproject/sha2@5.0.7", "@ethersproject/sha2@^5.0.7": version "5.0.7" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.0.7.tgz#8dc68f794c9e2901f3b75e53b2afbcb6b6c15037" - integrity sha512-a+6T80LvmXGMOOWQTZHtGGQEg1z4v8rm8oX70KNs55YtPXI/5J3LBbVf5pyqCKSlmiBw5IaepPvs5XGalRUSZQ== + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.0.7.tgz#ef9f18770c9f90a6cfd73840b0c3400910219099" + integrity sha512-MbUqz68hhp5RsaZdqi1eg1rrtiqt5wmhRYqdA7MX8swBkzW2KiLgK+Oh25UcWhUhdi1ImU9qrV6if5j0cC7Bxg== dependencies: - "@ethersproject/bytes" "^5.0.4" - "@ethersproject/constants" "^5.0.4" - "@ethersproject/logger" "^5.0.5" + "@ethersproject/bytes" "^5.0.9" + "@ethersproject/logger" "^5.0.8" + hash.js "1.1.3" -"@ethersproject/strings@^5.0.0": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.0.2.tgz#1753408c3c889813fd0992abd76393e3e47a2619" - integrity sha512-oNa+xvSqsFU96ndzog0IBTtsRFGOqGpzrXJ7shXLBT7juVeSEyZA/sYs0DMZB5mJ9FEjHdZKxR/rTyBY91vuXg== +"@ethersproject/signing-key@5.0.8", "@ethersproject/signing-key@^5.0.8": + version "5.0.8" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.0.8.tgz#156522e542916b9aa9135527b40c5b6f9235af02" + integrity sha512-YKxQM45eDa6WAD+s3QZPdm1uW1MutzVuyoepdRRVmMJ8qkk7iOiIhUkZwqKLNxKzEJijt/82ycuOREc9WBNAKg== dependencies: - "@ethersproject/bytes" "^5.0.0" - "@ethersproject/constants" "^5.0.0" - "@ethersproject/logger" "^5.0.0" + "@ethersproject/bytes" "^5.0.9" + "@ethersproject/logger" "^5.0.8" + "@ethersproject/properties" "^5.0.7" + elliptic "6.5.3" -"@ethersproject/transactions@5.0.8", "@ethersproject/transactions@^5.0.5": +"@ethersproject/solidity@5.0.8", "@ethersproject/solidity@^5.0.2": version "5.0.8" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.0.8.tgz#3b4d7041e13b957a9c4f131e0aea9dae7b6f5a23" - integrity sha512-i7NtOXVzUe+YSU6QufzlRrI2WzHaTmULAKHJv4duIZMLqzehCBXGA9lTpFgFdqGYcQJ7vOtNFC2BB2mSjmuXqg== - dependencies: - "@ethersproject/address" "^5.0.4" - "@ethersproject/bignumber" "^5.0.7" - "@ethersproject/bytes" "^5.0.4" - "@ethersproject/constants" "^5.0.4" - "@ethersproject/keccak256" "^5.0.3" - "@ethersproject/logger" "^5.0.5" - "@ethersproject/properties" "^5.0.3" - "@ethersproject/rlp" "^5.0.3" - "@ethersproject/signing-key" "^5.0.4" - -"@ethersproject/transactions@^5.0.0", "@ethersproject/transactions@^5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.0.2.tgz#590ede71fc87b45be7bd46002e18ae52246a2347" - integrity sha512-jZp0ZbbJlq4JLZY6qoMzNtp2HQsX6USQposi3ns0MPUdn3OdZJBDtrcO15r/2VS5t/K1e1GE5MI1HmMKlcTbbQ== - dependencies: - "@ethersproject/address" "^5.0.0" - "@ethersproject/bignumber" "^5.0.0" - "@ethersproject/bytes" "^5.0.0" - "@ethersproject/constants" "^5.0.0" - "@ethersproject/keccak256" "^5.0.0" - "@ethersproject/logger" "^5.0.0" - "@ethersproject/properties" "^5.0.0" - "@ethersproject/rlp" "^5.0.0" - "@ethersproject/signing-key" "^5.0.0" - -"@ethersproject/units@5.0.8": - version "5.0.8" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.0.8.tgz#563325b20fe1eceff7b61857711d5e2b3f38fd09" - integrity sha512-3O4MaNHFs05vC5v2ZGqVFVWtO1WyqFejO78M7Qh16njo282aoMlENtVI6cn2B36zOLFXRvYt2pYx6xCG53qKzg== + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.0.8.tgz#a260116a794bc97558d89e98f59831ce8d25c733" + integrity sha512-OJkyBq9KaoGsi8E8mYn6LX+vKyCURvxSp0yuGBcOqEFM3vkn9PsCiXsHdOXdNBvlHG5evJXwAYC2UR0TzgJeKA== dependencies: - "@ethersproject/bignumber" "^5.0.7" - "@ethersproject/constants" "^5.0.4" - "@ethersproject/logger" "^5.0.5" + "@ethersproject/bignumber" "^5.0.13" + "@ethersproject/bytes" "^5.0.9" + "@ethersproject/keccak256" "^5.0.7" + "@ethersproject/sha2" "^5.0.7" + "@ethersproject/strings" "^5.0.8" -"@ethersproject/units@^5.0.0": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.0.2.tgz#de1461ff3ad2587e57bf367d056b6b72cfceda78" - integrity sha512-PSuzycBA1zmRysTtKtp+XYZ3HIJfbmfRdZchOUxdyeGo5siUi9H6mYQcxdJHv82oKp/FniMj8qS8qtLQThhOEg== +"@ethersproject/strings@5.0.8", "@ethersproject/strings@>=5.0.0-beta.130", "@ethersproject/strings@^5.0.8": + version "5.0.8" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.0.8.tgz#11a1b0ed1e8417408693789839f0b5f4e323c0c9" + integrity sha512-5IsdXf8tMY8QuHl8vTLnk9ehXDDm6x9FB9S9Og5IA1GYhLe5ZewydXSjlJlsqU2t9HRbfv97OJZV/pX8DVA/Hw== dependencies: - "@ethersproject/bignumber" "^5.0.0" - "@ethersproject/constants" "^5.0.0" - "@ethersproject/logger" "^5.0.0" + "@ethersproject/bytes" "^5.0.9" + "@ethersproject/constants" "^5.0.8" + "@ethersproject/logger" "^5.0.8" -"@ethersproject/wallet@5.0.9": +"@ethersproject/transactions@5.0.9", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.0.2", "@ethersproject/transactions@^5.0.9": version "5.0.9" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.0.9.tgz#976c7d950489c40308d676869d24e59ab7b82ad1" - integrity sha512-GfpQF56PO/945SJq7Wdg5F5U6wkxaDgkAzcgGbCW6Joz8oW8MzKItkvYCzMh+j/8gJMzFncsuqX4zg2gq3J6nQ== - dependencies: - "@ethersproject/abstract-provider" "^5.0.4" - "@ethersproject/abstract-signer" "^5.0.4" - "@ethersproject/address" "^5.0.4" - "@ethersproject/bignumber" "^5.0.7" - "@ethersproject/bytes" "^5.0.4" - "@ethersproject/hash" "^5.0.4" - "@ethersproject/hdnode" "^5.0.4" - "@ethersproject/json-wallets" "^5.0.6" - "@ethersproject/keccak256" "^5.0.3" - "@ethersproject/logger" "^5.0.5" - "@ethersproject/properties" "^5.0.3" - "@ethersproject/random" "^5.0.3" - "@ethersproject/signing-key" "^5.0.4" - "@ethersproject/transactions" "^5.0.5" - "@ethersproject/wordlists" "^5.0.4" - -"@ethersproject/wallet@^5.0.0", "@ethersproject/wallet@^5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.0.2.tgz#714ca8324c1b3b66e51b9b4e0358c882e88caf1d" - integrity sha512-gg86ynLV5k5caNnYpJoYc6WyIUHKMTjOITCk5zXGyVbbkXE07y/fGql4A51W0C6mWkeb5Mzz8AKqzHZECdH30w== - dependencies: - "@ethersproject/abstract-provider" "^5.0.0" - "@ethersproject/abstract-signer" "^5.0.0" - "@ethersproject/address" "^5.0.0" - "@ethersproject/bignumber" "^5.0.0" - "@ethersproject/bytes" "^5.0.0" - "@ethersproject/hash" "^5.0.0" - "@ethersproject/hdnode" "^5.0.0" - "@ethersproject/json-wallets" "^5.0.0" - "@ethersproject/keccak256" "^5.0.0" - "@ethersproject/logger" "^5.0.0" - "@ethersproject/properties" "^5.0.0" - "@ethersproject/random" "^5.0.0" - "@ethersproject/signing-key" "^5.0.0" - "@ethersproject/transactions" "^5.0.0" - "@ethersproject/wordlists" "^5.0.0" - -"@ethersproject/web@5.0.11", "@ethersproject/web@^5.0.6": - version "5.0.11" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.0.11.tgz#d47da612b958b4439e415782a53c8f8461522d68" - integrity sha512-x03ihbPoN1S8Gsh9WSwxkYxUIumLi02ZEKJku1C43sxBfe+mdprWyvujzYlpuoRNfWRgNhdRDKMP8JbG6MwNGA== - dependencies: - "@ethersproject/base64" "^5.0.3" - "@ethersproject/bytes" "^5.0.4" - "@ethersproject/logger" "^5.0.5" - "@ethersproject/properties" "^5.0.3" - "@ethersproject/strings" "^5.0.4" - -"@ethersproject/web@^5.0.0": - version "5.0.3" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.0.3.tgz#f5673923009bb855302f0296ddb932da8e42f0a1" - integrity sha512-9WoIWNxbFOk+8TiWqQMQbYJUIFeC1Z7zNr7oCHpVyhxF0EY54ZVXlP/Y7VJ7KzK++A/iMGOuTIGeL5sMqa2QMg== - dependencies: - "@ethersproject/base64" "^5.0.0" - "@ethersproject/bytes" "^5.0.0" - "@ethersproject/logger" "^5.0.0" - "@ethersproject/properties" "^5.0.0" - "@ethersproject/strings" "^5.0.0" - -"@ethersproject/wordlists@5.0.7", "@ethersproject/wordlists@^5.0.4": - version "5.0.7" - resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.0.7.tgz#4e5ad38cfbef746b196a3290c0d41696eb7ab468" - integrity sha512-ZjQtYxm41FmHfYgpkdQG++EDcBPQWv9O6FfP6NndYRVaXaQZh6eq3sy7HQP8zCZ8dznKgy6ZyKECS8qdvnGHwA== + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.0.9.tgz#ccfcc1d395b5e3ce7342545fa28bfe5541182fd6" + integrity sha512-0Fu1yhdFBkrbMjenEr+39tmDxuHmaw0pe9Jb18XuKoItj7Z3p7+UzdHLr2S/okvHDHYPbZE5gtANDdQ3ZL1nBA== + dependencies: + "@ethersproject/address" "^5.0.9" + "@ethersproject/bignumber" "^5.0.13" + "@ethersproject/bytes" "^5.0.9" + "@ethersproject/constants" "^5.0.8" + "@ethersproject/keccak256" "^5.0.7" + "@ethersproject/logger" "^5.0.8" + "@ethersproject/properties" "^5.0.7" + "@ethersproject/rlp" "^5.0.7" + "@ethersproject/signing-key" "^5.0.8" + +"@ethersproject/units@5.0.9": + version "5.0.9" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.0.9.tgz#f8dc406f593eadcba883d6e86cc077203b03e7da" + integrity sha512-4jIkcMVrJ3lCgXMO4M/2ww0/T/IN08vJTZld7FIAwa6aoBDTAy71+sby3sShl1SG3HEeKYbI3fBWauCUgPRUpQ== + dependencies: + "@ethersproject/bignumber" "^5.0.13" + "@ethersproject/constants" "^5.0.8" + "@ethersproject/logger" "^5.0.8" + +"@ethersproject/wallet@5.0.10", "@ethersproject/wallet@^5.0.2": + version "5.0.10" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.0.10.tgz#16ad0864d9e0e2b57fb32d768ea4161891d62727" + integrity sha512-5siYr38NhqZKH6DUr6u4PdhgOKur8Q6sw+JID2TitEUmW0tOl8f6rpxAe77tw6SJT60D2UcvgsyLtl32+Nl+ig== + dependencies: + "@ethersproject/abstract-provider" "^5.0.8" + "@ethersproject/abstract-signer" "^5.0.10" + "@ethersproject/address" "^5.0.9" + "@ethersproject/bignumber" "^5.0.13" + "@ethersproject/bytes" "^5.0.9" + "@ethersproject/hash" "^5.0.10" + "@ethersproject/hdnode" "^5.0.8" + "@ethersproject/json-wallets" "^5.0.10" + "@ethersproject/keccak256" "^5.0.7" + "@ethersproject/logger" "^5.0.8" + "@ethersproject/properties" "^5.0.7" + "@ethersproject/random" "^5.0.7" + "@ethersproject/signing-key" "^5.0.8" + "@ethersproject/transactions" "^5.0.9" + "@ethersproject/wordlists" "^5.0.8" + +"@ethersproject/web@5.0.12", "@ethersproject/web@^5.0.12": + version "5.0.12" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.0.12.tgz#f123397c107f863c31fce5f31a97c66ec155e755" + integrity sha512-gVxS5iW0bgidZ76kr7LsTxj4uzN5XpCLzvZrLp8TP+4YgxHfCeetFyQkRPgBEAJdNrexdSBayvyJvzGvOq0O8g== dependencies: - "@ethersproject/bytes" "^5.0.4" - "@ethersproject/hash" "^5.0.4" - "@ethersproject/logger" "^5.0.5" - "@ethersproject/properties" "^5.0.3" - "@ethersproject/strings" "^5.0.4" + "@ethersproject/base64" "^5.0.7" + "@ethersproject/bytes" "^5.0.9" + "@ethersproject/logger" "^5.0.8" + "@ethersproject/properties" "^5.0.7" + "@ethersproject/strings" "^5.0.8" -"@ethersproject/wordlists@^5.0.0": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.0.2.tgz#eded47314509c8608373fc2b22879ee2b71b7c7c" - integrity sha512-6vKDQcjjpnfdSCr0+jNxpFH3ieKxUPkm29tQX2US7a3zT/sJU/BGlKBR7D8oOpwdE0hpkHhJyMlypRBK+A2avA== +"@ethersproject/wordlists@5.0.8", "@ethersproject/wordlists@^5.0.8": + version "5.0.8" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.0.8.tgz#593319b710a5a1f4e839b72641aa765b4f111137" + integrity sha512-px2mloc1wAcdTbzv0ZotTx+Uh/dfnDO22D9Rx8xr7+/PUwAhZQjoJ9t7Hn72nsaN83rWBXsLvFcIRZju4GIaEQ== dependencies: - "@ethersproject/bytes" "^5.0.0" - "@ethersproject/hash" "^5.0.0" - "@ethersproject/logger" "^5.0.0" - "@ethersproject/properties" "^5.0.0" - "@ethersproject/strings" "^5.0.0" + "@ethersproject/bytes" "^5.0.9" + "@ethersproject/hash" "^5.0.10" + "@ethersproject/logger" "^5.0.8" + "@ethersproject/properties" "^5.0.7" + "@ethersproject/strings" "^5.0.8" -"@nodelib/fs.scandir@2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" - integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== +"@nodelib/fs.scandir@2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" + integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== dependencies: - "@nodelib/fs.stat" "2.0.3" + "@nodelib/fs.stat" "2.0.4" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" - integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== +"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" + integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== "@nodelib/fs.walk@^1.2.3": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" - integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== + version "1.2.6" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" + integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== dependencies: - "@nodelib/fs.scandir" "2.1.3" + "@nodelib/fs.scandir" "2.1.4" fastq "^1.6.0" +"@nomiclabs/buidler@1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@nomiclabs/buidler/-/buidler-1.3.0.tgz#2d4b00945bfceba2f7d0202b57e219641b1783ca" + integrity sha512-9Oalatnwb4xiJxdPQufvAXM58V9+MbbKudQz8ckUkLP0e17fF35XvV6+kxeigJKWkabOdBMN5s4YkjGJSzOfVA== + dependencies: + "@nomiclabs/ethereumjs-vm" "^4.1.1" + "@solidity-parser/parser" "^0.5.2" + "@types/bn.js" "^4.11.5" + "@types/lru-cache" "^5.1.0" + abort-controller "^3.0.0" + ansi-escapes "^4.3.0" + bip32 "^2.0.3" + bip39 "^3.0.2" + chalk "^2.4.2" + ci-info "^2.0.0" + debug "^4.1.1" + deepmerge "^2.1.0" + download "^7.1.0" + enquirer "^2.3.0" + eth-sig-util "^2.5.2" + ethereumjs-abi "^0.6.8" + ethereumjs-account "^3.0.0" + ethereumjs-block "^2.2.0" + ethereumjs-common "^1.3.2" + ethereumjs-tx "^2.1.1" + ethereumjs-util "^6.1.0" + find-up "^2.1.0" + fp-ts "1.19.3" + fs-extra "^7.0.1" + glob "^7.1.3" + io-ts "1.10.4" + is-installed-globally "^0.2.0" + lodash "^4.17.11" + merkle-patricia-tree "^3.0.0" + mocha "^5.2.0" + node-fetch "^2.6.0" + qs "^6.7.0" + raw-body "^2.4.1" + semver "^6.3.0" + slash "^3.0.0" + solc "0.5.15" + source-map-support "^0.5.13" + ts-essentials "^2.0.7" + tsort "0.0.1" + uuid "^3.3.2" + ws "^7.2.1" + "@nomiclabs/ethereumjs-vm@^4.1.1": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@nomiclabs/ethereumjs-vm/-/ethereumjs-vm-4.2.0.tgz#a853bdb4fb032529f810f32bb767551d19d7ce57" - integrity sha512-+XwqoO941bILTO4KDLIUJ37U42ySxw6it7jyoi0tKv0/VUcOrWKF1TCQWMv6dBDRlxpPQd273n9o5SVlYYLRWQ== + version "4.2.1" + resolved "https://registry.yarnpkg.com/@nomiclabs/ethereumjs-vm/-/ethereumjs-vm-4.2.1.tgz#768a6a071f88a9f3d27e560b899f86191d53bb72" + integrity sha512-vVloT6g/QNPasIrGWpR583b9nn1cBjNIQtaVdunEvwVFnEmTpsE0U67OiAiqYZmd0g7zqQrj2jepw0GEgnAz7Q== dependencies: async "^2.1.2" async-eventemitter "^0.2.2" @@ -820,31 +555,45 @@ safe-buffer "^5.1.1" util.promisify "^1.0.0" -"@nomiclabs/hardhat-ethers@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.0.tgz#ebab032b3aed03945ea560f56bb67aec56a30cbc" - integrity sha512-fIi6XP9PgKqwSNVcLDr6S5hvGlc21PendaLD5eGdXEXc9aYQ0OJX8Mk3evs+p78x7W9n9U3ZcKtTiGc1+YScDw== - -"@nomiclabs/hardhat-etherscan@^2.0.1": +"@nomiclabs/hardhat-ethers@2.0.1": version "2.0.1" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-2.0.1.tgz#576c162b0c2b8f5913b3853f4591e98ccc1c2e4d" - integrity sha512-5xPh5xhLXO1tDO0VTc4qlqqgv2m1bL+pXLSFibUVJ2EzzXHKn1C4ioHmYgseIkoNC3iG19cSJ7gRcQz4u54pGQ== + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.1.tgz#f86a6fa210dbe6270adffccc75e93ed60a856904" + integrity sha512-uTFHDhhvJ+UjfvvMeQxD3ZALuzuI3FXzTYT1Z5N3ebyZL5z4Ogwt55GB0R9tdKY0p5HhDhBjU/gsCjUEwIVoaw== + +"@nomiclabs/hardhat-etherscan@2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-2.1.1.tgz#186f3fa652a0ca20fb77aa857cfad2da845d5cbf" + integrity sha512-8TNUFsO5DpAfwNlXMDhcEtFAMOYsVNaQL2vq5vuCD45kUKBgL8H21++zOk231ha9D7LQWBMCIg7A7iPxw6Jwmg== dependencies: "@ethersproject/abi" "^5.0.2" "@ethersproject/address" "^5.0.2" cbor "^5.0.2" + debug "^4.1.1" fs-extra "^7.0.1" node-fetch "^2.6.0" semver "^6.3.0" -"@nomiclabs/hardhat-waffle@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.0.tgz#b06533c802da1a9d614e432f719d2816384df9b3" - integrity sha512-CnG9JC0rgqa68LTgyETxBUEWYAovvNGVs5abqaXjG80eF7iMLjDjM8IjOM87siAaxaxFCf6VBMJmtueqVq7jZw== +"@nomiclabs/hardhat-waffle@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.1.tgz#5d43654fba780720c5033dea240fe14f70ef4bd2" + integrity sha512-2YR2V5zTiztSH9n8BYWgtv3Q+EL0N5Ltm1PAr5z20uAY4SkkfylJ98CIqt18XFvxTD5x4K2wKBzddjV9ViDAZQ== dependencies: "@types/sinon-chai" "^3.2.3" "@types/web3" "1.0.19" +"@openzeppelin/contracts@3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-3.4.0.tgz#9a1669ad5f9fdfb6e273bb5a4fed10cb4cc35eb0" + integrity sha512-qh+EiHWzfY/9CORr+eRUkeEUP1WiFUcq3974bLHwyYzLBUtK6HPaMkIUHi74S1rDTZ0sNz42DwPc5A4IJvN3rg== + +"@pie-dao/proxy@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@pie-dao/proxy/-/proxy-1.0.0.tgz#0866289898dc6180161b5058f6ef8000f7b5e66f" + integrity sha512-4DGyK6o33YAY8led9FllFIu9HwmrUsq40wdLMjpNW9Ik+jDhoguKLaQ5oeDaGs8DyT+Z0LVSQJVkBNYGLWRJ6w== + dependencies: + "@nomiclabs/buidler" "1.3.0" + dotenv "^8.2.0" + "@pie-dao/utils@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@pie-dao/utils/-/utils-1.0.0.tgz#c504c080c5f3a8b0fba0e8d12d0881421ec2cec4" @@ -893,72 +642,72 @@ path-browserify "^1.0.0" url "^0.11.0" -"@sentry/core@5.24.2": - version "5.24.2" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.24.2.tgz#1724652855c0887a690c3fc6acd2519d4072b511" - integrity sha512-nuAwCGU1l9hgMinl5P/8nIQGRXDP2FI9cJnq5h1qiP/XIOvJkJz2yzBR6nTyqr4vBth0tvxQJbIpDNGd7vHJLg== +"@sentry/core@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" + integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg== dependencies: - "@sentry/hub" "5.24.2" - "@sentry/minimal" "5.24.2" - "@sentry/types" "5.24.2" - "@sentry/utils" "5.24.2" + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" tslib "^1.9.3" -"@sentry/hub@5.24.2": - version "5.24.2" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.24.2.tgz#64a02fd487599945e488ae23aba4ce4df44ee79e" - integrity sha512-xmO1Ivvpb5Qr9WgekinuZZlpl9Iw7iPETUe84HQOhUrXf+2gKO+LaUYMMsYSVDwXQEmR6/tTMyOtS6iavldC6w== +"@sentry/hub@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.30.0.tgz#2453be9b9cb903404366e198bd30c7ca74cdc100" + integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ== dependencies: - "@sentry/types" "5.24.2" - "@sentry/utils" "5.24.2" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" tslib "^1.9.3" -"@sentry/minimal@5.24.2": - version "5.24.2" - resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.24.2.tgz#14e8b136842398a32987459f0574359b6dc57a1f" - integrity sha512-biFpux5bI3R8xiD/Zzvrk1kRE6bqPtfWXmZYAHRtaUMCAibprTKSY9Ta8QYHynOAEoJ5Akedy6HUsEkK5DoZfA== +"@sentry/minimal@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.30.0.tgz#ce3d3a6a273428e0084adcb800bc12e72d34637b" + integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw== dependencies: - "@sentry/hub" "5.24.2" - "@sentry/types" "5.24.2" + "@sentry/hub" "5.30.0" + "@sentry/types" "5.30.0" tslib "^1.9.3" "@sentry/node@^5.18.1": - version "5.24.2" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-5.24.2.tgz#6e06bf26f1e0b23e122a14f17aa57671d3428c4d" - integrity sha512-ddfU2tLTvhnY+NqzLIA/gxMt/uxq7R204Nb2J5qqE0WAgbh0dtylNAzfKZTizLdbZfRnpeISmd+CBILh3tavog== - dependencies: - "@sentry/core" "5.24.2" - "@sentry/hub" "5.24.2" - "@sentry/tracing" "5.24.2" - "@sentry/types" "5.24.2" - "@sentry/utils" "5.24.2" + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-5.30.0.tgz#4ca479e799b1021285d7fe12ac0858951c11cd48" + integrity sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg== + dependencies: + "@sentry/core" "5.30.0" + "@sentry/hub" "5.30.0" + "@sentry/tracing" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" cookie "^0.4.1" https-proxy-agent "^5.0.0" lru_map "^0.3.3" tslib "^1.9.3" -"@sentry/tracing@5.24.2": - version "5.24.2" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.24.2.tgz#a36b4f9bf699c5e07e99a148360091c8e727c51f" - integrity sha512-1uDgvGGVF8lb3hRXbhNnns+8DBUKjhRKOFR5Z3RExjrDFYTDbHmoNtV73Q12Ra+Iht9HTZnIBOqYD3oSZIbJ0w== +"@sentry/tracing@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.30.0.tgz#501d21f00c3f3be7f7635d8710da70d9419d4e1f" + integrity sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw== dependencies: - "@sentry/hub" "5.24.2" - "@sentry/minimal" "5.24.2" - "@sentry/types" "5.24.2" - "@sentry/utils" "5.24.2" + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" tslib "^1.9.3" -"@sentry/types@5.24.2": - version "5.24.2" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.24.2.tgz#e2c25d1e75d8dbec5dbbd9a309a321425b61c2ca" - integrity sha512-HcOK00R0tQG5vzrIrqQ0jC28+z76jWSgQCzXiessJ5SH/9uc6NzdO7sR7K8vqMP2+nweCHckFohC8G0T1DLzuQ== +"@sentry/types@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.30.0.tgz#19709bbe12a1a0115bc790b8942917da5636f402" + integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw== -"@sentry/utils@5.24.2": - version "5.24.2" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.24.2.tgz#90b7dff939bbbf4bb8edcac6aac2d04a0552af80" - integrity sha512-oPGde4tNEDHKk0Cg9q2p0qX649jLDUOwzJXHKpd0X65w3A6eJByDevMr8CSzKV9sesjrUpxqAv6f9WWlz185tA== +"@sentry/utils@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.30.0.tgz#9a5bd7ccff85ccfe7856d493bffa64cabc41e980" + integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww== dependencies: - "@sentry/types" "5.24.2" + "@sentry/types" "5.30.0" tslib "^1.9.3" "@sindresorhus/is@^0.14.0": @@ -966,20 +715,25 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== -"@solidity-parser/parser@^0.7.0": +"@sindresorhus/is@^0.7.0": version "0.7.0" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.7.0.tgz#b8c69c408c729413c090de6bc4f92bb73442ea68" - integrity sha512-YJ333ezgd9slnwCpFQVfsBcYsTcLWZRpVswlKgS82YDZPzzNtVnkEs5DX5+jMsu8PNnVxwZuxC6ucukima9x6w== + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" + integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== -"@solidity-parser/parser@^0.7.1": - version "0.7.1" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.7.1.tgz#660210130e4237476cb55e2882064809f80f861e" - integrity sha512-5ma2uuwPAEX1TPl2rAPAAuGlBkKnn2oUKQvnhTFlDIB8U/KDWX77FpHtL6Rcz+OwqSCWx9IClxACgyIEJ/GhIw== +"@solidity-parser/parser@^0.11.0": + version "0.11.1" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.11.1.tgz#fa840af64840c930f24a9c82c08d4a092a068add" + integrity sha512-H8BSBoKE8EubJa0ONqecA2TviT3TnHeC4NpgnAHSUiuhZoQBfPB4L2P9bs8R6AoTW10Endvh3vc+fomVMIDIYQ== -"@solidity-parser/parser@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.8.0.tgz#e56fe5f0e29753f928c8fb1ddf5f59e5d71363e9" - integrity sha512-4Eg1iWe6ZuJC9Ynfd8D2cnu06So0QL6V3i+fgQRqT8twPMr+N+kUvS5K7ILgWpuoAag/jb3r0wBDfmpib+yvaw== +"@solidity-parser/parser@^0.5.2": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.5.2.tgz#4d74670ead39e4f4fdab605a393ba8ea2390a2c4" + integrity sha512-uRyvnvVYmgNmTBpWDbBsH/0kPESQhQpEc4KsvMRLVzFJ1o1s0uIv0Y6Y9IB5vI1Dwz2CbS4X/y4Wyw/75cTFnQ== + +"@solidity-parser/parser@^0.8.2": + version "0.8.2" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.8.2.tgz#a6a5e93ac8dca6884a99a532f133beba59b87b69" + integrity sha512-8LySx3qrNXPgB5JiULfG10O3V7QTxI/TLzSw5hFQhXWSkVxZBAv4rZQ0sYgLEbc8g3L2lmnujj1hKul38Eu5NQ== "@szmarczak/http-timer@^1.1.2": version "1.1.2" @@ -988,38 +742,38 @@ dependencies: defer-to-connect "^1.0.1" -"@truffle/error@^0.0.7": - version "0.0.7" - resolved "https://registry.yarnpkg.com/@truffle/error/-/error-0.0.7.tgz#e9db39885575647ef08bf624b0c13fe46d41a209" - integrity sha512-UIfVKsXSXocKnn5+RNklUXNoGd/JVj7V8KmC48TQzmjU33HQI86PX0JDS7SpHMHasI3w9X//1q7Lu7nZtj3Zzg== +"@truffle/error@^0.0.11": + version "0.0.11" + resolved "https://registry.yarnpkg.com/@truffle/error/-/error-0.0.11.tgz#2789c0042d7e796dcbb840c7a9b5d2bcd8e0e2d8" + integrity sha512-ju6TucjlJkfYMmdraYY/IBJaFb+Sa+huhYtOoyOJ+G29KcgytUVnDzKGwC7Kgk6IsxQMm62Mc1E0GZzFbGGipw== -"@truffle/interface-adapter@^0.3.0": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@truffle/interface-adapter/-/interface-adapter-0.3.3.tgz#61305378cf81776769ef36c60d394e568ac4a2ee" - integrity sha512-l3I4WFTfnBSIfG96IOBRtAIE6AHDAxcOUJE7W5zh9hocQwzQlGWc2yEyyTcLa0656TTM8RxaZZ2S/KdHHMvCaw== +"@truffle/interface-adapter@^0.4.18": + version "0.4.18" + resolved "https://registry.yarnpkg.com/@truffle/interface-adapter/-/interface-adapter-0.4.18.tgz#1aac45596997d208085d5168f82b990624610646" + integrity sha512-P9JVSYD/CX3V+NgTWu+Bf71sLh8pMwrCpbiYRB93pRw/1H3ZTvt5iDC2MVvVxCs8FkSiy4OZzQK/DJ8+hXAmYw== dependencies: bn.js "^4.11.8" ethers "^4.0.32" - lodash "^4.17.13" - web3 "1.2.2" + source-map-support "^0.5.19" + web3 "1.2.9" -"@truffle/provider@^0.1.17": - version "0.1.19" - resolved "https://registry.yarnpkg.com/@truffle/provider/-/provider-0.1.19.tgz#3e6f15fdd8475ca5d0c846d2b412cc823f1fb767" - integrity sha512-ke8iQmzW4Y99+8iff8xQcc+mCNU4AkwtaZ/iSpmVD8qpLytw8/DSNCm0RiEz9/+I93Q1zqI4Jnij/rXnkS2Njw== +"@truffle/provider@^0.2.24": + version "0.2.25" + resolved "https://registry.yarnpkg.com/@truffle/provider/-/provider-0.2.25.tgz#32a9539b625fad2d2203be9843e8a9d3011aebed" + integrity sha512-BohKgT2357c2dYCH2IQwldQ4EJkfsWUClpb3j+kR8ng02vbsyAPe0HMH463I+h+tiDKvL757dBltXpe0DBJusg== dependencies: - "@truffle/error" "^0.0.7" - "@truffle/interface-adapter" "^0.3.0" - web3 "1.2.1" + "@truffle/error" "^0.0.11" + "@truffle/interface-adapter" "^0.4.18" + web3 "1.2.9" -"@types/bignumber.js@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@types/bignumber.js/-/bignumber.js-5.0.0.tgz#d9f1a378509f3010a3255e9cc822ad0eeb4ab969" - integrity sha512-0DH7aPGCClywOFaxxjE6UwpN2kQYe9LwuDQMv+zYA97j5GkOMo8e66LYT+a8JYU7jfmUFRZLa9KycxHDsKXJCA== +"@types/bn.js@*": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.0.tgz#32c5d271503a12653c62cf4d2b45e6eab8cebc68" + integrity sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA== dependencies: - bignumber.js "*" + "@types/node" "*" -"@types/bn.js@*", "@types/bn.js@^4.11.3", "@types/bn.js@^4.11.4", "@types/bn.js@^4.11.5": +"@types/bn.js@^4.11.3", "@types/bn.js@^4.11.4", "@types/bn.js@^4.11.5": version "4.11.6" resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== @@ -1027,14 +781,9 @@ "@types/node" "*" "@types/chai@*": - version "4.2.12" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.12.tgz#6160ae454cd89dae05adc3bb97997f488b608201" - integrity sha512-aN5IAC8QNtSUdQzxu7lGBgYAOuU1tmRU4c9dIq5OKGf/SBVjXo+ffM2wEjudAWbgpOhy60nLoAGH1xm8fpCKFQ== - -"@types/color-name@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" - integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + version "4.2.14" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.14.tgz#44d2dd0b5de6185089375d976b4ec5caf6861193" + integrity sha512-G+ITQPXkwTrslfG5L/BksmbLUA0M1iybEsmCWPqzSxsRRhJZimBKJkoMi8fr/CPygPTj4zO5pJH7I2/cm9M7SQ== "@types/concat-stream@^1.6.0": version "1.6.0" @@ -1081,32 +830,42 @@ "@types/node" "*" "@types/node-fetch@^2.5.5": - version "2.5.7" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.7.tgz#20a2afffa882ab04d44ca786449a276f9f6bbf3c" - integrity sha512-o2WVNf5UhWRkxlf6eq+jMZDu7kjgpgJfl4xVNlvryc95O/6F2ld8ztKX+qu+Rjyet93WAWm5LjeX9H5FGkODvw== + version "2.5.8" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.8.tgz#e199c835d234c7eb0846f6618012e558544ee2fb" + integrity sha512-fbjI6ja0N5ZA8TV53RUqzsKNkl9fv8Oj3T7zxW7FGv1GSH7gwJaNF8dzCjrqKaxKeUpTz4yT1DaJFq/omNpGfw== dependencies: "@types/node" "*" form-data "^3.0.0" "@types/node@*": - version "14.11.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.11.2.tgz#2de1ed6670439387da1c9f549a2ade2b0a799256" - integrity sha512-jiE3QIxJ8JLNcb1Ps6rDbysDhN4xa8DJJvuC9prr6w+1tIh+QAbYyNF3tyiZNLDBIuBCf4KEcV2UvQm/V60xfA== - -"@types/node@^10.0.3", "@types/node@^10.12.18", "@types/node@^10.3.2": - version "10.17.28" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.28.tgz#0e36d718a29355ee51cec83b42d921299200f6d9" - integrity sha512-dzjES1Egb4c1a89C7lKwQh8pwjYmlOAG9dW1pBgxEk57tMrLnssOfEthz8kdkNaBd7lIqQx7APm5+mZ619IiCQ== - -"@types/node@^12.6.1": - version "12.12.54" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.54.tgz#a4b58d8df3a4677b6c08bfbc94b7ad7a7a5f82d1" - integrity sha512-ge4xZ3vSBornVYlDnk7yZ0gK6ChHf/CHB7Gl1I0Jhah8DDnEQqBzgohYG4FX4p81TNirSETOiSyn+y1r9/IR6w== + version "14.14.22" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.22.tgz#0d29f382472c4ccf3bd96ff0ce47daf5b7b84b18" + integrity sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw== + +"@types/node@10.12.18": + version "10.12.18" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.18.tgz#1d3ca764718915584fcd9f6344621b7672665c67" + integrity sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ== + +"@types/node@11.11.6": + version "11.11.6" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.6.tgz#df929d1bb2eee5afdda598a41930fe50b43eaa6a" + integrity sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ== + +"@types/node@^10.0.3", "@types/node@^10.12.18": + version "10.17.51" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.51.tgz#639538575befbcf3d3861f95c41de8e47124d674" + integrity sha512-KANw+MkL626tq90l++hGelbl67irOJzGhUJk6a1Bt8QHOeh9tztJx+L0AqttraWKinmZn7Qi5lJZJzx45Gq0dg== + +"@types/node@^12.12.6", "@types/node@^12.6.1": + version "12.19.15" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.19.15.tgz#0de7e978fb43db62da369db18ea088a63673c182" + integrity sha512-lowukE3GUI+VSYSu6VcBXl14d61Rp5hA1D+61r16qnwC0lYNSqdxcvRh0pswejorHfS+HgwBasM8jLXz0/aOsw== "@types/node@^8.0.0": - version "8.10.62" - resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.62.tgz#8d0d0db44a46ae7679d92e2e36d41bf1c3625d6a" - integrity sha512-76fupxOYVxk36kb7O/6KtrAPZ9jnSK3+qisAX4tQMEuGNdlvl7ycwatlHqjoE6jHfVtXFM3pCrCixZOidc5cuw== + version "8.10.66" + resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.66.tgz#dd035d409df322acc83dff62a602f12a5783bbb3" + integrity sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw== "@types/pbkdf2@^3.0.0": version "3.1.0" @@ -1116,9 +875,9 @@ "@types/node" "*" "@types/qs@^6.2.31", "@types/qs@^6.9.4": - version "6.9.4" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.4.tgz#a59e851c1ba16c0513ea123830dd639a0a15cb6a" - integrity sha512-+wYo+L6ZF6BMoEjtf8zB2esQsqdV6WsjRK/GP9WOgLPrq87PbNWgIxS76dS5uvl/QXtHGakZmwTznIfcPXcKlQ== + version "6.9.5" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.5.tgz#434711bdd49eb5ee69d90c1d67c354a9a8ecb18b" + integrity sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ== "@types/secp256k1@^4.0.1": version "4.0.1" @@ -1128,29 +887,29 @@ "@types/node" "*" "@types/sinon-chai@^3.2.3": - version "3.2.4" - resolved "https://registry.yarnpkg.com/@types/sinon-chai/-/sinon-chai-3.2.4.tgz#c425625681f4f8d3a43a7551a77f590ce1c49b21" - integrity sha512-xq5KOWNg70PRC7dnR2VOxgYQ6paumW+4pTZP+6uTSdhpYsAUEeeT5bw6rRHHQrZ4KyR+M5ojOR+lje6TGSpUxA== + version "3.2.5" + resolved "https://registry.yarnpkg.com/@types/sinon-chai/-/sinon-chai-3.2.5.tgz#df21ae57b10757da0b26f512145c065f2ad45c48" + integrity sha512-bKQqIpew7mmIGNRlxW6Zli/QVyc3zikpGzCa797B/tRnD9OtHvZ/ts8sYXV+Ilj9u3QRaUEM8xrjgd1gwm1BpQ== dependencies: "@types/chai" "*" "@types/sinon" "*" "@types/sinon@*": - version "9.0.4" - resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-9.0.4.tgz#e934f904606632287a6e7f7ab0ce3f08a0dad4b1" - integrity sha512-sJmb32asJZY6Z2u09bl0G2wglSxDlROlAejCjsnor+LzBMz17gu8IU7vKC/vWDnv9zEq2wqADHVXFjf4eE8Gdw== + version "9.0.10" + resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-9.0.10.tgz#7fb9bcb6794262482859cab66d59132fca18fcf7" + integrity sha512-/faDC0erR06wMdybwI/uR8wEKV/E83T0k4sepIpB7gXuy2gzx2xiOjmztq6a2Y6rIGJ04D+6UU0VBmWy+4HEMA== dependencies: "@types/sinonjs__fake-timers" "*" "@types/sinonjs__fake-timers@*": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-6.0.1.tgz#681df970358c82836b42f989188d133e218c458e" - integrity sha512-yYezQwGWty8ziyYLdZjwxyMb0CZR49h8JALHGrxjQHWlqGgc8kLdHEgWrgL0uZ29DMvEVBDnHU2Wg36zKSIUtA== + version "6.0.2" + resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-6.0.2.tgz#3a84cf5ec3249439015e14049bd3161419bf9eae" + integrity sha512-dIPoZ3g5gcx9zZEszaxLSVTvMReD3xxyyDnQUjA6IYDG9Ba2AV0otMPs+77sG9ojB4Qr2N2Vk5RnKeuA0X/0bg== "@types/underscore@*": - version "1.10.22" - resolved "https://registry.yarnpkg.com/@types/underscore/-/underscore-1.10.22.tgz#8e0a134a2df0afe8da24bcf006e7f94925a3e15f" - integrity sha512-fiJulOOmc747q+mZwBtLyBu6yBX2uI4biuQ1Y3JvcU7YjmdOEOracUXTiET/PAWI2hhoUH1t4HbwJj42YEnbkg== + version "1.10.24" + resolved "https://registry.yarnpkg.com/@types/underscore/-/underscore-1.10.24.tgz#dede004deed3b3f99c4db0bdb9ee21cae25befdd" + integrity sha512-T3NQD8hXNW2sRsSbLNjF/aBo18MyJlbw0lSpQHB/eZZtScPdexN4HSa8cByYwTw9Wy7KuOFr81mlDQcQQaZ79w== "@types/web3@1.0.19": version "1.0.19" @@ -1160,24 +919,15 @@ "@types/bn.js" "*" "@types/underscore" "*" -"@web3-js/scrypt-shim@^0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@web3-js/scrypt-shim/-/scrypt-shim-0.1.0.tgz#0bf7529ab6788311d3e07586f7d89107c3bea2cc" - integrity sha512-ZtZeWCc/s0nMcdx/+rZwY1EcuRdemOK9ag21ty9UsHkFxsNb/AaoucUz0iPuyGe0Ku+PFuRmWZG7Z7462p9xPw== - dependencies: - scryptsy "^2.1.0" - semver "^6.3.0" +"@ungap/promise-all-settled@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" + integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== -"@web3-js/websocket@^1.0.29": - version "1.0.30" - resolved "https://registry.yarnpkg.com/@web3-js/websocket/-/websocket-1.0.30.tgz#9ea15b7b582cf3bf3e8bc1f4d3d54c0731a87f87" - integrity sha512-fDwrD47MiDrzcJdSeTLF75aCcxVVt8B1N74rA+vh2XCAvFy4tEWJjtnUtj2QG7/zlQ6g9cQ88bZFBxwd9/FmtA== - dependencies: - debug "^2.2.0" - es5-ext "^0.10.50" - nan "^2.14.0" - typedarray-to-buffer "^3.1.5" - yaeti "^0.0.6" +"@yarnpkg/lockfile@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" + integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== abbrev@1: version "1.1.1" @@ -1232,20 +982,20 @@ accepts@~1.3.7: mime-types "~2.1.24" negotiator "0.6.2" -acorn-jsx@^5.0.0, acorn-jsx@^5.2.0: +acorn-jsx@^5.0.0, acorn-jsx@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== acorn@^6.0.7: - version "6.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" - integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== + version "6.4.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" + integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== acorn@^7.4.0: - version "7.4.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c" - integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w== + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== address@^1.0.1: version "1.1.2" @@ -1268,30 +1018,30 @@ aes-js@^3.1.1: integrity sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ== agent-base@6: - version "6.0.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.1.tgz#808007e4e5867decb0ab6ab2f928fbdb5a596db4" - integrity sha512-01q25QQDwLSsyfhrKbn8yuur+JNw0H+0Y4JiGIKd3z9aYk/w/2kxD/Upc+t2ZBBSUNff50VjPsSW2YxM8QYKVg== + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: debug "4" -ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4, ajv@^6.6.1, ajv@^6.9.1: - version "6.12.5" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.5.tgz#19b0e8bae8f476e5ba666300387775fb1a00a4da" - integrity sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag== +ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.6.1, ajv@^6.9.1: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^6.12.3: - version "6.12.4" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.4.tgz#0614facc4522127fa713445c6bfd3ebd376e2234" - integrity sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ== +ajv@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-7.0.3.tgz#13ae747eff125cafb230ac504b2406cf371eece2" + integrity sha512-R50QRlXSxqXcQP5SvKUrw8VZeypvo12i2IX0EeR5PiZ7bEKeHWgzgo264LDadUsCU42lTJVhFikTqJwNeH34gQ== dependencies: fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" uri-js "^4.2.2" amdefine@>=0.0.4: @@ -1309,13 +1059,6 @@ ansi-colors@4.1.1, ansi-colors@^4.1.1: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== -ansi-colors@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9" - integrity sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA== - dependencies: - ansi-wrap "^0.1.0" - ansi-escapes@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" @@ -1328,13 +1071,6 @@ ansi-escapes@^4.3.0: dependencies: type-fest "^0.11.0" -ansi-gray@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" - integrity sha1-KWLPVOyXksSFEKPetSRDaGHvclE= - dependencies: - ansi-wrap "0.1.0" - ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -1367,37 +1103,18 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-styles@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" - integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: - "@types/color-name" "^1.1.1" color-convert "^2.0.1" -ansi-wrap@0.1.0, ansi-wrap@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" - integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768= - antlr4@4.7.1: version "4.7.1" resolved "https://registry.yarnpkg.com/antlr4/-/antlr4-4.7.1.tgz#69984014f096e9e775f53dd9744bf994d8959773" integrity sha512-haHyTW7Y9joE5MVs37P2lNYfU2RWBLfcRDD8OWldcdZm5TiCE91B5Xl1oWSwiDUSd4rlExpt2pu1fksYQjRBYQ== -any-promise@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - anymatch@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" @@ -1406,17 +1123,12 @@ anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" -append-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/append-buffer/-/append-buffer-1.0.2.tgz#d8220cf466081525efea50614f3de6514dfa58f1" - integrity sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE= +archive-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/archive-type/-/archive-type-4.0.0.tgz#f92e72233056dfc6969472749c267bdb046b1d70" + integrity sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA= dependencies: - buffer-equal "^1.0.0" - -archy@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" - integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= + file-type "^4.2.0" argparse@^1.0.7: version "1.0.10" @@ -1430,82 +1142,36 @@ arr-diff@^4.0.0: resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= -arr-filter@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/arr-filter/-/arr-filter-1.1.2.tgz#43fdddd091e8ef11aa4c45d9cdc18e2dff1711ee" - integrity sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4= - dependencies: - make-iterator "^1.0.0" - -arr-flatten@^1.0.1, arr-flatten@^1.1.0: +arr-flatten@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== -arr-map@^2.0.0, arr-map@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/arr-map/-/arr-map-2.0.2.tgz#3a77345ffc1cf35e2a91825601f9e58f2e24cac4" - integrity sha1-Onc0X/wc814qkYJWAfnljy4kysQ= - dependencies: - make-iterator "^1.0.0" - arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= -array-each@^1.0.0, array-each@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f" - integrity sha1-p5SvDAWrF1KEbudTofIRoFugxE8= - array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= array-includes@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" - integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== + version "3.1.2" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.2.tgz#a8db03e0b88c8c6aeddc49cb132f9bcab4ebf9c8" + integrity sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.17.0" + es-abstract "^1.18.0-next.1" + get-intrinsic "^1.0.1" is-string "^1.0.5" -array-initial@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/array-initial/-/array-initial-1.1.0.tgz#2fa74b26739371c3947bd7a7adc73be334b3d795" - integrity sha1-L6dLJnOTccOUe9enrcc74zSz15U= - dependencies: - array-slice "^1.0.0" - is-number "^4.0.0" - -array-last@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/array-last/-/array-last-1.3.0.tgz#7aa77073fec565ddab2493f5f88185f404a9d336" - integrity sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg== - dependencies: - is-number "^4.0.0" - -array-slice@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4" - integrity sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w== - -array-sort@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-sort/-/array-sort-1.0.0.tgz#e4c05356453f56f53512a7d1d6123f2c54c0a88a" - integrity sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg== - dependencies: - default-compare "^1.0.0" - get-value "^2.0.6" - kind-of "^5.0.2" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== array-unique@^0.3.2: version "0.3.2" @@ -1513,22 +1179,24 @@ array-unique@^0.3.2: integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= array.prototype.flat@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b" - integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ== + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123" + integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" + es-abstract "^1.18.0-next.1" -array.prototype.map@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array.prototype.map/-/array.prototype.map-1.0.2.tgz#9a4159f416458a23e9483078de1106b2ef68f8ec" - integrity sha512-Az3OYxgsa1g7xDYp86l0nnN4bcmuEITGe1rbdEBVkrqkzMgDcbdQ2R7r41pNzti+4NMces3H8gMmuioZUilLgw== +array.prototype.map@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array.prototype.map/-/array.prototype.map-1.0.3.tgz#1609623618d3d84134a37d4a220030c2bd18420b" + integrity sha512-nNcb30v0wfDyIe26Yif3PcV1JXQp4zEeEfupG7L4SRjnD6HLbO5b2a7eVSba53bOx4YCHYMBHt+Fp4vYstneRA== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" + es-abstract "^1.18.0-next.1" es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.4" + is-string "^1.0.5" asap@~2.0.6: version "2.0.6" @@ -1577,20 +1245,10 @@ astral-regex@^1.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== -async-done@^1.2.0, async-done@^1.2.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/async-done/-/async-done-1.3.2.tgz#5e15aa729962a4b07414f528a88cdf18e0b290a2" - integrity sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.2" - process-nextick-args "^2.0.0" - stream-exhaust "^1.0.1" - -async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== async-eventemitter@^0.2.2: version "0.2.4" @@ -1604,13 +1262,6 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== -async-settle@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/async-settle/-/async-settle-1.0.0.tgz#1d0a914bb02575bec8a8f3a74e5080f72b2c0c6b" - integrity sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs= - dependencies: - async-done "^1.2.2" - async@1.x, async@^1.4.2: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" @@ -1651,16 +1302,16 @@ aws-sign2@~0.7.0: integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= aws4@^1.8.0: - version "1.10.1" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.1.tgz#e1e82e4f3e999e2cfd61b161280d16a111f86428" - integrity sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA== + version "1.11.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== -axios@^0.19.2: - version "0.19.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" - integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== +axios@^0.21.1: + version "0.21.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" + integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== dependencies: - follow-redirects "1.5.10" + follow-redirects "^1.10.0" babel-code-frame@^6.26.0: version "6.26.0" @@ -2181,21 +1832,6 @@ babylon@^6.18.0: resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== -bach@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/bach/-/bach-1.2.0.tgz#4b3ce96bf27134f79a1b414a51c14e34c3bd9880" - integrity sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA= - dependencies: - arr-filter "^1.1.1" - arr-flatten "^1.0.1" - arr-map "^2.0.0" - array-each "^1.0.0" - array-initial "^1.0.0" - array-last "^1.1.1" - async-done "^1.2.2" - async-settle "^1.0.0" - now-and-later "^2.0.0" - backoff@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/backoff/-/backoff-2.5.0.tgz#f616eda9d3e4b66b8ca7fca79f695722c5f8e26f" @@ -2208,17 +1844,17 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= -base-x@^3.0.2: +base-x@^3.0.2, base-x@^3.0.8: version "3.0.8" resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.8.tgz#1e1106c2537f0162e8b52474a557ebb09000018d" integrity sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA== dependencies: safe-buffer "^5.0.1" -base64-js@^1.0.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" - integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== base@^0.11.1: version "0.11.2" @@ -2245,33 +1881,36 @@ bech32@1.1.4: resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== -bignumber.js@*: - version "9.0.0" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.0.tgz#805880f84a329b5eac6e7cb6f8274b6d82bdf075" - integrity sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A== - -bignumber.js@^9.0.0, bignumber.js@^9.0.1: +bignumber.js@9.0.1, bignumber.js@^9.0.0, bignumber.js@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.1.tgz#8d7ba124c882bfd8e43260c67475518d0689e4e5" integrity sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA== -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== - binary-extensions@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" - integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== -bindings@^1.2.1, bindings@^1.5.0: +bindings@^1.3.0, bindings@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== dependencies: file-uri-to-path "1.0.0" +bip32@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/bip32/-/bip32-2.0.6.tgz#6a81d9f98c4cd57d05150c60d8f9e75121635134" + integrity sha512-HpV5OMLLGTjSVblmrtYRfFFKuQB+GArM0+XP8HGWfJ5vxYBqo+DesvJwOdC2WJ3bCkZShGf0QIfoIpeomVzVdA== + dependencies: + "@types/node" "10.12.18" + bs58check "^2.1.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + tiny-secp256k1 "^1.1.3" + typeforce "^1.11.5" + wif "^2.0.6" + bip39@2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/bip39/-/bip39-2.5.0.tgz#51cbd5179460504a63ea3c000db3f787ca051235" @@ -2283,6 +1922,16 @@ bip39@2.5.0: safe-buffer "^5.0.1" unorm "^1.3.3" +bip39@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/bip39/-/bip39-3.0.3.tgz#4a8b79067d6ed2e74f9199ac994a2ab61b176760" + integrity sha512-P0dKrz4g0V0BjXfx7d9QNkJ/Txcz/k+hM9TnjqjUaXtuOfAvxXSw2rJw8DX0e3ZPwnK/IgDxoRqf0bvoVCqbMg== + dependencies: + "@types/node" "11.11.6" + create-hash "^1.1.0" + pbkdf2 "^3.0.9" + randombytes "^2.0.1" + bip66@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/bip66/-/bip66-1.1.5.tgz#01fa8748785ca70955d5011217d1b3139969ca22" @@ -2323,7 +1972,7 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.10.0, bn.js@^4.11.0, bn.js@^4.11.1, bn.js@^ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== -bn.js@^5.1.1, bn.js@^5.1.2: +bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.1.2: version "5.1.3" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b" integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ== @@ -2352,7 +2001,7 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^2.3.1, braces@^2.3.2: +braces@^2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== @@ -2417,11 +2066,11 @@ browserify-des@^1.0.0: safe-buffer "^5.1.2" browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" - integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= + version "4.1.0" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== dependencies: - bn.js "^4.1.0" + bn.js "^5.0.0" randombytes "^2.0.1" browserify-sign@^4.0.0: @@ -2454,7 +2103,7 @@ bs58@^4.0.0: dependencies: base-x "^3.0.2" -bs58check@^2.1.2: +bs58check@<3.0.0, bs58check@^2.1.1, bs58check@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== @@ -2481,11 +2130,6 @@ buffer-crc32@~0.2.3: resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= -buffer-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe" - integrity sha1-WWFrSYME1Var1GaWayLu2j7KX74= - buffer-fill@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" @@ -2513,13 +2157,20 @@ buffer-xor@^2.0.1: dependencies: safe-buffer "^5.1.1" -buffer@^5.0.5, buffer@^5.2.1, buffer@^5.6.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" - integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw== +buffer@^5.0.5, buffer@^5.2.1, buffer@^5.5.0, buffer@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +bufferutil@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.3.tgz#66724b756bed23cd7c28c4d306d7994f9943cc6b" + integrity sha512-yEYTwGndELGvfXsImMBLop58eaGW+YdONi1fNjTINSY98tmMmFijBG6WXgdkfuLNt4imzQNtIE+eBp1PVpMCSw== dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" + node-gyp-build "^4.2.0" bytes@3.1.0: version "3.1.0" @@ -2556,6 +2207,19 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +cacheable-request@^2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-2.1.4.tgz#0d808801b6342ad33c91df9d0b44dc09b91e5c3d" + integrity sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0= + dependencies: + clone-response "1.0.2" + get-stream "3.0.0" + http-cache-semantics "3.8.1" + keyv "3.0.0" + lowercase-keys "1.0.0" + normalize-url "2.0.1" + responselike "1.0.2" + cacheable-request@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" @@ -2577,6 +2241,14 @@ cachedown@1.0.0: abstract-leveldown "^2.4.1" lru-cache "^3.2.0" +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + caller-callsite@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" @@ -2606,30 +2278,45 @@ camelcase@^3.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= -camelcase@^5.0.0, camelcase@^5.3.1: +camelcase@^5.0.0: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== +camelcase@^6.0.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" + integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== + caniuse-lite@^1.0.30000844: - version "1.0.30001116" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001116.tgz#f3a3dea347f9294a3bdc4292309039cc84117fb8" - integrity sha512-f2lcYnmAI5Mst9+g0nkMIznFGsArRmZ0qU+dnq8l91hymdc2J3SFbiPhOJEeDqC1vtE8nc1qNQyklzB8veJefQ== + version "1.0.30001179" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001179.tgz#b0803883b4471a6c62066fb1752756f8afc699c8" + integrity sha512-blMmO0QQujuUWZKyVrD1msR4WNDAqb/UPO1Sw2WWsQ7deoM5bJiicKnWJ1Y0NS/aGINSnKPIWBMw5luX+NDUCA== caseless@^0.12.0, caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= +caw@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/caw/-/caw-2.0.1.tgz#6c3ca071fc194720883c2dc5da9b074bfc7e9e95" + integrity sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA== + dependencies: + get-proxy "^2.0.0" + isurl "^1.0.0-alpha5" + tunnel-agent "^0.6.0" + url-to-options "^1.0.1" + cbor@^5.0.2: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cbor/-/cbor-5.1.0.tgz#c3be220dcbbd96a338d279a664237aed3f596904" - integrity sha512-qzEc7kUShdMbWTaUH7X+aHW8owvBU3FS0dfYR1lGYpoZr0mGJhhojLlZJH653x/DfeMZ56h315FRNBUIG1R7qg== + version "5.2.0" + resolved "https://registry.yarnpkg.com/cbor/-/cbor-5.2.0.tgz#4cca67783ccd6de7b50ab4ed62636712f287a67c" + integrity sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A== dependencies: - bignumber.js "^9.0.0" + bignumber.js "^9.0.1" nofilter "^1.0.4" -chai@^4.2.0: +chai@4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/chai/-/chai-4.2.0.tgz#760aa72cf20e3795e84b12877ce0e83737aa29e5" integrity sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw== @@ -2706,10 +2393,10 @@ chokidar@3.3.0: optionalDependencies: fsevents "~2.1.1" -chokidar@3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450" - integrity sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg== +chokidar@3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b" + integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== dependencies: anymatch "~3.1.1" braces "~3.0.2" @@ -2717,33 +2404,14 @@ chokidar@3.3.1: is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.3.0" + readdirp "~3.5.0" optionalDependencies: fsevents "~2.1.2" -chokidar@^2.0.0: - version "2.1.8" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" - chokidar@^3.4.0: - version "3.4.2" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.2.tgz#38dc8e658dec3809741eb3ef7bb0a47fe424232d" - integrity sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A== + version "3.5.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" + integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== dependencies: anymatch "~3.1.1" braces "~3.0.2" @@ -2751,9 +2419,9 @@ chokidar@^3.4.0: is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.4.0" + readdirp "~3.5.0" optionalDependencies: - fsevents "~2.1.2" + fsevents "~2.3.1" chownr@^1.1.1: version "1.1.4" @@ -2765,6 +2433,17 @@ ci-info@^2.0.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== +cids@^0.7.1: + version "0.7.5" + resolved "https://registry.yarnpkg.com/cids/-/cids-0.7.5.tgz#60a08138a99bfb69b6be4ceb63bfef7a396b28b2" + integrity sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA== + dependencies: + buffer "^5.5.0" + class-is "^1.1.0" + multibase "~0.6.0" + multicodec "^1.0.0" + multihashes "~0.4.15" + cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" @@ -2773,6 +2452,11 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" +class-is@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/class-is/-/class-is-1.1.0.tgz#9d3c0fba0440d211d843cec3dedfa48055005825" + integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw== + class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -2833,51 +2517,23 @@ cliui@^5.0.0: strip-ansi "^5.2.0" wrap-ansi "^5.1.0" -clone-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" - integrity sha1-4+JbIHrE5wGvch4staFnksrD3Fg= - -clone-response@^1.0.2: +clone-response@1.0.2, clone-response@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= dependencies: mimic-response "^1.0.0" -clone-stats@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" - integrity sha1-s3gt/4u1R04Yuba/D9/ngvh3doA= - -clone@2.1.2, clone@^2.0.0, clone@^2.1.1: +clone@2.1.2, clone@^2.0.0: version "2.1.2" resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= -cloneable-readable@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.3.tgz#120a00cb053bfb63a222e709f9683ea2e11d8cec" - integrity sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ== - dependencies: - inherits "^2.0.1" - process-nextick-args "^2.0.0" - readable-stream "^2.3.5" - code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= -collection-map@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-map/-/collection-map-1.0.0.tgz#aea0f06f8d26c780c2b75494385544b2255af18c" - integrity sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw= - dependencies: - arr-map "^2.0.2" - for-own "^1.0.0" - make-iterator "^1.0.0" - collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" @@ -2910,11 +2566,6 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - colors@^1.1.2, colors@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" @@ -2932,6 +2583,11 @@ command-exists@^1.2.8: resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== +commander@2.15.1: + version "2.15.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" + integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag== + commander@2.18.0: version "2.18.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.18.0.tgz#2bf063ddee7c7891176981a2cc798e5754bc6970" @@ -2967,29 +2623,46 @@ concat-stream@^1.5.1, concat-stream@^1.6.0, concat-stream@^1.6.2: readable-stream "^2.2.2" typedarray "^0.0.6" -confusing-browser-globals@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz#72bc13b483c0276801681871d4898516f8f54fdd" - integrity sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw== +config-chain@^1.1.11: + version "1.1.12" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" + integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + +confusing-browser-globals@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz#30d1e7f3d1b882b25ec4933d1d1adac353d20a59" + integrity sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA== contains-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= -content-disposition@0.5.3: +content-disposition@0.5.3, content-disposition@^0.5.2: version "0.5.3" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== dependencies: safe-buffer "5.1.2" +content-hash@^2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/content-hash/-/content-hash-2.5.2.tgz#bbc2655e7c21f14fd3bfc7b7d4bfe6e454c9e211" + integrity sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw== + dependencies: + cids "^0.7.1" + multicodec "^0.5.5" + multihashes "^0.4.15" + content-type@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== -convert-source-map@^1.5.0, convert-source-map@^1.5.1: +convert-source-map@^1.5.1: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== @@ -3021,23 +2694,15 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -copy-props@^2.0.1: - version "2.0.4" - resolved "https://registry.yarnpkg.com/copy-props/-/copy-props-2.0.4.tgz#93bb1cadfafd31da5bb8a9d4b41f471ec3a72dfe" - integrity sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A== - dependencies: - each-props "^1.3.0" - is-plain-object "^2.0.1" - core-js-pure@^3.0.1: - version "3.6.5" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813" - integrity sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA== + version "3.8.3" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.8.3.tgz#10e9e3b2592ecaede4283e8f3ad7020811587c02" + integrity sha512-V5qQZVAr9K0xu7jXg1M7qTEwuxUgqr7dUOezGaNa7i+Xn9oXAU/d1fzqD9ObuwpVQOaorO5s70ckyi1woP9lVA== core-js@^2.4.0, core-js@^2.5.0: - version "2.6.11" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" - integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== + version "2.6.12" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" + integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -3170,31 +2835,38 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8, debug@^2.6. dependencies: ms "2.0.0" -debug@3.2.6, debug@^3.1.0: +debug@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== dependencies: ms "^2.1.1" -debug@4, debug@^4.1.1: +debug@4, debug@^4.0.1, debug@^4.1.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + +debug@4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== dependencies: ms "2.1.2" -debug@=3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -debug@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== +debug@^3.1.0: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" @@ -3203,6 +2875,11 @@ decamelize@^1.1.1, decamelize@^1.2.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" @@ -3254,7 +2931,7 @@ decompress-unzip@^4.0.1: pify "^2.3.0" yauzl "^2.4.2" -decompress@^4.0.0: +decompress@^4.2.0: version "4.2.1" resolved "https://registry.yarnpkg.com/decompress/-/decompress-4.2.1.tgz#007f55cc6a62c055afa37c07eb6a4ee1b773f118" integrity sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ== @@ -3292,17 +2969,10 @@ deep-is@^0.1.3, deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= -default-compare@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/default-compare/-/default-compare-1.0.0.tgz#cb61131844ad84d84788fb68fd01681ca7781a2f" - integrity sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ== - dependencies: - kind-of "^5.0.2" - -default-resolution@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/default-resolution/-/default-resolution-2.0.0.tgz#bcb82baa72ad79b426a76732f1a81ad6df26d684" - integrity sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ= +deepmerge@^2.1.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170" + integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA== defer-to-connect@^1.0.1: version "1.1.3" @@ -3381,11 +3051,6 @@ destroy@~1.0.4: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= -detect-file@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" - integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= - detect-indent@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" @@ -3452,7 +3117,7 @@ dom-walk@^0.1.0: resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== -dotenv@^8.2.0: +dotenv@8.2.0, dotenv@^8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== @@ -3464,6 +3129,24 @@ dotignore@~0.1.2: dependencies: minimatch "^3.0.4" +download@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/download/-/download-7.1.0.tgz#9059aa9d70b503ee76a132897be6dec8e5587233" + integrity sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ== + dependencies: + archive-type "^4.0.0" + caw "^2.0.1" + content-disposition "^0.5.2" + decompress "^4.2.0" + ext-name "^5.0.0" + file-type "^8.1.0" + filenamify "^2.0.0" + get-stream "^3.0.0" + got "^8.3.1" + make-dir "^1.2.0" + p-event "^2.1.0" + pify "^3.0.0" + drbg.js@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/drbg.js/-/drbg.js-1.0.1.tgz#3e36b6c42b37043823cdbc332d58f31e2445480b" @@ -3478,24 +3161,6 @@ duplexer3@^0.1.4: resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= -duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - -each-props@^1.3.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/each-props/-/each-props-1.3.2.tgz#ea45a414d16dd5cfa419b1a81720d5ca06892333" - integrity sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA== - dependencies: - is-plain-object "^2.0.1" - object.defaults "^1.1.0" - ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -3510,32 +3175,9 @@ ee-first@1.1.1: integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= electron-to-chromium@^1.3.47: - version "1.3.538" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.538.tgz#15226638ee9db5d8e74f4c860cef6078d8e1e871" - integrity sha512-rlyYXLlOoZkJuvY4AJXUpP7CHRVtwZz311HPVoEO1UHo/kqDCsP1pNas0A9paZuPEiYGdLwrjllF2hs69NEaTw== - -elliptic@6.3.3: - version "6.3.3" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.3.3.tgz#5482d9646d54bcb89fd7d994fc9e2e9568876e3f" - integrity sha1-VILZZG1UvLif19mU/J4ulWiHbj8= - dependencies: - bn.js "^4.4.0" - brorand "^1.0.1" - hash.js "^1.0.0" - inherits "^2.0.1" - -elliptic@6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" - integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw== - dependencies: - bn.js "^4.4.0" - brorand "^1.0.1" - hash.js "^1.0.0" - hmac-drbg "^1.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.0" + version "1.3.642" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.642.tgz#8b884f50296c2ae2a9997f024d0e3e57facc2b94" + integrity sha512-cev+jOrz/Zm1i+Yh334Hed6lQVOkkemk2wRozfMF4MtTR7pxf3r3L5Rbd7uX1zMcEqVJ7alJBnJL7+JffkC6FQ== elliptic@6.5.3, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3: version "6.5.3" @@ -3561,9 +3203,9 @@ emoji-regex@^8.0.0: integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== emoji-regex@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.0.0.tgz#48a2309cc8a1d2e9d23bc6a67c39b63032e76ea4" - integrity sha512-6p1NII1Vm62wni/VR/cUMauVQoxmLVb9csqQlvLz+hO2gk8U2UYDfXHQSUYIBKmZwAKz867IDqG7B+u0mj+M6w== + version "9.2.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.0.tgz#a26da8e832b16a9753309f25e35e3c0efb9a066a" + integrity sha512-DNc3KFPK18bPdElMJnf/Pkv5TXhxFU3YFDEuGLDRtPmV4rkmCjBkCSEp22u6rBHdSN9Vlp/GK7k98prmE1Jgug== encode-utf8@^1.0.2: version "1.0.3" @@ -3612,10 +3254,15 @@ env-paths@^2.2.0: resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== +env@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/env/-/env-0.0.2.tgz#50c19f307b129a45845b6b686df5b39dd40d1cf0" + integrity sha1-UMGfMHsSmkWEW2tobfWzndQNHPA= + errno@~0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" - integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== dependencies: prr "~1.0.1" @@ -3626,40 +3273,25 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.4, es-abstract@^1.17.5: - version "1.17.6" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" - integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== - dependencies: - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.2.0" - is-regex "^1.1.0" - object-inspect "^1.7.0" - object-keys "^1.1.1" - object.assign "^4.1.0" - string.prototype.trimend "^1.0.1" - string.prototype.trimstart "^1.0.1" - -es-abstract@^1.18.0-next.0: - version "1.18.0-next.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.0.tgz#b302834927e624d8e5837ed48224291f2c66e6fc" - integrity sha512-elZXTZXKn51hUBdJjSZGYRujuzilgXo8vSPQzjGYXLvSlGiCo8VO8ZGV3kjo9a0WNJJ57hENagwbtlRuHuzkcQ== +es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2: + version "1.18.0-next.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.2.tgz#088101a55f0541f595e7e057199e27ddc8f3a5c2" + integrity sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw== dependencies: + call-bind "^1.0.2" es-to-primitive "^1.2.1" function-bind "^1.1.1" + get-intrinsic "^1.0.2" has "^1.0.3" has-symbols "^1.0.1" - is-callable "^1.2.0" - is-negative-zero "^2.0.0" + is-callable "^1.2.2" + is-negative-zero "^2.0.1" is-regex "^1.1.1" - object-inspect "^1.8.0" + object-inspect "^1.9.0" object-keys "^1.1.1" - object.assign "^4.1.0" - string.prototype.trimend "^1.0.1" - string.prototype.trimstart "^1.0.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.3" + string.prototype.trimstart "^1.0.3" es-array-method-boxes-properly@^1.0.0: version "1.0.0" @@ -3667,15 +3299,16 @@ es-array-method-boxes-properly@^1.0.0: integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== es-get-iterator@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.0.tgz#bb98ad9d6d63b31aacdc8f89d5d0ee57bcb5b4c8" - integrity sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ== + version "1.1.2" + resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.2.tgz#9234c54aba713486d7ebde0220864af5e2b283f7" + integrity sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ== dependencies: - es-abstract "^1.17.4" + call-bind "^1.0.2" + get-intrinsic "^1.1.0" has-symbols "^1.0.1" - is-arguments "^1.0.4" - is-map "^2.0.1" - is-set "^2.0.1" + is-arguments "^1.1.0" + is-map "^2.0.2" + is-set "^2.0.2" is-string "^1.0.5" isarray "^2.0.5" @@ -3688,7 +3321,7 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50: +es5-ext@^0.10.35, es5-ext@^0.10.50: version "0.10.53" resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== @@ -3697,7 +3330,7 @@ es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50: es6-symbol "~3.1.3" next-tick "~1.0.0" -es6-iterator@^2.0.1, es6-iterator@^2.0.3, es6-iterator@~2.0.3: +es6-iterator@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= @@ -3714,16 +3347,6 @@ es6-symbol@^3.1.1, es6-symbol@~3.1.3: d "^1.0.1" ext "^1.1.2" -es6-weak-map@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" - integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== - dependencies: - d "1" - es5-ext "^0.10.46" - es6-iterator "^2.0.3" - es6-symbol "^3.1.1" - escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -3734,7 +3357,7 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1 resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -escape-string-regexp@^4.0.0: +escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== @@ -3751,16 +3374,16 @@ escodegen@1.8.x: optionalDependencies: source-map "~0.2.0" -eslint-config-airbnb-base@^14.2.0: - version "14.2.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.0.tgz#fe89c24b3f9dc8008c9c0d0d88c28f95ed65e9c4" - integrity sha512-Snswd5oC6nJaevs3nZoLSTvGJBvzTfnBqOIArkf3cbyTyq9UD79wOk8s+RiL6bhca0p/eRO6veczhf6A/7Jy8Q== +eslint-config-airbnb-base@14.2.1: + version "14.2.1" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz#8a2eb38455dc5a312550193b319cdaeef042cd1e" + integrity sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA== dependencies: - confusing-browser-globals "^1.0.9" - object.assign "^4.1.0" + confusing-browser-globals "^1.0.10" + object.assign "^4.1.2" object.entries "^1.1.2" -eslint-import-resolver-node@^0.3.3: +eslint-import-resolver-node@^0.3.4: version "0.3.4" resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== @@ -3776,17 +3399,17 @@ eslint-module-utils@^2.6.0: debug "^2.6.9" pkg-dir "^2.0.0" -eslint-plugin-import@^2.22.0: - version "2.22.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.0.tgz#92f7736fe1fde3e2de77623c838dd992ff5ffb7e" - integrity sha512-66Fpf1Ln6aIS5Gr/55ts19eUuoDhAbZgnr6UxK5hbDx6l/QgQgx61AePq+BV4PP2uXQFClgMVzep5zZ94qqsxg== +eslint-plugin-import@2.22.1: + version "2.22.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702" + integrity sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw== dependencies: array-includes "^3.1.1" array.prototype.flat "^1.2.3" contains-path "^0.1.0" debug "^2.6.9" doctrine "1.5.0" - eslint-import-resolver-node "^0.3.3" + eslint-import-resolver-node "^0.3.4" eslint-module-utils "^2.6.0" has "^1.0.3" minimatch "^3.0.4" @@ -3795,7 +3418,7 @@ eslint-plugin-import@^2.22.0: resolve "^1.17.0" tsconfig-paths "^3.9.0" -eslint-plugin-mocha@^8.0.0: +eslint-plugin-mocha@8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/eslint-plugin-mocha/-/eslint-plugin-mocha-8.0.0.tgz#7ec5d228bcb3735301701dfbc3376320a1ca3791" integrity sha512-n67etbWDz6NQM+HnTwZHyBwz/bLlYPOxUbw7bPuCyFujv7ZpaT/Vn6KTAbT02gf7nRljtYIjWcTxK/n8a57rQQ== @@ -3811,7 +3434,7 @@ eslint-scope@^4.0.3: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-scope@^5.1.0: +eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -3838,6 +3461,54 @@ eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3 resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== +eslint-visitor-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" + integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== + +eslint@7.18.0: + version "7.18.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.18.0.tgz#7fdcd2f3715a41fe6295a16234bd69aed2c75e67" + integrity sha512-fbgTiE8BfUJZuBeq2Yi7J3RB3WGUQ9PNuNbmgi6jt9Iv8qrkxfy19Ds3OpL1Pm7zg3BtTVhvcUZbIRQ0wmSjAQ== + dependencies: + "@babel/code-frame" "^7.0.0" + "@eslint/eslintrc" "^0.3.0" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.2.0" + esutils "^2.0.2" + file-entry-cache "^6.0.0" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash "^4.17.20" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^6.0.4" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + eslint@^5.6.0: version "5.16.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" @@ -3880,49 +3551,6 @@ eslint@^5.6.0: table "^5.2.3" text-table "^0.2.0" -eslint@^7.9.0: - version "7.9.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.9.0.tgz#522aeccc5c3a19017cf0cb46ebfd660a79acf337" - integrity sha512-V6QyhX21+uXp4T+3nrNfI3hQNBDa/P8ga7LoQOenwrlEFXrEnUEE+ok1dMtaS3b6rmLXhT1TkTIsG75HMLbknA== - dependencies: - "@babel/code-frame" "^7.0.0" - "@eslint/eslintrc" "^0.1.3" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.0.1" - doctrine "^3.0.0" - enquirer "^2.3.5" - eslint-scope "^5.1.0" - eslint-utils "^2.1.0" - eslint-visitor-keys "^1.3.0" - espree "^7.3.0" - esquery "^1.2.0" - esutils "^2.0.2" - file-entry-cache "^5.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" - globals "^12.1.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash "^4.17.19" - minimatch "^3.0.4" - natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" - strip-json-comments "^3.1.0" - table "^5.2.3" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - espree@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" @@ -3932,22 +3560,15 @@ espree@^5.0.1: acorn-jsx "^5.0.0" eslint-visitor-keys "^1.0.0" -espree@^7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.0.tgz#dc30437cf67947cf576121ebd780f15eeac72348" - integrity sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw== +espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== dependencies: acorn "^7.4.0" - acorn-jsx "^5.2.0" + acorn-jsx "^5.3.1" eslint-visitor-keys "^1.3.0" -esprima-extract-comments@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/esprima-extract-comments/-/esprima-extract-comments-1.1.0.tgz#0dacab567a5900240de6d344cf18c33617becbc9" - integrity sha512-sBQUnvJwpeE9QnPrxh7dpI/dp67erYG4WXEAreAMoelPRpMR7NWb4YtwRPn9b+H1uLQKl/qS8WYmyaljTpjIsw== - dependencies: - esprima "^4.0.0" - esprima@2.7.x, esprima@^2.7.1: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" @@ -3987,11 +3608,6 @@ estraverse@^5.1.0, estraverse@^5.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== -estree-walker@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" - integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== - esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -4023,13 +3639,13 @@ eth-ens-namehash@2.0.8, eth-ens-namehash@^2.0.8: idna-uts46-hx "^2.3.1" js-sha3 "^0.5.7" -eth-gas-reporter@^0.2.19: - version "0.2.19" - resolved "https://registry.yarnpkg.com/eth-gas-reporter/-/eth-gas-reporter-0.2.19.tgz#57ce74e0617d021d04fd1789a4232837d0f41918" - integrity sha512-yQmbAa6O9/Yl/syNml2A0R+ZLQnJ9m9jogFXHzjMWVBMUVnAcEskOVyxaMYddkclZdYIMxE99tQy830C2jLsAQ== +eth-gas-reporter@^0.2.20: + version "0.2.20" + resolved "https://registry.yarnpkg.com/eth-gas-reporter/-/eth-gas-reporter-0.2.20.tgz#431c144f00cd01cc29ce211a10a4e5a539a84e25" + integrity sha512-gp/PhKrr3hYEEFg5emIQxbhQkVH2mg+iHcM6GvqhzFx5IkZGeQx+5oNzYDEfBXQefcA90rwWHId6eCty6jbdDA== dependencies: "@ethersproject/abi" "^5.0.0-beta.146" - "@solidity-parser/parser" "^0.8.0" + "@solidity-parser/parser" "^0.8.2" cli-table3 "^0.5.0" colors "^1.1.2" ethereumjs-util "6.2.0" @@ -4111,10 +3727,10 @@ eth-query@^2.0.2, eth-query@^2.1.0, eth-query@^2.1.2: json-rpc-random-id "^1.0.0" xtend "^4.0.1" -eth-sig-util@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-2.3.0.tgz#c54a6ac8e8796f7e25f59cf436982a930e645231" - integrity sha512-ugD1AvaggvKaZDgnS19W5qOfepjGc7qHrt7TrAaL54gJw9SHvgIXJ3r2xOMW30RWJZNP+1GlTOy5oye7yXA4xA== +eth-sig-util@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-3.0.0.tgz#75133b3d7c20a5731af0690c385e184ab942b97e" + integrity sha512-4eFkMOhpGbTxBQ3AMzVf0haUX2uTur7DpWiHzWyTURa28BVJJtOkcb9Ok5TV0YvEPG61DODPW7ZUATbJTslioQ== dependencies: buffer "^5.2.1" elliptic "^6.4.0" @@ -4207,15 +3823,15 @@ ethereum-cryptography@^0.1.2, ethereum-cryptography@^0.1.3: secp256k1 "^4.0.1" setimmediate "^1.0.5" -ethereum-waffle@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/ethereum-waffle/-/ethereum-waffle-3.0.2.tgz#3d68f04e61dd01d67633e3c93ed15810b7743b88" - integrity sha512-VJQTL9oBbHIQRxQFuh1NBXoFXSlTIY6DrkPpO7CvevXRI9ixxq01nSc6hPYUIVy7s+U03sp4ply497O6mD3gsQ== +ethereum-waffle@3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ethereum-waffle/-/ethereum-waffle-3.2.1.tgz#9d6d6b93484c5e1b77dfdeb646c050ed877e836e" + integrity sha512-Fhg7BaBuV+Xo5XT+NEC3UTKGunvpq+iQPglZbIAJF6ZcwQwkiKfJUDuB0ZSkg5ntbRS4gpahfoXj1nTzdtx8UA== dependencies: - "@ethereum-waffle/chai" "^3.0.2" - "@ethereum-waffle/compiler" "^3.0.2" - "@ethereum-waffle/mock-contract" "^3.0.2" - "@ethereum-waffle/provider" "^3.0.2" + "@ethereum-waffle/chai" "^3.2.1" + "@ethereum-waffle/compiler" "^3.2.1" + "@ethereum-waffle/mock-contract" "^3.2.1" + "@ethereum-waffle/provider" "^3.2.1" ethers "^5.0.1" ethereumjs-abi@0.6.5: @@ -4226,17 +3842,17 @@ ethereumjs-abi@0.6.5: bn.js "^4.10.0" ethereumjs-util "^4.3.0" -ethereumjs-abi@0.6.7: - version "0.6.7" - resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.7.tgz#d1d1c5cdb8d910a7d97645ba9e93be5d153bba2e" - integrity sha512-EMLOA8ICO5yAaXDhjVEfYjsJIXYutY8ufTE93eEKwsVtp2usQreKwsDTJ9zvam3omYqNuffr8IONIqb2uUslGQ== +ethereumjs-abi@0.6.8, ethereumjs-abi@^0.6.8: + version "0.6.8" + resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" + integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== dependencies: bn.js "^4.11.8" ethereumjs-util "^6.0.0" -ethereumjs-abi@^0.6.8, "ethereumjs-abi@git+https://github.com/ethereumjs/ethereumjs-abi.git": +"ethereumjs-abi@git+https://github.com/ethereumjs/ethereumjs-abi.git": version "0.6.8" - resolved "git+https://github.com/ethereumjs/ethereumjs-abi.git#1cfbb13862f90f0b391d8a699544d5fe4dfb8c7b" + resolved "git+https://github.com/ethereumjs/ethereumjs-abi.git#1ce6a1d64235fabe2aaf827fd606def55693508f" dependencies: bn.js "^4.11.8" ethereumjs-util "^6.0.0" @@ -4323,19 +3939,6 @@ ethereumjs-tx@^1.1.1, ethereumjs-tx@^1.2.0, ethereumjs-tx@^1.2.2, ethereumjs-tx@ ethereum-common "^0.0.18" ethereumjs-util "^5.0.0" -ethereumjs-util@6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.1.0.tgz#e9c51e5549e8ebd757a339cc00f5380507e799c8" - integrity sha512-URESKMFbDeJxnAxPppnk2fN6Y3BIatn9fwn76Lm8bQlt+s52TpG8dN9M66MLPuRAiAOIqL3dfwqWJf0sd0fL0Q== - dependencies: - bn.js "^4.11.0" - create-hash "^1.1.2" - ethjs-util "0.1.6" - keccak "^1.0.2" - rlp "^2.0.0" - safe-buffer "^5.1.1" - secp256k1 "^3.0.1" - ethereumjs-util@6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.0.tgz#23ec79b2488a7d041242f01e25f24e5ad0357960" @@ -4349,6 +3952,19 @@ ethereumjs-util@6.2.0: rlp "^2.2.3" secp256k1 "^3.0.1" +ethereumjs-util@6.2.1, ethereumjs-util@^6.0.0, ethereumjs-util@^6.1.0, ethereumjs-util@^6.2.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" + integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== + dependencies: + "@types/bn.js" "^4.11.3" + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "0.1.6" + rlp "^2.2.3" + ethereumjs-util@^4.3.0: version "4.5.1" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-4.5.1.tgz#f4bf9b3b515a484e3cc8781d61d9d980f7c83bd0" @@ -4373,23 +3989,10 @@ ethereumjs-util@^5.0.0, ethereumjs-util@^5.0.1, ethereumjs-util@^5.1.1, ethereum rlp "^2.0.0" safe-buffer "^5.1.1" -ethereumjs-util@^6.0.0, ethereumjs-util@^6.1.0, ethereumjs-util@^6.2.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" - integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== - dependencies: - "@types/bn.js" "^4.11.3" - bn.js "^4.11.0" - create-hash "^1.1.2" - elliptic "^6.5.2" - ethereum-cryptography "^0.1.3" - ethjs-util "0.1.6" - rlp "^2.2.3" - ethereumjs-util@^7.0.2: - version "7.0.5" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.0.5.tgz#bc6e178dedbccc4b188c9ae6ae38db1906884b7b" - integrity sha512-gLLZVXYUHR6pamO3h/+M1jzKz7qE20PKFyFKtq1PrIHA6wcLI96mDz96EMkkhXfrpk30rhpkw0iRnzxKhqaIdQ== + version "7.0.7" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.0.7.tgz#484fb9c03b766b2ee64821281070616562fb5a59" + integrity sha512-vU5rtZBlZsgkTw3o6PDKyB8li2EgLavnAbsKcfsH2YhHH1Le+PP8vEiMnAnvgc1B6uMoaM5GDCrVztBw0Q5K9g== dependencies: "@types/bn.js" "^4.11.3" bn.js "^5.1.2" @@ -4436,53 +4039,58 @@ ethereumjs-vm@^2.1.0, ethereumjs-vm@^2.3.4, ethereumjs-vm@^2.6.0: rustbn.js "~0.2.0" safe-buffer "^5.1.1" -ethereumjs-wallet@0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/ethereumjs-wallet/-/ethereumjs-wallet-0.6.3.tgz#b0eae6f327637c2aeb9ccb9047b982ac542e6ab1" - integrity sha512-qiXPiZOsStem+Dj/CQHbn5qex+FVkuPmGH7SvSnA9F3tdRDt8dLMyvIj3+U05QzVZNPYh4HXEdnzoYI4dZkr9w== +ethereumjs-wallet@0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/ethereumjs-wallet/-/ethereumjs-wallet-0.6.5.tgz#685e9091645cee230ad125c007658833991ed474" + integrity sha512-MDwjwB9VQVnpp/Dc1XzA6J1a3wgHQ4hSvA1uWNatdpOrtCbPVuQSKSyRnjLvS0a+KKMw2pvQ9Ybqpb3+eW8oNA== dependencies: aes-js "^3.1.1" bs58check "^2.1.2" + ethereum-cryptography "^0.1.3" ethereumjs-util "^6.0.0" - hdkey "^1.1.0" randombytes "^2.0.6" safe-buffer "^5.1.2" - scrypt.js "^0.3.0" + scryptsy "^1.2.1" utf8 "^3.0.0" uuid "^3.3.2" -ethers@4.0.0-beta.3: - version "4.0.0-beta.3" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.0-beta.3.tgz#15bef14e57e94ecbeb7f9b39dd0a4bd435bc9066" - integrity sha512-YYPogooSknTwvHg3+Mv71gM/3Wcrx+ZpCzarBj3mqs9njjRkrOo2/eufzhHloOCo3JSoNI4TQJJ6yU5ABm3Uog== - dependencies: - "@types/node" "^10.3.2" - aes-js "3.0.0" - bn.js "^4.4.0" - elliptic "6.3.3" - hash.js "1.1.3" - js-sha3 "0.5.7" - scrypt-js "2.0.3" - setimmediate "1.0.4" - uuid "2.0.1" - xmlhttprequest "1.8.0" - -ethers@^4.0.32, ethers@^4.0.40: - version "4.0.47" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.47.tgz#91b9cd80473b1136dd547095ff9171bd1fc68c85" - integrity sha512-hssRYhngV4hiDNeZmVU/k5/E8xmLG8UpcNUzg6mb7lqhgpFPH/t7nuv20RjRrEf0gblzvi2XwR5Te+V3ZFc9pQ== - dependencies: - aes-js "3.0.0" - bn.js "^4.4.0" - elliptic "6.5.2" - hash.js "1.1.3" - js-sha3 "0.5.7" - scrypt-js "2.0.4" - setimmediate "1.0.4" - uuid "2.0.1" - xmlhttprequest "1.8.0" - -ethers@^4.0.46: +ethers@5.0.26, ethers@^5.0.0, ethers@^5.0.1, ethers@^5.0.9: + version "5.0.26" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.0.26.tgz#ef43c6b6aad71f10c1a184003f69b142d7d03bae" + integrity sha512-MqA8Fvutn3qEW0yBJOHeV6KZmRpF2rqlL2B5058AGkUFsuu6j5Ns/FRlMsbGeQwBz801IB23jQp7vjRfFsKSkg== + dependencies: + "@ethersproject/abi" "5.0.10" + "@ethersproject/abstract-provider" "5.0.8" + "@ethersproject/abstract-signer" "5.0.11" + "@ethersproject/address" "5.0.9" + "@ethersproject/base64" "5.0.7" + "@ethersproject/basex" "5.0.7" + "@ethersproject/bignumber" "5.0.13" + "@ethersproject/bytes" "5.0.9" + "@ethersproject/constants" "5.0.8" + "@ethersproject/contracts" "5.0.9" + "@ethersproject/hash" "5.0.10" + "@ethersproject/hdnode" "5.0.8" + "@ethersproject/json-wallets" "5.0.10" + "@ethersproject/keccak256" "5.0.7" + "@ethersproject/logger" "5.0.8" + "@ethersproject/networks" "5.0.7" + "@ethersproject/pbkdf2" "5.0.7" + "@ethersproject/properties" "5.0.7" + "@ethersproject/providers" "5.0.19" + "@ethersproject/random" "5.0.7" + "@ethersproject/rlp" "5.0.7" + "@ethersproject/sha2" "5.0.7" + "@ethersproject/signing-key" "5.0.8" + "@ethersproject/solidity" "5.0.8" + "@ethersproject/strings" "5.0.8" + "@ethersproject/transactions" "5.0.9" + "@ethersproject/units" "5.0.9" + "@ethersproject/wallet" "5.0.10" + "@ethersproject/web" "5.0.12" + "@ethersproject/wordlists" "5.0.8" + +ethers@^4.0.32, ethers@^4.0.40, ethers@^4.0.46: version "4.0.48" resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.48.tgz#330c65b8133e112b0613156e57e92d9009d8fbbe" integrity sha512-sZD5K8H28dOrcidzx9f8KYh8083n5BexIO3+SbE4jK83L85FxtpXZBCQdXb8gkg+7sBqomcLhhkU7UHL+F7I2g== @@ -4497,78 +4105,6 @@ ethers@^4.0.46: uuid "2.0.1" xmlhttprequest "1.8.0" -ethers@^5.0.0, ethers@^5.0.1, ethers@^5.0.8: - version "5.0.8" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.0.8.tgz#c13d0fdf5e66db8085e2036d3309ed2f8a17ed89" - integrity sha512-of/rPgJ7E3yyBADUv5A7Gtkd7EB8ta/T9NS5CCG9tj9cifnXcI3KIdYQ7d8AS+9vm38pR1g6S5I+Q/mRnlQZlg== - dependencies: - "@ethersproject/abi" "^5.0.0" - "@ethersproject/abstract-provider" "^5.0.0" - "@ethersproject/abstract-signer" "^5.0.0" - "@ethersproject/address" "^5.0.0" - "@ethersproject/base64" "^5.0.0" - "@ethersproject/basex" "^5.0.0" - "@ethersproject/bignumber" "^5.0.0" - "@ethersproject/bytes" "^5.0.0" - "@ethersproject/constants" "^5.0.0" - "@ethersproject/contracts" "^5.0.0" - "@ethersproject/hash" "^5.0.0" - "@ethersproject/hdnode" "^5.0.0" - "@ethersproject/json-wallets" "^5.0.0" - "@ethersproject/keccak256" "^5.0.0" - "@ethersproject/logger" "^5.0.0" - "@ethersproject/networks" "^5.0.0" - "@ethersproject/pbkdf2" "^5.0.0" - "@ethersproject/properties" "^5.0.0" - "@ethersproject/providers" "^5.0.0" - "@ethersproject/random" "^5.0.0" - "@ethersproject/rlp" "^5.0.0" - "@ethersproject/sha2" "^5.0.0" - "@ethersproject/signing-key" "^5.0.0" - "@ethersproject/solidity" "^5.0.0" - "@ethersproject/strings" "^5.0.0" - "@ethersproject/transactions" "^5.0.0" - "@ethersproject/units" "^5.0.0" - "@ethersproject/wallet" "^5.0.0" - "@ethersproject/web" "^5.0.0" - "@ethersproject/wordlists" "^5.0.0" - -ethers@^5.0.9: - version "5.0.24" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.0.24.tgz#fbb8e4d35070d134f2eb846c07500b8c0eaef6d3" - integrity sha512-77CEtVC88fJGEhxGXRvQqAEH6e2A+ZFiv2FBT6ikXndlty5sw6vMatAhg1v+w3CaaGZOf1CP81jl4Mc8Zrj08A== - dependencies: - "@ethersproject/abi" "5.0.9" - "@ethersproject/abstract-provider" "5.0.7" - "@ethersproject/abstract-signer" "5.0.9" - "@ethersproject/address" "5.0.8" - "@ethersproject/base64" "5.0.6" - "@ethersproject/basex" "5.0.6" - "@ethersproject/bignumber" "5.0.12" - "@ethersproject/bytes" "5.0.8" - "@ethersproject/constants" "5.0.7" - "@ethersproject/contracts" "5.0.8" - "@ethersproject/hash" "5.0.9" - "@ethersproject/hdnode" "5.0.7" - "@ethersproject/json-wallets" "5.0.9" - "@ethersproject/keccak256" "5.0.6" - "@ethersproject/logger" "5.0.8" - "@ethersproject/networks" "5.0.6" - "@ethersproject/pbkdf2" "5.0.6" - "@ethersproject/properties" "5.0.6" - "@ethersproject/providers" "5.0.17" - "@ethersproject/random" "5.0.6" - "@ethersproject/rlp" "5.0.6" - "@ethersproject/sha2" "5.0.6" - "@ethersproject/signing-key" "5.0.7" - "@ethersproject/solidity" "5.0.7" - "@ethersproject/strings" "5.0.7" - "@ethersproject/transactions" "5.0.8" - "@ethersproject/units" "5.0.8" - "@ethersproject/wallet" "5.0.9" - "@ethersproject/web" "5.0.11" - "@ethersproject/wordlists" "5.0.7" - ethjs-unit@0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" @@ -4595,6 +4131,16 @@ eventemitter3@3.1.2: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== +eventemitter3@4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" + integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + events@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" @@ -4634,13 +4180,6 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -expand-tilde@^2.0.0, expand-tilde@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" - integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= - dependencies: - homedir-polyfill "^1.0.1" - express@^4.14.0: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" @@ -4677,6 +4216,21 @@ express@^4.14.0: utils-merge "1.0.1" vary "~1.1.2" +ext-list@^2.0.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/ext-list/-/ext-list-2.2.2.tgz#0b98e64ed82f5acf0f2931babf69212ef52ddd37" + integrity sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA== + dependencies: + mime-db "^1.28.0" + +ext-name@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ext-name/-/ext-name-5.0.0.tgz#70781981d183ee15d13993c8822045c506c8f0a6" + integrity sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ== + dependencies: + ext-list "^2.0.0" + sort-keys-length "^1.0.0" + ext@^1.1.2: version "1.4.0" resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" @@ -4699,7 +4253,7 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@^3.0.0, extend@~3.0.2: +extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== @@ -4727,14 +4281,6 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -extract-comments@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/extract-comments/-/extract-comments-1.1.0.tgz#b90bca033a056bd69b8ba1c6b6b120fc2ee95c18" - integrity sha512-dzbZV2AdSSVW/4E7Ti5hZdHWbA+Z80RJsJhr5uiL10oyjl/gy7/o+HI1HwK4/WSZhlq4SNKU3oUzXlM13Qx02Q== - dependencies: - esprima-extract-comments "^1.1.0" - parse-code-context "^1.0.0" - extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" @@ -4752,16 +4298,6 @@ fake-merkle-patricia-tree@^1.0.1: dependencies: checkpoint-store "^1.1.0" -fancy-log@^1.3.2: - version "1.3.3" - resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7" - integrity sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw== - dependencies: - ansi-gray "^0.1.1" - color-support "^1.1.3" - parse-node-version "^1.0.0" - time-stamp "^1.0.0" - fast-deep-equal@^3.1.1: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -4773,9 +4309,9 @@ fast-diff@^1.1.2: integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== fast-glob@^3.0.3: - version "3.2.4" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" - integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== + version "3.2.5" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" + integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -4789,20 +4325,15 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz#e6a754cc8f15e58987aa9cbd27af66fd6f4e5af9" - integrity sha1-5qdUzI8V5YmHqpy9J69m/W9OWvk= - fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= fastq@^1.6.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.8.0.tgz#550e1f9f59bbc65fe185cb6a9b4d95357107f481" - integrity sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q== + version "1.10.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.10.0.tgz#74dbefccade964932cdf500473ef302719c652bb" + integrity sha512-NL2Qc5L3iQEsyYzweq7qfgy5OtXCmGzGvhElGEd/SoFWEMOEczNh5s5ocaF01HDetxz+p8ecjNPA6cZxxIHmzA== dependencies: reusify "^1.0.4" @@ -4834,11 +4365,23 @@ file-entry-cache@^5.0.1: dependencies: flat-cache "^2.0.1" +file-entry-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.0.tgz#7921a89c391c6d93efec2169ac6bf300c527ea0a" + integrity sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA== + dependencies: + flat-cache "^3.0.4" + file-type@^3.8.0: version "3.9.0" resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" integrity sha1-JXoHg4TR24CHvESdEH1SpSZyuek= +file-type@^4.2.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-4.4.0.tgz#1b600e5fca1fbdc6e80c0a70c71c8dba5f7906c5" + integrity sha1-G2AOX8ofvcboDApwxxyNul95BsU= + file-type@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/file-type/-/file-type-5.2.0.tgz#2ddbea7c73ffe36368dfae49dc338c058c2b8ad6" @@ -4849,11 +4392,30 @@ file-type@^6.1.0: resolved "https://registry.yarnpkg.com/file-type/-/file-type-6.2.0.tgz#e50cd75d356ffed4e306dc4f5bcf52a79903a919" integrity sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg== +file-type@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-8.1.0.tgz#244f3b7ef641bbe0cca196c7276e4b332399f68c" + integrity sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ== + file-uri-to-path@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== +filename-reserved-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229" + integrity sha1-q/c9+rc10EVECr/qLZHzieu/oik= + +filenamify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-2.1.0.tgz#88faf495fb1b47abfd612300002a16228c677ee9" + integrity sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA== + dependencies: + filename-reserved-regex "^2.0.0" + strip-outer "^1.0.0" + trim-repeated "^1.0.0" + fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -4891,12 +4453,12 @@ find-up@3.0.0, find-up@^3.0.0: dependencies: locate-path "^3.0.0" -find-up@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== +find-up@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: - locate-path "^5.0.0" + locate-path "^6.0.0" path-exists "^4.0.0" find-up@^1.0.0: @@ -4914,41 +4476,13 @@ find-up@^2.0.0, find-up@^2.1.0: dependencies: locate-path "^2.0.0" -findup-sync@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc" - integrity sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw= - dependencies: - detect-file "^1.0.0" - is-glob "^3.1.0" - micromatch "^3.0.4" - resolve-dir "^1.0.1" - -findup-sync@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" - integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== - dependencies: - detect-file "^1.0.0" - is-glob "^4.0.0" - micromatch "^3.0.4" - resolve-dir "^1.0.1" - -fined@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fined/-/fined-1.2.0.tgz#d00beccf1aa2b475d16d423b0238b713a2c4a37b" - integrity sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng== +find-yarn-workspace-root@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-1.2.1.tgz#40eb8e6e7c2502ddfaa2577c176f221422f860db" + integrity sha512-dVtfb0WuQG+8Ag2uWkbG79hOUzEsRrhBzgfn86g2sJPkzmcpGdghbNTfUKGTxymFrY/tLIodDzLoW9nOJ4FY8Q== dependencies: - expand-tilde "^2.0.2" - is-plain-object "^2.0.3" - object.defaults "^1.1.0" - object.pick "^1.2.0" - parse-filepath "^1.0.1" - -flagged-respawn@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-1.0.1.tgz#e7de6f1279ddd9ca9aac8a5971d618606b3aab41" - integrity sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q== + fs-extra "^4.0.3" + micromatch "^3.1.4" flat-cache@^2.0.1: version "2.0.1" @@ -4959,31 +4493,41 @@ flat-cache@^2.0.1: rimraf "2.6.3" write "1.0.3" +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + flat@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.0.tgz#090bec8b05e39cba309747f1d588f04dbaf98db2" - integrity sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw== + version "4.1.1" + resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.1.tgz#a392059cc382881ff98642f5da4dde0a959f309b" + integrity sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA== dependencies: is-buffer "~2.0.3" +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + flatted@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== +flatted@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" + integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== + flow-stoplight@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/flow-stoplight/-/flow-stoplight-1.0.0.tgz#4a292c5bcff8b39fa6cc0cb1a853d86f27eeff7b" integrity sha1-SiksW8/4s5+mzAyxqFPYbyfu/3s= -flush-write-stream@^1.0.2: - version "1.1.1" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== - dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" - fmix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/fmix/-/fmix-0.1.0.tgz#c7bbf124dec42c9d191cfb947d0a9778dd986c0c" @@ -4991,37 +4535,23 @@ fmix@^0.1.0: dependencies: imul "^1.0.0" -follow-redirects@1.5.10: - version "1.5.10" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" - integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== - dependencies: - debug "=3.1.0" - -follow-redirects@^1.12.1: - version "1.13.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db" - integrity sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA== +follow-redirects@^1.10.0, follow-redirects@^1.12.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.1.tgz#5f69b813376cee4fd0474a3aba835df04ab763b7" + integrity sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg== -for-each@~0.3.3: +for-each@^0.3.3, for-each@~0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== dependencies: is-callable "^1.1.3" -for-in@^1.0.1, for-in@^1.0.2: +for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= -for-own@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" - integrity sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs= - dependencies: - for-in "^1.0.1" - forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -5081,6 +4611,14 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= +from2@^2.1.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + fs-constants@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" @@ -5097,7 +4635,7 @@ fs-extra@^0.30.0: path-is-absolute "^1.0.0" rimraf "^2.2.8" -fs-extra@^4.0.2: +fs-extra@^4.0.2, fs-extra@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== @@ -5125,14 +4663,14 @@ fs-extra@^8.1.0: universalify "^0.1.0" fs-extra@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" - integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== dependencies: at-least-node "^1.0.0" graceful-fs "^4.2.0" jsonfile "^6.0.1" - universalify "^1.0.0" + universalify "^2.0.0" fs-minipass@^1.2.5: version "1.2.7" @@ -5141,14 +4679,6 @@ fs-minipass@^1.2.5: dependencies: minipass "^2.6.0" -fs-mkdirp-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb" - integrity sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes= - dependencies: - graceful-fs "^4.1.11" - through2 "^2.0.3" - fs-readdir-recursive@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" @@ -5159,19 +4689,16 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^1.2.7: - version "1.2.13" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" - integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== - dependencies: - bindings "^1.5.0" - nan "^2.12.1" - fsevents@~2.1.1, fsevents@~2.1.2: version "2.1.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== +fsevents@~2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.1.tgz#b209ab14c61012636c8863507edf7fb68cc54e9f" + integrity sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw== + function-bind@^1.1.1, function-bind@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -5182,19 +4709,19 @@ functional-red-black-tree@^1.0.1, functional-red-black-tree@~1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= -ganache-cli@6.9.0: - version "6.9.0" - resolved "https://registry.yarnpkg.com/ganache-cli/-/ganache-cli-6.9.0.tgz#94d7e26964dff80b7382a33829ec75e15709a948" - integrity sha512-ZdL6kPrApXF/O+f6uU431OJcwxMk69H3KPDSHHrMP82ZvZRNpDHbR+rVv7XX/YUeoQ5q6nZ2AFiGiFAVn9pfzA== +ganache-cli@^6.11.0: + version "6.12.2" + resolved "https://registry.yarnpkg.com/ganache-cli/-/ganache-cli-6.12.2.tgz#c0920f7db0d4ac062ffe2375cb004089806f627a" + integrity sha512-bnmwnJDBDsOWBUP8E/BExWf85TsdDEFelQSzihSJm9VChVO1SHp94YXLP5BlA4j/OTxp0wR4R1Tje9OHOuAJVw== dependencies: - ethereumjs-util "6.1.0" + ethereumjs-util "6.2.1" source-map-support "0.5.12" yargs "13.2.4" ganache-core@^2.10.2: - version "2.11.2" - resolved "https://registry.yarnpkg.com/ganache-core/-/ganache-core-2.11.2.tgz#821a8e7beaa65b32e408ccae2e2ec49194c4e378" - integrity sha512-yZSMdR2xtqG2IdApeB6OywtMxwcHMp6Y5TUBwPyKe5/GripP8xnEpSKBluhxoyqEotg+Z2S8mjIXJyAm+NnMGw== + version "2.13.2" + resolved "https://registry.yarnpkg.com/ganache-core/-/ganache-core-2.13.2.tgz#27e6fc5417c10e6e76e2e646671869d7665814a3" + integrity sha512-tIF5cR+ANQz0+3pHWxHjIwHqFXcVo0Mb+kcsNhglNFALcYo49aQpnS9dqHartqPfMFjiHh/qFoD3mYK0d/qGgw== dependencies: abstract-leveldown "3.0.0" async "2.6.2" @@ -5203,28 +4730,30 @@ ganache-core@^2.10.2: clone "2.1.2" debug "3.2.6" encoding-down "5.0.4" - eth-sig-util "2.3.0" - ethereumjs-abi "0.6.7" + eth-sig-util "3.0.0" + ethereumjs-abi "0.6.8" ethereumjs-account "3.0.0" ethereumjs-block "2.2.2" ethereumjs-common "1.5.0" ethereumjs-tx "2.1.2" - ethereumjs-util "6.2.0" + ethereumjs-util "6.2.1" ethereumjs-vm "4.2.0" heap "0.2.6" + keccak "3.0.1" level-sublevel "6.6.4" levelup "3.1.1" - lodash "4.17.14" + lodash "4.17.20" lru-cache "5.1.1" - merkle-patricia-tree "2.3.2" + merkle-patricia-tree "3.0.0" + patch-package "6.2.2" seedrandom "3.0.1" source-map-support "0.5.12" tmp "0.1.0" web3-provider-engine "14.2.1" - websocket "1.0.29" + websocket "1.0.32" optionalDependencies: - ethereumjs-wallet "0.6.3" - web3 "1.2.4" + ethereumjs-wallet "0.6.5" + web3 "1.2.11" get-caller-file@^1.0.1: version "1.0.3" @@ -5241,11 +4770,41 @@ get-func-name@^2.0.0: resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= +get-intrinsic@^1.0.1, get-intrinsic@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.2.tgz#6820da226e50b24894e08859469dc68361545d49" + integrity sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +get-intrinsic@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.0.tgz#892e62931e6938c8a23ea5aaebcfb67bd97da97e" + integrity sha512-M11rgtQp5GZMZzDL7jLTNxbDfurpzuau5uqRWDPvlHjfvg3TdScAZo96GLvhMjImrmR8uAt0FS2RLoMrfWGKlg== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + get-port@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" integrity sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw= +get-proxy@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/get-proxy/-/get-proxy-2.1.0.tgz#349f2b4d91d44c4d4d4e9cba2ad90143fac5ef93" + integrity sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw== + dependencies: + npm-conf "^1.1.0" + +get-stream@3.0.0, get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + get-stream@^2.2.0: version "2.3.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de" @@ -5254,11 +4813,6 @@ get-stream@^2.2.0: object-assign "^4.0.1" pinkie-promise "^2.0.0" -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= - get-stream@^4.0.0, get-stream@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -5293,14 +4847,6 @@ ghost-testrpc@^0.0.2: chalk "^2.4.2" node-emoji "^1.10.0" -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: version "5.1.1" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" @@ -5308,34 +4854,17 @@ glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: dependencies: is-glob "^4.0.1" -glob-stream@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4" - integrity sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ= - dependencies: - extend "^3.0.0" - glob "^7.1.1" - glob-parent "^3.1.0" - is-negated-glob "^1.0.0" - ordered-read-streams "^1.0.0" - pumpify "^1.3.5" - readable-stream "^2.1.5" - remove-trailing-separator "^1.0.1" - to-absolute-glob "^2.0.0" - unique-stream "^2.0.2" - -glob-watcher@^5.0.3: - version "5.0.5" - resolved "https://registry.yarnpkg.com/glob-watcher/-/glob-watcher-5.0.5.tgz#aa6bce648332924d9a8489be41e3e5c52d4186dc" - integrity sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw== - dependencies: - anymatch "^2.0.0" - async-done "^1.2.0" - chokidar "^2.0.0" - is-negated-glob "^1.0.0" - just-debounce "^1.0.0" - normalize-path "^3.0.0" - object.defaults "^1.1.0" +glob@7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" glob@7.1.3: version "7.1.3" @@ -5349,7 +4878,7 @@ glob@7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -glob@7.1.6, glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@~7.1.6: +glob@7.1.6, glob@^7.0.0, glob@^7.1.2, glob@^7.1.3, glob@~7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -5372,14 +4901,12 @@ glob@^5.0.15: once "^1.3.0" path-is-absolute "^1.0.0" -global-modules@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" - integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== +global-dirs@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= dependencies: - global-prefix "^1.0.1" - is-windows "^1.0.1" - resolve-dir "^1.0.0" + ini "^1.3.4" global-modules@^2.0.0: version "2.0.0" @@ -5388,17 +4915,6 @@ global-modules@^2.0.0: dependencies: global-prefix "^3.0.0" -global-prefix@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" - integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= - dependencies: - expand-tilde "^2.0.2" - homedir-polyfill "^1.0.1" - ini "^1.3.4" - is-windows "^1.0.1" - which "^1.2.14" - global-prefix@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" @@ -5408,13 +4924,13 @@ global-prefix@^3.0.0: kind-of "^6.0.2" which "^1.3.1" -global@~4.3.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" - integrity sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8= +global@~4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== dependencies: min-document "^2.19.0" - process "~0.5.1" + process "^0.11.10" globals@^11.7.0: version "11.12.0" @@ -5447,13 +4963,6 @@ globby@^10.0.1: merge2 "^1.2.3" slash "^3.0.0" -glogg@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.2.tgz#2d7dd702beda22eb3bffadf880696da6d846313f" - integrity sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA== - dependencies: - sparkles "^1.0.0" - got@9.6.0: version "9.6.0" resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" @@ -5491,7 +5000,35 @@ got@^7.1.0: url-parse-lax "^1.0.0" url-to-options "^1.0.1" -graceful-fs@^4.0.0, graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: +got@^8.3.1: + version "8.3.2" + resolved "https://registry.yarnpkg.com/got/-/got-8.3.2.tgz#1d23f64390e97f776cac52e5b936e5f514d2e937" + integrity sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw== + dependencies: + "@sindresorhus/is" "^0.7.0" + cacheable-request "^2.1.1" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + into-stream "^3.1.0" + is-retry-allowed "^1.1.0" + isurl "^1.0.0-alpha5" + lowercase-keys "^1.0.0" + mimic-response "^1.0.0" + p-cancelable "^0.4.0" + p-timeout "^2.0.1" + pify "^3.0.0" + safe-buffer "^5.1.1" + timed-out "^4.0.1" + url-parse-lax "^3.0.0" + url-to-options "^1.0.1" + +graceful-fs@^4.1.10: + version "4.2.6" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" + integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== + +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: version "4.2.4" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== @@ -5501,47 +5038,6 @@ growl@1.10.5: resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== -gulp-cli@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/gulp-cli/-/gulp-cli-2.3.0.tgz#ec0d380e29e52aa45e47977f0d32e18fd161122f" - integrity sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A== - dependencies: - ansi-colors "^1.0.1" - archy "^1.0.0" - array-sort "^1.0.0" - color-support "^1.1.3" - concat-stream "^1.6.0" - copy-props "^2.0.1" - fancy-log "^1.3.2" - gulplog "^1.0.0" - interpret "^1.4.0" - isobject "^3.0.1" - liftoff "^3.1.0" - matchdep "^2.0.0" - mute-stdout "^1.0.0" - pretty-hrtime "^1.0.0" - replace-homedir "^1.0.0" - semver-greatest-satisfied-range "^1.1.0" - v8flags "^3.2.0" - yargs "^7.1.0" - -gulp@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/gulp/-/gulp-4.0.2.tgz#543651070fd0f6ab0a0650c6a3e6ff5a7cb09caa" - integrity sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA== - dependencies: - glob-watcher "^5.0.3" - gulp-cli "^2.2.0" - undertaker "^1.2.1" - vinyl-fs "^3.0.0" - -gulplog@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5" - integrity sha1-4oxNRdBey77YGDY86PnFkmIp/+U= - dependencies: - glogg "^1.0.0" - handlebars@^4.0.1: version "4.7.6" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.6.tgz#d4c05c1baf90e9945f77aa68a7a219aa4a7df74e" @@ -5567,7 +5063,7 @@ har-validator@~5.1.3: ajv "^6.12.3" har-schema "^2.0.0" -hardhat-contract-sizer@^2.0.2: +hardhat-contract-sizer@2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hardhat-contract-sizer/-/hardhat-contract-sizer-2.0.2.tgz#735e00c4776188683886226b9b37dfe75cbd16fa" integrity sha512-6vDj3OoqPvzuEnURY2lN6veFXH8uIBRgnaIJoN7cpn7ENuciIR3qotNgLtbC6BNp4y0Cn/8FeMfKS6MdAvIdgQ== @@ -5575,10 +5071,10 @@ hardhat-contract-sizer@^2.0.2: cli-table3 "^0.6.0" colors "^1.4.0" -hardhat-deploy@^0.7.0-beta.28: - version "0.7.0-beta.28" - resolved "https://registry.yarnpkg.com/hardhat-deploy/-/hardhat-deploy-0.7.0-beta.28.tgz#e71dc7d7a97903773c717818e8ecb7eef8f97a5c" - integrity sha512-oWAVa636zyOXecvLkZ/hpph1PvqwoK0DnqjA21En4amfTjLx5Do6XlrGcNJAKrH9LRTnfg2dc7zmTauBqFM5+g== +hardhat-deploy@0.7.0-beta.45: + version "0.7.0-beta.45" + resolved "https://registry.yarnpkg.com/hardhat-deploy/-/hardhat-deploy-0.7.0-beta.45.tgz#fa81f3368e83b0195323da9fd04923c80e968e90" + integrity sha512-pWl11O3X92kE88P5pQfPTxpM9tBes0RGD78JygQpiE0lOFaO0vm65H1dLX1F63gKyW+IMXM0Kf7xRAwSLtt7nQ== dependencies: "@ethersproject/abi" "^5.0.2" "@ethersproject/abstract-signer" "^5.0.2" @@ -5591,30 +5087,32 @@ hardhat-deploy@^0.7.0-beta.28: "@ethersproject/transactions" "^5.0.2" "@ethersproject/wallet" "^5.0.2" "@types/qs" "^6.9.4" - axios "^0.19.2" + axios "^0.21.1" chalk "^4.1.0" chokidar "^3.4.0" debug "^4.1.1" + form-data "^3.0.0" fs-extra "^9.0.0" match-all "^1.2.6" murmur-128 "^0.2.1" qs "^6.9.4" -hardhat-gas-reporter@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.1.tgz#37f96da5f11e5ae34b28a68c5d972d3168165c95" - integrity sha512-YC+SCYIkBdRtISNbisU2BwDSelUdCrIKRsJXt3M9Jw1VF5CmtSZb8VuuOc2Zl4AMcEV2jEy6ZuAksYomPiApYQ== +hardhat-gas-reporter@1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.4.tgz#59e3137e38e0dfeac2e4f90d5c74160b50ad4829" + integrity sha512-G376zKh81G3K9WtDA+SoTLWsoygikH++tD1E7llx+X7J+GbIqfwhDKKgvJjcnEesMrtR9UqQHK02lJuXY1RTxw== dependencies: - eth-gas-reporter "^0.2.19" + eth-gas-reporter "^0.2.20" + sha1 "^1.1.1" -hardhat@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.0.3.tgz#35e07060d9854d4182f201aeaa1c05316bd7e4d3" - integrity sha512-mDygAl+1qd5KBdXQBfc3R5XmC/rVdYYbEuOTSQY3rlncVu9gfockZVDsHtAMPw/FiBIRMApLcOceK7D1XQmHRw== +hardhat@2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.0.8.tgz#6ec232293dd6b3ca7baeadb095ba4afce4b9b2e0" + integrity sha512-2tDAtOfshrBzP103dx7PQrhTwv2sqjhQStZAPwkkQTic25o2EH6HYE2++LuOG98YwqSjr0WvhvdBvKl3dCSkYA== dependencies: "@nomiclabs/ethereumjs-vm" "^4.1.1" "@sentry/node" "^5.18.1" - "@solidity-parser/parser" "^0.7.1" + "@solidity-parser/parser" "^0.11.0" "@types/bn.js" "^4.11.5" "@types/lru-cache" "^5.1.0" abort-controller "^3.0.0" @@ -5759,14 +5257,10 @@ hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: inherits "^2.0.3" minimalistic-assert "^1.0.1" -hdkey@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/hdkey/-/hdkey-1.1.2.tgz#c60f9cf6f90fbf24a8a52ea06893f36a0108cd3e" - integrity sha512-PTQ4VKu0oRnCrYfLp04iQZ7T2Cxz0UsEXYauk2j8eh6PJXCpbXuCFhOmtIFtbET0i3PMWmHN9J11gU8LEgUljQ== - dependencies: - bs58check "^2.1.2" - safe-buffer "^5.1.1" - secp256k1 "^3.0.1" +he@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" + integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0= he@1.2.0: version "1.2.0" @@ -5795,13 +5289,6 @@ home-or-tmp@^2.0.0: os-homedir "^1.0.0" os-tmpdir "^1.0.1" -homedir-polyfill@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" - integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== - dependencies: - parse-passwd "^1.0.0" - hosted-git-info@^2.1.4, hosted-git-info@^2.6.0: version "2.8.8" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" @@ -5817,6 +5304,11 @@ http-basic@^8.1.1: http-response-object "^3.0.1" parse-cache-control "^1.0.1" +http-cache-semantics@3.8.1: + version "3.8.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" + integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== + http-cache-semantics@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" @@ -5894,10 +5386,10 @@ idna-uts46-hx@^2.3.1: dependencies: punycode "2.1.0" -ieee754@^1.1.4: - version "1.1.13" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" - integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore@^4.0.6: version "4.0.6" @@ -5933,9 +5425,9 @@ import-fresh@^2.0.0: resolve-from "^3.0.0" import-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" - integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" @@ -5969,9 +5461,9 @@ inherits@2.0.3: integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= ini@^1.3.4, ini@^1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== inquirer@^6.2.2: version "6.5.2" @@ -5992,11 +5484,19 @@ inquirer@^6.2.2: strip-ansi "^5.1.0" through "^2.3.6" -interpret@^1.0.0, interpret@^1.4.0: +interpret@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== +into-stream@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-3.1.0.tgz#96fb0a936c12babd6ff1752a17d05616abd094c6" + integrity sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY= + dependencies: + from2 "^2.1.1" + p-is-promise "^1.1.0" + invariant@^2.2.2: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" @@ -6026,14 +5526,6 @@ ipaddr.js@1.9.1: resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== -is-absolute@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" - integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA== - dependencies: - is-relative "^1.0.0" - is-windows "^1.0.1" - is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -6048,23 +5540,18 @@ is-accessor-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" -is-arguments@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" - integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== - +is-arguments@^1.0.4, is-arguments@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" + integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== + dependencies: + call-bind "^1.0.0" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= - dependencies: - binary-extensions "^1.0.0" - is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -6078,20 +5565,29 @@ is-buffer@^1.1.5: integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== is-buffer@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" - integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== - -is-callable@^1.1.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" - integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw== + version "2.0.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== -is-callable@^1.1.4, is-callable@^1.2.0: +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-core-module@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" + integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== + dependencies: + has "^1.0.3" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -6146,7 +5642,7 @@ is-extendable@^1.0.1: dependencies: is-plain-object "^2.0.4" -is-extglob@^2.1.0, is-extglob@^2.1.1: +is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= @@ -6183,13 +5679,6 @@ is-function@^1.0.1: resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= - dependencies: - is-extglob "^2.1.0" - is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" @@ -6202,25 +5691,28 @@ is-hex-prefixed@1.0.0: resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" integrity sha1-fY035q135dEnFIkTxXPggtd39VQ= -is-map@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.1.tgz#520dafc4307bb8ebc33b813de5ce7c9400d644a1" - integrity sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw== +is-installed-globally@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.2.0.tgz#8cde07ade508458b51f14bcda315ffaf4898de30" + integrity sha512-g3TzWCnR/eO4Q3abCwgFjOFw7uVOfxG4m8hMr/39Jcf2YvE5mHrFKqpyuraWV4zwx9XhjnVO4nY0ZI4llzl0Pg== + dependencies: + global-dirs "^0.1.1" + is-path-inside "^2.1.0" + +is-map@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" + integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== is-natural-number@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8" integrity sha1-q5124dtM7VHjXeDHLr7PCfc0zeg= -is-negated-glob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2" - integrity sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI= - -is-negative-zero@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461" - integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE= +is-negative-zero@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== is-number@^3.0.0: version "3.0.0" @@ -6229,27 +5721,34 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" -is-number@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" - integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" - integrity sha1-iVJojF7C/9awPsyF52ngKQMINHA= + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.2.tgz#a56552e1c665c9e950b4a025461da87e72f86fcf" + integrity sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA== + +is-path-inside@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" + integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== + dependencies: + path-is-inside "^1.0.2" -is-plain-obj@^1.1.0: +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= -is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== @@ -6261,7 +5760,7 @@ is-plain-object@^3.0.0: resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-3.0.1.tgz#662d92d24c0aa4302407b0d45d21f2251c85f85b" integrity sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g== -is-regex@^1.0.4, is-regex@^1.1.0, is-regex@^1.1.1: +is-regex@^1.0.4, is-regex@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== @@ -6275,29 +5774,22 @@ is-regex@~1.0.5: dependencies: has "^1.0.3" -is-relative@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" - integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA== - dependencies: - is-unc-path "^1.0.0" - -is-retry-allowed@^1.0.0: +is-retry-allowed@^1.0.0, is-retry-allowed@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== -is-set@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.1.tgz#d1604afdab1724986d30091575f54945da7e5f43" - integrity sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA== +is-set@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" + integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= -is-string@^1.0.4, is-string@^1.0.5: +is-string@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== @@ -6314,29 +5806,17 @@ is-typedarray@^1.0.0, is-typedarray@~1.0.0: resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -is-unc-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" - integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ== - dependencies: - unc-path-regex "^0.1.2" - is-url@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== -is-utf8@^0.2.0, is-utf8@^0.2.1: +is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= -is-valid-glob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa" - integrity sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao= - -is-windows@^1.0.1, is-windows@^1.0.2: +is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== @@ -6391,7 +5871,7 @@ iterate-iterator@^1.0.1: resolved "https://registry.yarnpkg.com/iterate-iterator/-/iterate-iterator-1.0.1.tgz#1693a768c1ddd79c969051459453f082fe82e9f6" integrity sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw== -iterate-value@^1.0.0: +iterate-value@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/iterate-value/-/iterate-value-1.0.2.tgz#935115bd37d006a52046535ebc8d07e9c9337f57" integrity sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ== @@ -6427,7 +5907,7 @@ js-yaml@3.13.1: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@3.x, js-yaml@^3.12.0, js-yaml@^3.13.0, js-yaml@^3.13.1: +js-yaml@3.14.0: version "3.14.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== @@ -6435,6 +5915,14 @@ js-yaml@3.x, js-yaml@^3.12.0, js-yaml@^3.13.0, js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@3.x, js-yaml@^3.12.0, js-yaml@^3.13.0, js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -6489,6 +5977,11 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" @@ -6538,11 +6031,11 @@ jsonfile@^4.0.0: graceful-fs "^4.1.6" jsonfile@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" - integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== dependencies: - universalify "^1.0.0" + universalify "^2.0.0" optionalDependencies: graceful-fs "^4.1.6" @@ -6552,9 +6045,9 @@ jsonify@~0.0.0: integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= jsonschema@^1.2.4: - version "1.2.6" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" - integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" + integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== jsprim@^1.2.2: version "1.4.1" @@ -6566,20 +6059,13 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" -just-debounce@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/just-debounce/-/just-debounce-1.0.0.tgz#87fccfaeffc0b68cd19d55f6722943f929ea35ea" - integrity sha1-h/zPrv/AtozRnVX2cilD+SnqNeo= - -keccak@^1.0.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/keccak/-/keccak-1.4.0.tgz#572f8a6dbee8e7b3aa421550f9e6408ca2186f80" - integrity sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw== +keccak@3.0.1, keccak@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.1.tgz#ae30a0e94dbe43414f741375cff6d64c8bea0bff" + integrity sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA== dependencies: - bindings "^1.2.1" - inherits "^2.0.3" - nan "^2.2.1" - safe-buffer "^5.1.0" + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" keccak@^2.0.0: version "2.1.0" @@ -6591,13 +6077,12 @@ keccak@^2.0.0: nan "^2.14.0" safe-buffer "^5.2.0" -keccak@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.1.tgz#ae30a0e94dbe43414f741375cff6d64c8bea0bff" - integrity sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA== +keyv@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.0.0.tgz#44923ba39e68b12a7cec7df6c3268c031f2ef373" + integrity sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA== dependencies: - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" + json-buffer "3.0.0" keyv@^3.0.0: version "3.1.0" @@ -6620,7 +6105,7 @@ kind-of@^4.0.0: dependencies: is-buffer "^1.1.5" -kind-of@^5.0.0, kind-of@^5.0.2: +kind-of@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== @@ -6630,6 +6115,13 @@ kind-of@^6.0.0, kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== +klaw-sync@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/klaw-sync/-/klaw-sync-6.0.0.tgz#1fd2cfd56ebb6250181114f0a581167099c2b28c" + integrity sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ== + dependencies: + graceful-fs "^4.1.11" + klaw@^1.0.0: version "1.3.1" resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" @@ -6637,21 +6129,6 @@ klaw@^1.0.0: optionalDependencies: graceful-fs "^4.1.9" -last-run@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/last-run/-/last-run-1.1.1.tgz#45b96942c17b1c79c772198259ba943bebf8ca5b" - integrity sha1-RblpQsF7HHnHchmCWbqUO+v4yls= - dependencies: - default-resolution "^2.0.0" - es6-weak-map "^2.0.1" - -lazystream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" - integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= - dependencies: - readable-stream "^2.0.5" - lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" @@ -6666,13 +6143,6 @@ lcid@^2.0.0: dependencies: invert-kv "^2.0.0" -lead@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lead/-/lead-1.0.0.tgz#6f14f99a37be3a9dd784f5495690e5903466ee42" - integrity sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI= - dependencies: - flush-write-stream "^1.0.2" - level-codec@^9.0.0: version "9.0.2" resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-9.0.2.tgz#fd60df8c64786a80d44e63423096ffead63d8cbc" @@ -6829,20 +6299,6 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -liftoff@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-3.1.0.tgz#c9ba6081f908670607ee79062d700df062c52ed3" - integrity sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog== - dependencies: - extend "^3.0.0" - findup-sync "^3.0.0" - fined "^1.0.1" - flagged-respawn "^1.0.0" - is-plain-object "^2.0.4" - object.map "^1.0.0" - rechoir "^0.6.2" - resolve "^1.1.7" - load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" @@ -6880,12 +6336,12 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: - p-locate "^4.1.0" + p-locate "^5.0.0" lodash.assign@^4.0.3, lodash.assign@^4.0.6: version "4.2.0" @@ -6897,12 +6353,7 @@ lodash.toarray@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE= -lodash@4.17.14: - version "4.17.14" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" - integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw== - -lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.4: +lodash@4.17.20, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.4: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== @@ -6914,6 +6365,13 @@ log-symbols@3.0.0: dependencies: chalk "^2.4.2" +log-symbols@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920" + integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== + dependencies: + chalk "^4.0.0" + looper@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/looper/-/looper-2.0.0.tgz#66cd0c774af3d4fedac53794f742db56da8f09ec" @@ -6931,6 +6389,11 @@ loose-envify@^1.0.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" +lowercase-keys@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" + integrity sha1-TjNms55/VFfjXxMkvfb4jQv8cwY= + lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" @@ -6955,6 +6418,13 @@ lru-cache@^3.2.0: dependencies: pseudomap "^1.0.1" +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + lru_map@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" @@ -6970,27 +6440,13 @@ ltgt@~2.1.1: resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.1.3.tgz#10851a06d9964b971178441c23c9e52698eece34" integrity sha1-EIUaBtmWS5cReEQcI8nlJpjuzjQ= -magic-string@^0.25.3: - version "0.25.7" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" - integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== - dependencies: - sourcemap-codec "^1.4.4" - -make-dir@^1.0.0: +make-dir@^1.0.0, make-dir@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== dependencies: pify "^3.0.0" -make-iterator@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.1.tgz#29b33f312aa8f547c4a5e490f56afcec99133ad6" - integrity sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw== - dependencies: - kind-of "^6.0.2" - map-age-cleaner@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" @@ -6998,7 +6454,7 @@ map-age-cleaner@^0.1.1: dependencies: p-defer "^1.0.0" -map-cache@^0.2.0, map-cache@^0.2.2: +map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= @@ -7020,16 +6476,6 @@ match-all@^1.2.6: resolved "https://registry.yarnpkg.com/match-all/-/match-all-1.2.6.tgz#66d276ad6b49655551e63d3a6ee53e8be0566f8d" integrity sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ== -matchdep@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/matchdep/-/matchdep-2.0.0.tgz#c6f34834a0d8dbc3b37c27ee8bbcb27c7775582e" - integrity sha1-xvNINKDY28OzfCfui7yyfHd1WC4= - dependencies: - findup-sync "^2.0.0" - micromatch "^3.0.4" - resolve "^1.4.0" - stack-trace "0.0.10" - md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -7092,7 +6538,20 @@ merge2@^1.2.3, merge2@^1.3.0: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -merkle-patricia-tree@2.3.2, merkle-patricia-tree@^2.1.2, merkle-patricia-tree@^2.3.2: +merkle-patricia-tree@3.0.0, merkle-patricia-tree@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-3.0.0.tgz#448d85415565df72febc33ca362b8b614f5a58f8" + integrity sha512-soRaMuNf/ILmw3KWbybaCjhx86EYeBbD8ph0edQCTed0JN/rxDt1EBN52Ajre3VyGo+91f8+/rfPIRQnnGMqmQ== + dependencies: + async "^2.6.1" + ethereumjs-util "^5.2.0" + level-mem "^3.0.1" + level-ws "^1.0.0" + readable-stream "^3.0.6" + rlp "^2.0.0" + semaphore ">=1.0.1" + +merkle-patricia-tree@^2.1.2, merkle-patricia-tree@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz#982ca1b5a0fde00eed2f6aeed1f9152860b8208a" integrity sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g== @@ -7106,25 +6565,12 @@ merkle-patricia-tree@2.3.2, merkle-patricia-tree@^2.1.2, merkle-patricia-tree@^2 rlp "^2.0.0" semaphore ">=1.0.1" -merkle-patricia-tree@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-3.0.0.tgz#448d85415565df72febc33ca362b8b614f5a58f8" - integrity sha512-soRaMuNf/ILmw3KWbybaCjhx86EYeBbD8ph0edQCTed0JN/rxDt1EBN52Ajre3VyGo+91f8+/rfPIRQnnGMqmQ== - dependencies: - async "^2.6.1" - ethereumjs-util "^5.2.0" - level-mem "^3.0.1" - level-ws "^1.0.0" - readable-stream "^3.0.6" - rlp "^2.0.0" - semaphore ">=1.0.1" - methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= -micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: +micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== @@ -7159,17 +6605,22 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.44.0: - version "1.44.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" - integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== +mime-db@1.45.0: + version "1.45.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" + integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== + +mime-db@^1.28.0: + version "1.46.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.46.0.tgz#6267748a7f799594de3cbc8cde91def349661cee" + integrity sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ== mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24: - version "2.1.27" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" - integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + version "2.1.28" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.28.tgz#1160c4757eab2c5363888e005273ecf79d2a0ecd" + integrity sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ== dependencies: - mime-db "1.44.0" + mime-db "1.45.0" mime@1.6.0: version "1.6.0" @@ -7215,6 +6666,11 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: dependencies: brace-expansion "^1.1.7" +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + minimist@^1.2.0, minimist@^1.2.5, minimist@~1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" @@ -7255,6 +6711,13 @@ mkdirp@*: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== +mkdirp@0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + dependencies: + minimist "0.0.8" + mkdirp@0.5.5, mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" @@ -7262,6 +6725,54 @@ mkdirp@0.5.5, mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1: dependencies: minimist "^1.2.5" +mocha@8.2.1: + version "8.2.1" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.2.1.tgz#f2fa68817ed0e53343d989df65ccd358bc3a4b39" + integrity sha512-cuLBVfyFfFqbNR0uUKbDGXKGk+UDFe6aR4os78XIrMQpZl/nv7JYHcvP5MFIAb374b2zFXsdgEGwmzMtP0Xg8w== + dependencies: + "@ungap/promise-all-settled" "1.1.2" + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.4.3" + debug "4.2.0" + diff "4.0.2" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.1.6" + growl "1.10.5" + he "1.2.0" + js-yaml "3.14.0" + log-symbols "4.0.0" + minimatch "3.0.4" + ms "2.1.2" + nanoid "3.1.12" + serialize-javascript "5.0.1" + strip-json-comments "3.1.1" + supports-color "7.2.0" + which "2.0.2" + wide-align "1.1.3" + workerpool "6.0.2" + yargs "13.3.2" + yargs-parser "13.1.2" + yargs-unparser "2.0.0" + +mocha@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.2.0.tgz#6d8ae508f59167f940f2b5b3c4a612ae50c90ae6" + integrity sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ== + dependencies: + browser-stdout "1.3.1" + commander "2.15.1" + debug "3.1.0" + diff "3.5.0" + escape-string-regexp "1.0.5" + glob "7.1.2" + growl "1.10.5" + he "1.1.1" + minimatch "3.0.4" + mkdirp "0.5.1" + supports-color "5.4.0" + mocha@^7.1.1, mocha@^7.1.2: version "7.2.0" resolved "https://registry.yarnpkg.com/mocha/-/mocha-7.2.0.tgz#01cc227b00d875ab1eed03a75106689cfed5a604" @@ -7292,41 +6803,10 @@ mocha@^7.1.1, mocha@^7.1.2: yargs-parser "13.1.2" yargs-unparser "1.6.0" -mocha@^8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.1.1.tgz#1de1ba4e9a2c955d96b84e469d7540848223592d" - integrity sha512-p7FuGlYH8t7gaiodlFreseLxEmxTgvyG9RgPHODFPySNhwUehu8NIb0vdSt3WFckSneswZ0Un5typYcWElk7HQ== - dependencies: - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.3.1" - debug "3.2.6" - diff "4.0.2" - escape-string-regexp "1.0.5" - find-up "4.1.0" - glob "7.1.6" - growl "1.10.5" - he "1.2.0" - js-yaml "3.13.1" - log-symbols "3.0.0" - minimatch "3.0.4" - ms "2.1.2" - object.assign "4.1.0" - promise.allsettled "1.0.2" - serialize-javascript "4.0.0" - strip-json-comments "3.0.1" - supports-color "7.1.0" - which "2.0.2" - wide-align "1.1.3" - workerpool "6.0.0" - yargs "13.3.2" - yargs-parser "13.1.2" - yargs-unparser "1.6.1" - mock-fs@^4.1.0: - version "4.12.0" - resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.12.0.tgz#a5d50b12d2d75e5bec9dac3b67ffe3c41d31ade4" - integrity sha512-/P/HtrlvBxY4o/PzXY9cCNBrdylDNxg7gnrv2sMNxj+UJ2m8jSpl0/A6fuJeNAWr99ZvGWH8XCbE0vmnM5KupQ== + version "4.13.0" + resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.13.0.tgz#31c02263673ec3789f90eb7b6963676aa407a598" + integrity sha512-DD0vOdofJdoaRNtnWcrXe6RQbpHkPPmtqGq14uRX0F8ZKJ5nv89CVTYl/BZdppDxBDaV0hl75htg3abpEWlPZA== ms@2.0.0: version "2.0.0" @@ -7338,11 +6818,56 @@ ms@2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== -ms@2.1.2, ms@^2.1.1: +ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multibase@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.7.0.tgz#1adfc1c50abe05eefeb5091ac0c2728d6b84581b" + integrity sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg== + dependencies: + base-x "^3.0.8" + buffer "^5.5.0" + +multibase@~0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.6.1.tgz#b76df6298536cc17b9f6a6db53ec88f85f8cc12b" + integrity sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw== + dependencies: + base-x "^3.0.8" + buffer "^5.5.0" + +multicodec@^0.5.5: + version "0.5.7" + resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-0.5.7.tgz#1fb3f9dd866a10a55d226e194abba2dcc1ee9ffd" + integrity sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA== + dependencies: + varint "^5.0.0" + +multicodec@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-1.0.4.tgz#46ac064657c40380c28367c90304d8ed175a714f" + integrity sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg== + dependencies: + buffer "^5.6.0" + varint "^5.0.0" + +multihashes@^0.4.15, multihashes@~0.4.15: + version "0.4.21" + resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-0.4.21.tgz#dc02d525579f334a7909ade8a122dabb58ccfcb5" + integrity sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw== + dependencies: + buffer "^5.5.0" + multibase "^0.7.0" + varint "^5.0.0" + murmur-128@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/murmur-128/-/murmur-128-0.2.1.tgz#a9f6568781d2350ecb1bf80c14968cadbeaa4b4d" @@ -7352,26 +6877,26 @@ murmur-128@^0.2.1: fmix "^0.1.0" imul "^1.0.0" -mute-stdout@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mute-stdout/-/mute-stdout-1.0.1.tgz#acb0300eb4de23a7ddeec014e3e96044b3472331" - integrity sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg== - mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= -nan@^2.0.8, nan@^2.11.0, nan@^2.12.1, nan@^2.14.0, nan@^2.2.1: - version "2.14.1" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" - integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== +nan@^2.0.8, nan@^2.13.2, nan@^2.14.0: + version "2.14.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" + integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== nano-json-stream-parser@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" integrity sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18= +nanoid@3.1.12: + version "3.1.12" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.12.tgz#6f7736c62e8d39421601e4a0c77623a97ea69654" + integrity sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A== + nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -7479,29 +7004,32 @@ normalize-package-data@^2.3.2: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" - normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== +normalize-url@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-2.0.1.tgz#835a9da1551fa26f70e92329069a23aa6574d7e6" + integrity sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw== + dependencies: + prepend-http "^2.0.0" + query-string "^5.0.1" + sort-keys "^2.0.0" + normalize-url@^4.1.0: version "4.5.0" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== -now-and-later@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/now-and-later/-/now-and-later-2.0.1.tgz#8e579c8685764a7cc02cb680380e94f43ccb1f7c" - integrity sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ== +npm-conf@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/npm-conf/-/npm-conf-1.1.3.tgz#256cc47bd0e218c259c4e9550bf413bc2192aff9" + integrity sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw== dependencies: - once "^1.3.2" + config-chain "^1.1.11" + pify "^3.0.0" npm-run-path@^2.0.0: version "2.0.2" @@ -7542,10 +7070,10 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.7.0, object-inspect@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" - integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== +object-inspect@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" + integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== object-inspect@~1.7.0: version "1.7.0" @@ -7553,12 +7081,12 @@ object-inspect@~1.7.0: integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== object-is@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.2.tgz#c5d2e87ff9e119f78b7a088441519e2eec1573b6" - integrity sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ== + version "1.1.4" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.4.tgz#63d6c83c00a43f4cbc9434eb9757c8a5b8565068" + integrity sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.17.5" object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" @@ -7577,7 +7105,7 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.assign@4.1.0, object.assign@^4.0.4: +object.assign@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== @@ -7587,74 +7115,50 @@ object.assign@4.1.0, object.assign@^4.0.4: has-symbols "^1.0.0" object-keys "^1.0.11" -object.assign@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.1.tgz#303867a666cdd41936ecdedfb1f8f3e32a478cdd" - integrity sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA== +object.assign@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.18.0-next.0" has-symbols "^1.0.1" object-keys "^1.1.1" -object.defaults@^1.0.0, object.defaults@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf" - integrity sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8= - dependencies: - array-each "^1.0.1" - array-slice "^1.0.0" - for-own "^1.0.0" - isobject "^3.0.0" - object.entries@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.2.tgz#bc73f00acb6b6bb16c203434b10f9a7e797d3add" - integrity sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA== + version "1.1.3" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.3.tgz#c601c7f168b62374541a07ddbd3e2d5e4f7711a6" + integrity sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.17.5" + es-abstract "^1.18.0-next.1" has "^1.0.3" -object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" - integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== +object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.1.tgz#0dfda8d108074d9c563e80490c883b6661091544" + integrity sha512-6DtXgZ/lIZ9hqx4GtZETobXLR/ZLaa0aqV0kzbn80Rf8Z2e/XFnhA0I7p07N2wH8bBBltr2xQPi6sbKWAY2Eng== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" + es-abstract "^1.18.0-next.1" -object.map@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object.map/-/object.map-1.0.1.tgz#cf83e59dc8fcc0ad5f4250e1f78b3b81bd801d37" - integrity sha1-z4Plncj8wK1fQlDh94s7gb2AHTc= - dependencies: - for-own "^1.0.0" - make-iterator "^1.0.0" - -object.pick@^1.2.0, object.pick@^1.3.0: +object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= dependencies: isobject "^3.0.1" -object.reduce@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object.reduce/-/object.reduce-1.0.1.tgz#6fe348f2ac7fa0f95ca621226599096825bb03ad" - integrity sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60= - dependencies: - for-own "^1.0.0" - make-iterator "^1.0.0" - object.values@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" - integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== + version "1.1.2" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.2.tgz#7a2015e06fcb0f546bd652486ce8583a4731c731" + integrity sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" + es-abstract "^1.18.0-next.1" has "^1.0.3" oboe@2.1.4: @@ -7671,7 +7175,7 @@ on-finished@~2.3.0: dependencies: ee-first "1.1.1" -once@1.x, once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.4.0: +once@1.x, once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= @@ -7709,13 +7213,6 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" -ordered-read-streams@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz#77c0cb37c41525d64166d990ffad7ec6a0e1363e" - integrity sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4= - dependencies: - readable-stream "^2.0.1" - os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" @@ -7747,6 +7244,11 @@ p-cancelable@^0.3.0: resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" integrity sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw== +p-cancelable@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0" + integrity sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ== + p-cancelable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" @@ -7757,11 +7259,23 @@ p-defer@^1.0.0: resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= +p-event@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/p-event/-/p-event-2.3.1.tgz#596279ef169ab2c3e0cae88c1cfbb08079993ef6" + integrity sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA== + dependencies: + p-timeout "^2.0.1" + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= +p-is-promise@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" + integrity sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4= + p-is-promise@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" @@ -7774,13 +7288,20 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.0.0, p-limit@^2.2.0: +p-limit@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" @@ -7795,12 +7316,12 @@ p-locate@^3.0.0: dependencies: p-limit "^2.0.0" -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: - p-limit "^2.2.0" + p-limit "^3.0.2" p-timeout@^1.1.1: version "1.2.1" @@ -7809,6 +7330,13 @@ p-timeout@^1.1.1: dependencies: p-finally "^1.0.0" +p-timeout@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-2.0.1.tgz#d8dd1979595d2dc0139e1fe46b8b646cb3cdf038" + integrity sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA== + dependencies: + p-finally "^1.0.0" + p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" @@ -7842,20 +7370,6 @@ parse-cache-control@^1.0.1: resolved "https://registry.yarnpkg.com/parse-cache-control/-/parse-cache-control-1.0.1.tgz#8eeab3e54fa56920fe16ba38f77fa21aacc2d74e" integrity sha1-juqz5U+laSD+Fro493+iGqzC104= -parse-code-context@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-code-context/-/parse-code-context-1.0.0.tgz#718c295c593d0d19a37f898473268cc75e98de1e" - integrity sha512-OZQaqKaQnR21iqhlnPfVisFjBWjhnMl5J9MgbP8xC+EwoVqbXrq78lp+9Zb3ahmLzrIX5Us/qbvBnaS3hkH6OA== - -parse-filepath@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" - integrity sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE= - dependencies: - is-absolute "^1.0.0" - map-cache "^0.2.0" - path-root "^0.1.1" - parse-headers@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.3.tgz#5e8e7512383d140ba02f0c7aa9f49b4399c92515" @@ -7876,16 +7390,6 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse-node-version@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" - integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== - -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= - parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -7896,16 +7400,29 @@ pascalcase@^0.1.1: resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= +patch-package@6.2.2, patch-package@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-6.2.2.tgz#71d170d650c65c26556f0d0fbbb48d92b6cc5f39" + integrity sha512-YqScVYkVcClUY0v8fF0kWOjDYopzIM8e3bj/RU1DPeEF14+dCGm6UeOYm4jvCyxqIEQ5/eJzmbWfDWnUleFNMg== + dependencies: + "@yarnpkg/lockfile" "^1.1.0" + chalk "^2.4.2" + cross-spawn "^6.0.5" + find-yarn-workspace-root "^1.2.1" + fs-extra "^7.0.1" + is-ci "^2.0.0" + klaw-sync "^6.0.0" + minimist "^1.2.0" + rimraf "^2.6.3" + semver "^5.6.0" + slash "^2.0.0" + tmp "^0.0.33" + path-browserify@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= - path-exists@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" @@ -7948,18 +7465,6 @@ path-parse@^1.0.6: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== -path-root-regex@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" - integrity sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0= - -path-root@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" - integrity sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc= - dependencies: - path-root-regex "^0.1.0" - path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" @@ -8012,7 +7517,7 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.0.7, picomatch@^2.2.1: +picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: version "2.2.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== @@ -8056,6 +7561,11 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= +postinstall-postinstall@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz#4f7f77441ef539d1512c40bd04c71b06a4704ca3" + integrity sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ== + precond@0.2: version "0.2.3" resolved "https://registry.yarnpkg.com/precond/-/precond-0.2.3.tgz#aa9591bcaa24923f1e0f4849d240f47efc1075ac" @@ -8081,54 +7591,44 @@ prepend-http@^2.0.0: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= -prettier-plugin-solidity@^1.0.0-alpha.57: - version "1.0.0-alpha.57" - resolved "https://registry.yarnpkg.com/prettier-plugin-solidity/-/prettier-plugin-solidity-1.0.0-alpha.57.tgz#972190efe96bce816f3af3f74948c8b86ad0abb1" - integrity sha512-GTcL3OzxPn54TMlopE+wcXOUfEnpw05jvJw3KJrXkWTHER1CbkuAFRP4xiFtbJYq35ssSRO5FN4yMshx2grTIw== +prettier-plugin-solidity@1.0.0-beta.3: + version "1.0.0-beta.3" + resolved "https://registry.yarnpkg.com/prettier-plugin-solidity/-/prettier-plugin-solidity-1.0.0-beta.3.tgz#bb0385d75c7762eb29c638c1ba55c48687c13be0" + integrity sha512-iLbf5ZqwSUqi/BQuRGh+fHy0y3VLX9WayI7qB3wqakSUHItbiKsUKyXbTeho4pfTJVr0D3M4c8BNuEr2OMAOVg== dependencies: - "@solidity-parser/parser" "^0.8.0" + "@solidity-parser/parser" "^0.11.0" dir-to-object "^2.0.0" emoji-regex "^9.0.0" escape-string-regexp "^4.0.0" - extract-comments "^1.1.0" prettier "^2.0.5" semver "^7.3.2" + solidity-comments-extractor "^0.0.4" string-width "^4.2.0" +prettier@2.2.1, prettier@^2.0.5: + version "2.2.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" + integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== + prettier@^1.14.3: version "1.19.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== -prettier@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.5.tgz#d6d56282455243f2f92cc1716692c08aa31522d4" - integrity sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg== - -prettier@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.1.1.tgz#d9485dd5e499daa6cb547023b87a6cf51bee37d6" - integrity sha512-9bY+5ZWCfqj3ghYBLxApy2zf6m+NJo5GzmLTpr9FsApsfjriNnS2dahWReHMi7qNPhhHl9SYHJs2cHZLgexNIw== - -pretty-hrtime@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" - integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= - private@^0.1.6, private@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== -process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: +process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -process@~0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" - integrity sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8= +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= progress@^2.0.0: version "2.0.3" @@ -8143,16 +7643,17 @@ promise-to-callback@^1.0.0: is-fn "^1.0.0" set-immediate-shim "^1.0.1" -promise.allsettled@1.0.2, promise.allsettled@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/promise.allsettled/-/promise.allsettled-1.0.2.tgz#d66f78fbb600e83e863d893e98b3d4376a9c47c9" - integrity sha512-UpcYW5S1RaNKT6pd+s9jp9K9rlQge1UXKskec0j6Mmuq7UJCvlS2J2/s/yuPN8ehftf9HXMxWlKiPbGGUzpoRg== +promise.allsettled@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/promise.allsettled/-/promise.allsettled-1.0.4.tgz#65e71f2a604082ed69c548b68603294090ee6803" + integrity sha512-o73CbvQh/OnPFShxHcHxk0baXR2a1m4ozb85ha0H14VEoi/EJJLa9mnPfEWJx9RjA9MLfhdjZ8I6HhWtBa64Ag== dependencies: - array.prototype.map "^1.0.1" + array.prototype.map "^1.0.3" + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" - iterate-value "^1.0.0" + es-abstract "^1.18.0-next.2" + get-intrinsic "^1.0.2" + iterate-value "^1.0.2" promise@^8.0.0: version "8.1.0" @@ -8161,6 +7662,11 @@ promise@^8.0.0: dependencies: asap "~2.0.6" +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= + proxy-addr@~2.0.5: version "2.0.6" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" @@ -8244,14 +7750,6 @@ pull-window@^2.1.4: dependencies: looper "^2.0.0" -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" @@ -8260,15 +7758,6 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -pumpify@^1.3.5: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" @@ -8290,9 +7779,9 @@ qs@6.7.0: integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== qs@^6.4.0, qs@^6.7.0, qs@^6.9.4: - version "6.9.4" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.4.tgz#9090b290d1f91728d3c22e54843ca44aea5ab687" - integrity sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ== + version "6.9.6" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.6.tgz#26ed3c8243a431b2924aca84cc90471f35d5a0ee" + integrity sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ== qs@~6.5.2: version "6.5.2" @@ -8333,11 +7822,6 @@ randomfill@^1.0.3: randombytes "^2.0.5" safe-buffer "^5.1.0" -randomhex@0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/randomhex/-/randomhex-0.1.5.tgz#baceef982329091400f2a2912c6cd02f1094f585" - integrity sha1-us7vmCMpCRQA8qKRLGzQLxCU9YU= - range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" @@ -8407,7 +7891,7 @@ readable-stream@^1.0.33: isarray "0.0.1" string_decoder "~0.10.x" -readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.8, readable-stream@^2.2.9, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: +readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.2.2, readable-stream@^2.2.8, readable-stream@^2.2.9, readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -8439,15 +7923,6 @@ readable-stream@~1.0.15: isarray "0.0.1" string_decoder "~0.10.x" -readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - readdirp@~3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" @@ -8455,17 +7930,10 @@ readdirp@~3.2.0: dependencies: picomatch "^2.0.4" -readdirp@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.3.0.tgz#984458d13a1e42e2e9f5841b129e162f369aff17" - integrity sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ== - dependencies: - picomatch "^2.0.7" - -readdirp@~3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" - integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== dependencies: picomatch "^2.2.1" @@ -8484,9 +7952,9 @@ recursive-readdir@^2.2.2: minimatch "3.0.4" regenerate@^1.2.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" - integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== regenerator-runtime@^0.11.0: version "0.11.1" @@ -8516,12 +7984,12 @@ regex-not@^1.0.0, regex-not@^1.0.2: safe-regex "^1.1.0" regexp.prototype.flags@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" - integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== + version "1.3.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" + integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== dependencies: + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" regexpp@^2.0.1: version "2.0.1" @@ -8554,28 +8022,6 @@ regjsparser@^0.1.4: dependencies: jsesc "~0.5.0" -remove-bom-buffer@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz#c2bf1e377520d324f623892e33c10cac2c252b53" - integrity sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ== - dependencies: - is-buffer "^1.1.5" - is-utf8 "^0.2.1" - -remove-bom-stream@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz#05f1a593f16e42e1fb90ebf59de8e569525f9523" - integrity sha1-BfGlk/FuQuH7kOv1nejlaVJflSM= - dependencies: - remove-bom-buffer "^3.0.0" - safe-buffer "^5.1.0" - through2 "^2.0.3" - -remove-trailing-separator@^1.0.1, remove-trailing-separator@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - repeat-element@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" @@ -8593,20 +8039,6 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" -replace-ext@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.1.tgz#2d6d996d04a15855d967443631dd5f77825b016a" - integrity sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw== - -replace-homedir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/replace-homedir/-/replace-homedir-1.0.0.tgz#e87f6d513b928dde808260c12be7fec6ff6e798c" - integrity sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw= - dependencies: - homedir-polyfill "^1.0.1" - is-absolute "^1.0.0" - remove-trailing-separator "^1.1.0" - req-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/req-cwd/-/req-cwd-2.0.0.tgz#d4082b4d44598036640fb73ddea01ed53db49ebc" @@ -8673,7 +8105,7 @@ require-from-string@^1.1.0: resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" integrity sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg= -require-from-string@^2.0.0: +require-from-string@^2.0.0, require-from-string@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== @@ -8688,14 +8120,6 @@ require-main-filename@^2.0.0: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== -resolve-dir@^1.0.0, resolve-dir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" - integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= - dependencies: - expand-tilde "^2.0.0" - global-modules "^1.0.0" - resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" @@ -8706,13 +8130,6 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve-options@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/resolve-options/-/resolve-options-1.1.0.tgz#32bb9e39c06d67338dc9378c0d6d6074566ad131" - integrity sha1-MrueOcBtZzONyTeMDW1gdFZq0TE= - dependencies: - value-or-function "^3.0.0" - resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" @@ -8723,14 +8140,22 @@ resolve@1.1.x: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@1.17.0, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.4.0, resolve@~1.17.0: +resolve@1.17.0, resolve@~1.17.0: version "1.17.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== dependencies: path-parse "^1.0.6" -responselike@^1.0.2: +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.13.1, resolve@^1.17.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" + integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== + dependencies: + is-core-module "^2.1.0" + path-parse "^1.0.6" + +responselike@1.0.2, responselike@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= @@ -8776,6 +8201,13 @@ rimraf@^2.2.8, rimraf@^2.6.3: dependencies: glob "^7.1.3" +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" @@ -8791,38 +8223,22 @@ rlp@^2.0.0, rlp@^2.2.1, rlp@^2.2.2, rlp@^2.2.3, rlp@^2.2.4: dependencies: bn.js "^4.11.1" -rollup-plugin-inject@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz#e4233855bfba6c0c12a312fd6649dff9a13ee9f4" - integrity sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w== - dependencies: - estree-walker "^0.6.1" - magic-string "^0.25.3" - rollup-pluginutils "^2.8.1" - -rollup-pluginutils@^2.8.1: - version "2.8.2" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" - integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== - dependencies: - estree-walker "^0.6.1" - run-async@^2.2.0: version "2.4.1" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== run-parallel@^1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" - integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== + version "1.1.10" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.10.tgz#60a51b2ae836636c81377df16cb107351bcd13ef" + integrity sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw== rustbn.js@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== -rxjs@^6.4.0: +rxjs@^6.4.0, rxjs@^6.6.3: version "6.6.3" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== @@ -8878,49 +8294,23 @@ sc-istanbul@^0.4.5: which "^1.1.1" wordwrap "^1.0.0" -scrypt-js@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.3.tgz#bb0040be03043da9a012a2cea9fc9f852cfc87d4" - integrity sha1-uwBAvgMEPamgEqLOqfyfhSz8h9Q= - scrypt-js@2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.4.tgz#32f8c5149f0797672e551c07e230f834b6af5f16" integrity sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw== -scrypt-js@3.0.1, scrypt-js@^3.0.0: +scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== -"scrypt-shim@github:web3-js/scrypt-shim": - version "0.1.0" - resolved "https://codeload.github.com/web3-js/scrypt-shim/tar.gz/aafdadda13e660e25e1c525d1f5b2443f5eb1ebb" - dependencies: - scryptsy "^2.1.0" - semver "^6.3.0" - -scrypt.js@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/scrypt.js/-/scrypt.js-0.3.0.tgz#6c62d61728ad533c8c376a2e5e3e86d41a95c4c0" - integrity sha512-42LTc1nyFsyv/o0gcHtDztrn+aqpkaCNt5Qh7ATBZfhEZU7IC/0oT/qbBH+uRNoAPvs2fwiOId68FDEoSRA8/A== - dependencies: - scryptsy "^1.2.1" - optionalDependencies: - scrypt "^6.0.2" - -scrypt@^6.0.2, scrypt@^6.0.3: +scrypt@6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/scrypt/-/scrypt-6.0.3.tgz#04e014a5682b53fa50c2d5cce167d719c06d870d" integrity sha1-BOAUpWgrU/pQwtXM4WfXGcBthw0= dependencies: nan "^2.0.8" -scryptsy@2.1.0, scryptsy@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/scryptsy/-/scryptsy-2.1.0.tgz#8d1e8d0c025b58fdd25b6fa9a0dc905ee8faa790" - integrity sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w== - scryptsy@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/scryptsy/-/scryptsy-1.2.1.tgz#a3225fa4b2524f802700761e2855bdf3b2d92163" @@ -8968,32 +8358,22 @@ semaphore@>=1.0.1, semaphore@^1.0.3, semaphore@^1.1.0: resolved "https://registry.yarnpkg.com/semaphore/-/semaphore-1.1.0.tgz#aaad8b86b20fe8e9b32b16dc2ee682a8cd26a8aa" integrity sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA== -semver-greatest-satisfied-range@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz#13e8c2658ab9691cb0cd71093240280d36f77a5b" - integrity sha1-E+jCZYq5aRywzXEJMkAoDTb3els= - dependencies: - sver-compat "^1.5.0" - -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.5.1, semver@^5.7.0: +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.2.0.tgz#4d813d9590aaf8a9192693d6c85b9344de5901db" - integrity sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A== - semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.2.1, semver@^7.3.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" - integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== +semver@^7.2.1, semver@^7.3.2, semver@^7.3.4: + version "7.3.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + dependencies: + lru-cache "^6.0.0" semver@~5.4.1: version "5.4.1" @@ -9019,10 +8399,10 @@ send@0.17.1: range-parser "~1.2.1" statuses "~1.5.0" -serialize-javascript@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" - integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== +serialize-javascript@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" + integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== dependencies: randombytes "^2.1.0" @@ -9155,6 +8535,11 @@ slash@^1.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -9169,6 +8554,15 @@ slice-ansi@^2.1.0: astral-regex "^1.0.0" is-fullwidth-code-point "^2.0.0" +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -9199,6 +8593,20 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" +solc@0.5.15: + version "0.5.15" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.5.15.tgz#f674ce93d4d04a86b65a4393657edf03b2f26028" + integrity sha512-uI+7XtBu/0CXRc8IMjzxbh0haLwaBF32VxAkkks06zEk+mVcsQbHdjvojXX6zQYtZVuXdVYPVccoIjEhvvqKnQ== + dependencies: + command-exists "^1.2.8" + commander "3.0.2" + fs-extra "^0.30.0" + js-sha3 "0.8.0" + memorystream "^0.3.1" + require-from-string "^2.0.0" + semver "^5.5.0" + tmp "0.0.33" + solc@0.7.2: version "0.7.2" resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.2.tgz#5ffb5f204bf0727533c75d5efb7accbd84c9d2cd" @@ -9254,12 +8662,12 @@ solc@^0.6.3: semver "^5.5.0" tmp "0.0.33" -solhint@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/solhint/-/solhint-3.2.0.tgz#e3b3e568f64f71328f410a97f06e802033f0d7d2" - integrity sha512-BGp7JnnoLzknGC/arcH33oN/LjOz0hKgdauOcBOO5jNjhjnPQ3cAacSMH64fWYShAg5+HYQaSRubInpSKSvzLg== +solhint@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/solhint/-/solhint-3.3.2.tgz#ebd7270bb50fd378b427d7a6fc9f2a7fd00216c0" + integrity sha512-8tHCkIAk1axLLG6Qu2WIH3GgNABonj9eAWejJbov3o3ujkZQRNHeHU1cC4/Dmjsh3Om7UzFFeADUHu2i7ZJeiw== dependencies: - "@solidity-parser/parser" "^0.7.0" + "@solidity-parser/parser" "^0.8.2" ajv "^6.6.1" antlr4 "4.7.1" ast-parents "0.0.1" @@ -9276,18 +8684,23 @@ solhint@^3.2.0: optionalDependencies: prettier "^1.14.3" -solidity-coverage@^0.7.10: - version "0.7.10" - resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.7.10.tgz#ab183c11d0742478d3f4f7a025a8c813ded24ca9" - integrity sha512-F98rYoD3bscB9qIJJrqkk+o93GbOWTT54VgfO97PrcWAenOFIC1EI5DzGJSrMvmFFfr8fsMPR89on6JR0Xf/Ig== +solidity-comments-extractor@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/solidity-comments-extractor/-/solidity-comments-extractor-0.0.4.tgz#ce420aef23641ffd0131c7d80ba85b6e1e42147e" + integrity sha512-58glBODwXIKMaQ7rfcJOrWtFQMMOK28tJ0/LcB5Xhu7WtAxk4UX2fpgKPuaL41XjMp/y0gAa1MTLqk018wuSzA== + +solidity-coverage@0.7.14: + version "0.7.14" + resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.7.14.tgz#88aa9d663dc82e9927275835703542a5e7931a03" + integrity sha512-2X9oNtu4yBbtDXtVe2tc9vYHtwON6QRqNvVylKdkhcJgAdCzP/OkJy9fWcWH/g3fnNCIOFssHoe0LPGZ2ppMZg== dependencies: - "@solidity-parser/parser" "^0.7.0" - "@truffle/provider" "^0.1.17" + "@solidity-parser/parser" "^0.11.0" + "@truffle/provider" "^0.2.24" chalk "^2.4.2" death "^1.1.0" detect-port "^1.3.0" fs-extra "^8.1.0" - ganache-cli "6.9.0" + ganache-cli "^6.11.0" ghost-testrpc "^0.0.2" global-modules "^2.0.0" globby "^10.0.1" @@ -9297,8 +8710,30 @@ solidity-coverage@^0.7.10: pify "^4.0.1" recursive-readdir "^2.2.2" sc-istanbul "^0.4.5" + semver "^7.3.4" shelljs "^0.8.3" - web3 "1.2.6" + web3-utils "^1.3.0" + +sort-keys-length@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sort-keys-length/-/sort-keys-length-1.0.1.tgz#9cb6f4f4e9e48155a6aa0671edd336ff1479a188" + integrity sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg= + dependencies: + sort-keys "^1.0.0" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= + dependencies: + is-plain-obj "^1.0.0" + +sort-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" + integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= + dependencies: + is-plain-obj "^1.0.0" source-map-resolve@^0.5.0: version "0.5.3" @@ -9326,7 +8761,7 @@ source-map-support@^0.4.15: dependencies: source-map "^0.5.6" -source-map-support@^0.5.13: +source-map-support@^0.5.13, source-map-support@^0.5.19: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== @@ -9356,16 +8791,6 @@ source-map@~0.2.0: dependencies: amdefine ">=0.0.4" -sourcemap-codec@^1.4.4: - version "1.4.8" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" - integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== - -sparkles@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.1.tgz#008db65edce6c50eec0c5e228e1945061dd0437c" - integrity sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw== - spdx-correct@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" @@ -9388,9 +8813,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.5" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" - integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + version "3.0.7" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" + integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" @@ -9419,11 +8844,6 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -stack-trace@0.0.10: - version "0.0.10" - resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" - integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= - stacktrace-parser@^0.1.10: version "0.1.10" resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" @@ -9449,16 +8869,6 @@ stealthy-require@^1.1.1: resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= -stream-exhaust@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/stream-exhaust/-/stream-exhaust-1.0.2.tgz#acdac8da59ef2bc1e17a2c0ccf6c320d120e555d" - integrity sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw== - -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== - stream-to-pull-stream@^1.7.1: version "1.7.3" resolved "https://registry.yarnpkg.com/stream-to-pull-stream/-/stream-to-pull-stream-1.7.3.tgz#4161aa2d2eb9964de60bfa1af7feaf917e874ece" @@ -9472,7 +8882,7 @@ strict-uri-encode@^1.0.0: resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= -string-width@^1.0.1, string-width@^1.0.2: +string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= @@ -9508,29 +8918,29 @@ string-width@^4.2.0: strip-ansi "^6.0.0" string.prototype.trim@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.1.tgz#141233dff32c82bfad80684d7e5f0869ee0fb782" - integrity sha512-MjGFEeqixw47dAMFMtgUro/I0+wNqZB5GKXGt1fFr24u3TzDXCPu7J9Buppzoe3r/LqkSDLDDJzE15RGWDGAVw== + version "1.2.3" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.3.tgz#d23a22fde01c1e6571a7fadcb9be11decd8061a7" + integrity sha512-16IL9pIBA5asNOSukPfxX2W68BaBvxyiRK16H3RA/lWW9BDosh+w7f+LhomPHpXJ82QEe7w7/rY/S1CV97raLg== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" + es-abstract "^1.18.0-next.1" -string.prototype.trimend@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" - integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== +string.prototype.trimend@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz#a22bd53cca5c7cf44d7c9d5c732118873d6cd18b" + integrity sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.17.5" -string.prototype.trimstart@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" - integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== +string.prototype.trimstart@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz#9b4cb590e123bb36564401d59824298de50fd5aa" + integrity sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.17.5" string_decoder@^1.1.1: version "1.3.0" @@ -9615,16 +9025,25 @@ strip-json-comments@2.0.1, strip-json-comments@^2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= -strip-json-comments@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" - integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== - -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== +strip-outer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" + integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== + dependencies: + escape-string-regexp "^1.0.2" + +supports-color@5.4.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" + integrity sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w== + dependencies: + has-flag "^3.0.0" + supports-color@6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" @@ -9632,10 +9051,10 @@ supports-color@6.0.0: dependencies: has-flag "^3.0.0" -supports-color@7.1.0, supports-color@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" - integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== +supports-color@7.2.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" @@ -9658,22 +9077,13 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -sver-compat@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/sver-compat/-/sver-compat-1.5.0.tgz#3cf87dfeb4d07b4a3f14827bc186b3fd0c645cd8" - integrity sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg= - dependencies: - es6-iterator "^2.0.1" - es6-symbol "^3.1.1" - -swarm-js@0.1.39: - version "0.1.39" - resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.39.tgz#79becb07f291d4b2a178c50fee7aa6e10342c0e8" - integrity sha512-QLMqL2rzF6n5s50BptyD6Oi0R1aWlJC5Y17SRIVXRj6OR1DRIPM7nepvrxxkjA1zNzFz6mUOMjfeqeDaWB7OOg== +swarm-js@^0.1.40: + version "0.1.40" + resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.40.tgz#b1bc7b6dcc76061f6c772203e004c11997e06b99" + integrity sha512-yqiOCEoA4/IShXkY3WKwP5PvZhmoOOD8clsKA7EEcRILMkTEYHCQ21HDCAcVpmIxZq4LyZvWeRJ6quIyHk1caA== dependencies: bluebird "^3.5.0" buffer "^5.0.5" - decompress "^4.0.0" eth-lib "^0.1.26" fs-extra "^4.0.2" got "^7.1.0" @@ -9682,7 +9092,7 @@ swarm-js@0.1.39: mock-fs "^4.1.0" setimmediate "^1.0.5" tar "^4.0.2" - xhr-request-promise "^0.1.2" + xhr-request "^1.0.1" sync-request@^6.0.0: version "6.1.0" @@ -9710,6 +9120,16 @@ table@^5.2.3: slice-ansi "^2.1.0" string-width "^3.0.0" +table@^6.0.4: + version "6.0.7" + resolved "https://registry.yarnpkg.com/table/-/table-6.0.7.tgz#e45897ffbcc1bcf9e8a87bf420f2c9e5a7a52a34" + integrity sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g== + dependencies: + ajv "^7.0.2" + lodash "^4.17.20" + slice-ansi "^4.0.0" + string-width "^4.2.0" + tape@^4.6.3: version "4.13.3" resolved "https://registry.yarnpkg.com/tape/-/tape-4.13.3.tgz#51b3d91c83668c7a45b1a594b607dee0a0b46278" @@ -9784,15 +9204,7 @@ then-request@^6.0.0: promise "^8.0.0" qs "^6.4.0" -through2-filter@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254" - integrity sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA== - dependencies: - through2 "~2.0.0" - xtend "~4.0.0" - -through2@^2.0.0, through2@^2.0.3, through2@~2.0.0: +through2@^2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== @@ -9805,16 +9217,22 @@ through@^2.3.6, through@^2.3.8, through@~2.3.4, through@~2.3.8: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= -time-stamp@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" - integrity sha1-dkpaEa9QVhkhsTPztE5hhofg9cM= - timed-out@^4.0.0, timed-out@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= +tiny-secp256k1@^1.1.3: + version "1.1.6" + resolved "https://registry.yarnpkg.com/tiny-secp256k1/-/tiny-secp256k1-1.1.6.tgz#7e224d2bee8ab8283f284e40e6b4acb74ffe047c" + integrity sha512-FmqJZGduTyvsr2cF3375fqGHUovSwDi/QytexX1Se4BPuPZpTE5Ftp5fg+EFSuEf3lhZqgCRjEG3ydUQ/aNiwA== + dependencies: + bindings "^1.3.0" + bn.js "^4.11.8" + create-hmac "^1.1.7" + elliptic "^6.4.0" + nan "^2.13.2" + tmp@0.0.33, tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -9829,14 +9247,6 @@ tmp@0.1.0: dependencies: rimraf "^2.6.3" -to-absolute-glob@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz#1865f43d9e74b0822db9f145b78cff7d0f7c849b" - integrity sha1-GGX0PZ50sIItufFFt4z/fQ98hJs= - dependencies: - is-absolute "^1.0.0" - is-negated-glob "^1.0.0" - to-buffer@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" @@ -9884,13 +9294,6 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" -to-through@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-through/-/to-through-2.0.0.tgz#fc92adaba072647bc0b67d6b03664aa195093af6" - integrity sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY= - dependencies: - through2 "^2.0.3" - toidentifier@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" @@ -9904,6 +9307,13 @@ tough-cookie@^2.3.3, tough-cookie@~2.5.0: psl "^1.1.28" punycode "^2.1.1" +trim-repeated@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" + integrity sha1-42RqLqTokTEr9+rObPsFOAvAHCE= + dependencies: + escape-string-regexp "^1.0.2" + trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" @@ -9914,6 +9324,11 @@ trim-right@^1.0.1: resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-2.2.1.tgz#c5bf04a5bbec3fd118be4084461b3a27c4d796bf" integrity sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q== +ts-essentials@^2.0.7: + version "2.0.12" + resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-2.0.12.tgz#c9303f3d74f75fa7528c3d49b80e089ab09d8745" + integrity sha512-3IVX4nI6B5cc31/GFFE+i8ey/N2eA0CZDbo6n0yrz0zDX8ZJ8djmU1p+XRz7G3is0F3bB3pu2pAroFdAWQKU3w== + tsconfig-paths@^3.9.0: version "3.9.0" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" @@ -9925,9 +9340,9 @@ tsconfig-paths@^3.9.0: strip-bom "^3.0.0" tslib@^1.9.0, tslib@^1.9.3: - version "1.13.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" - integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tsort@0.0.1: version "0.0.1" @@ -10004,9 +9419,9 @@ type@^1.0.1: integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/type/-/type-2.0.0.tgz#5f16ff6ef2eb44f260494dae271033b29c09a9c3" - integrity sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow== + version "2.1.0" + resolved "https://registry.yarnpkg.com/type/-/type-2.1.0.tgz#9bdc22c648cf8cf86dd23d32336a41cfb6475e3f" + integrity sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA== typedarray-to-buffer@^3.1.5: version "3.1.5" @@ -10020,6 +9435,11 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= +typeforce@^1.11.5: + version "1.18.0" + resolved "https://registry.yarnpkg.com/typeforce/-/typeforce-1.18.0.tgz#d7416a2c5845e085034d70fcc5b6cc4a90edbfdc" + integrity sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g== + typewise-core@^1.2, typewise-core@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/typewise-core/-/typewise-core-1.2.0.tgz#97eb91805c7f55d2f941748fa50d315d991ef195" @@ -10038,9 +9458,9 @@ typewiselite@~1.0.0: integrity sha1-yIgvobsQksBgBal/NO9chQjjZk4= uglify-js@^3.1.4: - version "3.10.1" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.10.1.tgz#dd14767eb7150de97f2573a5ff210db14fffe4ad" - integrity sha512-RjxApKkrPJB6kjJxQS3iZlf///REXWYxYJxO/MpmlQzVkDWVI3PSnCBWezMecmTU/TRkNxrl8bmsfFQCp+LO+Q== + version "3.12.5" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.12.5.tgz#83241496087c640efe9dfc934832e71725aba008" + integrity sha512-SgpgScL4T7Hj/w/GexjnBHi3Ien9WS1Rpfg5y91WXMj9SY997ZCQU76mH4TpLwwfmMvoOU8wiaRkIf6NaH3mtg== ultron@~1.1.0: version "1.1.1" @@ -10055,37 +9475,11 @@ unbzip2-stream@^1.0.9: buffer "^5.2.1" through "^2.3.8" -unc-path-regex@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" - integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo= - underscore@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg== -undertaker-registry@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/undertaker-registry/-/undertaker-registry-1.0.1.tgz#5e4bda308e4a8a2ae584f9b9a4359a499825cc50" - integrity sha1-XkvaMI5KiirlhPm5pDWaSZglzFA= - -undertaker@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/undertaker/-/undertaker-1.3.0.tgz#363a6e541f27954d5791d6fa3c1d321666f86d18" - integrity sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg== - dependencies: - arr-flatten "^1.0.1" - arr-map "^2.0.0" - bach "^1.0.0" - collection-map "^1.0.0" - es6-weak-map "^2.0.1" - fast-levenshtein "^1.0.0" - last-run "^1.1.0" - object.defaults "^1.0.0" - object.reduce "^1.0.0" - undertaker-registry "^1.0.0" - union-value@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" @@ -10096,23 +9490,15 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" -unique-stream@^2.0.2: - version "2.3.1" - resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.3.1.tgz#c65d110e9a4adf9a6c5948b28053d9a8d04cbeac" - integrity sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A== - dependencies: - json-stable-stringify-without-jsonify "^1.0.1" - through2-filter "^3.0.0" - universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== -universalify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" - integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== unorm@^1.3.3: version "1.6.0" @@ -10132,15 +9518,10 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" -upath@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== - uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" @@ -10186,6 +9567,13 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== +utf-8-validate@^5.0.2: + version "5.0.4" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.4.tgz#72a1735983ddf7a05a43a9c6b67c5ce1c910f9b8" + integrity sha512-MEF05cPSq3AwJ2C7B7sHAA6i53vONoZbMGX8My5auEVm6W+dJ2Jd/TZPyGJ5CH42V2XtbI5FD28HeHeqlPzZ3Q== + dependencies: + node-gyp-build "^4.2.0" + utf8@3.0.0, utf8@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" @@ -10197,14 +9585,15 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1: integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= util.promisify@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" - integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== + version "1.1.1" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.1.1.tgz#77832f57ced2c9478174149cae9b96e9918cd54b" + integrity sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.17.2" + for-each "^0.3.3" has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.0" + object.getownpropertydescriptors "^2.1.1" utils-merge@1.0.1: version "1.0.1" @@ -10227,16 +9616,9 @@ uuid@^3.3.2: integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== v8-compile-cache@^2.0.3: - version "2.1.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" - integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== - -v8flags@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.2.0.tgz#b243e3b4dfd731fa774e7492128109a0fe66d656" - integrity sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg== - dependencies: - homedir-polyfill "^1.0.1" + version "2.2.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" + integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== validate-npm-package-license@^3.0.1: version "3.0.4" @@ -10246,10 +9628,10 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -value-or-function@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/value-or-function/-/value-or-function-3.0.0.tgz#1c243a50b595c1be54a754bfece8563b9ff8d813" - integrity sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM= +varint@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" + integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== vary@^1, vary@~1.1.2: version "1.1.2" @@ -10265,744 +9647,355 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -vinyl-fs@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-3.0.3.tgz#c85849405f67428feabbbd5c5dbdd64f47d31bc7" - integrity sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng== - dependencies: - fs-mkdirp-stream "^1.0.0" - glob-stream "^6.1.0" - graceful-fs "^4.0.0" - is-valid-glob "^1.0.0" - lazystream "^1.0.0" - lead "^1.0.0" - object.assign "^4.0.4" - pumpify "^1.3.5" - readable-stream "^2.3.3" - remove-bom-buffer "^3.0.0" - remove-bom-stream "^1.2.0" - resolve-options "^1.1.0" - through2 "^2.0.0" - to-through "^2.0.0" - value-or-function "^3.0.0" - vinyl "^2.0.0" - vinyl-sourcemap "^1.1.0" - -vinyl-sourcemap@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz#92a800593a38703a8cdb11d8b300ad4be63b3e16" - integrity sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY= - dependencies: - append-buffer "^1.0.2" - convert-source-map "^1.5.0" - graceful-fs "^4.1.6" - normalize-path "^2.1.1" - now-and-later "^2.0.0" - remove-bom-buffer "^3.0.0" - vinyl "^2.0.0" - -vinyl@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.0.tgz#d85b07da96e458d25b2ffe19fece9f2caa13ed86" - integrity sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg== - dependencies: - clone "^2.1.1" - clone-buffer "^1.0.0" - clone-stats "^1.0.0" - cloneable-readable "^1.0.0" - remove-trailing-separator "^1.0.1" - replace-ext "^1.0.0" - -web3-bzz@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.2.1.tgz#c3bd1e8f0c02a13cd6d4e3c3e9e1713f144f6f0d" - integrity sha512-LdOO44TuYbGIPfL4ilkuS89GQovxUpmLz6C1UC7VYVVRILeZS740FVB3j9V4P4FHUk1RenaDfKhcntqgVCHtjw== +web3-bzz@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.2.11.tgz#41bc19a77444bd5365744596d778b811880f707f" + integrity sha512-XGpWUEElGypBjeFyUhTkiPXFbDVD6Nr/S5jznE3t8cWUA0FxRf1n3n/NuIZeb0H9RkN2Ctd/jNma/k8XGa3YKg== dependencies: + "@types/node" "^12.12.6" got "9.6.0" - swarm-js "0.1.39" + swarm-js "^0.1.40" underscore "1.9.1" -web3-bzz@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.2.2.tgz#a3b9f613c49fd3e120e0997088a73557d5adb724" - integrity sha512-b1O2ObsqUN1lJxmFSjvnEC4TsaCbmh7Owj3IAIWTKqL9qhVgx7Qsu5O9cD13pBiSPNZJ68uJPaKq380QB4NWeA== +web3-bzz@1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.2.9.tgz#25f8a373bc2dd019f47bf80523546f98b93c8790" + integrity sha512-ogVQr9jHodu9HobARtvUSmWG22cv2EUQzlPeejGWZ7j5h20HX40EDuWyomGY5VclIj5DdLY76Tmq88RTf/6nxA== dependencies: "@types/node" "^10.12.18" got "9.6.0" - swarm-js "0.1.39" + swarm-js "^0.1.40" underscore "1.9.1" -web3-bzz@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.2.4.tgz#a4adb7a8cba3d260de649bdb1f14ed359bfb3821" - integrity sha512-MqhAo/+0iQSMBtt3/QI1rU83uvF08sYq8r25+OUZ+4VtihnYsmkkca+rdU0QbRyrXY2/yGIpI46PFdh0khD53A== - dependencies: - "@types/node" "^10.12.18" - got "9.6.0" - swarm-js "0.1.39" - underscore "1.9.1" - -web3-bzz@1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.2.6.tgz#0b88c0b96029eaf01b10cb47c4d5f79db4668883" - integrity sha512-9NiHLlxdI1XeFtbPJAmi2jnnIHVF+GNy517wvOS72P7ZfuJTPwZaSNXfT01vWgPPE9R96/uAHDWHOg+T4WaDQQ== - dependencies: - "@types/node" "^10.12.18" - got "9.6.0" - swarm-js "0.1.39" - underscore "1.9.1" - -web3-core-helpers@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.1.tgz#f5f32d71c60a4a3bd14786118e633ce7ca6d5d0d" - integrity sha512-Gx3sTEajD5r96bJgfuW377PZVFmXIH4TdqDhgGwd2lZQCcMi+DA4TgxJNJGxn0R3aUVzyyE76j4LBrh412mXrw== - dependencies: - underscore "1.9.1" - web3-eth-iban "1.2.1" - web3-utils "1.2.1" - -web3-core-helpers@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.2.tgz#484974f4bd4a487217b85b0d7cfe841af0907619" - integrity sha512-HJrRsIGgZa1jGUIhvGz4S5Yh6wtOIo/TMIsSLe+Xay+KVnbseJpPprDI5W3s7H2ODhMQTbogmmUFquZweW2ImQ== - dependencies: - underscore "1.9.1" - web3-eth-iban "1.2.2" - web3-utils "1.2.2" - -web3-core-helpers@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.4.tgz#ffd425861f4d66b3f38df032afdb39ea0971fc0f" - integrity sha512-U7wbsK8IbZvF3B7S+QMSNP0tni/6VipnJkB0tZVEpHEIV2WWeBHYmZDnULWcsS/x/jn9yKhJlXIxWGsEAMkjiw== - dependencies: - underscore "1.9.1" - web3-eth-iban "1.2.4" - web3-utils "1.2.4" - -web3-core-helpers@1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.6.tgz#7aacd25bf8015adcdfc0f3243d0dcfdff0373f7d" - integrity sha512-gYKWmC2HmO7RcDzpo4L1K8EIoy5L8iubNDuTC6q69UxczwqKF/Io0kbK/1Z10Av++NlzOSiuyGp2gc4t4UOsDw== - dependencies: - underscore "1.9.1" - web3-eth-iban "1.2.6" - web3-utils "1.2.6" - -web3-core-method@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.1.tgz#9df1bafa2cd8be9d9937e01c6a47fc768d15d90a" - integrity sha512-Ghg2WS23qi6Xj8Od3VCzaImLHseEA7/usvnOItluiIc5cKs00WYWsNy2YRStzU9a2+z8lwQywPYp0nTzR/QXdQ== +web3-core-helpers@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.11.tgz#84c681ed0b942c0203f3b324a245a127e8c67a99" + integrity sha512-PEPoAoZd5ME7UfbnCZBdzIerpe74GEvlwT4AjOmHeCVZoIFk7EqvOZDejJHt+feJA6kMVTdd0xzRNN295UhC1A== dependencies: underscore "1.9.1" - web3-core-helpers "1.2.1" - web3-core-promievent "1.2.1" - web3-core-subscriptions "1.2.1" - web3-utils "1.2.1" + web3-eth-iban "1.2.11" + web3-utils "1.2.11" -web3-core-method@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.2.tgz#d4fe2bb1945b7152e5f08e4ea568b171132a1e56" - integrity sha512-szR4fDSBxNHaF1DFqE+j6sFR/afv9Aa36OW93saHZnrh+iXSrYeUUDfugeNcRlugEKeUCkd4CZylfgbK2SKYJA== +web3-core-helpers@1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.9.tgz#6381077c3e01c127018cb9e9e3d1422697123315" + integrity sha512-t0WAG3orLCE3lqi77ZoSRNFok3VQWZXTniZigDQjyOJYMAX7BU3F3js8HKbjVnAxlX3tiKoDxI0KBk9F3AxYuw== dependencies: underscore "1.9.1" - web3-core-helpers "1.2.2" - web3-core-promievent "1.2.2" - web3-core-subscriptions "1.2.2" - web3-utils "1.2.2" + web3-eth-iban "1.2.9" + web3-utils "1.2.9" -web3-core-method@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.4.tgz#a0fbc50b8ff5fd214021435cc2c6d1e115807aed" - integrity sha512-8p9kpL7di2qOVPWgcM08kb+yKom0rxRCMv6m/K+H+yLSxev9TgMbCgMSbPWAHlyiF3SJHw7APFKahK5Z+8XT5A== +web3-core-method@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.11.tgz#f880137d1507a0124912bf052534f168b8d8fbb6" + integrity sha512-ff0q76Cde94HAxLDZ6DbdmKniYCQVtvuaYh+rtOUMB6kssa5FX0q3vPmixi7NPooFnbKmmZCM6NvXg4IreTPIw== dependencies: + "@ethersproject/transactions" "^5.0.0-beta.135" underscore "1.9.1" - web3-core-helpers "1.2.4" - web3-core-promievent "1.2.4" - web3-core-subscriptions "1.2.4" - web3-utils "1.2.4" + web3-core-helpers "1.2.11" + web3-core-promievent "1.2.11" + web3-core-subscriptions "1.2.11" + web3-utils "1.2.11" -web3-core-method@1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.6.tgz#f5a3e4d304abaf382923c8ab88ec8eeef45c1b3b" - integrity sha512-r2dzyPEonqkBg7Mugq5dknhV5PGaZTHBZlS/C+aMxNyQs3T3eaAsCTqlQDitwNUh/sUcYPEGF0Vo7ahYK4k91g== +web3-core-method@1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.9.tgz#3fb538751029bea570e4f86731e2fa5e4945e462" + integrity sha512-bjsIoqP3gs7A/gP8+QeLUCyOKJ8bopteCSNbCX36Pxk6TYfYWNuC6hP+2GzUuqdP3xaZNe+XEElQFUNpR3oyAg== dependencies: + "@ethersproject/transactions" "^5.0.0-beta.135" underscore "1.9.1" - web3-core-helpers "1.2.6" - web3-core-promievent "1.2.6" - web3-core-subscriptions "1.2.6" - web3-utils "1.2.6" + web3-core-helpers "1.2.9" + web3-core-promievent "1.2.9" + web3-core-subscriptions "1.2.9" + web3-utils "1.2.9" -web3-core-promievent@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.1.tgz#003e8a3eb82fb27b6164a6d5b9cad04acf733838" - integrity sha512-IVUqgpIKoeOYblwpex4Hye6npM0aMR+kU49VP06secPeN0rHMyhGF0ZGveWBrGvf8WDPI7jhqPBFIC6Jf3Q3zw== - dependencies: - any-promise "1.3.0" - eventemitter3 "3.1.2" - -web3-core-promievent@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.2.tgz#3b60e3f2a0c96db8a891c927899d29d39e66ab1c" - integrity sha512-tKvYeT8bkUfKABcQswK6/X79blKTKYGk949urZKcLvLDEaWrM3uuzDwdQT3BNKzQ3vIvTggFPX9BwYh0F1WwqQ== - dependencies: - any-promise "1.3.0" - eventemitter3 "3.1.2" - -web3-core-promievent@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.4.tgz#75e5c0f2940028722cdd21ba503ebd65272df6cb" - integrity sha512-gEUlm27DewUsfUgC3T8AxkKi8Ecx+e+ZCaunB7X4Qk3i9F4C+5PSMGguolrShZ7Zb6717k79Y86f3A00O0VAZw== +web3-core-promievent@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.11.tgz#51fe97ca0ddec2f99bf8c3306a7a8e4b094ea3cf" + integrity sha512-il4McoDa/Ox9Agh4kyfQ8Ak/9ABYpnF8poBLL33R/EnxLsJOGQG2nZhkJa3I067hocrPSjEdlPt/0bHXsln4qA== dependencies: - any-promise "1.3.0" - eventemitter3 "3.1.2" + eventemitter3 "4.0.4" -web3-core-promievent@1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.6.tgz#b1550a3a4163e48b8b704c1fe4b0084fc2dad8f5" - integrity sha512-km72kJef/qtQNiSjDJJVHIZvoVOm6ytW3FCYnOcCs7RIkviAb5JYlPiye0o4pJOLzCXYID7DK7Q9bhY8qWb1lw== +web3-core-promievent@1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.9.tgz#bb1c56aa6fac2f4b3c598510f06554d25c11c553" + integrity sha512-0eAUA2zjgXTleSrnc1wdoKQPPIHU6KHf4fAscu4W9kKrR+mqP1KsjYrxY9wUyjNnXxfQ+5M29ipvbiaK8OqdOw== dependencies: - any-promise "1.3.0" eventemitter3 "3.1.2" -web3-core-requestmanager@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.1.tgz#fa2e2206c3d738db38db7c8fe9c107006f5c6e3d" - integrity sha512-xfknTC69RfYmLKC+83Jz73IC3/sS2ZLhGtX33D4Q5nQ8yc39ElyAolxr9sJQS8kihOcM6u4J+8gyGMqsLcpIBg== - dependencies: - underscore "1.9.1" - web3-core-helpers "1.2.1" - web3-providers-http "1.2.1" - web3-providers-ipc "1.2.1" - web3-providers-ws "1.2.1" - -web3-core-requestmanager@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.2.tgz#667ba9ac724c9c76fa8965ae8a3c61f66e68d8d6" - integrity sha512-a+gSbiBRHtHvkp78U2bsntMGYGF2eCb6219aMufuZWeAZGXJ63Wc2321PCbA8hF9cQrZI4EoZ4kVLRI4OF15Hw== - dependencies: - underscore "1.9.1" - web3-core-helpers "1.2.2" - web3-providers-http "1.2.2" - web3-providers-ipc "1.2.2" - web3-providers-ws "1.2.2" - -web3-core-requestmanager@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.4.tgz#0a7020a23fb91c6913c611dfd3d8c398d1e4b4a8" - integrity sha512-eZJDjyNTDtmSmzd3S488nR/SMJtNnn/GuwxnMh3AzYCqG3ZMfOylqTad2eYJPvc2PM5/Gj1wAMQcRpwOjjLuPg== - dependencies: - underscore "1.9.1" - web3-core-helpers "1.2.4" - web3-providers-http "1.2.4" - web3-providers-ipc "1.2.4" - web3-providers-ws "1.2.4" - -web3-core-requestmanager@1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.6.tgz#5808c0edc0d6e2991a87b65508b3a1ab065b68ec" - integrity sha512-QU2cbsj9Dm0r6om40oSwk8Oqbp3wTa08tXuMpSmeOTkGZ3EMHJ1/4LiJ8shwg1AvPMrKVU0Nri6+uBNCdReZ+g== - dependencies: - underscore "1.9.1" - web3-core-helpers "1.2.6" - web3-providers-http "1.2.6" - web3-providers-ipc "1.2.6" - web3-providers-ws "1.2.6" - -web3-core-subscriptions@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.1.tgz#8c2368a839d4eec1c01a4b5650bbeb82d0e4a099" - integrity sha512-nmOwe3NsB8V8UFsY1r+sW6KjdOS68h8nuh7NzlWxBQT/19QSUGiERRTaZXWu5BYvo1EoZRMxCKyCQpSSXLc08g== +web3-core-requestmanager@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.11.tgz#fe6eb603fbaee18530293a91f8cf26d8ae28c45a" + integrity sha512-oFhBtLfOiIbmfl6T6gYjjj9igOvtyxJ+fjS+byRxiwFJyJ5BQOz4/9/17gWR1Cq74paTlI7vDGxYfuvfE/mKvA== dependencies: - eventemitter3 "3.1.2" underscore "1.9.1" - web3-core-helpers "1.2.1" + web3-core-helpers "1.2.11" + web3-providers-http "1.2.11" + web3-providers-ipc "1.2.11" + web3-providers-ws "1.2.11" -web3-core-subscriptions@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.2.tgz#bf4ba23a653a003bdc3551649958cc0b080b068e" - integrity sha512-QbTgigNuT4eicAWWr7ahVpJyM8GbICsR1Ys9mJqzBEwpqS+RXTRVSkwZ2IsxO+iqv6liMNwGregbJLq4urMFcQ== +web3-core-requestmanager@1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.9.tgz#dd6d855256c4dd681434fe0867f8cd742fe10503" + integrity sha512-1PwKV2m46ALUnIN5VPPgjOj8yMLJhhqZYvYJE34hTN5SErOkwhzx5zScvo5MN7v7KyQGFnpVCZKKGCiEnDmtFA== dependencies: - eventemitter3 "3.1.2" underscore "1.9.1" - web3-core-helpers "1.2.2" + web3-core-helpers "1.2.9" + web3-providers-http "1.2.9" + web3-providers-ipc "1.2.9" + web3-providers-ws "1.2.9" -web3-core-subscriptions@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.4.tgz#0dc095b5cfd82baa527a39796e3515a846b21b99" - integrity sha512-3D607J2M8ymY9V+/WZq4MLlBulwCkwEjjC2U+cXqgVO1rCyVqbxZNCmHyNYHjDDCxSEbks9Ju5xqJxDSxnyXEw== +web3-core-subscriptions@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.11.tgz#beca908fbfcb050c16f45f3f0f4c205e8505accd" + integrity sha512-qEF/OVqkCvQ7MPs1JylIZCZkin0aKK9lDxpAtQ1F8niEDGFqn7DT8E/vzbIa0GsOjL2fZjDhWJsaW+BSoAW1gg== dependencies: - eventemitter3 "3.1.2" + eventemitter3 "4.0.4" underscore "1.9.1" - web3-core-helpers "1.2.4" + web3-core-helpers "1.2.11" -web3-core-subscriptions@1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.6.tgz#9d44189e2321f8f1abc31f6c09103b5283461b57" - integrity sha512-M0PzRrP2Ct13x3wPulFtc5kENH4UtnPxO9YxkfQlX2WRKENWjt4Rfq+BCVGYEk3rTutDfWrjfzjmqMRvXqEY5Q== +web3-core-subscriptions@1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.9.tgz#335fd7d15dfce5d78b4b7bef05ce4b3d7237b0e4" + integrity sha512-Y48TvXPSPxEM33OmXjGVDMzTd0j8X0t2+sDw66haeBS8eYnrEzasWuBZZXDq0zNUsqyxItgBGDn+cszkgEnFqg== dependencies: eventemitter3 "3.1.2" underscore "1.9.1" - web3-core-helpers "1.2.6" + web3-core-helpers "1.2.9" -web3-core@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.1.tgz#7278b58fb6495065e73a77efbbce781a7fddf1a9" - integrity sha512-5ODwIqgl8oIg/0+Ai4jsLxkKFWJYE0uLuE1yUKHNVCL4zL6n3rFjRMpKPokd6id6nJCNgeA64KdWQ4XfpnjdMg== - dependencies: - web3-core-helpers "1.2.1" - web3-core-method "1.2.1" - web3-core-requestmanager "1.2.1" - web3-utils "1.2.1" - -web3-core@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.2.tgz#334b99c8222ef9cfd0339e27352f0b58ea789a2f" - integrity sha512-miHAX3qUgxV+KYfaOY93Hlc3kLW2j5fH8FJy6kSxAv+d4d5aH0wwrU2IIoJylQdT+FeenQ38sgsCnFu9iZ1hCQ== - dependencies: - "@types/bn.js" "^4.11.4" - "@types/node" "^12.6.1" - web3-core-helpers "1.2.2" - web3-core-method "1.2.2" - web3-core-requestmanager "1.2.2" - web3-utils "1.2.2" - -web3-core@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.4.tgz#2df13b978dcfc59c2abaa887d27f88f21ad9a9d6" - integrity sha512-CHc27sMuET2cs1IKrkz7xzmTdMfZpYswe7f0HcuyneTwS1yTlTnHyqjAaTy0ZygAb/x4iaVox+Gvr4oSAqSI+A== +web3-core@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.11.tgz#1043cacc1becb80638453cc5b2a14be9050288a7" + integrity sha512-CN7MEYOY5ryo5iVleIWRE3a3cZqVaLlIbIzDPsvQRUfzYnvzZQRZBm9Mq+ttDi2STOOzc1MKylspz/o3yq/LjQ== dependencies: - "@types/bignumber.js" "^5.0.0" - "@types/bn.js" "^4.11.4" - "@types/node" "^12.6.1" - web3-core-helpers "1.2.4" - web3-core-method "1.2.4" - web3-core-requestmanager "1.2.4" - web3-utils "1.2.4" + "@types/bn.js" "^4.11.5" + "@types/node" "^12.12.6" + bignumber.js "^9.0.0" + web3-core-helpers "1.2.11" + web3-core-method "1.2.11" + web3-core-requestmanager "1.2.11" + web3-utils "1.2.11" -web3-core@1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.6.tgz#bb42a1d7ae49a7258460f0d95ddb00906f59ef92" - integrity sha512-y/QNBFtr5cIR8vxebnotbjWJpOnO8LDYEAzZjeRRUJh2ijmhjoYk7dSNx9ExgC0UCfNFRoNCa9dGRu/GAxwRlw== +web3-core@1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.9.tgz#2cba57aa259b6409db532d21bdf57db8d504fd3e" + integrity sha512-fSYv21IP658Ty2wAuU9iqmW7V+75DOYMVZsDH/c14jcF/1VXnedOcxzxSj3vArsCvXZNe6XC5/wAuGZyQwR9RA== dependencies: "@types/bn.js" "^4.11.4" "@types/node" "^12.6.1" - web3-core-helpers "1.2.6" - web3-core-method "1.2.6" - web3-core-requestmanager "1.2.6" - web3-utils "1.2.6" - -web3-eth-abi@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.1.tgz#9b915b1c9ebf82f70cca631147035d5419064689" - integrity sha512-jI/KhU2a/DQPZXHjo2GW0myEljzfiKOn+h1qxK1+Y9OQfTcBMxrQJyH5AP89O6l6NZ1QvNdq99ThAxBFoy5L+g== - dependencies: - ethers "4.0.0-beta.3" - underscore "1.9.1" - web3-utils "1.2.1" - -web3-eth-abi@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.2.tgz#d5616d88a90020f894763423a9769f2da11fe37a" - integrity sha512-Yn/ZMgoOLxhTVxIYtPJ0eS6pnAnkTAaJgUJh1JhZS4ekzgswMfEYXOwpMaD5eiqPJLpuxmZFnXnBZlnQ1JMXsw== - dependencies: - ethers "4.0.0-beta.3" - underscore "1.9.1" - web3-utils "1.2.2" - -web3-eth-abi@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.4.tgz#5b73e5ef70b03999227066d5d1310b168845e2b8" - integrity sha512-8eLIY4xZKoU3DSVu1pORluAw9Ru0/v4CGdw5so31nn+7fR8zgHMgwbFe0aOqWQ5VU42PzMMXeIJwt4AEi2buFg== - dependencies: - ethers "4.0.0-beta.3" - underscore "1.9.1" - web3-utils "1.2.4" + bignumber.js "^9.0.0" + web3-core-helpers "1.2.9" + web3-core-method "1.2.9" + web3-core-requestmanager "1.2.9" + web3-utils "1.2.9" -web3-eth-abi@1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.6.tgz#b495383cc5c0d8e2857b26e7fe25606685983b25" - integrity sha512-w9GAyyikn8nSifSDZxAvU9fxtQSX+W2xQWMmrtTXmBGCaE4/ywKOSPAO78gq8AoU4Wq5yqVGKZLLbfpt7/sHlA== +web3-eth-abi@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.11.tgz#a887494e5d447c2926d557a3834edd66e17af9b0" + integrity sha512-PkRYc0+MjuLSgg03QVWqWlQivJqRwKItKtEpRUaxUAeLE7i/uU39gmzm2keHGcQXo3POXAbOnMqkDvOep89Crg== dependencies: - ethers "4.0.0-beta.3" + "@ethersproject/abi" "5.0.0-beta.153" underscore "1.9.1" - web3-utils "1.2.6" + web3-utils "1.2.11" -web3-eth-accounts@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.1.tgz#2741a8ef337a7219d57959ac8bd118b9d68d63cf" - integrity sha512-26I4qq42STQ8IeKUyur3MdQ1NzrzCqPsmzqpux0j6X/XBD7EjZ+Cs0lhGNkSKH5dI3V8CJasnQ5T1mNKeWB7nQ== - dependencies: - any-promise "1.3.0" - crypto-browserify "3.12.0" - eth-lib "0.2.7" - scryptsy "2.1.0" - semver "6.2.0" - underscore "1.9.1" - uuid "3.3.2" - web3-core "1.2.1" - web3-core-helpers "1.2.1" - web3-core-method "1.2.1" - web3-utils "1.2.1" - -web3-eth-accounts@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.2.tgz#c187e14bff6baa698ac352220290222dbfd332e5" - integrity sha512-KzHOEyXOEZ13ZOkWN3skZKqSo5f4Z1ogPFNn9uZbKCz+kSp+gCAEKxyfbOsB/JMAp5h7o7pb6eYsPCUBJmFFiA== +web3-eth-abi@1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.9.tgz#14bedd7e4be04fcca35b2ac84af1400574cd8280" + integrity sha512-3YwUYbh/DMfDbhMWEebAdjSd5bj3ZQieOjLzWFHU23CaLEqT34sUix1lba+hgUH/EN6A7bKAuKOhR3p0OvTn7Q== dependencies: - any-promise "1.3.0" - crypto-browserify "3.12.0" - eth-lib "0.2.7" - ethereumjs-common "^1.3.2" - ethereumjs-tx "^2.1.1" - scrypt-shim "github:web3-js/scrypt-shim" + "@ethersproject/abi" "5.0.0-beta.153" underscore "1.9.1" - uuid "3.3.2" - web3-core "1.2.2" - web3-core-helpers "1.2.2" - web3-core-method "1.2.2" - web3-utils "1.2.2" + web3-utils "1.2.9" -web3-eth-accounts@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.4.tgz#ada6edc49542354328a85cafab067acd7f88c288" - integrity sha512-04LzT/UtWmRFmi4hHRewP5Zz43fWhuHiK5XimP86sUQodk/ByOkXQ3RoXyGXFMNoRxdcAeRNxSfA2DpIBc9xUw== +web3-eth-accounts@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.11.tgz#a9e3044da442d31903a7ce035a86d8fa33f90520" + integrity sha512-6FwPqEpCfKIh3nSSGeo3uBm2iFSnFJDfwL3oS9pyegRBXNsGRVpgiW63yhNzL0796StsvjHWwQnQHsZNxWAkGw== dependencies: - "@web3-js/scrypt-shim" "^0.1.0" - any-promise "1.3.0" crypto-browserify "3.12.0" - eth-lib "0.2.7" + eth-lib "0.2.8" ethereumjs-common "^1.3.2" ethereumjs-tx "^2.1.1" + scrypt-js "^3.0.1" underscore "1.9.1" uuid "3.3.2" - web3-core "1.2.4" - web3-core-helpers "1.2.4" - web3-core-method "1.2.4" - web3-utils "1.2.4" + web3-core "1.2.11" + web3-core-helpers "1.2.11" + web3-core-method "1.2.11" + web3-utils "1.2.11" -web3-eth-accounts@1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.6.tgz#a1ba4bf75fa8102a3ec6cddd0eccd72462262720" - integrity sha512-cDVtonHRgzqi/ZHOOf8kfCQWFEipcfQNAMzXIaKZwc0UUD9mgSI5oJrN45a89Ze+E6Lz9m77cDG5Ax9zscSkcw== +web3-eth-accounts@1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.9.tgz#7ec422df90fecb5243603ea49dc28726db7bdab6" + integrity sha512-jkbDCZoA1qv53mFcRHCinoCsgg8WH+M0YUO1awxmqWXRmCRws1wW0TsuSQ14UThih5Dxolgl+e+aGWxG58LMwg== dependencies: - "@web3-js/scrypt-shim" "^0.1.0" - any-promise "1.3.0" crypto-browserify "3.12.0" eth-lib "^0.2.8" ethereumjs-common "^1.3.2" ethereumjs-tx "^2.1.1" + scrypt-js "^3.0.1" underscore "1.9.1" uuid "3.3.2" - web3-core "1.2.6" - web3-core-helpers "1.2.6" - web3-core-method "1.2.6" - web3-utils "1.2.6" + web3-core "1.2.9" + web3-core-helpers "1.2.9" + web3-core-method "1.2.9" + web3-utils "1.2.9" -web3-eth-contract@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.2.1.tgz#3542424f3d341386fd9ff65e78060b85ac0ea8c4" - integrity sha512-kYFESbQ3boC9bl2rYVghj7O8UKMiuKaiMkxvRH5cEDHil8V7MGEGZNH0slSdoyeftZVlaWSMqkRP/chfnKND0g== - dependencies: - underscore "1.9.1" - web3-core "1.2.1" - web3-core-helpers "1.2.1" - web3-core-method "1.2.1" - web3-core-promievent "1.2.1" - web3-core-subscriptions "1.2.1" - web3-eth-abi "1.2.1" - web3-utils "1.2.1" - -web3-eth-contract@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.2.2.tgz#84e92714918a29e1028ee7718f0712536e14e9a1" - integrity sha512-EKT2yVFws3FEdotDQoNsXTYL798+ogJqR2//CaGwx3p0/RvQIgfzEwp8nbgA6dMxCsn9KOQi7OtklzpnJMkjtA== - dependencies: - "@types/bn.js" "^4.11.4" - underscore "1.9.1" - web3-core "1.2.2" - web3-core-helpers "1.2.2" - web3-core-method "1.2.2" - web3-core-promievent "1.2.2" - web3-core-subscriptions "1.2.2" - web3-eth-abi "1.2.2" - web3-utils "1.2.2" - -web3-eth-contract@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.2.4.tgz#68ef7cc633232779b0a2c506a810fbe903575886" - integrity sha512-b/9zC0qjVetEYnzRA1oZ8gF1OSSUkwSYi5LGr4GeckLkzXP7osEnp9lkO/AQcE4GpG+l+STnKPnASXJGZPgBRQ== +web3-eth-contract@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.2.11.tgz#917065902bc27ce89da9a1da26e62ef663663b90" + integrity sha512-MzYuI/Rq2o6gn7vCGcnQgco63isPNK5lMAan2E51AJLknjSLnOxwNY3gM8BcKoy4Z+v5Dv00a03Xuk78JowFow== dependencies: - "@types/bn.js" "^4.11.4" + "@types/bn.js" "^4.11.5" underscore "1.9.1" - web3-core "1.2.4" - web3-core-helpers "1.2.4" - web3-core-method "1.2.4" - web3-core-promievent "1.2.4" - web3-core-subscriptions "1.2.4" - web3-eth-abi "1.2.4" - web3-utils "1.2.4" - -web3-eth-contract@1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.2.6.tgz#39111543960035ed94c597a239cf5aa1da796741" - integrity sha512-ak4xbHIhWgsbdPCkSN+HnQc1SH4c856y7Ly+S57J/DQVzhFZemK5HvWdpwadJrQTcHET3ZeId1vq3kmW7UYodw== + web3-core "1.2.11" + web3-core-helpers "1.2.11" + web3-core-method "1.2.11" + web3-core-promievent "1.2.11" + web3-core-subscriptions "1.2.11" + web3-eth-abi "1.2.11" + web3-utils "1.2.11" + +web3-eth-contract@1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.2.9.tgz#713d9c6d502d8c8f22b696b7ffd8e254444e6bfd" + integrity sha512-PYMvJf7EG/HyssUZa+pXrc8IB06K/YFfWYyW4R7ed3sab+9wWUys1TlWxBCBuiBXOokSAyM6H6P6/cKEx8FT8Q== dependencies: "@types/bn.js" "^4.11.4" underscore "1.9.1" - web3-core "1.2.6" - web3-core-helpers "1.2.6" - web3-core-method "1.2.6" - web3-core-promievent "1.2.6" - web3-core-subscriptions "1.2.6" - web3-eth-abi "1.2.6" - web3-utils "1.2.6" - -web3-eth-ens@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.1.tgz#a0e52eee68c42a8b9865ceb04e5fb022c2d971d5" - integrity sha512-lhP1kFhqZr2nnbu3CGIFFrAnNxk2veXpOXBY48Tub37RtobDyHijHgrj+xTh+mFiPokyrapVjpFsbGa+Xzye4Q== - dependencies: - eth-ens-namehash "2.0.8" - underscore "1.9.1" - web3-core "1.2.1" - web3-core-helpers "1.2.1" - web3-core-promievent "1.2.1" - web3-eth-abi "1.2.1" - web3-eth-contract "1.2.1" - web3-utils "1.2.1" - -web3-eth-ens@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.2.tgz#0a4abed1d4cbdacbf5e1ab06e502d806d1192bc6" - integrity sha512-CFjkr2HnuyMoMFBoNUWojyguD4Ef+NkyovcnUc/iAb9GP4LHohKrODG4pl76R5u61TkJGobC2ij6TyibtsyVYg== - dependencies: - eth-ens-namehash "2.0.8" - underscore "1.9.1" - web3-core "1.2.2" - web3-core-helpers "1.2.2" - web3-core-promievent "1.2.2" - web3-eth-abi "1.2.2" - web3-eth-contract "1.2.2" - web3-utils "1.2.2" - -web3-eth-ens@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.4.tgz#b95b3aa99fb1e35c802b9e02a44c3046a3fa065e" - integrity sha512-g8+JxnZlhdsCzCS38Zm6R/ngXhXzvc3h7bXlxgKU4coTzLLoMpgOAEz71GxyIJinWTFbLXk/WjNY0dazi9NwVw== + web3-core "1.2.9" + web3-core-helpers "1.2.9" + web3-core-method "1.2.9" + web3-core-promievent "1.2.9" + web3-core-subscriptions "1.2.9" + web3-eth-abi "1.2.9" + web3-utils "1.2.9" + +web3-eth-ens@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.11.tgz#26d4d7f16d6cbcfff918e39832b939edc3162532" + integrity sha512-dbW7dXP6HqT1EAPvnniZVnmw6TmQEKF6/1KgAxbo8iBBYrVTMDGFQUUnZ+C4VETGrwwaqtX4L9d/FrQhZ6SUiA== dependencies: + content-hash "^2.5.2" eth-ens-namehash "2.0.8" underscore "1.9.1" - web3-core "1.2.4" - web3-core-helpers "1.2.4" - web3-core-promievent "1.2.4" - web3-eth-abi "1.2.4" - web3-eth-contract "1.2.4" - web3-utils "1.2.4" - -web3-eth-ens@1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.6.tgz#bf86a624c4c72bc59913c2345180d3ea947e110d" - integrity sha512-8UEqt6fqR/dji/jBGPFAyBs16OJjwi0t2dPWXPyGXmty/fH+osnXwWXE4HRUyj4xuafiM5P1YkXMsPhKEadjiw== + web3-core "1.2.11" + web3-core-helpers "1.2.11" + web3-core-promievent "1.2.11" + web3-eth-abi "1.2.11" + web3-eth-contract "1.2.11" + web3-utils "1.2.11" + +web3-eth-ens@1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.9.tgz#577b9358c036337833fb2bdc59c11be7f6f731b6" + integrity sha512-kG4+ZRgZ8I1WYyOBGI8QVRHfUSbbJjvJAGA1AF/NOW7JXQ+x7gBGeJw6taDWJhSshMoEKWcsgvsiuoG4870YxQ== dependencies: + content-hash "^2.5.2" eth-ens-namehash "2.0.8" underscore "1.9.1" - web3-core "1.2.6" - web3-core-helpers "1.2.6" - web3-core-promievent "1.2.6" - web3-eth-abi "1.2.6" - web3-eth-contract "1.2.6" - web3-utils "1.2.6" - -web3-eth-iban@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.2.1.tgz#2c3801718946bea24e9296993a975c80b5acf880" - integrity sha512-9gkr4QPl1jCU+wkgmZ8EwODVO3ovVj6d6JKMos52ggdT2YCmlfvFVF6wlGLwi0VvNa/p+0BjJzaqxnnG/JewjQ== - dependencies: - bn.js "4.11.8" - web3-utils "1.2.1" - -web3-eth-iban@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.2.2.tgz#76bec73bad214df7c4192388979a59fc98b96c5a" - integrity sha512-gxKXBoUhaTFHr0vJB/5sd4i8ejF/7gIsbM/VvemHT3tF5smnmY6hcwSMmn7sl5Gs+83XVb/BngnnGkf+I/rsrQ== - dependencies: - bn.js "4.11.8" - web3-utils "1.2.2" - -web3-eth-iban@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.2.4.tgz#8e0550fd3fd8e47a39357d87fe27dee9483ee476" - integrity sha512-D9HIyctru/FLRpXakRwmwdjb5bWU2O6UE/3AXvRm6DCOf2e+7Ve11qQrPtaubHfpdW3KWjDKvlxV9iaFv/oTMQ== + web3-core "1.2.9" + web3-core-helpers "1.2.9" + web3-core-promievent "1.2.9" + web3-eth-abi "1.2.9" + web3-eth-contract "1.2.9" + web3-utils "1.2.9" + +web3-eth-iban@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.2.11.tgz#f5f73298305bc7392e2f188bf38a7362b42144ef" + integrity sha512-ozuVlZ5jwFC2hJY4+fH9pIcuH1xP0HEFhtWsR69u9uDIANHLPQQtWYmdj7xQ3p2YT4bQLq/axKhZi7EZVetmxQ== dependencies: - bn.js "4.11.8" - web3-utils "1.2.4" + bn.js "^4.11.9" + web3-utils "1.2.11" -web3-eth-iban@1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.2.6.tgz#0b22191fd1aa6e27f7ef0820df75820bfb4ed46b" - integrity sha512-TPMc3BW9Iso7H+9w+ytbqHK9wgOmtocyCD3PaAe5Eie50KQ/j7ThA60dGJnxItVo6yyRv5pZAYxPVob9x/fJlg== +web3-eth-iban@1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.2.9.tgz#4ebf3d8783f34d04c4740dc18938556466399f7a" + integrity sha512-RtdVvJE0pyg9dHLy0GzDiqgnLnssSzfz/JYguhC1wsj9+Gnq1M6Diy3NixACWUAp6ty/zafyOaZnNQ+JuH9TjQ== dependencies: bn.js "4.11.8" - web3-utils "1.2.6" + web3-utils "1.2.9" -web3-eth-personal@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.1.tgz#244e9911b7b482dc17c02f23a061a627c6e47faf" - integrity sha512-RNDVSiaSoY4aIp8+Hc7z+X72H7lMb3fmAChuSBADoEc7DsJrY/d0R5qQDK9g9t2BO8oxgLrLNyBP/9ub2Hc6Bg== - dependencies: - web3-core "1.2.1" - web3-core-helpers "1.2.1" - web3-core-method "1.2.1" - web3-net "1.2.1" - web3-utils "1.2.1" - -web3-eth-personal@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.2.tgz#eee1c86a8132fa16b5e34c6d421ca92e684f0be6" - integrity sha512-4w+GLvTlFqW3+q4xDUXvCEMU7kRZ+xm/iJC8gm1Li1nXxwwFbs+Y+KBK6ZYtoN1qqAnHR+plYpIoVo27ixI5Rg== - dependencies: - "@types/node" "^12.6.1" - web3-core "1.2.2" - web3-core-helpers "1.2.2" - web3-core-method "1.2.2" - web3-net "1.2.2" - web3-utils "1.2.2" - -web3-eth-personal@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.4.tgz#3224cca6851c96347d9799b12c1b67b2a6eb232b" - integrity sha512-5Russ7ZECwHaZXcN3DLuLS7390Vzgrzepl4D87SD6Sn1DHsCZtvfdPIYwoTmKNp69LG3mORl7U23Ga5YxqkICw== +web3-eth-personal@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.11.tgz#a38b3942a1d87a62070ce0622a941553c3d5aa70" + integrity sha512-42IzUtKq9iHZ8K9VN0vAI50iSU9tOA1V7XU2BhF/tb7We2iKBVdkley2fg26TxlOcKNEHm7o6HRtiiFsVK4Ifw== dependencies: - "@types/node" "^12.6.1" - web3-core "1.2.4" - web3-core-helpers "1.2.4" - web3-core-method "1.2.4" - web3-net "1.2.4" - web3-utils "1.2.4" + "@types/node" "^12.12.6" + web3-core "1.2.11" + web3-core-helpers "1.2.11" + web3-core-method "1.2.11" + web3-net "1.2.11" + web3-utils "1.2.11" -web3-eth-personal@1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.6.tgz#47a0a0657ec04dd77f95451a6869d4751d324b6b" - integrity sha512-T2NUkh1plY8d7wePXSoHnaiKOd8dLNFaQfgBl9JHU6S7IJrG9jnYD9bVxLEgRUfHs9gKf9tQpDf7AcPFdq/A8g== +web3-eth-personal@1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.9.tgz#9b95eb159b950b83cd8ae15873e1d57711b7a368" + integrity sha512-cFiNrktxZ1C/rIdJFzQTvFn3/0zcsR3a+Jf8Y3KxeQDHszQtosjLWptP7bsUmDwEh4hzh0Cy3KpOxlYBWB8bJQ== dependencies: "@types/node" "^12.6.1" - web3-core "1.2.6" - web3-core-helpers "1.2.6" - web3-core-method "1.2.6" - web3-net "1.2.6" - web3-utils "1.2.6" + web3-core "1.2.9" + web3-core-helpers "1.2.9" + web3-core-method "1.2.9" + web3-net "1.2.9" + web3-utils "1.2.9" -web3-eth@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.1.tgz#b9989e2557c73a9e8ffdc107c6dafbe72c79c1b0" - integrity sha512-/2xly4Yry5FW1i+uygPjhfvgUP/MS/Dk+PDqmzp5M88tS86A+j8BzKc23GrlA8sgGs0645cpZK/999LpEF5UdA== - dependencies: - underscore "1.9.1" - web3-core "1.2.1" - web3-core-helpers "1.2.1" - web3-core-method "1.2.1" - web3-core-subscriptions "1.2.1" - web3-eth-abi "1.2.1" - web3-eth-accounts "1.2.1" - web3-eth-contract "1.2.1" - web3-eth-ens "1.2.1" - web3-eth-iban "1.2.1" - web3-eth-personal "1.2.1" - web3-net "1.2.1" - web3-utils "1.2.1" - -web3-eth@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.2.tgz#65a1564634a23b990efd1655bf94ad513904286c" - integrity sha512-UXpC74mBQvZzd4b+baD4Ocp7g+BlwxhBHumy9seyE/LMIcMlePXwCKzxve9yReNpjaU16Mmyya6ZYlyiKKV8UA== - dependencies: - underscore "1.9.1" - web3-core "1.2.2" - web3-core-helpers "1.2.2" - web3-core-method "1.2.2" - web3-core-subscriptions "1.2.2" - web3-eth-abi "1.2.2" - web3-eth-accounts "1.2.2" - web3-eth-contract "1.2.2" - web3-eth-ens "1.2.2" - web3-eth-iban "1.2.2" - web3-eth-personal "1.2.2" - web3-net "1.2.2" - web3-utils "1.2.2" - -web3-eth@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.4.tgz#24c3b1f1ac79351bbfb808b2ab5c585fa57cdd00" - integrity sha512-+j+kbfmZsbc3+KJpvHM16j1xRFHe2jBAniMo1BHKc3lho6A8Sn9Buyut6odubguX2AxoRArCdIDCkT9hjUERpA== +web3-eth@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.11.tgz#4c81fcb6285b8caf544058fba3ae802968fdc793" + integrity sha512-REvxW1wJ58AgHPcXPJOL49d1K/dPmuw4LjPLBPStOVkQjzDTVmJEIsiLwn2YeuNDd4pfakBwT8L3bz1G1/wVsQ== dependencies: underscore "1.9.1" - web3-core "1.2.4" - web3-core-helpers "1.2.4" - web3-core-method "1.2.4" - web3-core-subscriptions "1.2.4" - web3-eth-abi "1.2.4" - web3-eth-accounts "1.2.4" - web3-eth-contract "1.2.4" - web3-eth-ens "1.2.4" - web3-eth-iban "1.2.4" - web3-eth-personal "1.2.4" - web3-net "1.2.4" - web3-utils "1.2.4" - -web3-eth@1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.6.tgz#15a8c65fdde0727872848cae506758d302d8d046" - integrity sha512-ROWlDPzh4QX6tlGGGlAK6X4kA2n0/cNj/4kb0nNVWkRouGmYO0R8k6s47YxYHvGiXt0s0++FUUv5vAbWovtUQw== + web3-core "1.2.11" + web3-core-helpers "1.2.11" + web3-core-method "1.2.11" + web3-core-subscriptions "1.2.11" + web3-eth-abi "1.2.11" + web3-eth-accounts "1.2.11" + web3-eth-contract "1.2.11" + web3-eth-ens "1.2.11" + web3-eth-iban "1.2.11" + web3-eth-personal "1.2.11" + web3-net "1.2.11" + web3-utils "1.2.11" + +web3-eth@1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.9.tgz#e40e7b88baffc9b487193211c8b424dc944977b3" + integrity sha512-sIKO4iE9FEBa/CYUd6GdPd7GXt/wISqxUd8PlIld6+hvMJj02lgO7Z7p5T9mZIJcIZJGvZX81ogx8oJ9yif+Ag== dependencies: underscore "1.9.1" - web3-core "1.2.6" - web3-core-helpers "1.2.6" - web3-core-method "1.2.6" - web3-core-subscriptions "1.2.6" - web3-eth-abi "1.2.6" - web3-eth-accounts "1.2.6" - web3-eth-contract "1.2.6" - web3-eth-ens "1.2.6" - web3-eth-iban "1.2.6" - web3-eth-personal "1.2.6" - web3-net "1.2.6" - web3-utils "1.2.6" - -web3-net@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.1.tgz#edd249503315dd5ab4fa00220f6509d95bb7ab10" - integrity sha512-Yt1Bs7WgnLESPe0rri/ZoPWzSy55ovioaP35w1KZydrNtQ5Yq4WcrAdhBzcOW7vAkIwrsLQsvA+hrOCy7mNauw== - dependencies: - web3-core "1.2.1" - web3-core-method "1.2.1" - web3-utils "1.2.1" - -web3-net@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.2.tgz#5c3226ca72df7c591422440ce6f1203fd42ddad9" - integrity sha512-K07j2DXq0x4UOJgae65rWZKraOznhk8v5EGSTdFqASTx7vWE/m+NqBijBYGEsQY1lSMlVaAY9UEQlcXK5HzXTw== - dependencies: - web3-core "1.2.2" - web3-core-method "1.2.2" - web3-utils "1.2.2" - -web3-net@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.4.tgz#1d246406d3aaffbf39c030e4e98bce0ca5f25458" - integrity sha512-wKOsqhyXWPSYTGbp7ofVvni17yfRptpqoUdp3SC8RAhDmGkX6irsiT9pON79m6b3HUHfLoBilFQyt/fTUZOf7A== + web3-core "1.2.9" + web3-core-helpers "1.2.9" + web3-core-method "1.2.9" + web3-core-subscriptions "1.2.9" + web3-eth-abi "1.2.9" + web3-eth-accounts "1.2.9" + web3-eth-contract "1.2.9" + web3-eth-ens "1.2.9" + web3-eth-iban "1.2.9" + web3-eth-personal "1.2.9" + web3-net "1.2.9" + web3-utils "1.2.9" + +web3-net@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.11.tgz#eda68ef25e5cdb64c96c39085cdb74669aabbe1b" + integrity sha512-sjrSDj0pTfZouR5BSTItCuZ5K/oZPVdVciPQ6981PPPIwJJkCMeVjD7I4zO3qDPCnBjBSbWvVnLdwqUBPtHxyg== dependencies: - web3-core "1.2.4" - web3-core-method "1.2.4" - web3-utils "1.2.4" + web3-core "1.2.11" + web3-core-method "1.2.11" + web3-utils "1.2.11" -web3-net@1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.6.tgz#035ca0fbe55282fda848ca17ebb4c8966147e5ea" - integrity sha512-hsNHAPddrhgjWLmbESW0KxJi2GnthPcow0Sqpnf4oB6+/+ZnQHU9OsIyHb83bnC1OmunrK2vf9Ye2mLPdFIu3A== +web3-net@1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.9.tgz#51d248ed1bc5c37713c4ac40c0073d9beacd87d3" + integrity sha512-d2mTn8jPlg+SI2hTj2b32Qan6DmtU9ap/IUlJTeQbZQSkTLf0u9suW8Vjwyr4poJYXTurdSshE7OZsPNn30/ZA== dependencies: - web3-core "1.2.6" - web3-core-method "1.2.6" - web3-utils "1.2.6" + web3-core "1.2.9" + web3-core-method "1.2.9" + web3-utils "1.2.9" web3-provider-engine@14.2.1: version "14.2.1" @@ -11030,184 +10023,87 @@ web3-provider-engine@14.2.1: xhr "^2.2.0" xtend "^4.0.1" -web3-providers-http@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.2.1.tgz#c93ea003a42e7b894556f7e19dd3540f947f5013" - integrity sha512-BDtVUVolT9b3CAzeGVA/np1hhn7RPUZ6YYGB/sYky+GjeO311Yoq8SRDUSezU92x8yImSC2B+SMReGhd1zL+bQ== - dependencies: - web3-core-helpers "1.2.1" - xhr2-cookies "1.1.0" - -web3-providers-http@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.2.2.tgz#155e55c1d69f4c5cc0b411ede40dea3d06720956" - integrity sha512-BNZ7Hguy3eBszsarH5gqr9SIZNvqk9eKwqwmGH1LQS1FL3NdoOn7tgPPdddrXec4fL94CwgNk4rCU+OjjZRNDg== - dependencies: - web3-core-helpers "1.2.2" - xhr2-cookies "1.1.0" - -web3-providers-http@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.2.4.tgz#514fcad71ae77832c2c15574296282fbbc5f4a67" - integrity sha512-dzVCkRrR/cqlIrcrWNiPt9gyt0AZTE0J+MfAu9rR6CyIgtnm1wFUVVGaxYRxuTGQRO4Dlo49gtoGwaGcyxqiTw== +web3-providers-http@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.2.11.tgz#1cd03442c61670572d40e4dcdf1faff8bd91e7c6" + integrity sha512-psh4hYGb1+ijWywfwpB2cvvOIMISlR44F/rJtYkRmQ5jMvG4FOCPlQJPiHQZo+2cc3HbktvvSJzIhkWQJdmvrA== dependencies: - web3-core-helpers "1.2.4" + web3-core-helpers "1.2.11" xhr2-cookies "1.1.0" -web3-providers-http@1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.2.6.tgz#3c7b1252751fb37e53b873fce9dbb6340f5e31d9" - integrity sha512-2+SaFCspb5f82QKuHB3nEPQOF9iSWxRf7c18fHtmnLNVkfG9SwLN1zh67bYn3tZGUdOI3gj8aX4Uhfpwx9Ezpw== +web3-providers-http@1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.2.9.tgz#e698aa5377e2019c24c5a1e6efa0f51018728934" + integrity sha512-F956tCIj60Ttr0UvEHWFIhx+be3He8msoPzyA44/kfzzYoMAsCFRn5cf0zQG6al0znE75g6HlWVSN6s3yAh51A== dependencies: - web3-core-helpers "1.2.6" + web3-core-helpers "1.2.9" xhr2-cookies "1.1.0" -web3-providers-ipc@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.1.tgz#017bfc687a8fc5398df2241eb98f135e3edd672c" - integrity sha512-oPEuOCwxVx8L4CPD0TUdnlOUZwGBSRKScCz/Ws2YHdr9Ium+whm+0NLmOZjkjQp5wovQbyBzNa6zJz1noFRvFA== - dependencies: - oboe "2.1.4" - underscore "1.9.1" - web3-core-helpers "1.2.1" - -web3-providers-ipc@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.2.tgz#c6d165a12bc68674b4cdd543ea18aec79cafc2e8" - integrity sha512-t97w3zi5Kn/LEWGA6D9qxoO0LBOG+lK2FjlEdCwDQatffB/+vYrzZ/CLYVQSoyFZAlsDoBasVoYSWZK1n39aHA== - dependencies: - oboe "2.1.4" - underscore "1.9.1" - web3-core-helpers "1.2.2" - -web3-providers-ipc@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.4.tgz#9d6659f8d44943fb369b739f48df09092be459bd" - integrity sha512-8J3Dguffin51gckTaNrO3oMBo7g+j0UNk6hXmdmQMMNEtrYqw4ctT6t06YOf9GgtOMjSAc1YEh3LPrvgIsR7og== +web3-providers-ipc@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.11.tgz#d16d6c9be1be6e0b4f4536c4acc16b0f4f27ef21" + integrity sha512-yhc7Y/k8hBV/KlELxynWjJDzmgDEDjIjBzXK+e0rHBsYEhdCNdIH5Psa456c+l0qTEU2YzycF8VAjYpWfPnBpQ== dependencies: oboe "2.1.4" underscore "1.9.1" - web3-core-helpers "1.2.4" + web3-core-helpers "1.2.11" -web3-providers-ipc@1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.6.tgz#adabab5ac66b3ff8a26c7dc97af3f1a6a7609701" - integrity sha512-b0Es+/GTZyk5FG3SgUDW+2/mBwJAXWt5LuppODptiOas8bB2khLjG6+Gm1K4uwOb+1NJGPt5mZZ8Wi7vibtQ+A== +web3-providers-ipc@1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.9.tgz#6159eacfcd7ac31edc470d93ef10814fe874763b" + integrity sha512-NQ8QnBleoHA2qTJlqoWu7EJAD/FR5uimf7Ielzk4Z2z+m+6UAuJdJMSuQNj+Umhz9L/Ys6vpS1vHx9NizFl+aQ== dependencies: oboe "2.1.4" underscore "1.9.1" - web3-core-helpers "1.2.6" - -web3-providers-ws@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.1.tgz#2d941eaf3d5a8caa3214eff8dc16d96252b842cb" - integrity sha512-oqsQXzu+ejJACVHy864WwIyw+oB21nw/pI65/sD95Zi98+/HQzFfNcIFneF1NC4bVF3VNX4YHTNq2I2o97LAiA== - dependencies: - underscore "1.9.1" - web3-core-helpers "1.2.1" - websocket "github:web3-js/WebSocket-Node#polyfill/globalThis" - -web3-providers-ws@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.2.tgz#d2c05c68598cea5ad3fa6ef076c3bcb3ca300d29" - integrity sha512-Wb1mrWTGMTXOpJkL0yGvL/WYLt8fUIXx8k/l52QB2IiKzvyd42dTWn4+j8IKXGSYYzOm7NMqv6nhA5VDk12VfA== - dependencies: - underscore "1.9.1" - web3-core-helpers "1.2.2" - websocket "github:web3-js/WebSocket-Node#polyfill/globalThis" + web3-core-helpers "1.2.9" -web3-providers-ws@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.4.tgz#099ee271ee03f6ea4f5df9cfe969e83f4ce0e36f" - integrity sha512-F/vQpDzeK+++oeeNROl1IVTufFCwCR2hpWe5yRXN0ApLwHqXrMI7UwQNdJ9iyibcWjJf/ECbauEEQ8CHgE+MYQ== +web3-providers-ws@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.11.tgz#a1dfd6d9778d840561d9ec13dd453046451a96bb" + integrity sha512-ZxnjIY1Er8Ty+cE4migzr43zA/+72AF1myzsLaU5eVgdsfV7Jqx7Dix1hbevNZDKFlSoEyq/3j/jYalh3So1Zg== dependencies: - "@web3-js/websocket" "^1.0.29" + eventemitter3 "4.0.4" underscore "1.9.1" - web3-core-helpers "1.2.4" + web3-core-helpers "1.2.11" + websocket "^1.0.31" -web3-providers-ws@1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.6.tgz#3cecc49f7c99f07a75076d3c54247050bc4f7e11" - integrity sha512-20waSYX+gb5M5yKhug5FIwxBBvkKzlJH7sK6XEgdOx6BZ9YYamLmvg9wcRVtnSZO8hV/3cWenO/tRtTrHVvIgQ== +web3-providers-ws@1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.9.tgz#22c2006655ec44b4ad2b41acae62741a6ae7a88c" + integrity sha512-6+UpvINeI//dglZoAKStUXqxDOXJy6Iitv2z3dbgInG4zb8tkYl/VBDL80UjUg3ZvzWG0g7EKY2nRPEpON2TFA== dependencies: - "@web3-js/websocket" "^1.0.29" + eventemitter3 "^4.0.0" underscore "1.9.1" - web3-core-helpers "1.2.6" + web3-core-helpers "1.2.9" + websocket "^1.0.31" -web3-shh@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.1.tgz#4460e3c1e07faf73ddec24ccd00da46f89152b0c" - integrity sha512-/3Cl04nza5kuFn25bV3FJWa0s3Vafr5BlT933h26xovQ6HIIz61LmvNQlvX1AhFL+SNJOTcQmK1SM59vcyC8bA== - dependencies: - web3-core "1.2.1" - web3-core-method "1.2.1" - web3-core-subscriptions "1.2.1" - web3-net "1.2.1" - -web3-shh@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.2.tgz#44ed998f2a6ba0ec5cb9d455184a0f647826a49c" - integrity sha512-og258NPhlBn8yYrDWjoWBBb6zo1OlBgoWGT+LL5/LPqRbjPe09hlOYHgscAAr9zZGtohTOty7RrxYw6Z6oDWCg== - dependencies: - web3-core "1.2.2" - web3-core-method "1.2.2" - web3-core-subscriptions "1.2.2" - web3-net "1.2.2" - -web3-shh@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.4.tgz#5c8ff5ab624a3b14f08af0d24d2b16c10e9f70dd" - integrity sha512-z+9SCw0dE+69Z/Hv8809XDbLj7lTfEv9Sgu8eKEIdGntZf4v7ewj5rzN5bZZSz8aCvfK7Y6ovz1PBAu4QzS4IQ== - dependencies: - web3-core "1.2.4" - web3-core-method "1.2.4" - web3-core-subscriptions "1.2.4" - web3-net "1.2.4" - -web3-shh@1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.6.tgz#2492616da4cac32d4c7534b890f43bac63190c14" - integrity sha512-rouWyOOM6YMbLQd65grpj8BBezQfgNeRRX+cGyW4xsn6Xgu+B73Zvr6OtA/ftJwwa9bqHGpnLrrLMeWyy4YLUw== +web3-shh@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.11.tgz#f5d086f9621c9a47e98d438010385b5f059fd88f" + integrity sha512-B3OrO3oG1L+bv3E1sTwCx66injW1A8hhwpknDUbV+sw3fehFazA06z9SGXUefuFI1kVs4q2vRi0n4oCcI4dZDg== dependencies: - web3-core "1.2.6" - web3-core-method "1.2.6" - web3-core-subscriptions "1.2.6" - web3-net "1.2.6" + web3-core "1.2.11" + web3-core-method "1.2.11" + web3-core-subscriptions "1.2.11" + web3-net "1.2.11" -web3-utils@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.1.tgz#21466e38291551de0ab34558de21512ac4274534" - integrity sha512-Mrcn3l58L+yCKz3zBryM6JZpNruWuT0OCbag8w+reeNROSGVlXzUQkU+gtAwc9JCZ7tKUyg67+2YUGqUjVcyBA== - dependencies: - bn.js "4.11.8" - eth-lib "0.2.7" - ethjs-unit "0.1.6" - number-to-bn "1.7.0" - randomhex "0.1.5" - underscore "1.9.1" - utf8 "3.0.0" - -web3-utils@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.2.tgz#b53a08c40d2c3f31d3c4a28e7d749405df99c8c0" - integrity sha512-joF+s3243TY5cL7Z7y4h1JsJpUCf/kmFmj+eJar7Y2yNIGVcW961VyrAms75tjUysSuHaUQ3eQXjBEUJueT52A== +web3-shh@1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.9.tgz#c4ba70d6142cfd61341a50752d8cace9a0370911" + integrity sha512-PWa8b/EaxaMinFaxy6cV0i0EOi2M7a/ST+9k9nhyhCjVa2vzXuNoBNo2IUOmeZ0WP2UQB8ByJ2+p4htlJaDOjA== dependencies: - bn.js "4.11.8" - eth-lib "0.2.7" - ethereum-bloom-filters "^1.0.6" - ethjs-unit "0.1.6" - number-to-bn "1.7.0" - randombytes "^2.1.0" - underscore "1.9.1" - utf8 "3.0.0" + web3-core "1.2.9" + web3-core-method "1.2.9" + web3-core-subscriptions "1.2.9" + web3-net "1.2.9" -web3-utils@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.4.tgz#96832a39a66b05bf8862a5b0bdad2799d709d951" - integrity sha512-+S86Ip+jqfIPQWvw2N/xBQq5JNqCO0dyvukGdJm8fEWHZbckT4WxSpHbx+9KLEWY4H4x9pUwnoRkK87pYyHfgQ== +web3-utils@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.11.tgz#af1942aead3fb166ae851a985bed8ef2c2d95a82" + integrity sha512-3Tq09izhD+ThqHEaWYX4VOT7dNPdZiO+c/1QMA0s5X2lDFKK/xHJb7cyTRRVzN2LvlHbR7baS1tmQhSua51TcQ== dependencies: - bn.js "4.11.8" - eth-lib "0.2.7" + bn.js "^4.11.9" + eth-lib "0.2.8" ethereum-bloom-filters "^1.0.6" ethjs-unit "0.1.6" number-to-bn "1.7.0" @@ -11215,10 +10111,10 @@ web3-utils@1.2.4: underscore "1.9.1" utf8 "3.0.0" -web3-utils@1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.6.tgz#b9a25432da00976457fcc1094c4af8ac6d486db9" - integrity sha512-8/HnqG/l7dGmKMgEL9JeKPTtjScxOePTzopv5aaKFExPfaBrYRkgoMqhoowCiAl/s16QaTn4DoIF1QC4YsT7Mg== +web3-utils@1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.9.tgz#abe11735221627da943971ef1a630868fb9c61f3" + integrity sha512-9hcpuis3n/LxFzEVjwnVgvJzTirS2S9/MiNAa7l4WOEoywY+BSNwnRX4MuHnjkh9NY25B6QOjuNG6FNnSjTw1w== dependencies: bn.js "4.11.8" eth-lib "0.2.7" @@ -11229,10 +10125,10 @@ web3-utils@1.2.6: underscore "1.9.1" utf8 "3.0.0" -web3-utils@^1.0.0-beta.31: - version "1.2.11" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.11.tgz#af1942aead3fb166ae851a985bed8ef2c2d95a82" - integrity sha512-3Tq09izhD+ThqHEaWYX4VOT7dNPdZiO+c/1QMA0s5X2lDFKK/xHJb7cyTRRVzN2LvlHbR7baS1tmQhSua51TcQ== +web3-utils@^1.0.0-beta.31, web3-utils@^1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.3.2.tgz#3f6ac95704ba41f60062fd283e629015f5d359a9" + integrity sha512-00jr14EH/dYLjHqkt7l5VAj27IhRsn+I4b2OHvGXGG+8PT/HQTf3IxoYknHRE09kh+TmrTAT3mPurX/Q6+RVng== dependencies: bn.js "^4.11.9" eth-lib "0.2.8" @@ -11243,80 +10139,54 @@ web3-utils@^1.0.0-beta.31: underscore "1.9.1" utf8 "3.0.0" -web3@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.1.tgz#5d8158bcca47838ab8c2b784a2dee4c3ceb4179b" - integrity sha512-nNMzeCK0agb5i/oTWNdQ1aGtwYfXzHottFP2Dz0oGIzavPMGSKyVlr8ibVb1yK5sJBjrWVnTdGaOC2zKDFuFRw== - dependencies: - web3-bzz "1.2.1" - web3-core "1.2.1" - web3-eth "1.2.1" - web3-eth-personal "1.2.1" - web3-net "1.2.1" - web3-shh "1.2.1" - web3-utils "1.2.1" - -web3@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.2.tgz#b1b8b69aafdf94cbaeadbb68a8aa1df2ef266aec" - integrity sha512-/ChbmB6qZpfGx6eNpczt5YSUBHEA5V2+iUCbn85EVb3Zv6FVxrOo5Tv7Lw0gE2tW7EEjASbCyp3mZeiZaCCngg== - dependencies: - "@types/node" "^12.6.1" - web3-bzz "1.2.2" - web3-core "1.2.2" - web3-eth "1.2.2" - web3-eth-personal "1.2.2" - web3-net "1.2.2" - web3-shh "1.2.2" - web3-utils "1.2.2" - -web3@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.4.tgz#6e7ab799eefc9b4648c2dab63003f704a1d5e7d9" - integrity sha512-xPXGe+w0x0t88Wj+s/dmAdASr3O9wmA9mpZRtixGZxmBexAF0MjfqYM+MS4tVl5s11hMTN3AZb8cDD4VLfC57A== - dependencies: - "@types/node" "^12.6.1" - web3-bzz "1.2.4" - web3-core "1.2.4" - web3-eth "1.2.4" - web3-eth-personal "1.2.4" - web3-net "1.2.4" - web3-shh "1.2.4" - web3-utils "1.2.4" - -web3@1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.6.tgz#c497dcb14cdd8d6d9fb6b445b3b68ff83f8ccf68" - integrity sha512-tpu9fLIComgxGrFsD8LUtA4s4aCZk7px8UfcdEy6kS2uDi/ZfR07KJqpXZMij7Jvlq+cQrTAhsPSiBVvoMaivA== - dependencies: - "@types/node" "^12.6.1" - web3-bzz "1.2.6" - web3-core "1.2.6" - web3-eth "1.2.6" - web3-eth-personal "1.2.6" - web3-net "1.2.6" - web3-shh "1.2.6" - web3-utils "1.2.6" - -websocket@1.0.29: - version "1.0.29" - resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.29.tgz#3f83e49d3279657c58b02a22d90749c806101b98" - integrity sha512-WhU8jKXC8sTh6ocLSqpZRlOKMNYGwUvjA5+XcIgIk/G3JCaDfkZUr0zA19sVSxJ0TEvm0i5IBzr54RZC4vzW7g== - dependencies: +web3@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.11.tgz#50f458b2e8b11aa37302071c170ed61cff332975" + integrity sha512-mjQ8HeU41G6hgOYm1pmeH0mRAeNKJGnJEUzDMoerkpw7QUQT4exVREgF1MYPvL/z6vAshOXei25LE/t/Bxl8yQ== + dependencies: + web3-bzz "1.2.11" + web3-core "1.2.11" + web3-eth "1.2.11" + web3-eth-personal "1.2.11" + web3-net "1.2.11" + web3-shh "1.2.11" + web3-utils "1.2.11" + +web3@1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.9.tgz#cbcf1c0fba5e213a6dfb1f2c1f4b37062e4ce337" + integrity sha512-Mo5aBRm0JrcNpN/g4VOrDzudymfOnHRC3s2VarhYxRA8aWgF5rnhQ0ziySaugpic1gksbXPe105pUWyRqw8HUA== + dependencies: + web3-bzz "1.2.9" + web3-core "1.2.9" + web3-eth "1.2.9" + web3-eth-personal "1.2.9" + web3-net "1.2.9" + web3-shh "1.2.9" + web3-utils "1.2.9" + +websocket@1.0.32: + version "1.0.32" + resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.32.tgz#1f16ddab3a21a2d929dec1687ab21cfdc6d3dbb1" + integrity sha512-i4yhcllSP4wrpoPMU2N0TQ/q0O94LRG/eUQjEAamRltjQ1oT1PFFKOG4i877OlJgCG8rw6LrrowJp+TYCEWF7Q== + dependencies: + bufferutil "^4.0.1" debug "^2.2.0" - gulp "^4.0.2" - nan "^2.11.0" + es5-ext "^0.10.50" typedarray-to-buffer "^3.1.5" + utf-8-validate "^5.0.2" yaeti "^0.0.6" -"websocket@github:web3-js/WebSocket-Node#polyfill/globalThis": - version "1.0.29" - resolved "https://codeload.github.com/web3-js/WebSocket-Node/tar.gz/ef5ea2f41daf4a2113b80c9223df884b4d56c400" +websocket@^1.0.31: + version "1.0.33" + resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.33.tgz#407f763fc58e74a3fa41ca3ae5d78d3f5e3b82a5" + integrity sha512-XwNqM2rN5eh3G2CUQE3OHZj+0xfdH42+OFK6LdC2yqiC0YU8e5UK0nYre220T0IyyN031V/XOvtHvXozvJYFWA== dependencies: + bufferutil "^4.0.1" debug "^2.2.0" es5-ext "^0.10.50" - nan "^2.14.0" typedarray-to-buffer "^3.1.5" + utf-8-validate "^5.0.2" yaeti "^0.0.6" whatwg-fetch@2.0.4: @@ -11334,7 +10204,7 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@1.3.1, which@^1.1.1, which@^1.2.14, which@^1.2.9, which@^1.3.1: +which@1.3.1, which@^1.1.1, which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -11355,6 +10225,13 @@ wide-align@1.1.3: dependencies: string-width "^1.0.2 || 2" +wif@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/wif/-/wif-2.0.6.tgz#08d3f52056c66679299726fade0d432ae74b4704" + integrity sha1-CNP1IFbGZnkplyb63g1DKudLRwQ= + dependencies: + bs58check "<3.0.0" + window-size@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" @@ -11370,10 +10247,10 @@ wordwrap@^1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= -workerpool@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.0.0.tgz#85aad67fa1a2c8ef9386a1b43539900f61d03d58" - integrity sha512-fU2OcNA/GVAJLLyKUoHkAgIhKb0JoCpSjLC/G2vYKxUjVmQwGbRVeoPJ1a8U4pnVofz4AQV5Y/NEw8oKqxEBtA== +workerpool@6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.0.2.tgz#e241b43d8d033f1beb52c7851069456039d1d438" + integrity sha512-DSNyvOpFKrNusaaUwk+ej6cBj1bmhLcBfj80elGk+ZIo5JSkq+unB1dLKEOcNfJDZgjGICfhQ0Q5TbP0PvF4+Q== wrap-ansi@^2.0.0: version "2.1.0" @@ -11426,9 +10303,9 @@ ws@^5.1.1: async-limiter "~1.0.0" ws@^7.2.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8" - integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA== + version "7.4.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.2.tgz#782100048e54eb36fe9843363ab1c68672b261dd" + integrity sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA== xhr-request-promise@^0.1.2: version "0.1.3" @@ -11437,7 +10314,7 @@ xhr-request-promise@^0.1.2: dependencies: xhr-request "^1.1.0" -xhr-request@^1.1.0: +xhr-request@^1.0.1, xhr-request@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/xhr-request/-/xhr-request-1.1.0.tgz#f4a7c1868b9f198723444d82dcae317643f2e2ed" integrity sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA== @@ -11458,11 +10335,11 @@ xhr2-cookies@1.1.0: cookiejar "^2.1.1" xhr@^2.0.4, xhr@^2.2.0, xhr@^2.3.3: - version "2.5.0" - resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.5.0.tgz#bed8d1676d5ca36108667692b74b316c496e49dd" - integrity sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ== + version "2.6.0" + resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d" + integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA== dependencies: - global "~4.3.0" + global "~4.4.0" is-function "^1.0.1" parse-headers "^2.0.0" xtend "^4.0.0" @@ -11485,14 +10362,14 @@ xtend@~2.1.1: object-keys "~0.4.0" y18n@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" - integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= + version "3.2.2" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696" + integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ== y18n@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + version "4.0.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" + integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== yaeti@^0.0.6: version "0.0.6" @@ -11504,6 +10381,11 @@ yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + yargs-parser@13.1.2, yargs-parser@^13.1.0, yargs-parser@^13.1.2: version "13.1.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" @@ -11512,22 +10394,6 @@ yargs-parser@13.1.2, yargs-parser@^13.1.0, yargs-parser@^13.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@5.0.0-security.0: - version "5.0.0-security.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0-security.0.tgz#4ff7271d25f90ac15643b86076a2ab499ec9ee24" - integrity sha512-T69y4Ps64LNesYxeYGYPvfoMTt/7y1XtfpIslUeK4um+9Hu7hlGoRtaDLvdXb7+/tfq4opVa2HRY5xGip022rQ== - dependencies: - camelcase "^3.0.0" - object.assign "^4.1.0" - -yargs-parser@^15.0.1: - version "15.0.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.1.tgz#54786af40b820dcb2fb8025b11b4d659d76323b3" - integrity sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - yargs-parser@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" @@ -11545,16 +10411,15 @@ yargs-unparser@1.6.0: lodash "^4.17.15" yargs "^13.3.0" -yargs-unparser@1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.1.tgz#bd4b0ee05b4c94d058929c32cb09e3fce71d3c5f" - integrity sha512-qZV14lK9MWsGCmcr7u5oXGH0dbGqZAIxTDrWXZDo5zUr6b6iUmelNKO6x6R1dQT24AH3LgRxJpr8meWy2unolA== +yargs-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== dependencies: - camelcase "^5.3.1" - decamelize "^1.2.0" - flat "^4.1.0" - is-plain-obj "^1.1.0" - yargs "^14.2.3" + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" yargs@13.2.4: version "13.2.4" @@ -11589,23 +10454,6 @@ yargs@13.3.2, yargs@^13.3.0: y18n "^4.0.0" yargs-parser "^13.1.2" -yargs@^14.2.3: - version "14.2.3" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414" - integrity sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg== - dependencies: - cliui "^5.0.0" - decamelize "^1.2.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^15.0.1" - yargs@^4.7.1: version "4.8.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" @@ -11626,25 +10474,6 @@ yargs@^4.7.1: y18n "^3.2.1" yargs-parser "^2.4.1" -yargs@^7.1.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.1.tgz#67f0ef52e228d4ee0d6311acede8850f53464df6" - integrity sha512-huO4Fr1f9PmiJJdll5kwoS2e4GqzGSsMT3PPMpOwoVkOK8ckqAewMTZyA6LXVQWflleb/Z8oPBEvNsMft0XE+g== - dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - y18n "^3.2.1" - yargs-parser "5.0.0-security.0" - yauzl@^2.4.2: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" @@ -11652,3 +10481,8 @@ yauzl@^2.4.2: dependencies: buffer-crc32 "~0.2.3" fd-slicer "~1.1.0" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==