UNPKG

@defi-wonderland/keep3r-v2

Version:

The Keep3r Network is a decentralized network for projects that need external devops, and for external teams to find keeper jobs

294 lines (293 loc) 10.9 kB
<!doctype html> <html lang="en"> <head> <title>Code coverage report for contracts/peripherals/jobs/Keep3rJobMigration.sol</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../prettify.css" /> <link rel="stylesheet" href="../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../index.html">all files</a> / <a href="index.html">contracts/peripherals/jobs/</a> Keep3rJobMigration.sol </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Statements</span> <span class='fraction'>0/24</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Branches</span> <span class='fraction'>0/8</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Functions</span> <span class='fraction'>0/2</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Lines</span> <span class='fraction'>0/32</span> </div> </div> </div> <div class='status-line low'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">// SPDX-License-Identifier: MIT pragma solidity &gt;=0.8.4 &lt;0.9.0; &nbsp; import '../../../interfaces/peripherals/IKeep3rJobs.sol'; import './Keep3rJobFundableCredits.sol'; import './Keep3rJobFundableLiquidity.sol'; &nbsp; abstract contract Keep3rJobMigration is IKeep3rJobMigration, Keep3rJobFundableCredits, Keep3rJobFundableLiquidity { using EnumerableSet for EnumerableSet.AddressSet; &nbsp; uint256 internal constant _MIGRATION_COOLDOWN = 1 minutes; &nbsp; /// @inheritdoc IKeep3rJobMigration mapping(address =&gt; address) public override pendingJobMigrations; mapping(address =&gt; mapping(address =&gt; uint256)) internal _migrationCreatedAt; &nbsp; /// @inheritdoc IKeep3rJobMigration <span class="fstat-no" title="function not covered" > function migrateJob(address _fromJob, address _toJob) external override onlyJobOwner(_fromJob) {</span> <span class="cstat-no" title="statement not covered" > if (_fromJob == _toJob) revert JobMigrationImpossible();</span> &nbsp; <span class="cstat-no" title="statement not covered" > pendingJobMigrations[_fromJob] = _toJob</span>; <span class="cstat-no" title="statement not covered" > _migrationCreatedAt[_fromJob][_toJob] = block.timestamp</span>; &nbsp; <span class="cstat-no" title="statement not covered" > emit JobMigrationRequested(_fromJob, _toJob);</span> } &nbsp; /// @inheritdoc IKeep3rJobMigration <span class="fstat-no" title="function not covered" > function acceptJobMigration(address _fromJob, address _toJob) external override onlyJobOwner(_toJob) {</span> <span class="cstat-no" title="statement not covered" > if (disputes[_fromJob] || disputes[_toJob]) revert JobDisputed();</span> <span class="cstat-no" title="statement not covered" > if (pendingJobMigrations[_fromJob] != _toJob) revert JobMigrationUnavailable();</span> <span class="cstat-no" title="statement not covered" > if (block.timestamp &lt; _migrationCreatedAt[_fromJob][_toJob] + _MIGRATION_COOLDOWN) revert JobMigrationLocked();</span> &nbsp; // force job credits update for both jobs <span class="cstat-no" title="statement not covered" > _settleJobAccountance(_fromJob)</span>; <span class="cstat-no" title="statement not covered" > _settleJobAccountance(_toJob)</span>; &nbsp; // migrate tokens <span class="cstat-no" title="statement not covered" > while (_jobTokens[_fromJob].length() &gt; 0) {</span> <span class="cstat-no" title="statement not covered" > address _tokenToMigrate = _jobTokens[_fromJob].at(0);</span> <span class="cstat-no" title="statement not covered" > jobTokenCredits[_toJob][_tokenToMigrate] += jobTokenCredits[_fromJob][_tokenToMigrate]</span>; <span class="cstat-no" title="statement not covered" > jobTokenCredits[_fromJob][_tokenToMigrate] = 0</span>; <span class="cstat-no" title="statement not covered" > _jobTokens[_fromJob].remove(_tokenToMigrate)</span>; <span class="cstat-no" title="statement not covered" > _jobTokens[_toJob].add(_tokenToMigrate)</span>; } &nbsp; // migrate liquidities <span class="cstat-no" title="statement not covered" > while (_jobLiquidities[_fromJob].length() &gt; 0) {</span> <span class="cstat-no" title="statement not covered" > address _liquidity = _jobLiquidities[_fromJob].at(0);</span> &nbsp; <span class="cstat-no" title="statement not covered" > liquidityAmount[_toJob][_liquidity] += liquidityAmount[_fromJob][_liquidity]</span>; delete liquidityAmount[_fromJob][_liquidity]; &nbsp; <span class="cstat-no" title="statement not covered" > _jobLiquidities[_toJob].add(_liquidity)</span>; <span class="cstat-no" title="statement not covered" > _jobLiquidities[_fromJob].remove(_liquidity)</span>; } &nbsp; // migrate job balances <span class="cstat-no" title="statement not covered" > _jobPeriodCredits[_toJob] += _jobPeriodCredits[_fromJob]</span>; delete _jobPeriodCredits[_fromJob]; &nbsp; <span class="cstat-no" title="statement not covered" > _jobLiquidityCredits[_toJob] += _jobLiquidityCredits[_fromJob]</span>; delete _jobLiquidityCredits[_fromJob]; &nbsp; // stop _fromJob from being a job delete rewardedAt[_fromJob]; <span class="cstat-no" title="statement not covered" > _jobs.remove(_fromJob)</span>; &nbsp; // delete unused data slots delete jobOwner[_fromJob]; delete jobPendingOwner[_fromJob]; delete _migrationCreatedAt[_fromJob][_toJob]; delete pendingJobMigrations[_fromJob]; &nbsp; <span class="cstat-no" title="statement not covered" > emit JobMigrationSuccessful(_fromJob, _toJob);</span> } } &nbsp;</pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Fri May 20 2022 12:16:04 GMT+0200 (Central European Summer Time) </div> </div> <script src="../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../sorter.js"></script> </body> </html>