8766 lines
413 KiB
HTML
8766 lines
413 KiB
HTML
<!DOCTYPE HTML>
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
|
<style>
|
|
.AlignLeft { text-align: left; }
|
|
.AlignCenter { text-align: center; }
|
|
.AlignRight { text-align: right; }
|
|
body { font-family: sans-serif; font-size: 11pt; }
|
|
img.AutoScale { max-width: 100%; max-height: 100%; }
|
|
td { vertical-align: top; padding-left: 4px; padding-right: 4px; }
|
|
|
|
tr.SectionGap td { font-size: 4px; border-left: none; border-top: none; border-bottom: 1px solid Black; border-right: 1px solid Black; }
|
|
tr.SectionAll td { border-left: none; border-top: none; border-bottom: 1px solid Black; border-right: 1px solid Black; }
|
|
tr.SectionBegin td { border-left: none; border-top: none; border-right: 1px solid Black; }
|
|
tr.SectionEnd td { border-left: none; border-top: none; border-bottom: 1px solid Black; border-right: 1px solid Black; }
|
|
tr.SectionMiddle td { border-left: none; border-top: none; border-right: 1px solid Black; }
|
|
tr.SubsectionAll td { border-left: none; border-top: none; border-bottom: 1px solid Gray; border-right: 1px solid Black; }
|
|
tr.SubsectionEnd td { border-left: none; border-top: none; border-bottom: 1px solid Gray; border-right: 1px solid Black; }
|
|
table.fc { border-top: 1px solid Black; border-left: 1px solid Black; width: 100%; font-family: monospace; font-size: 10pt; }
|
|
td.TextItemInsigMod { color: #000000; background-color: #EEEEFF; }
|
|
td.TextItemInsigOrphan { color: #000000; background-color: #FAEEFF; }
|
|
td.TextItemNum { color: #696969; background-color: #ECECEC; }
|
|
td.TextItemSame { color: #000000; background-color: #FFFFFF; }
|
|
td.TextItemSigMod { color: #000000; background-color: #FFE3E3; }
|
|
td.TextItemSigOrphan { color: #000000; background-color: #F1E3FF; }
|
|
.TextSegInsigDiff { color: #0000FF; }
|
|
.TextSegReplacedDiff { color: #0000FF; font-style: italic; }
|
|
.TextSegSigDiff { color: #FF0000; }
|
|
td.TextItemInsigAdd { color: #000000; background-color: #EEEEFF; }
|
|
td.TextItemInsigDel { color: #000000; background-color: #EEEEFF; text-decoration: line-through; }
|
|
td.TextItemSigAdd { color: #000000; background-color: #FFE3E3; }
|
|
td.TextItemSigDel { color: #000000; background-color: #FFE3E3; text-decoration: line-through; }
|
|
</style>
|
|
<title>cpV2-diff</title>
|
|
</head>
|
|
<body>
|
|
cpV2-diff<br>
|
|
已产生: 2021/12/5 上午10:56:57<br>
|
|
|
|
<br>
|
|
模式: 全部
|
|
<br>
|
|
文件:
|
|
<br>
|
|
<table class="fc" cellspacing="0" cellpadding="0">
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter">-+</td>
|
|
<td class="TextItemSigMod"><span class="TextSegSigDiff">/**</span></td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">*Submitted</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">for</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">verification</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">at</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">BscScan.com</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">on</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">2021-03-14</span></td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSigMod"><span class="TextSegSigDiff">*/</span></td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemInsigMod"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame">// File: contracts/lib/SafeMath.sol</td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame">// File: contracts/lib/SafeMath.sol</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">/*</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">/*</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> Copyright 2020 DODO ZOO.</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> Copyright 2020 DODO ZOO.</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> SPDX-License-Identifier: Apache-2.0</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> SPDX-License-Identifier: Apache-2.0</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">*/</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">*/</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">pragma solidity 0.6.9;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">pragma solidity 0.6.9;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">pragma experimental ABIEncoderV2;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">pragma experimental ABIEncoderV2;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">/**</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">/**</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @title SafeMath</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @title SafeMath</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @author DODO Breeder</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @author DODO Breeder</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> *</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> *</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @notice Math operations with safety checks that revert on error</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @notice Math operations with safety checks that revert on error</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> */</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> */</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">library SafeMath {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">library SafeMath {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function mul(uint256 a, uint256 b) internal pure returns (uint256) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function mul(uint256 a, uint256 b) internal pure returns (uint256) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> if (a == 0) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> if (a == 0) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return 0;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return 0;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 c = a * b;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 c = a * b;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> require(c / a == b, "MUL_ERROR");</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> require(c / a == b, "MUL_ERROR");</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return c;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return c;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function div(uint256 a, uint256 b) internal pure returns (uint256) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function div(uint256 a, uint256 b) internal pure returns (uint256) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> require(b > 0, "DIVIDING_ERROR");</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> require(b > 0, "DIVIDING_ERROR");</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return a / b;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return a / b;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function divCeil(uint256 a, uint256 b) internal pure returns (uint256) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function divCeil(uint256 a, uint256 b) internal pure returns (uint256) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 quotient = div(a, b);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 quotient = div(a, b);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 remainder = a - quotient * b;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 remainder = a - quotient * b;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> if (remainder > 0) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> if (remainder > 0) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return quotient + 1;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return quotient + 1;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> } else {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> } else {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return quotient;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return quotient;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function sub(uint256 a, uint256 b) internal pure returns (uint256) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function sub(uint256 a, uint256 b) internal pure returns (uint256) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> require(b <= a, "SUB_ERROR");</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> require(b <= a, "SUB_ERROR");</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return a - b;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return a - b;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function add(uint256 a, uint256 b) internal pure returns (uint256) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function add(uint256 a, uint256 b) internal pure returns (uint256) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 c = a + b;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 c = a + b;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> require(c >= a, "ADD_ERROR");</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> require(c >= a, "ADD_ERROR");</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return c;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return c;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function sqrt(uint256 x) internal pure returns (uint256 y) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function sqrt(uint256 x) internal pure returns (uint256 y) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 z = x / 2 + 1;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 z = x / 2 + 1;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> y = x;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> y = x;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> while (z < y) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> while (z < y) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> y = z;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> y = z;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> z = (x / z + z) / 2;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> z = (x / z + z) / 2;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">}</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">}</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">// File: contracts/lib/DecimalMath.sol</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">// File: contracts/lib/DecimalMath.sol</td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionAll">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter">-+</td>
|
|
<td class="TextItemInsigMod"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame">/**</td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame">/**</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @title DecimalMath</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @title DecimalMath</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @author DODO Breeder</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @author DODO Breeder</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> *</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> *</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @notice Functions for fixed point number with 18 decimals</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @notice Functions for fixed point number with 18 decimals</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> */</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> */</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">library DecimalMath {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">library DecimalMath {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> using SafeMath for uint256;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> using SafeMath for uint256;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 internal constant ONE = 10**18;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 internal constant ONE = 10**18;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 internal constant ONE2 = 10**36;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 internal constant ONE2 = 10**36;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function mulFloor(uint256 target, uint256 d) internal pure returns (uint256) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function mulFloor(uint256 target, uint256 d) internal pure returns (uint256) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return target.mul(d) / (10**18);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return target.mul(d) / (10**18);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function mulCeil(uint256 target, uint256 d) internal pure returns (uint256) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function mulCeil(uint256 target, uint256 d) internal pure returns (uint256) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return target.mul(d).divCeil(10**18);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return target.mul(d).divCeil(10**18);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function divFloor(uint256 target, uint256 d) internal pure returns (uint256) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function divFloor(uint256 target, uint256 d) internal pure returns (uint256) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return target.mul(10**18).div(d);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return target.mul(10**18).div(d);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function divCeil(uint256 target, uint256 d) internal pure returns (uint256) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function divCeil(uint256 target, uint256 d) internal pure returns (uint256) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return target.mul(10**18).divCeil(d);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return target.mul(10**18).divCeil(d);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function reciprocalFloor(uint256 target) internal pure returns (uint256) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function reciprocalFloor(uint256 target) internal pure returns (uint256) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return uint256(10**36).div(target);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return uint256(10**36).div(target);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function reciprocalCeil(uint256 target) internal pure returns (uint256) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function reciprocalCeil(uint256 target) internal pure returns (uint256) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return uint256(10**36).divCeil(target);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return uint256(10**36).divCeil(target);</td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemInsigMod"> </td>
|
|
<td class="AlignCenter">+-</td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">function</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">powFloor(uint256</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">target,</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">uint256</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">e)</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">internal</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">pure</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">returns</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">(uint256)</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">{</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">if</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">(e</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">==</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">0)</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">{</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">return</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">10</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">**</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">18;</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">}</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">else</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">if</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">(e</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">==</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">1)</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">{</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">return</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">target;</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">}</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">else</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">{</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">uint</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">p</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">=</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">powFloor(target,</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">e.div(2));</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">p</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">=</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">p.mul(p)</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">/</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">(10**18);</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">if</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">(e</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">%</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">2</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">==</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">1)</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">{</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">p</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">=</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">p.mul(target)</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">/</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">(10**18);</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">}</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">return</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">p;</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">}</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">}</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame">}</td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame">}</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">// File: contracts/lib/Ownable.sol</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">// File: contracts/lib/Ownable.sol</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">/**</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">/**</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @title Ownable</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @title Ownable</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @author DODO Breeder</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @author DODO Breeder</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> *</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> *</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @notice Ownership related functions</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @notice Ownership related functions</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> */</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> */</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">contract Ownable {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">contract Ownable {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address public _OWNER_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address public _OWNER_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address public _NEW_OWNER_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address public _NEW_OWNER_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // ============ Events ============</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // ============ Events ============</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> event OwnershipTransferPrepared(address indexed previousOwner, address indexed newOwner);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> event OwnershipTransferPrepared(address indexed previousOwner, address indexed newOwner);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // ============ Modifiers ============</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // ============ Modifiers ============</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> modifier onlyOwner() {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> modifier onlyOwner() {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> require(msg.sender == _OWNER_, "NOT_OWNER");</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> require(msg.sender == _OWNER_, "NOT_OWNER");</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // ============ Functions ============</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // ============ Functions ============</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> constructor() internal {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> constructor() internal {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _OWNER_ = msg.sender;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _OWNER_ = msg.sender;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> emit OwnershipTransferred(address(0), _OWNER_);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> emit OwnershipTransferred(address(0), _OWNER_);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionAll">
|
|
<td class="TextItemSigMod"> function transferOwnership(address newOwner) external <span class="TextSegSigDiff">virtual</span><span class="TextSegInsigDiff"> </span>onlyOwner {</td>
|
|
<td class="AlignCenter"><></td>
|
|
<td class="TextItemSigMod"> function transferOwnership(address newOwner) external onlyOwner {</td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame"> emit OwnershipTransferPrepared(_OWNER_, newOwner);</td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame"> emit OwnershipTransferPrepared(_OWNER_, newOwner);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _NEW_OWNER_ = newOwner;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _NEW_OWNER_ = newOwner;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function claimOwnership() external {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function claimOwnership() external {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> require(msg.sender == _NEW_OWNER_, "INVALID_CLAIM");</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> require(msg.sender == _NEW_OWNER_, "INVALID_CLAIM");</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> emit OwnershipTransferred(_OWNER_, _NEW_OWNER_);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> emit OwnershipTransferred(_OWNER_, _NEW_OWNER_);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _OWNER_ = _NEW_OWNER_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _OWNER_ = _NEW_OWNER_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _NEW_OWNER_ = address(0);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _NEW_OWNER_ = address(0);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">}</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">}</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">// File: contracts/intf/IERC20.sol</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">// File: contracts/intf/IERC20.sol</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">/**</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">/**</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @dev Interface of the ERC20 standard as defined in the EIP.</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @dev Interface of the ERC20 standard as defined in the EIP.</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> */</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> */</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">interface IERC20 {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">interface IERC20 {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> /**</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> /**</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @dev Returns the amount of tokens in existence.</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @dev Returns the amount of tokens in existence.</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> */</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> */</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function totalSupply() external view returns (uint256);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function totalSupply() external view returns (uint256);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function decimals() external view returns (uint8);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function decimals() external view returns (uint8);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function name() external view returns (string memory);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function name() external view returns (string memory);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function symbol() external view returns (string memory);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function symbol() external view returns (string memory);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> /**</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> /**</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @dev Returns the amount of tokens owned by `account`.</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @dev Returns the amount of tokens owned by `account`.</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> */</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> */</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function balanceOf(address account) external view returns (uint256);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function balanceOf(address account) external view returns (uint256);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> /**</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> /**</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @dev Moves `amount` tokens from the caller's account to `recipient`.</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @dev Moves `amount` tokens from the caller's account to `recipient`.</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> *</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> *</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * Returns a boolean value indicating whether the operation succeeded.</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * Returns a boolean value indicating whether the operation succeeded.</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> *</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> *</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * Emits a {Transfer} event.</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * Emits a {Transfer} event.</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> */</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> */</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function transfer(address recipient, uint256 amount) external returns (bool);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function transfer(address recipient, uint256 amount) external returns (bool);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> /**</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> /**</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @dev Returns the remaining number of tokens that `spender` will be</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @dev Returns the remaining number of tokens that `spender` will be</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * allowed to spend on behalf of `owner` through {transferFrom}. This is</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * allowed to spend on behalf of `owner` through {transferFrom}. This is</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * zero by default.</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * zero by default.</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> *</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> *</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * This value changes when {approve} or {transferFrom} are called.</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * This value changes when {approve} or {transferFrom} are called.</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> */</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> */</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function allowance(address owner, address spender) external view returns (uint256);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function allowance(address owner, address spender) external view returns (uint256);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> /**</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> /**</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> *</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> *</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * Returns a boolean value indicating whether the operation succeeded.</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * Returns a boolean value indicating whether the operation succeeded.</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> *</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> *</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * IMPORTANT: Beware that changing an allowance with this method brings the risk</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * IMPORTANT: Beware that changing an allowance with this method brings the risk</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * that someone may use both the old and the new allowance by unfortunate</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * that someone may use both the old and the new allowance by unfortunate</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * transaction ordering. One possible solution to mitigate this race</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * transaction ordering. One possible solution to mitigate this race</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * condition is to first reduce the spender's allowance to 0 and set the</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * condition is to first reduce the spender's allowance to 0 and set the</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * desired value afterwards:</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * desired value afterwards:</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> *</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> *</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * Emits an {Approval} event.</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * Emits an {Approval} event.</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> */</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> */</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function approve(address spender, uint256 amount) external returns (bool);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function approve(address spender, uint256 amount) external returns (bool);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> /**</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> /**</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @dev Moves `amount` tokens from `sender` to `recipient` using the</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @dev Moves `amount` tokens from `sender` to `recipient` using the</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * allowance mechanism. `amount` is then deducted from the caller's</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * allowance mechanism. `amount` is then deducted from the caller's</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * allowance.</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * allowance.</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> *</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> *</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * Returns a boolean value indicating whether the operation succeeded.</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * Returns a boolean value indicating whether the operation succeeded.</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> *</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> *</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * Emits a {Transfer} event.</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * Emits a {Transfer} event.</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> */</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> */</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function transferFrom(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function transferFrom(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address sender,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address sender,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address recipient,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address recipient,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 amount</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 amount</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> ) external returns (bool);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> ) external returns (bool);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">}</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">}</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">// File: contracts/lib/SafeERC20.sol</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">// File: contracts/lib/SafeERC20.sol</td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionAll">
|
|
<td class="TextItemInsigMod"> </td>
|
|
<td class="AlignCenter">+-</td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame">/**</td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame">/**</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @title SafeERC20</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @title SafeERC20</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @dev Wrappers around ERC20 operations that throw on failure (when the token</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @dev Wrappers around ERC20 operations that throw on failure (when the token</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * contract returns false). Tokens that return no value (and instead revert or</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * contract returns false). Tokens that return no value (and instead revert or</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * throw on failure) are also supported, non-reverting calls are assumed to be</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * throw on failure) are also supported, non-reverting calls are assumed to be</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * successful.</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * successful.</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> */</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> */</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">library SafeERC20 {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">library SafeERC20 {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> using SafeMath for uint256;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> using SafeMath for uint256;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function safeTransfer(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function safeTransfer(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> IERC20 token,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> IERC20 token,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address to,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address to,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 value</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 value</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> ) internal {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> ) internal {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function safeTransferFrom(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function safeTransferFrom(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> IERC20 token,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> IERC20 token,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address from,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address from,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address to,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address to,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 value</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 value</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> ) internal {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> ) internal {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _callOptionalReturn(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _callOptionalReturn(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> token,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> token,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> abi.encodeWithSelector(token.transferFrom.selector, from, to, value)</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> abi.encodeWithSelector(token.transferFrom.selector, from, to, value)</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> );</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> );</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function safeApprove(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function safeApprove(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> IERC20 token,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> IERC20 token,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address spender,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address spender,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 value</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 value</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> ) internal {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> ) internal {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // safeApprove should only be called when setting an initial allowance,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // safeApprove should only be called when setting an initial allowance,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // or when resetting it to zero. To increase and decrease it, use</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // or when resetting it to zero. To increase and decrease it, use</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // solhint-disable-next-line max-line-length</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // solhint-disable-next-line max-line-length</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> require(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> require(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> (value == 0) || (token.allowance(address(this), spender) == 0),</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> (value == 0) || (token.allowance(address(this), spender) == 0),</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> "SafeERC20: approve from non-zero to non-zero allowance"</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> "SafeERC20: approve from non-zero to non-zero allowance"</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> );</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> );</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> /**</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> /**</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * on the return value: the return value is optional (but if data is returned, it must not be false).</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * on the return value: the return value is optional (but if data is returned, it must not be false).</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @param token The token targeted by the call.</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @param token The token targeted by the call.</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @param data The call data (encoded using abi.encode or one of its variants).</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @param data The call data (encoded using abi.encode or one of its variants).</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> */</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> */</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function _callOptionalReturn(IERC20 token, bytes memory data) private {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function _callOptionalReturn(IERC20 token, bytes memory data) private {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // we're implementing it ourselves.</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // we're implementing it ourselves.</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // A Solidity high level call has three parts:</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // A Solidity high level call has three parts:</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // 1. The target address is checked to verify it contains contract code</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // 1. The target address is checked to verify it contains contract code</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // 2. The call itself is made, and success asserted</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // 2. The call itself is made, and success asserted</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // 3. The return value is decoded, which in turn checks the size of the returned data.</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // 3. The return value is decoded, which in turn checks the size of the returned data.</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // solhint-disable-next-line max-line-length</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // solhint-disable-next-line max-line-length</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // solhint-disable-next-line avoid-low-level-calls</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // solhint-disable-next-line avoid-low-level-calls</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> (bool success, bytes memory returndata) = address(token).call(data);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> (bool success, bytes memory returndata) = address(token).call(data);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> require(success, "SafeERC20: low-level call failed");</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> require(success, "SafeERC20: low-level call failed");</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> if (returndata.length > 0) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> if (returndata.length > 0) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // Return data is optional</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // Return data is optional</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // solhint-disable-next-line max-line-length</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // solhint-disable-next-line max-line-length</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">}</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">}</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">// File: contracts/DODOVendingMachine/intf/IDVM.sol</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">// File: contracts/DODOVendingMachine/intf/IDVM.sol</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">interface IDVM {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">interface IDVM {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function init(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function init(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address maintainer,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address maintainer,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address baseTokenAddress,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address baseTokenAddress,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address quoteTokenAddress,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address quoteTokenAddress,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 lpFeeRate,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 lpFeeRate,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address mtFeeRateModel,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address mtFeeRateModel,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 i,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 i,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 k,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 k,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> bool isOpenTWAP</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> bool isOpenTWAP</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> ) external;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> ) external;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function _BASE_TOKEN_() external returns (address);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function _BASE_TOKEN_() external returns (address);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function _QUOTE_TOKEN_() external returns (address);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function _QUOTE_TOKEN_() external returns (address);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function _MT_FEE_RATE_MODEL_() external returns (address);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function _MT_FEE_RATE_MODEL_() external returns (address);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function getVaultReserve() external returns (uint256 baseReserve, uint256 quoteReserve);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function getVaultReserve() external returns (uint256 baseReserve, uint256 quoteReserve);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function sellBase(address to) external returns (uint256);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function sellBase(address to) external returns (uint256);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function sellQuote(address to) external returns (uint256);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function sellQuote(address to) external returns (uint256);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function buyShares(address to) external returns (uint256,uint256,uint256);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function buyShares(address to) external returns (uint256,uint256,uint256);</td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">function</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">addressToShortString(address</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">_addr)</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">external</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">pure</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">returns</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">(string</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">memory);</span></td>
|
|
<td class="AlignCenter">+-</td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemInsigMod"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">function</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">getMidPrice()</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">external</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">view</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">returns</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">(uint256</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">midPrice);</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemInsigMod"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">function</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">sellShares(</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">uint256</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">shareAmount,</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">address</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">to,</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">uint256</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">baseMinAmount,</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">uint256</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">quoteMinAmount,</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">bytes</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">calldata</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">data,</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">uint256</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">deadline</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">)</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">external</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">returns</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">(uint256</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">baseAmount,</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">uint256</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">quoteAmount);</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemInsigMod"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame">}</td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame">}</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">// File: contracts/lib/InitializableOwnable.sol</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">// File: contracts/lib/InitializableOwnable.sol</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">/**</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">/**</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @title Ownable</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @title Ownable</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @author DODO Breeder</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @author DODO Breeder</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> *</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> *</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @notice Ownership related functions</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @notice Ownership related functions</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> */</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> */</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">contract InitializableOwnable {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">contract InitializableOwnable {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address public _OWNER_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address public _OWNER_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address public _NEW_OWNER_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address public _NEW_OWNER_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> bool internal _INITIALIZED_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> bool internal _INITIALIZED_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // ============ Events ============</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // ============ Events ============</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> event OwnershipTransferPrepared(address indexed previousOwner, address indexed newOwner);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> event OwnershipTransferPrepared(address indexed previousOwner, address indexed newOwner);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // ============ Modifiers ============</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // ============ Modifiers ============</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> modifier notInitialized() {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> modifier notInitialized() {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> require(!_INITIALIZED_, "DODO_INITIALIZED");</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> require(!_INITIALIZED_, "DODO_INITIALIZED");</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> modifier onlyOwner() {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> modifier onlyOwner() {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> require(msg.sender == _OWNER_, "NOT_OWNER");</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> require(msg.sender == _OWNER_, "NOT_OWNER");</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // ============ Functions ============</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // ============ Functions ============</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function initOwner(address newOwner) public notInitialized {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function initOwner(address newOwner) public notInitialized {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _INITIALIZED_ = true;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _INITIALIZED_ = true;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _OWNER_ = newOwner;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _OWNER_ = newOwner;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function transferOwnership(address newOwner) public onlyOwner {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function transferOwnership(address newOwner) public onlyOwner {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> emit OwnershipTransferPrepared(_OWNER_, newOwner);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> emit OwnershipTransferPrepared(_OWNER_, newOwner);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _NEW_OWNER_ = newOwner;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _NEW_OWNER_ = newOwner;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function claimOwnership() public {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function claimOwnership() public {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> require(msg.sender == _NEW_OWNER_, "INVALID_CLAIM");</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> require(msg.sender == _NEW_OWNER_, "INVALID_CLAIM");</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> emit OwnershipTransferred(_OWNER_, _NEW_OWNER_);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> emit OwnershipTransferred(_OWNER_, _NEW_OWNER_);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _OWNER_ = _NEW_OWNER_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _OWNER_ = _NEW_OWNER_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _NEW_OWNER_ = address(0);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _NEW_OWNER_ = address(0);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">}</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">}</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">// File: contracts/lib/CloneFactory.sol</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">// File: contracts/lib/CloneFactory.sol</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">interface ICloneFactory {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">interface ICloneFactory {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function clone(address prototype) external returns (address proxy);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function clone(address prototype) external returns (address proxy);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">}</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">}</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">// introduction of proxy mode design: https://docs.openzeppelin.com/upgrades/2.8/</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">// introduction of proxy mode design: https://docs.openzeppelin.com/upgrades/2.8/</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">// minimum implementation of transparent proxy: https://eips.ethereum.org/EIPS/eip-1167</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">// minimum implementation of transparent proxy: https://eips.ethereum.org/EIPS/eip-1167</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">contract CloneFactory is ICloneFactory {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">contract CloneFactory is ICloneFactory {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function clone(address prototype) external override returns (address proxy) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function clone(address prototype) external override returns (address proxy) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> bytes20 targetBytes = bytes20(prototype);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> bytes20 targetBytes = bytes20(prototype);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> assembly {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> assembly {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> let clone := mload(0x40)</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> let clone := mload(0x40)</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> mstore(clone, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> mstore(clone, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> mstore(add(clone, 0x14), targetBytes)</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> mstore(add(clone, 0x14), targetBytes)</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> mstore(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> mstore(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> add(clone, 0x28),</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> add(clone, 0x28),</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> )</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> )</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> proxy := create(0, clone, 0x37)</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> proxy := create(0, clone, 0x37)</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return proxy;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return proxy;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">}</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">}</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">// File: contracts/Factory/DVMFactory.sol</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">// File: contracts/Factory/DVMFactory.sol</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter">-+</td>
|
|
<td class="TextItemInsigMod"> </td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemInsigMod"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame">interface IDVMFactory {</td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame">interface IDVMFactory {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function createDODOVendingMachine(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function createDODOVendingMachine(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address baseToken,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address baseToken,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address quoteToken,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address quoteToken,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 lpFeeRate,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 lpFeeRate,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 i,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 i,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 k,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 k,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> bool isOpenTWAP</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> bool isOpenTWAP</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> ) external returns (address newVendingMachine);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> ) external returns (address newVendingMachine);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">}</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">}</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">/**</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">/**</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @title DODO VendingMachine Factory</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @title DODO VendingMachine Factory</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @author DODO Breeder</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @author DODO Breeder</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> *</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> *</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @notice Create And Register DVM Pools </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @notice Create And Register DVM Pools </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> */</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> */</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">contract DVMFactory is InitializableOwnable {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">contract DVMFactory is InitializableOwnable {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // ============ Templates ============</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // ============ Templates ============</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> address public immutable _CLONE_FACTORY_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address public immutable _CLONE_FACTORY_;</td>
|
|
</tr>
|
|
<tr class="SectionAll">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter">-+</td>
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">address</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">public</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">immutable</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">_DEFAULT_MAINTAINER_;</span></td>
|
|
</tr>
|
|
<tr class="SectionAll">
|
|
<td class="TextItemSame"> address public immutable _DEFAULT_MT_FEE_RATE_MODEL_;</td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame"> address public immutable _DEFAULT_MT_FEE_RATE_MODEL_;</td>
|
|
</tr>
|
|
<tr class="SectionAll">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">address</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">public</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">_DEFAULT_MAINTAINER_;</span></td>
|
|
<td class="AlignCenter">+-</td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame"> address public _DVM_TEMPLATE_;</td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame"> address public _DVM_TEMPLATE_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // ============ Registry ============</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // ============ Registry ============</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // base -> quote -> DVM address list</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // base -> quote -> DVM address list</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> mapping(address => mapping(address => address[])) public _REGISTRY_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> mapping(address => mapping(address => address[])) public _REGISTRY_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // creator -> DVM address list</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // creator -> DVM address list</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> mapping(address => address[]) public _USER_REGISTRY_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> mapping(address => address[]) public _USER_REGISTRY_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // ============ Events ============</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // ============ Events ============</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> event NewDVM(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> event NewDVM(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address baseToken,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address baseToken,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address quoteToken,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address quoteToken,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address creator,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address creator,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address dvm</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address dvm</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> );</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> );</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> event RemoveDVM(address dvm);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> event RemoveDVM(address dvm);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // ============ Functions ============</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // ============ Functions ============</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> constructor(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> constructor(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address cloneFactory,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address cloneFactory,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address dvmTemplate,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address dvmTemplate,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address defaultMaintainer,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address defaultMaintainer,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address defaultMtFeeRateModel</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address defaultMtFeeRateModel</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> ) public {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> ) public {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _CLONE_FACTORY_ = cloneFactory;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _CLONE_FACTORY_ = cloneFactory;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _DVM_TEMPLATE_ = dvmTemplate;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _DVM_TEMPLATE_ = dvmTemplate;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _DEFAULT_MAINTAINER_ = defaultMaintainer;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _DEFAULT_MAINTAINER_ = defaultMaintainer;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _DEFAULT_MT_FEE_RATE_MODEL_ = defaultMtFeeRateModel;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _DEFAULT_MT_FEE_RATE_MODEL_ = defaultMtFeeRateModel;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function createDODOVendingMachine(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function createDODOVendingMachine(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address baseToken,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address baseToken,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address quoteToken,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address quoteToken,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 lpFeeRate,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 lpFeeRate,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 i,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 i,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 k,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 k,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> bool isOpenTWAP</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> bool isOpenTWAP</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> ) external returns (address newVendingMachine) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> ) external returns (address newVendingMachine) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> newVendingMachine = ICloneFactory(_CLONE_FACTORY_).clone(_DVM_TEMPLATE_);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> newVendingMachine = ICloneFactory(_CLONE_FACTORY_).clone(_DVM_TEMPLATE_);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> IDVM(newVendingMachine).init(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> IDVM(newVendingMachine).init(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _DEFAULT_MAINTAINER_,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _DEFAULT_MAINTAINER_,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> baseToken,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> baseToken,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> quoteToken,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> quoteToken,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> lpFeeRate,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> lpFeeRate,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _DEFAULT_MT_FEE_RATE_MODEL_,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _DEFAULT_MT_FEE_RATE_MODEL_,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> i,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> i,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> k,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> k,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> isOpenTWAP</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> isOpenTWAP</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> );</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> );</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _REGISTRY_[baseToken][quoteToken].push(newVendingMachine);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _REGISTRY_[baseToken][quoteToken].push(newVendingMachine);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _USER_REGISTRY_[tx.origin].push(newVendingMachine);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _USER_REGISTRY_[tx.origin].push(newVendingMachine);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> emit NewDVM(baseToken, quoteToken, tx.origin, newVendingMachine);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> emit NewDVM(baseToken, quoteToken, tx.origin, newVendingMachine);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // ============ Admin Operation Functions ============</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // ============ Admin Operation Functions ============</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function updateDvmTemplate(address _newDVMTemplate) external onlyOwner {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function updateDvmTemplate(address _newDVMTemplate) external onlyOwner {</td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> _DVM_TEMPLATE_ = _newDVMTemplate;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _DVM_TEMPLATE_ = _newDVMTemplate;</td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">}</span></td>
|
|
<td class="AlignCenter">+-</td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemInsigMod"><span class="TextSegInsigDiff"> </span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">function</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">updateDefaultMaintainer(address</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">_newMaintainer)</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">external</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">onlyOwner</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">{</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">_DEFAULT_MAINTAINER_</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">=</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">_newMaintainer;</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function addPoolByAdmin(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function addPoolByAdmin(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address creator,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address creator,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address baseToken, </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address baseToken, </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address quoteToken,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address quoteToken,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address pool</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address pool</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> ) external onlyOwner {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> ) external onlyOwner {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _REGISTRY_[baseToken][quoteToken].push(pool);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _REGISTRY_[baseToken][quoteToken].push(pool);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _USER_REGISTRY_[creator].push(pool);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _USER_REGISTRY_[creator].push(pool);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> emit NewDVM(baseToken, quoteToken, creator, pool);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> emit NewDVM(baseToken, quoteToken, creator, pool);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function removePoolByAdmin(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function removePoolByAdmin(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address creator,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address creator,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address baseToken, </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address baseToken, </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address quoteToken,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address quoteToken,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address pool</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address pool</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> ) external onlyOwner {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> ) external onlyOwner {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address[] memory registryList = _REGISTRY_[baseToken][quoteToken];</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address[] memory registryList = _REGISTRY_[baseToken][quoteToken];</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> for (uint256 i = 0; i < registryList.length; i++) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> for (uint256 i = 0; i < registryList.length; i++) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> if (registryList[i] == pool) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> if (registryList[i] == pool) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> registryList[i] = registryList[registryList.length - 1];</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> registryList[i] = registryList[registryList.length - 1];</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> break;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> break;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _REGISTRY_[baseToken][quoteToken] = registryList;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _REGISTRY_[baseToken][quoteToken] = registryList;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _REGISTRY_[baseToken][quoteToken].pop();</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _REGISTRY_[baseToken][quoteToken].pop();</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address[] memory userRegistryList = _USER_REGISTRY_[creator];</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address[] memory userRegistryList = _USER_REGISTRY_[creator];</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> for (uint256 i = 0; i < userRegistryList.length; i++) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> for (uint256 i = 0; i < userRegistryList.length; i++) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> if (userRegistryList[i] == pool) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> if (userRegistryList[i] == pool) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> userRegistryList[i] = userRegistryList[userRegistryList.length - 1];</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> userRegistryList[i] = userRegistryList[userRegistryList.length - 1];</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> break;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> break;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _USER_REGISTRY_[creator] = userRegistryList;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _USER_REGISTRY_[creator] = userRegistryList;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _USER_REGISTRY_[creator].pop();</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _USER_REGISTRY_[creator].pop();</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> emit RemoveDVM(pool);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> emit RemoveDVM(pool);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // ============ View Functions ============</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // ============ View Functions ============</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function getDODOPool(address baseToken, address quoteToken)</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function getDODOPool(address baseToken, address quoteToken)</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> external</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> external</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> view</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> view</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> returns (address[] memory machines)</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> returns (address[] memory machines)</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return _REGISTRY_[baseToken][quoteToken];</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return _REGISTRY_[baseToken][quoteToken];</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function getDODOPoolBidirection(address token0, address token1)</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function getDODOPoolBidirection(address token0, address token1)</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> external</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> external</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> view</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> view</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> returns (address[] memory baseToken0Machines, address[] memory baseToken1Machines)</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> returns (address[] memory baseToken0Machines, address[] memory baseToken1Machines)</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return (_REGISTRY_[token0][token1], _REGISTRY_[token1][token0]);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return (_REGISTRY_[token0][token1], _REGISTRY_[token1][token0]);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function getDODOPoolByUser(address user)</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function getDODOPoolByUser(address user)</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> external</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> external</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> view</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> view</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> returns (address[] memory machines)</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> returns (address[] memory machines)</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return _USER_REGISTRY_[user];</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return _USER_REGISTRY_[user];</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">}</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">}</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">// File: contracts/lib/ReentrancyGuard.sol</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">// File: contracts/lib/ReentrancyGuard.sol</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">/**</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">/**</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @title ReentrancyGuard</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @title ReentrancyGuard</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @author DODO Breeder</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @author DODO Breeder</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> *</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> *</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @notice Protect functions from Reentrancy Attack</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @notice Protect functions from Reentrancy Attack</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> */</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> */</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">contract ReentrancyGuard {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">contract ReentrancyGuard {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // https://solidity.readthedocs.io/en/latest/control-structures.html?highlight=zero-state#scoping-and-declarations</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // https://solidity.readthedocs.io/en/latest/control-structures.html?highlight=zero-state#scoping-and-declarations</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // zero-state of _ENTERED_ is false</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // zero-state of _ENTERED_ is false</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> bool private _ENTERED_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> bool private _ENTERED_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> modifier preventReentrant() {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> modifier preventReentrant() {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> require(!_ENTERED_, "REENTRANT");</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> require(!_ENTERED_, "REENTRANT");</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _ENTERED_ = true;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _ENTERED_ = true;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _ENTERED_ = false;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _ENTERED_ = false;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">}</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">}</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">// File: contracts/lib/PermissionManager.sol</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">// File: contracts/lib/PermissionManager.sol</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">interface IPermissionManager {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">interface IPermissionManager {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function initOwner(address) external;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function initOwner(address) external;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function isAllowed(address) external view returns (bool);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function isAllowed(address) external view returns (bool);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">}</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">}</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">contract PermissionManager is InitializableOwnable {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">contract PermissionManager is InitializableOwnable {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> bool public _WHITELIST_MODE_ON_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> bool public _WHITELIST_MODE_ON_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> mapping(address => bool) internal _whitelist_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> mapping(address => bool) internal _whitelist_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> mapping(address => bool) internal _blacklist_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> mapping(address => bool) internal _blacklist_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function isAllowed(address account) external view returns (bool) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function isAllowed(address account) external view returns (bool) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> if (_WHITELIST_MODE_ON_) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> if (_WHITELIST_MODE_ON_) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return _whitelist_[account];</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return _whitelist_[account];</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> } else {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> } else {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return !_blacklist_[account];</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return !_blacklist_[account];</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function openBlacklistMode() external onlyOwner {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function openBlacklistMode() external onlyOwner {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _WHITELIST_MODE_ON_ = false;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _WHITELIST_MODE_ON_ = false;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function openWhitelistMode() external onlyOwner {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function openWhitelistMode() external onlyOwner {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _WHITELIST_MODE_ON_ = true;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _WHITELIST_MODE_ON_ = true;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function addToWhitelist(address account) external onlyOwner {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function addToWhitelist(address account) external onlyOwner {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _whitelist_[account] = true;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _whitelist_[account] = true;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function removeFromWhitelist(address account) external onlyOwner {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function removeFromWhitelist(address account) external onlyOwner {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _whitelist_[account] = false;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _whitelist_[account] = false;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function addToBlacklist(address account) external onlyOwner {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function addToBlacklist(address account) external onlyOwner {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _blacklist_[account] = true;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _blacklist_[account] = true;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function removeFromBlacklist(address account) external onlyOwner {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function removeFromBlacklist(address account) external onlyOwner {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _blacklist_[account] = false;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _blacklist_[account] = false;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">}</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">}</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">// File: contracts/lib/FeeRateModel.sol</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">// File: contracts/lib/FeeRateModel.sol</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionAll">
|
|
<td class="TextItemInsigMod"> </td>
|
|
<td class="AlignCenter">+-</td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame">interface IFeeRateImpl {</td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame">interface IFeeRateImpl {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function getFeeRate(address pool, address trader) external view returns (uint256);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function getFeeRate(address pool, address trader) external view returns (uint256);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">}</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">}</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">interface IFeeRateModel {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">interface IFeeRateModel {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function getFeeRate(address trader) external view returns (uint256);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function getFeeRate(address trader) external view returns (uint256);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">}</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">}</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">contract FeeRateModel is InitializableOwnable {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">contract FeeRateModel is InitializableOwnable {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address public feeRateImpl;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address public feeRateImpl;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function setFeeProxy(address _feeRateImpl) public onlyOwner {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function setFeeProxy(address _feeRateImpl) public onlyOwner {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> feeRateImpl = _feeRateImpl;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> feeRateImpl = _feeRateImpl;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function getFeeRate(address trader) external view returns (uint256) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function getFeeRate(address trader) external view returns (uint256) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> if(feeRateImpl == address(0))</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> if(feeRateImpl == address(0))</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return 0;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return 0;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return IFeeRateImpl(feeRateImpl).getFeeRate(msg.sender,trader);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return IFeeRateImpl(feeRateImpl).getFeeRate(msg.sender,trader);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">}</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">}</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">// File: contracts/CrowdPooling/impl/CPStorage.sol</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">// File: contracts/CrowdPooling/impl/CPStorage.sol</td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemInsigMod"> </td>
|
|
<td class="AlignCenter">+-</td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemInsigMod"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame">contract CPStorage is InitializableOwnable, ReentrancyGuard {</td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame">contract CPStorage is InitializableOwnable, ReentrancyGuard {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> using SafeMath for uint256;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> using SafeMath for uint256;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // ============ Constant ============</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // ============ Constant ============</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 internal constant _SETTLEMENT_EXPIRE_ = 86400 * 7;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 internal constant _SETTLEMENT_EXPIRE_ = 86400 * 7;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 internal constant _SETTEL_FUND_ = 200 finney;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 internal constant _SETTEL_FUND_ = 200 finney;</td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> bool public _IS_OPEN_TWAP_ = false;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> bool public _IS_OPEN_TWAP_ = false;</td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">bool</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">public</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">_IS_OVERCAP_STOP</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">=</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">false;</span></td>
|
|
<td class="AlignCenter">+-</td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemInsigMod"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">bool</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">public</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">_FORCE_STOP_</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">=</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">false;</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // ============ Timeline ============</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // ============ Timeline ============</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 public _PHASE_BID_STARTTIME_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 public _PHASE_BID_STARTTIME_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 public _PHASE_BID_ENDTIME_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 public _PHASE_BID_ENDTIME_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 public _PHASE_CALM_ENDTIME_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 public _PHASE_CALM_ENDTIME_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 public _SETTLED_TIME_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 public _SETTLED_TIME_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> bool public _SETTLED_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> bool public _SETTLED_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // ============ Core Address ============</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // ============ Core Address ============</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> IERC20 public _BASE_TOKEN_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> IERC20 public _BASE_TOKEN_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> IERC20 public _QUOTE_TOKEN_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> IERC20 public _QUOTE_TOKEN_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // ============ Distribution Parameters ============</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // ============ Distribution Parameters ============</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 public _TOTAL_BASE_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 public _TOTAL_BASE_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 public _POOL_QUOTE_CAP_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 public _POOL_QUOTE_CAP_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // ============ Settlement ============</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // ============ Settlement ============</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 public _QUOTE_RESERVE_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 public _QUOTE_RESERVE_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 public _UNUSED_BASE_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 public _UNUSED_BASE_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 public _UNUSED_QUOTE_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 public _UNUSED_QUOTE_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 public _TOTAL_SHARES_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 public _TOTAL_SHARES_;</td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> mapping(address => uint256) internal _SHARES_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> mapping(address => uint256) internal _SHARES_;</td>
|
|
</tr>
|
|
<tr class="SectionAll">
|
|
<td class="TextItemSigMod"> mapping(address => bool) public _CLAIMED_<span class="TextSegSigDiff">QUOTE_</span>;</td>
|
|
<td class="AlignCenter"><></td>
|
|
<td class="TextItemSigMod"> mapping(address => bool) public _CLAIMED_;</td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address public _POOL_FACTORY_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address public _POOL_FACTORY_;</td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> address public _POOL_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address public _POOL_;</td>
|
|
</tr>
|
|
<tr class="SectionAll">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">uint256</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">public</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">_POOL_FEE_RATE_;</span></td>
|
|
<td class="AlignCenter">+-</td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame"> uint256 public _AVG_SETTLED_PRICE_;</td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame"> uint256 public _AVG_SETTLED_PRICE_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // ============ Advanced Control ============</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // ============ Advanced Control ============</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address public _MAINTAINER_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address public _MAINTAINER_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> IFeeRateModel public _MT_FEE_RATE_MODEL_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> IFeeRateModel public _MT_FEE_RATE_MODEL_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> IPermissionManager public _BIDDER_PERMISSION_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> IPermissionManager public _BIDDER_PERMISSION_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // ============ PMM Parameters ============</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // ============ PMM Parameters ============</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 public _K_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 public _K_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 public _I_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 public _I_;</td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionAll">
|
|
<td class="TextItemSigMod"> // ============ LP Token Vesting <span class="TextSegSigDiff">&&</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">Claim</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">Params</span><span class="TextSegInsigDiff"> </span>============</td>
|
|
<td class="AlignCenter"><></td>
|
|
<td class="TextItemSigMod"> // ============ LP Token Vesting ============</td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 public _TOTAL_LP_AMOUNT_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 public _TOTAL_LP_AMOUNT_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 public _FREEZE_DURATION_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 public _FREEZE_DURATION_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 public _VESTING_DURATION_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 public _VESTING_DURATION_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 public _CLIFF_RATE_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 public _CLIFF_RATE_;</td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">uint256</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">public</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">_TOKEN_CLAIM_DURATION_;</span></td>
|
|
<td class="AlignCenter">+-</td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">uint256</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">public</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">_TOKEN_VESTING_DURATION_;</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">uint256</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">public</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">_TOKEN_CLIFF_RATE_;</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">mapping(address</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">=></span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">uint256)</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">_CLAIMED_BASE_TOKEN_;</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemInsigMod"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionAll">
|
|
<td class="TextItemSame"> // ============ Modifiers ============</td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame"> // ============ Modifiers ============</td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">modifier</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">isForceStop()</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">{</span></td>
|
|
<td class="AlignCenter">+-</td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">require(!_FORCE_STOP_,</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">"FORCE_STOP");</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">_;</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">}</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> modifier phaseBid() {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> modifier phaseBid() {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> require(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> require(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> block.timestamp >= _PHASE_BID_STARTTIME_ && block.timestamp < _PHASE_BID_ENDTIME_,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> block.timestamp >= _PHASE_BID_STARTTIME_ && block.timestamp < _PHASE_BID_ENDTIME_,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> "NOT_PHASE_BID"</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> "NOT_PHASE_BID"</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> );</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> );</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> modifier phaseCalm() {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> modifier phaseCalm() {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> require(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> require(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> block.timestamp >= _PHASE_BID_ENDTIME_ && block.timestamp < _PHASE_CALM_ENDTIME_,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> block.timestamp >= _PHASE_BID_ENDTIME_ && block.timestamp < _PHASE_CALM_ENDTIME_,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> "NOT_PHASE_CALM"</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> "NOT_PHASE_CALM"</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> );</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> );</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> modifier phaseBidOrCalm() {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> modifier phaseBidOrCalm() {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> require(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> require(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> block.timestamp >= _PHASE_BID_STARTTIME_ && block.timestamp < _PHASE_CALM_ENDTIME_,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> block.timestamp >= _PHASE_BID_STARTTIME_ && block.timestamp < _PHASE_CALM_ENDTIME_,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> "NOT_PHASE_BID_OR_CALM"</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> "NOT_PHASE_BID_OR_CALM"</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> );</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> );</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> modifier phaseSettlement() {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> modifier phaseSettlement() {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> require(block.timestamp >= _PHASE_CALM_ENDTIME_, "NOT_PHASE_EXE");</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> require(block.timestamp >= _PHASE_CALM_ENDTIME_, "NOT_PHASE_EXE");</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> modifier phaseVesting() {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> modifier phaseVesting() {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> require(_SETTLED_, "NOT_VESTING");</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> require(_SETTLED_, "NOT_VESTING");</td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> _;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _;</td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">}</span></td>
|
|
<td class="AlignCenter">+-</td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemInsigMod"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">function</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">forceStop()</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">external</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">onlyOwner</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">{</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">require(block.timestamp</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff"><</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">_PHASE_BID_STARTTIME_,</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">"CP_ALREADY_STARTED");</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">_FORCE_STOP_</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">=</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">true;</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">_TOTAL_BASE_</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">=</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">0;</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">uint256</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">baseAmount</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">=</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">_BASE_TOKEN_.balanceOf(address(this));</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">_BASE_TOKEN_.transfer(_OWNER_,</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">baseAmount);</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">}</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">}</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">// File: contracts/lib/DODOMath.sol</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">// File: contracts/lib/DODOMath.sol</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">/**</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">/**</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @title DODOMath</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @title DODOMath</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @author DODO Breeder</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @author DODO Breeder</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> *</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> *</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @notice Functions for complex calculating. Including ONE Integration and TWO Quadratic solutions</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @notice Functions for complex calculating. Including ONE Integration and TWO Quadratic solutions</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> */</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> */</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">library DODOMath {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">library DODOMath {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> using SafeMath for uint256;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> using SafeMath for uint256;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> /*</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> /*</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> Integrate dodo curve from V1 to V2</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> Integrate dodo curve from V1 to V2</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> require V0>=V1>=V2>0</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> require V0>=V1>=V2>0</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> res = (1-k)i(V1-V2)+ikV0*V0(1/V2-1/V1)</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> res = (1-k)i(V1-V2)+ikV0*V0(1/V2-1/V1)</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> let V1-V2=delta</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> let V1-V2=delta</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> res = i*delta*(1-k+k(V0^2/V1/V2))</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> res = i*delta*(1-k+k(V0^2/V1/V2))</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> i is the price of V-res trading pair</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> i is the price of V-res trading pair</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> support k=1 & k=0 case</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> support k=1 & k=0 case</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> [round down]</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> [round down]</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> */</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> */</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function _GeneralIntegrate(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function _GeneralIntegrate(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 V0,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 V0,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 V1,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 V1,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 V2,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 V2,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 i,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 i,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 k</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 k</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> ) internal pure returns (uint256) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> ) internal pure returns (uint256) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> require(V0 > 0, "TARGET_IS_ZERO");</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> require(V0 > 0, "TARGET_IS_ZERO");</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 fairAmount = i.mul(V1.sub(V2)); // i*delta</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 fairAmount = i.mul(V1.sub(V2)); // i*delta</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> if (k == 0) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> if (k == 0) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return fairAmount.div(DecimalMath.ONE);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return fairAmount.div(DecimalMath.ONE);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 V0V0V1V2 = DecimalMath.divFloor(V0.mul(V0).div(V1), V2);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 V0V0V1V2 = DecimalMath.divFloor(V0.mul(V0).div(V1), V2);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 penalty = DecimalMath.mulFloor(k, V0V0V1V2); // k(V0^2/V1/V2)</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 penalty = DecimalMath.mulFloor(k, V0V0V1V2); // k(V0^2/V1/V2)</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return DecimalMath.ONE.sub(k).add(penalty).mul(fairAmount).div(DecimalMath.ONE2);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return DecimalMath.ONE.sub(k).add(penalty).mul(fairAmount).div(DecimalMath.ONE2);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> /*</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> /*</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> Follow the integration function above</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> Follow the integration function above</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> i*deltaB = (Q2-Q1)*(1-k+kQ0^2/Q1/Q2)</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> i*deltaB = (Q2-Q1)*(1-k+kQ0^2/Q1/Q2)</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> Assume Q2=Q0, Given Q1 and deltaB, solve Q0</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> Assume Q2=Q0, Given Q1 and deltaB, solve Q0</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> i is the price of delta-V trading pair</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> i is the price of delta-V trading pair</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> give out target of V</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> give out target of V</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> support k=1 & k=0 case</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> support k=1 & k=0 case</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> [round down]</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> [round down]</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> */</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> */</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function _SolveQuadraticFunctionForTarget(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function _SolveQuadraticFunctionForTarget(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 V1,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 V1,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 delta,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 delta,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 i,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 i,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 k</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 k</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> ) internal pure returns (uint256) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> ) internal pure returns (uint256) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> if (V1 == 0) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> if (V1 == 0) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return 0;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return 0;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> if (k == 0) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> if (k == 0) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return V1.add(DecimalMath.mulFloor(i, delta));</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return V1.add(DecimalMath.mulFloor(i, delta));</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // V0 = V1*(1+(sqrt-1)/2k)</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // V0 = V1*(1+(sqrt-1)/2k)</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // sqrt = √(1+4kidelta/V1)</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // sqrt = √(1+4kidelta/V1)</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // premium = 1+(sqrt-1)/2k</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // premium = 1+(sqrt-1)/2k</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // uint256 sqrt = (4 * k).mul(i).mul(delta).div(V1).add(DecimalMath.ONE2).sqrt();</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // uint256 sqrt = (4 * k).mul(i).mul(delta).div(V1).add(DecimalMath.ONE2).sqrt();</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 sqrt;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 sqrt;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 ki = (4 * k).mul(i);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 ki = (4 * k).mul(i);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> if (ki == 0) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> if (ki == 0) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> sqrt = DecimalMath.ONE;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> sqrt = DecimalMath.ONE;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> } else if ((ki * delta) / ki == delta) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> } else if ((ki * delta) / ki == delta) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> sqrt = (ki * delta).div(V1).add(DecimalMath.ONE2).sqrt();</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> sqrt = (ki * delta).div(V1).add(DecimalMath.ONE2).sqrt();</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> } else {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> } else {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> sqrt = ki.div(V1).mul(delta).add(DecimalMath.ONE2).sqrt();</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> sqrt = ki.div(V1).mul(delta).add(DecimalMath.ONE2).sqrt();</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 premium =</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 premium =</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> DecimalMath.divFloor(sqrt.sub(DecimalMath.ONE), k * 2).add(DecimalMath.ONE);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> DecimalMath.divFloor(sqrt.sub(DecimalMath.ONE), k * 2).add(DecimalMath.ONE);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // V0 is greater than or equal to V1 according to the solution</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // V0 is greater than or equal to V1 according to the solution</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return DecimalMath.mulFloor(V1, premium);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return DecimalMath.mulFloor(V1, premium);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> /*</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> /*</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> Follow the integration expression above, we have:</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> Follow the integration expression above, we have:</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> i*deltaB = (Q2-Q1)*(1-k+kQ0^2/Q1/Q2)</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> i*deltaB = (Q2-Q1)*(1-k+kQ0^2/Q1/Q2)</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> Given Q1 and deltaB, solve Q2</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> Given Q1 and deltaB, solve Q2</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> This is a quadratic function and the standard version is</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> This is a quadratic function and the standard version is</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> aQ2^2 + bQ2 + c = 0, where</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> aQ2^2 + bQ2 + c = 0, where</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> a=1-k</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> a=1-k</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> -b=(1-k)Q1-kQ0^2/Q1+i*deltaB</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> -b=(1-k)Q1-kQ0^2/Q1+i*deltaB</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> c=-kQ0^2 </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> c=-kQ0^2 </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> and Q2=(-b+sqrt(b^2+4(1-k)kQ0^2))/2(1-k)</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> and Q2=(-b+sqrt(b^2+4(1-k)kQ0^2))/2(1-k)</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> note: another root is negative, abondan</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> note: another root is negative, abondan</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> if deltaBSig=true, then Q2>Q1, user sell Q and receive B</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> if deltaBSig=true, then Q2>Q1, user sell Q and receive B</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> if deltaBSig=false, then Q2<Q1, user sell B and receive Q</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> if deltaBSig=false, then Q2<Q1, user sell B and receive Q</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return |Q1-Q2|</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return |Q1-Q2|</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> as we only support sell amount as delta, the deltaB is always negative</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> as we only support sell amount as delta, the deltaB is always negative</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> the input ideltaB is actually -ideltaB in the equation</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> the input ideltaB is actually -ideltaB in the equation</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> i is the price of delta-V trading pair</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> i is the price of delta-V trading pair</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> support k=1 & k=0 case</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> support k=1 & k=0 case</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> [round down]</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> [round down]</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> */</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> */</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function _SolveQuadraticFunctionForTrade(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function _SolveQuadraticFunctionForTrade(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 V0,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 V0,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 V1,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 V1,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 delta,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 delta,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 i,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 i,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 k</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 k</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> ) internal pure returns (uint256) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> ) internal pure returns (uint256) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> require(V0 > 0, "TARGET_IS_ZERO");</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> require(V0 > 0, "TARGET_IS_ZERO");</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> if (delta == 0) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> if (delta == 0) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return 0;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return 0;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> if (k == 0) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> if (k == 0) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return DecimalMath.mulFloor(i, delta) > V1 ? V1 : DecimalMath.mulFloor(i, delta);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return DecimalMath.mulFloor(i, delta) > V1 ? V1 : DecimalMath.mulFloor(i, delta);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> if (k == DecimalMath.ONE) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> if (k == DecimalMath.ONE) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // if k==1</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // if k==1</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // Q2=Q1/(1+ideltaBQ1/Q0/Q0)</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // Q2=Q1/(1+ideltaBQ1/Q0/Q0)</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // temp = ideltaBQ1/Q0/Q0</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // temp = ideltaBQ1/Q0/Q0</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // Q2 = Q1/(1+temp)</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // Q2 = Q1/(1+temp)</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // Q1-Q2 = Q1*(1-1/(1+temp)) = Q1*(temp/(1+temp))</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // Q1-Q2 = Q1*(1-1/(1+temp)) = Q1*(temp/(1+temp))</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // uint256 temp = i.mul(delta).mul(V1).div(V0.mul(V0));</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // uint256 temp = i.mul(delta).mul(V1).div(V0.mul(V0));</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 temp;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 temp;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 idelta = i.mul(delta);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 idelta = i.mul(delta);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> if (idelta == 0) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> if (idelta == 0) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> temp = 0;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> temp = 0;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> } else if ((idelta * V1) / idelta == V1) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> } else if ((idelta * V1) / idelta == V1) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> temp = (idelta * V1).div(V0.mul(V0));</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> temp = (idelta * V1).div(V0.mul(V0));</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> } else {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> } else {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> temp = delta.mul(V1).div(V0).mul(i).div(V0);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> temp = delta.mul(V1).div(V0).mul(i).div(V0);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return V1.mul(temp).div(temp.add(DecimalMath.ONE));</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return V1.mul(temp).div(temp.add(DecimalMath.ONE));</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // calculate -b value and sig</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // calculate -b value and sig</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // b = kQ0^2/Q1-i*deltaB-(1-k)Q1</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // b = kQ0^2/Q1-i*deltaB-(1-k)Q1</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // part1 = (1-k)Q1 >=0</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // part1 = (1-k)Q1 >=0</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // part2 = kQ0^2/Q1-i*deltaB >=0</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // part2 = kQ0^2/Q1-i*deltaB >=0</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // bAbs = abs(part1-part2)</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // bAbs = abs(part1-part2)</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // if part1>part2 => b is negative => bSig is false</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // if part1>part2 => b is negative => bSig is false</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // if part2>part1 => b is positive => bSig is true</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // if part2>part1 => b is positive => bSig is true</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 part2 = k.mul(V0).div(V1).mul(V0).add(i.mul(delta)); // kQ0^2/Q1-i*deltaB</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 part2 = k.mul(V0).div(V1).mul(V0).add(i.mul(delta)); // kQ0^2/Q1-i*deltaB</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 bAbs = DecimalMath.ONE.sub(k).mul(V1); // (1-k)Q1</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 bAbs = DecimalMath.ONE.sub(k).mul(V1); // (1-k)Q1</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> bool bSig;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> bool bSig;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> if (bAbs >= part2) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> if (bAbs >= part2) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> bAbs = bAbs - part2;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> bAbs = bAbs - part2;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> bSig = false;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> bSig = false;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> } else {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> } else {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> bAbs = part2 - bAbs;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> bAbs = part2 - bAbs;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> bSig = true;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> bSig = true;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> bAbs = bAbs.div(DecimalMath.ONE);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> bAbs = bAbs.div(DecimalMath.ONE);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // calculate sqrt</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // calculate sqrt</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 squareRoot =</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 squareRoot =</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> DecimalMath.mulFloor(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> DecimalMath.mulFloor(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> DecimalMath.ONE.sub(k).mul(4),</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> DecimalMath.ONE.sub(k).mul(4),</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> DecimalMath.mulFloor(k, V0).mul(V0)</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> DecimalMath.mulFloor(k, V0).mul(V0)</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> ); // 4(1-k)kQ0^2</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> ); // 4(1-k)kQ0^2</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> squareRoot = bAbs.mul(bAbs).add(squareRoot).sqrt(); // sqrt(b*b+4(1-k)kQ0*Q0)</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> squareRoot = bAbs.mul(bAbs).add(squareRoot).sqrt(); // sqrt(b*b+4(1-k)kQ0*Q0)</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // final res</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // final res</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 denominator = DecimalMath.ONE.sub(k).mul(2); // 2(1-k)</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 denominator = DecimalMath.ONE.sub(k).mul(2); // 2(1-k)</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 numerator;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 numerator;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> if (bSig) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> if (bSig) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> numerator = squareRoot.sub(bAbs);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> numerator = squareRoot.sub(bAbs);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> } else {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> } else {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> numerator = bAbs.add(squareRoot);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> numerator = bAbs.add(squareRoot);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 V2 = DecimalMath.divCeil(numerator, denominator);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 V2 = DecimalMath.divCeil(numerator, denominator);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> if (V2 > V1) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> if (V2 > V1) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return 0;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return 0;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> } else {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> } else {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return V1 - V2;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return V1 - V2;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">}</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">}</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">// File: contracts/lib/PMMPricing.sol</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">// File: contracts/lib/PMMPricing.sol</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">/**</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">/**</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @title Pricing</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @title Pricing</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @author DODO Breeder</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @author DODO Breeder</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> *</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> *</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @notice DODO Pricing model</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @notice DODO Pricing model</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> */</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> */</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">library PMMPricing {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">library PMMPricing {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> using SafeMath for uint256;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> using SafeMath for uint256;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> enum RState {ONE, ABOVE_ONE, BELOW_ONE}</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> enum RState {ONE, ABOVE_ONE, BELOW_ONE}</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> struct PMMState {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> struct PMMState {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 i;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 i;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 K;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 K;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 B;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 B;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 Q;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 Q;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 B0;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 B0;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 Q0;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 Q0;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> RState R;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> RState R;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // ============ buy & sell ============</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // ============ buy & sell ============</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function sellBaseToken(PMMState memory state, uint256 payBaseAmount)</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function sellBaseToken(PMMState memory state, uint256 payBaseAmount)</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> internal</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> internal</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> pure</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> pure</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> returns (uint256 receiveQuoteAmount, RState newR)</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> returns (uint256 receiveQuoteAmount, RState newR)</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> if (state.R == RState.ONE) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> if (state.R == RState.ONE) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // case 1: R=1</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // case 1: R=1</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // R falls below one</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // R falls below one</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> receiveQuoteAmount = _ROneSellBaseToken(state, payBaseAmount);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> receiveQuoteAmount = _ROneSellBaseToken(state, payBaseAmount);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> newR = RState.BELOW_ONE;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> newR = RState.BELOW_ONE;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> } else if (state.R == RState.ABOVE_ONE) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> } else if (state.R == RState.ABOVE_ONE) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 backToOnePayBase = state.B0.sub(state.B);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 backToOnePayBase = state.B0.sub(state.B);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 backToOneReceiveQuote = state.Q.sub(state.Q0);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 backToOneReceiveQuote = state.Q.sub(state.Q0);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // case 2: R>1</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // case 2: R>1</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // complex case, R status depends on trading amount</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // complex case, R status depends on trading amount</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> if (payBaseAmount < backToOnePayBase) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> if (payBaseAmount < backToOnePayBase) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // case 2.1: R status do not change</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // case 2.1: R status do not change</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> receiveQuoteAmount = _RAboveSellBaseToken(state, payBaseAmount);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> receiveQuoteAmount = _RAboveSellBaseToken(state, payBaseAmount);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> newR = RState.ABOVE_ONE;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> newR = RState.ABOVE_ONE;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> if (receiveQuoteAmount > backToOneReceiveQuote) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> if (receiveQuoteAmount > backToOneReceiveQuote) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // [Important corner case!] may enter this branch when some precision problem happens. And consequently contribute to negative spare quote amount</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // [Important corner case!] may enter this branch when some precision problem happens. And consequently contribute to negative spare quote amount</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // to make sure spare quote>=0, mannually set receiveQuote=backToOneReceiveQuote</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // to make sure spare quote>=0, mannually set receiveQuote=backToOneReceiveQuote</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> receiveQuoteAmount = backToOneReceiveQuote;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> receiveQuoteAmount = backToOneReceiveQuote;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> } else if (payBaseAmount == backToOnePayBase) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> } else if (payBaseAmount == backToOnePayBase) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // case 2.2: R status changes to ONE</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // case 2.2: R status changes to ONE</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> receiveQuoteAmount = backToOneReceiveQuote;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> receiveQuoteAmount = backToOneReceiveQuote;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> newR = RState.ONE;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> newR = RState.ONE;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> } else {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> } else {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // case 2.3: R status changes to BELOW_ONE</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // case 2.3: R status changes to BELOW_ONE</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> receiveQuoteAmount = backToOneReceiveQuote.add(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> receiveQuoteAmount = backToOneReceiveQuote.add(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _ROneSellBaseToken(state, payBaseAmount.sub(backToOnePayBase))</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _ROneSellBaseToken(state, payBaseAmount.sub(backToOnePayBase))</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> );</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> );</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> newR = RState.BELOW_ONE;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> newR = RState.BELOW_ONE;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> } else {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> } else {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // state.R == RState.BELOW_ONE</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // state.R == RState.BELOW_ONE</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // case 3: R<1</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // case 3: R<1</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> receiveQuoteAmount = _RBelowSellBaseToken(state, payBaseAmount);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> receiveQuoteAmount = _RBelowSellBaseToken(state, payBaseAmount);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> newR = RState.BELOW_ONE;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> newR = RState.BELOW_ONE;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function sellQuoteToken(PMMState memory state, uint256 payQuoteAmount)</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function sellQuoteToken(PMMState memory state, uint256 payQuoteAmount)</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> internal</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> internal</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> pure</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> pure</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> returns (uint256 receiveBaseAmount, RState newR)</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> returns (uint256 receiveBaseAmount, RState newR)</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> if (state.R == RState.ONE) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> if (state.R == RState.ONE) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> receiveBaseAmount = _ROneSellQuoteToken(state, payQuoteAmount);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> receiveBaseAmount = _ROneSellQuoteToken(state, payQuoteAmount);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> newR = RState.ABOVE_ONE;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> newR = RState.ABOVE_ONE;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> } else if (state.R == RState.ABOVE_ONE) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> } else if (state.R == RState.ABOVE_ONE) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> receiveBaseAmount = _RAboveSellQuoteToken(state, payQuoteAmount);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> receiveBaseAmount = _RAboveSellQuoteToken(state, payQuoteAmount);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> newR = RState.ABOVE_ONE;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> newR = RState.ABOVE_ONE;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> } else {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> } else {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 backToOnePayQuote = state.Q0.sub(state.Q);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 backToOnePayQuote = state.Q0.sub(state.Q);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 backToOneReceiveBase = state.B.sub(state.B0);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 backToOneReceiveBase = state.B.sub(state.B0);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> if (payQuoteAmount < backToOnePayQuote) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> if (payQuoteAmount < backToOnePayQuote) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> receiveBaseAmount = _RBelowSellQuoteToken(state, payQuoteAmount);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> receiveBaseAmount = _RBelowSellQuoteToken(state, payQuoteAmount);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> newR = RState.BELOW_ONE;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> newR = RState.BELOW_ONE;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> if (receiveBaseAmount > backToOneReceiveBase) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> if (receiveBaseAmount > backToOneReceiveBase) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> receiveBaseAmount = backToOneReceiveBase;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> receiveBaseAmount = backToOneReceiveBase;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> } else if (payQuoteAmount == backToOnePayQuote) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> } else if (payQuoteAmount == backToOnePayQuote) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> receiveBaseAmount = backToOneReceiveBase;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> receiveBaseAmount = backToOneReceiveBase;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> newR = RState.ONE;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> newR = RState.ONE;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> } else {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> } else {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> receiveBaseAmount = backToOneReceiveBase.add(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> receiveBaseAmount = backToOneReceiveBase.add(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _ROneSellQuoteToken(state, payQuoteAmount.sub(backToOnePayQuote))</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _ROneSellQuoteToken(state, payQuoteAmount.sub(backToOnePayQuote))</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> );</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> );</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> newR = RState.ABOVE_ONE;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> newR = RState.ABOVE_ONE;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // ============ R = 1 cases ============</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // ============ R = 1 cases ============</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function _ROneSellBaseToken(PMMState memory state, uint256 payBaseAmount)</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function _ROneSellBaseToken(PMMState memory state, uint256 payBaseAmount)</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> internal</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> internal</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> pure</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> pure</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> returns (</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> returns (</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 // receiveQuoteToken</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 // receiveQuoteToken</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> )</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> )</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // in theory Q2 <= targetQuoteTokenAmount</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // in theory Q2 <= targetQuoteTokenAmount</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // however when amount is close to 0, precision problems may cause Q2 > targetQuoteTokenAmount</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // however when amount is close to 0, precision problems may cause Q2 > targetQuoteTokenAmount</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> DODOMath._SolveQuadraticFunctionForTrade(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> DODOMath._SolveQuadraticFunctionForTrade(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.Q0,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.Q0,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.Q0,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.Q0,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> payBaseAmount,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> payBaseAmount,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.i,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.i,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.K</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.K</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> );</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> );</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function _ROneSellQuoteToken(PMMState memory state, uint256 payQuoteAmount)</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function _ROneSellQuoteToken(PMMState memory state, uint256 payQuoteAmount)</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> internal</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> internal</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> pure</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> pure</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> returns (</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> returns (</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 // receiveBaseToken</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 // receiveBaseToken</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> )</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> )</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> DODOMath._SolveQuadraticFunctionForTrade(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> DODOMath._SolveQuadraticFunctionForTrade(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.B0,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.B0,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.B0,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.B0,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> payQuoteAmount,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> payQuoteAmount,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> DecimalMath.reciprocalFloor(state.i),</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> DecimalMath.reciprocalFloor(state.i),</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.K</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.K</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> );</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> );</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // ============ R < 1 cases ============</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // ============ R < 1 cases ============</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function _RBelowSellQuoteToken(PMMState memory state, uint256 payQuoteAmount)</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function _RBelowSellQuoteToken(PMMState memory state, uint256 payQuoteAmount)</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> internal</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> internal</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> pure</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> pure</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> returns (</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> returns (</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 // receiveBaseToken</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 // receiveBaseToken</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> )</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> )</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> DODOMath._GeneralIntegrate(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> DODOMath._GeneralIntegrate(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.Q0,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.Q0,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.Q.add(payQuoteAmount),</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.Q.add(payQuoteAmount),</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.Q,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.Q,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> DecimalMath.reciprocalFloor(state.i),</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> DecimalMath.reciprocalFloor(state.i),</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.K</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.K</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> );</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> );</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function _RBelowSellBaseToken(PMMState memory state, uint256 payBaseAmount)</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function _RBelowSellBaseToken(PMMState memory state, uint256 payBaseAmount)</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> internal</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> internal</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> pure</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> pure</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> returns (</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> returns (</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 // receiveQuoteToken</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 // receiveQuoteToken</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> )</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> )</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> DODOMath._SolveQuadraticFunctionForTrade(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> DODOMath._SolveQuadraticFunctionForTrade(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.Q0,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.Q0,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.Q,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.Q,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> payBaseAmount,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> payBaseAmount,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.i,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.i,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.K</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.K</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> );</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> );</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // ============ R > 1 cases ============</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // ============ R > 1 cases ============</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function _RAboveSellBaseToken(PMMState memory state, uint256 payBaseAmount)</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function _RAboveSellBaseToken(PMMState memory state, uint256 payBaseAmount)</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> internal</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> internal</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> pure</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> pure</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> returns (</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> returns (</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 // receiveQuoteToken</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 // receiveQuoteToken</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> )</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> )</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> DODOMath._GeneralIntegrate(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> DODOMath._GeneralIntegrate(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.B0,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.B0,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.B.add(payBaseAmount),</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.B.add(payBaseAmount),</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.B,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.B,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.i,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.i,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.K</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.K</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> );</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> );</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function _RAboveSellQuoteToken(PMMState memory state, uint256 payQuoteAmount)</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function _RAboveSellQuoteToken(PMMState memory state, uint256 payQuoteAmount)</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> internal</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> internal</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> pure</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> pure</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> returns (</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> returns (</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 // receiveBaseToken</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 // receiveBaseToken</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> )</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> )</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> DODOMath._SolveQuadraticFunctionForTrade(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> DODOMath._SolveQuadraticFunctionForTrade(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.B0,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.B0,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.B,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.B,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> payQuoteAmount,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> payQuoteAmount,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> DecimalMath.reciprocalFloor(state.i),</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> DecimalMath.reciprocalFloor(state.i),</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.K</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.K</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> );</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> );</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // ============ Helper functions ============</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // ============ Helper functions ============</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function adjustedTarget(PMMState memory state) internal pure {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function adjustedTarget(PMMState memory state) internal pure {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> if (state.R == RState.BELOW_ONE) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> if (state.R == RState.BELOW_ONE) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.Q0 = DODOMath._SolveQuadraticFunctionForTarget(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.Q0 = DODOMath._SolveQuadraticFunctionForTarget(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.Q,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.Q,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.B.sub(state.B0),</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.B.sub(state.B0),</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.i,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.i,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.K</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.K</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> );</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> );</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> } else if (state.R == RState.ABOVE_ONE) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> } else if (state.R == RState.ABOVE_ONE) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.B0 = DODOMath._SolveQuadraticFunctionForTarget(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.B0 = DODOMath._SolveQuadraticFunctionForTarget(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.B,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.B,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.Q.sub(state.Q0),</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.Q.sub(state.Q0),</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> DecimalMath.reciprocalFloor(state.i),</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> DecimalMath.reciprocalFloor(state.i),</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.K</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.K</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> );</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> );</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function getMidPrice(PMMState memory state) internal pure returns (uint256) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function getMidPrice(PMMState memory state) internal pure returns (uint256) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> if (state.R == RState.BELOW_ONE) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> if (state.R == RState.BELOW_ONE) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 R = DecimalMath.divFloor(state.Q0.mul(state.Q0).div(state.Q), state.Q);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 R = DecimalMath.divFloor(state.Q0.mul(state.Q0).div(state.Q), state.Q);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> R = DecimalMath.ONE.sub(state.K).add(DecimalMath.mulFloor(state.K, R));</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> R = DecimalMath.ONE.sub(state.K).add(DecimalMath.mulFloor(state.K, R));</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return DecimalMath.divFloor(state.i, R);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return DecimalMath.divFloor(state.i, R);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> } else {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> } else {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 R = DecimalMath.divFloor(state.B0.mul(state.B0).div(state.B), state.B);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 R = DecimalMath.divFloor(state.B0.mul(state.B0).div(state.B), state.B);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> R = DecimalMath.ONE.sub(state.K).add(DecimalMath.mulFloor(state.K, R));</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> R = DecimalMath.ONE.sub(state.K).add(DecimalMath.mulFloor(state.K, R));</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return DecimalMath.mulFloor(state.i, R);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return DecimalMath.mulFloor(state.i, R);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">}</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">}</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">// File: contracts/intf/IDODOCallee.sol</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">// File: contracts/intf/IDODOCallee.sol</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">interface IDODOCallee {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">interface IDODOCallee {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function DVMSellShareCall(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function DVMSellShareCall(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address sender,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address sender,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 burnShareAmount,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 burnShareAmount,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 baseAmount,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 baseAmount,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 quoteAmount,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 quoteAmount,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> bytes calldata data</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> bytes calldata data</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> ) external;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> ) external;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function DVMFlashLoanCall(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function DVMFlashLoanCall(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address sender,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address sender,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 baseAmount,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 baseAmount,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 quoteAmount,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 quoteAmount,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> bytes calldata data</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> bytes calldata data</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> ) external;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> ) external;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function DPPFlashLoanCall(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function DPPFlashLoanCall(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address sender,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address sender,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 baseAmount,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 baseAmount,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 quoteAmount,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 quoteAmount,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> bytes calldata data</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> bytes calldata data</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> ) external;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> ) external;</td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">function</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">DSPFlashLoanCall(</span></td>
|
|
<td class="AlignCenter">+-</td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">address</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">sender,</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">uint256</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">baseAmount,</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">uint256</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">quoteAmount,</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">bytes</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">calldata</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">data</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">)</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">external;</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemInsigMod"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame"> function CPCancelCall(</td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame"> function CPCancelCall(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address sender,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address sender,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 amount,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 amount,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> bytes calldata data</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> bytes calldata data</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> ) external;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> ) external;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function CPClaimBidCall(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function CPClaimBidCall(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address sender,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address sender,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 baseAmount,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 baseAmount,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 quoteAmount,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 quoteAmount,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> bytes calldata data</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> bytes calldata data</td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> ) external;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> ) external;</td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemInsigMod"> </td>
|
|
<td class="AlignCenter">+-</td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">function</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">NFTRedeemCall(</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">address</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">payable</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">assetTo,</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">uint256</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">quoteAmount,</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">bytes</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">calldata</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">)</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">external;</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame">}</td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame">}</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame">// File: contracts/CrowdPooling/impl/CPFunding.sol</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">// File: contracts/CrowdPooling/impl/CPFunding.sol</td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter">-+</td>
|
|
<td class="TextItemInsigMod"> </td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemInsigMod"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">contract CPFunding is CPStorage {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">contract CPFunding is CPStorage {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> using SafeERC20 for IERC20;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> using SafeERC20 for IERC20;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // ============ Events ============</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // ============ Events ============</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> event Bid(address to, uint256 amount, uint256 fee);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> event Bid(address to, uint256 amount, uint256 fee);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> event Cancel(address to,uint256 amount);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> event Cancel(address to,uint256 amount);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> event Settle();</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> event Settle();</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // ============ BID & CALM PHASE ============</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // ============ BID & CALM PHASE ============</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> modifier isBidderAllow(address bidder) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> modifier isBidderAllow(address bidder) {</td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> require(_BIDDER_PERMISSION_.isAllowed(bidder), "BIDDER_NOT_ALLOWED");</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> require(_BIDDER_PERMISSION_.isAllowed(bidder), "BIDDER_NOT_ALLOWED");</td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">if(_IS_OVERCAP_STOP)</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">{</span></td>
|
|
<td class="AlignCenter">+-</td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">require(_QUOTE_TOKEN_.balanceOf(address(this))</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff"><</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">_POOL_QUOTE_CAP_,</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">"ALREADY_OVER_CAP");</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">}</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame"> _;</td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame"> _;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionAll">
|
|
<td class="TextItemSigMod"> function bid(address to) external <span class="TextSegSigDiff">isForceStop</span><span class="TextSegInsigDiff"> </span>phaseBid preventReentrant isBidderAllow(to) {</td>
|
|
<td class="AlignCenter"><></td>
|
|
<td class="TextItemSigMod"> function bid(address to) external phaseBid preventReentrant isBidderAllow(to) {</td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame"> uint256 input = _getQuoteInput();</td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame"> uint256 input = _getQuoteInput();</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 mtFee = DecimalMath.mulFloor(input, _MT_FEE_RATE_MODEL_.getFeeRate(to));</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 mtFee = DecimalMath.mulFloor(input, _MT_FEE_RATE_MODEL_.getFeeRate(to));</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _transferQuoteOut(_MAINTAINER_, mtFee);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _transferQuoteOut(_MAINTAINER_, mtFee);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _mintShares(to, input.sub(mtFee));</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _mintShares(to, input.sub(mtFee));</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _sync();</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _sync();</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> emit Bid(to, input, mtFee);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> emit Bid(to, input, mtFee);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function cancel(address to, uint256 amount, bytes calldata data) external phaseBidOrCalm preventReentrant {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function cancel(address to, uint256 amount, bytes calldata data) external phaseBidOrCalm preventReentrant {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> require(_SHARES_[msg.sender] >= amount, "SHARES_NOT_ENOUGH");</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> require(_SHARES_[msg.sender] >= amount, "SHARES_NOT_ENOUGH");</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _burnShares(msg.sender, amount);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _burnShares(msg.sender, amount);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _transferQuoteOut(to, amount);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _transferQuoteOut(to, amount);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _sync();</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _sync();</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> if(data.length > 0){</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> if(data.length > 0){</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> IDODOCallee(to).CPCancelCall(msg.sender,amount,data);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> IDODOCallee(to).CPCancelCall(msg.sender,amount,data);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> emit Cancel(msg.sender,amount);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> emit Cancel(msg.sender,amount);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function _mintShares(address to, uint256 amount) internal {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function _mintShares(address to, uint256 amount) internal {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _SHARES_[to] = _SHARES_[to].add(amount);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _SHARES_[to] = _SHARES_[to].add(amount);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _TOTAL_SHARES_ = _TOTAL_SHARES_.add(amount);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _TOTAL_SHARES_ = _TOTAL_SHARES_.add(amount);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function _burnShares(address from, uint256 amount) internal {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function _burnShares(address from, uint256 amount) internal {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _SHARES_[from] = _SHARES_[from].sub(amount);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _SHARES_[from] = _SHARES_[from].sub(amount);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _TOTAL_SHARES_ = _TOTAL_SHARES_.sub(amount);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _TOTAL_SHARES_ = _TOTAL_SHARES_.sub(amount);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // ============ SETTLEMENT ============</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // ============ SETTLEMENT ============</td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionAll">
|
|
<td class="TextItemSigMod"> function settle() external <span class="TextSegSigDiff">isForceStop</span><span class="TextSegInsigDiff"> </span>phaseSettlement preventReentrant {</td>
|
|
<td class="AlignCenter"><></td>
|
|
<td class="TextItemSigMod"> function settle() external phaseSettlement preventReentrant {</td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame"> _settle();</td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame"> _settle();</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> (uint256 poolBase, uint256 poolQuote, uint256 poolI, uint256 unUsedBase, uint256 unUsedQuote) = getSettleResult();</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> (uint256 poolBase, uint256 poolQuote, uint256 poolI, uint256 unUsedBase, uint256 unUsedQuote) = getSettleResult();</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _UNUSED_BASE_ = unUsedBase;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _UNUSED_BASE_ = unUsedBase;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _UNUSED_QUOTE_ = unUsedQuote;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _UNUSED_QUOTE_ = unUsedQuote;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address _poolBaseToken;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address _poolBaseToken;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address _poolQuoteToken;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address _poolQuoteToken;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> if (_UNUSED_BASE_ > poolBase) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> if (_UNUSED_BASE_ > poolBase) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _poolBaseToken = address(_QUOTE_TOKEN_);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _poolBaseToken = address(_QUOTE_TOKEN_);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _poolQuoteToken = address(_BASE_TOKEN_);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _poolQuoteToken = address(_BASE_TOKEN_);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> } else {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> } else {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _poolBaseToken = address(_BASE_TOKEN_);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _poolBaseToken = address(_BASE_TOKEN_);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _poolQuoteToken = address(_QUOTE_TOKEN_);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _poolQuoteToken = address(_QUOTE_TOKEN_);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _POOL_ = IDVMFactory(_POOL_FACTORY_).createDODOVendingMachine(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _POOL_ = IDVMFactory(_POOL_FACTORY_).createDODOVendingMachine(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _poolBaseToken,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _poolBaseToken,</td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> _poolQuoteToken,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _poolQuoteToken,</td>
|
|
</tr>
|
|
<tr class="SectionAll">
|
|
<td class="TextItemSigMod"> <span class="TextSegSigDiff">_</span><span class="TextSegSigDiff">POOL_</span><span class="TextSegInsigDiff">FEE</span><span class="TextSegSigDiff">_</span><span class="TextSegInsigDiff">RATE</span><span class="TextSegSigDiff">_,</span></td>
|
|
<td class="AlignCenter"><></td>
|
|
<td class="TextItemSigMod"> <span class="TextSegSigDiff">3e15,</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">//</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">0.3%</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">lp</span><span class="TextSegInsigDiff"> </span><span class="TextSegInsigDiff">fee</span><span class="TextSegInsigDiff">Rate</span></td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame"> poolI,</td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame"> poolI,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> DecimalMath.ONE,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> DecimalMath.ONE,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _IS_OPEN_TWAP_</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _IS_OPEN_TWAP_</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> );</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> );</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 avgPrice = unUsedBase == 0 ? _I_ : DecimalMath.divCeil(poolQuote, unUsedBase);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 avgPrice = unUsedBase == 0 ? _I_ : DecimalMath.divCeil(poolQuote, unUsedBase);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _AVG_SETTLED_PRICE_ = avgPrice;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _AVG_SETTLED_PRICE_ = avgPrice;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _transferBaseOut(_POOL_, poolBase);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _transferBaseOut(_POOL_, poolBase);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _transferQuoteOut(_POOL_, poolQuote);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _transferQuoteOut(_POOL_, poolQuote);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> (_TOTAL_LP_AMOUNT_, ,) = IDVM(_POOL_).buyShares(address(this));</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> (_TOTAL_LP_AMOUNT_, ,) = IDVM(_POOL_).buyShares(address(this));</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> msg.sender.transfer(_SETTEL_FUND_);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> msg.sender.transfer(_SETTEL_FUND_);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> emit Settle();</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> emit Settle();</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> // in case something wrong with base token contract</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // in case something wrong with base token contract</td>
|
|
</tr>
|
|
<tr class="SectionAll">
|
|
<td class="TextItemSigMod"> function emergencySettle() external <span class="TextSegSigDiff">isForceStop</span><span class="TextSegInsigDiff"> </span>phaseSettlement preventReentrant {</td>
|
|
<td class="AlignCenter"><></td>
|
|
<td class="TextItemSigMod"> function emergencySettle() external phaseSettlement preventReentrant {</td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame"> require(block.timestamp >= _PHASE_CALM_ENDTIME_.add(_SETTLEMENT_EXPIRE_), "NOT_EMERGENCY");</td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame"> require(block.timestamp >= _PHASE_CALM_ENDTIME_.add(_SETTLEMENT_EXPIRE_), "NOT_EMERGENCY");</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _settle();</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _settle();</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _UNUSED_QUOTE_ = _QUOTE_TOKEN_.balanceOf(address(this));</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _UNUSED_QUOTE_ = _QUOTE_TOKEN_.balanceOf(address(this));</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function _settle() internal {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function _settle() internal {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> require(!_SETTLED_, "ALREADY_SETTLED");</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> require(!_SETTLED_, "ALREADY_SETTLED");</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _SETTLED_ = true;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _SETTLED_ = true;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _SETTLED_TIME_ = block.timestamp;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _SETTLED_TIME_ = block.timestamp;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // ============ Pricing ============</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // ============ Pricing ============</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function getSettleResult() public view returns (uint256 poolBase, uint256 poolQuote, uint256 poolI, uint256 unUsedBase, uint256 unUsedQuote) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function getSettleResult() public view returns (uint256 poolBase, uint256 poolQuote, uint256 poolI, uint256 unUsedBase, uint256 unUsedQuote) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> poolQuote = _QUOTE_TOKEN_.balanceOf(address(this));</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> poolQuote = _QUOTE_TOKEN_.balanceOf(address(this));</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> if (poolQuote > _POOL_QUOTE_CAP_) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> if (poolQuote > _POOL_QUOTE_CAP_) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> poolQuote = _POOL_QUOTE_CAP_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> poolQuote = _POOL_QUOTE_CAP_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> (uint256 soldBase,) = PMMPricing.sellQuoteToken(_getPMMState(), poolQuote);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> (uint256 soldBase,) = PMMPricing.sellQuoteToken(_getPMMState(), poolQuote);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> poolBase = _TOTAL_BASE_.sub(soldBase);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> poolBase = _TOTAL_BASE_.sub(soldBase);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> unUsedQuote = _QUOTE_TOKEN_.balanceOf(address(this)).sub(poolQuote);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> unUsedQuote = _QUOTE_TOKEN_.balanceOf(address(this)).sub(poolQuote);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> unUsedBase = _BASE_TOKEN_.balanceOf(address(this)).sub(poolBase);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> unUsedBase = _BASE_TOKEN_.balanceOf(address(this)).sub(poolBase);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // Try to make midPrice equal to avgPrice</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // Try to make midPrice equal to avgPrice</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // k=1, If quote and base are not balanced, one side must be cut off</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // k=1, If quote and base are not balanced, one side must be cut off</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // DVM truncated quote, but if more quote than base entering the pool, we need set the quote to the base</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // DVM truncated quote, but if more quote than base entering the pool, we need set the quote to the base</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // m = avgPrice</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // m = avgPrice</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // i = m (1-quote/(m*base))</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // i = m (1-quote/(m*base))</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // if quote = m*base i = 1</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // if quote = m*base i = 1</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // if quote > m*base reverse</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // if quote > m*base reverse</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 avgPrice = unUsedBase == 0 ? _I_ : DecimalMath.divCeil(poolQuote, unUsedBase);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 avgPrice = unUsedBase == 0 ? _I_ : DecimalMath.divCeil(poolQuote, unUsedBase);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 baseDepth = DecimalMath.mulFloor(avgPrice, poolBase);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 baseDepth = DecimalMath.mulFloor(avgPrice, poolBase);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> if (poolQuote == 0) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> if (poolQuote == 0) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // ask side only DVM</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // ask side only DVM</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> poolI = _I_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> poolI = _I_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> } else if (unUsedBase== poolBase) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> } else if (unUsedBase== poolBase) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // standard bonding curve</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // standard bonding curve</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> poolI = 1;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> poolI = 1;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> } else if (unUsedBase < poolBase) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> } else if (unUsedBase < poolBase) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // poolI up round</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // poolI up round</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 ratio = DecimalMath.ONE.sub(DecimalMath.divFloor(poolQuote, baseDepth));</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 ratio = DecimalMath.ONE.sub(DecimalMath.divFloor(poolQuote, baseDepth));</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> poolI = avgPrice.mul(ratio).mul(ratio).divCeil(DecimalMath.ONE2);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> poolI = avgPrice.mul(ratio).mul(ratio).divCeil(DecimalMath.ONE2);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> } else if (unUsedBase > poolBase) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> } else if (unUsedBase > poolBase) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // poolI down round</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // poolI down round</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 ratio = DecimalMath.ONE.sub(DecimalMath.divCeil(baseDepth, poolQuote));</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 ratio = DecimalMath.ONE.sub(DecimalMath.divCeil(baseDepth, poolQuote));</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> poolI = ratio.mul(ratio).div(avgPrice);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> poolI = ratio.mul(ratio).div(avgPrice);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function _getPMMState() internal view returns (PMMPricing.PMMState memory state) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function _getPMMState() internal view returns (PMMPricing.PMMState memory state) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.i = _I_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.i = _I_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.K = _K_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.K = _K_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.B = _TOTAL_BASE_;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.B = _TOTAL_BASE_;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.Q = 0;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.Q = 0;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.B0 = state.B;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.B0 = state.B;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.Q0 = 0;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.Q0 = 0;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> state.R = PMMPricing.RState.ONE;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> state.R = PMMPricing.RState.ONE;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function getExpectedAvgPrice() external view returns (uint256) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function getExpectedAvgPrice() external view returns (uint256) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> require(!_SETTLED_, "ALREADY_SETTLED");</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> require(!_SETTLED_, "ALREADY_SETTLED");</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> (uint256 poolBase, uint256 poolQuote, , , ) = getSettleResult();</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> (uint256 poolBase, uint256 poolQuote, , , ) = getSettleResult();</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return DecimalMath.divCeil(poolQuote, _BASE_TOKEN_.balanceOf(address(this)).sub(poolBase));</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return DecimalMath.divCeil(poolQuote, _BASE_TOKEN_.balanceOf(address(this)).sub(poolBase));</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // ============ Asset In ============</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // ============ Asset In ============</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function _getQuoteInput() internal view returns (uint256 input) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function _getQuoteInput() internal view returns (uint256 input) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return _QUOTE_TOKEN_.balanceOf(address(this)).sub(_QUOTE_RESERVE_);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return _QUOTE_TOKEN_.balanceOf(address(this)).sub(_QUOTE_RESERVE_);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // ============ Set States ============</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // ============ Set States ============</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function _sync() internal {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function _sync() internal {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 quoteBalance = _QUOTE_TOKEN_.balanceOf(address(this));</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 quoteBalance = _QUOTE_TOKEN_.balanceOf(address(this));</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> if (quoteBalance != _QUOTE_RESERVE_) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> if (quoteBalance != _QUOTE_RESERVE_) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _QUOTE_RESERVE_ = quoteBalance;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _QUOTE_RESERVE_ = quoteBalance;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // ============ Asset Out ============</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // ============ Asset Out ============</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function _transferBaseOut(address to, uint256 amount) internal {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function _transferBaseOut(address to, uint256 amount) internal {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> if (amount > 0) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> if (amount > 0) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _BASE_TOKEN_.safeTransfer(to, amount);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _BASE_TOKEN_.safeTransfer(to, amount);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function _transferQuoteOut(address to, uint256 amount) internal {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function _transferQuoteOut(address to, uint256 amount) internal {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> if (amount > 0) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> if (amount > 0) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _QUOTE_TOKEN_.safeTransfer(to, amount);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _QUOTE_TOKEN_.safeTransfer(to, amount);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function getShares(address user) external view returns (uint256) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function getShares(address user) external view returns (uint256) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return _SHARES_[user];</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return _SHARES_[user];</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">}</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">}</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">// File: contracts/CrowdPooling/impl/CPVesting.sol</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">// File: contracts/CrowdPooling/impl/CPVesting.sol</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter">-+</td>
|
|
<td class="TextItemInsigMod"> </td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemInsigMod"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame">/**</td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame">/**</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @title CPVesting</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @title CPVesting</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @author DODO Breeder</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @author DODO Breeder</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> *</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> *</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @notice Lock Token and release it linearly</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @notice Lock Token and release it linearly</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> */</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> */</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">contract CPVesting is CPFunding {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">contract CPVesting is CPFunding {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> using SafeMath for uint256;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> using SafeMath for uint256;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> using SafeERC20 for IERC20;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> using SafeERC20 for IERC20;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // ============ Events ============</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // ============ Events ============</td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">event</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">ClaimBaseToken(address</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">user,</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">uint256</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">baseAmount);</span></td>
|
|
<td class="AlignCenter"><></td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSigMod"> event Claim<span class="TextSegSigDiff">QuoteToken</span>(address user, uint256 quoteAmount);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSigMod"> event Claim(address user<span class="TextSegSigDiff">,</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">uint256</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">baseAmount</span>, uint256 quoteAmount);</td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame"> event ClaimLP(uint256 amount);</td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame"> event ClaimLP(uint256 amount);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // ================ Modifiers ================</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // ================ Modifiers ================</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> modifier afterSettlement() {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> modifier afterSettlement() {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> require(_SETTLED_, "NOT_SETTLED");</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> require(_SETTLED_, "NOT_SETTLED");</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> modifier afterFreeze() {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> modifier afterFreeze() {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> require(_SETTLED_ && block.timestamp >= _SETTLED_TIME_.add(_FREEZE_DURATION_), "FREEZED");</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> require(_SETTLED_ && block.timestamp >= _SETTLED_TIME_.add(_FREEZE_DURATION_), "FREEZED");</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">modifier</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">afterClaimFreeze()</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">{</span></td>
|
|
<td class="AlignCenter">+-</td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">require(_SETTLED_</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">&&</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">block.timestamp</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">>=</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">_SETTLED_TIME_.add(_TOKEN_CLAIM_DURATION_),</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">"CLAIM_FREEZED");</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">_;</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">}</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemInsigMod"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame"> // ============ Bidder Functions ============</td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame"> // ============ Bidder Functions ============</td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSigMod"> function <span class="TextSegInsigDiff">c</span>laim<span class="TextSegSigDiff">QuoteToken</span>(address to,bytes calldata data) external afterSettlement {</td>
|
|
<td class="AlignCenter"><></td>
|
|
<td class="TextItemSigMod"> function <span class="TextSegSigDiff">bidder</span><span class="TextSegInsigDiff">C</span>laim(address to,bytes calldata data) external afterSettlement {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"> require(!_CLAIMED_<span class="TextSegSigDiff">QUOTE_</span>[msg.sender], "ALREADY_CLAIME<span class="TextSegSigDiff">D_FUN</span>D");</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSigMod"> require(!_CLAIMED_[msg.sender], "ALREADY_CLAIMED");</td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSigMod"> _CLAIMED_<span class="TextSegSigDiff">QUOTE_</span>[msg.sender] = true;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSigMod"> _CLAIMED_[msg.sender] = true;</td>
|
|
</tr>
|
|
<tr class="SectionAll">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionAll">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter">-+</td>
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">uint256</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">baseAmount</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">=</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">_UNUSED_BASE_.mul(_SHARES_[msg.sender]).div(_TOTAL_SHARES_);</span></td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame"> uint256 quoteAmount = _UNUSED_QUOTE_.mul(_SHARES_[msg.sender]).div(_TOTAL_SHARES_);</td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame"> uint256 quoteAmount = _UNUSED_QUOTE_.mul(_SHARES_[msg.sender]).div(_TOTAL_SHARES_);</td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionAll">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter">-+</td>
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">_transferBaseOut(to,</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">baseAmount);</span></td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame"> _transferQuoteOut(to, quoteAmount);</td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame"> _transferQuoteOut(to, quoteAmount);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> if(data.length>0){</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> if(data.length>0){</td>
|
|
</tr>
|
|
<tr class="SectionAll">
|
|
<td class="TextItemSigMod"> IDODOCallee(to).CPClaimBidCall(msg.sender,<span class="TextSegSigDiff">0</span>,quoteAmount,data);</td>
|
|
<td class="AlignCenter"><></td>
|
|
<td class="TextItemSigMod"> IDODOCallee(to).CPClaimBidCall(msg.sender,<span class="TextSegSigDiff">baseAmount</span>,quoteAmount,data);</td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSigMod"> emit Claim<span class="TextSegSigDiff">QuoteToken</span>(msg.sender, quoteAmount);</td>
|
|
<td class="AlignCenter"><></td>
|
|
<td class="TextItemSigMod"> emit Claim(msg.sender<span class="TextSegSigDiff">,</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">baseAmount</span>, quoteAmount);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">}</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemInsigMod"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemInsigMod"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">function</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">claimBaseToken()</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">external</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">afterClaimFreeze</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">{</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">uint256</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">claimableBaseAmount</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">=</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">getClaimableBaseToken(msg.sender);</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">_transferBaseOut(msg.sender,</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">claimableBaseAmount);</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">_CLAIMED_BASE_TOKEN_[msg.sender]</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">=</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">_CLAIMED_BASE_TOKEN_[msg.sender].add(claimableBaseAmount);</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">emit</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">ClaimBaseToken(msg.sender,</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">claimableBaseAmount);</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">}</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemInsigMod"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">function</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">getClaimableBaseToken(address</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">user)</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">public</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">view</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">afterClaimFreeze</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">returns</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">(uint256)</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">{</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">uint256</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">baseTotalAmount</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">=</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">_UNUSED_BASE_.mul(_SHARES_[user]).div(_TOTAL_SHARES_);</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemInsigMod"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">uint256</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">remainingBaseToken</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">=</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">DecimalMath.mulFloor(</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">getRemainingBaseTokenRatio(block.timestamp),</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">baseTotalAmount</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">);</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">return</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">baseTotalAmount.sub(remainingBaseToken).sub(_CLAIMED_BASE_TOKEN_[user]);</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">}</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemInsigMod"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">function</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">getRemainingBaseTokenRatio(uint256</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">timestamp)</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">public</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">view</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">afterClaimFreeze</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">returns</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">(uint256)</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">{</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">uint256</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">timePast</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">=</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">timestamp.sub(_SETTLED_TIME_.add(_TOKEN_CLAIM_DURATION_));</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">if</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">(timePast</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff"><</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">_TOKEN_VESTING_DURATION_)</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">{</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">uint256</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">remainingTime</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">=</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">_TOKEN_VESTING_DURATION_.sub(timePast);</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">return</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">DecimalMath.ONE.sub(_TOKEN_CLIFF_RATE_).mul(remainingTime).div(_TOKEN_VESTING_DURATION_);</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">}</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">else</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">{</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">return</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">0;</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">}</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> // ============ Owner Functions ============</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> // ============ Owner Functions ============</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function claimLPToken() external onlyOwner afterFreeze {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function claimLPToken() external onlyOwner afterFreeze {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 lpAmount = getClaimableLPToken();</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 lpAmount = getClaimableLPToken();</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> IERC20(_POOL_).safeTransfer(_OWNER_, lpAmount);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> IERC20(_POOL_).safeTransfer(_OWNER_, lpAmount);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> emit ClaimLP(lpAmount);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> emit ClaimLP(lpAmount);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function getClaimableLPToken() public view afterFreeze returns (uint256) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function getClaimableLPToken() public view afterFreeze returns (uint256) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 remainingLPToken = DecimalMath.mulFloor(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 remainingLPToken = DecimalMath.mulFloor(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> getRemainingLPRatio(block.timestamp),</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> getRemainingLPRatio(block.timestamp),</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _TOTAL_LP_AMOUNT_</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _TOTAL_LP_AMOUNT_</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> );</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> );</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return IERC20(_POOL_).balanceOf(address(this)).sub(remainingLPToken);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return IERC20(_POOL_).balanceOf(address(this)).sub(remainingLPToken);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function getRemainingLPRatio(uint256 timestamp) public view afterFreeze returns (uint256) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function getRemainingLPRatio(uint256 timestamp) public view afterFreeze returns (uint256) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 timePast = timestamp.sub(_SETTLED_TIME_.add(_FREEZE_DURATION_));</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 timePast = timestamp.sub(_SETTLED_TIME_.add(_FREEZE_DURATION_));</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> if (timePast < _VESTING_DURATION_) {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> if (timePast < _VESTING_DURATION_) {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256 remainingTime = _VESTING_DURATION_.sub(timePast);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256 remainingTime = _VESTING_DURATION_.sub(timePast);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return DecimalMath.ONE.sub(_CLIFF_RATE_).mul(remainingTime).div(_VESTING_DURATION_);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return DecimalMath.ONE.sub(_CLIFF_RATE_).mul(remainingTime).div(_VESTING_DURATION_);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> } else {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> } else {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> return 0;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> return 0;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">}</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">}</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">// File: contracts/CrowdPooling/impl/CP.sol</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">// File: contracts/CrowdPooling/impl/CP.sol</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionAll">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter">-+</td>
|
|
<td class="TextItemInsigMod"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame">/**</td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame">/**</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @title DODO CrowdPooling</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @title DODO CrowdPooling</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @author DODO Breeder</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @author DODO Breeder</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> *</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> *</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> * @notice CrowdPooling initialization</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> * @notice CrowdPooling initialization</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> */</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> */</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame">contract CP is CPVesting {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame">contract CP is CPVesting {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> using SafeMath for uint256;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> using SafeMath for uint256;</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> receive() external payable {</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> receive() external payable {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> require(_INITIALIZED_ == false, "WE_NOT_SAVE_ETH_AFTER_INIT");</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> require(_INITIALIZED_ == false, "WE_NOT_SAVE_ETH_AFTER_INIT");</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> function init(</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> function init(</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> address[] calldata addressList,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> address[] calldata addressList,</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> uint256[] calldata timeLine,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256[] calldata timeLine,</td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> uint256[] calldata valueList,</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> uint256[] calldata valueList,</td>
|
|
</tr>
|
|
<tr class="SectionAll">
|
|
<td class="TextItemSigMod"> bool<span class="TextSegSigDiff">[]</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">calldata</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">switches</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">//0</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">isOverCapStop</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">1</span> isOpenTWAP</td>
|
|
<td class="AlignCenter"><></td>
|
|
<td class="TextItemSigMod"> bool isOpenTWAP</td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame"> ) external {</td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame"> ) external {</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> /*</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> /*</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> Address List</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> Address List</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> 0. owner</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> 0. owner</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> 1. maintainer</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> 1. maintainer</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> 2. baseToken</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> 2. baseToken</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> 3. quoteToken</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> 3. quoteToken</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> 4. permissionManager</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> 4. permissionManager</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> 5. feeRateModel</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> 5. feeRateModel</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> 6. poolFactory</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> 6. poolFactory</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> */</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> */</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> require(addressList.length == 7, "LIST_LENGTH_WRONG");</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> require(addressList.length == 7, "LIST_LENGTH_WRONG");</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> initOwner(addressList[0]);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> initOwner(addressList[0]);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _MAINTAINER_ = addressList[1];</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _MAINTAINER_ = addressList[1];</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _BASE_TOKEN_ = IERC20(addressList[2]);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _BASE_TOKEN_ = IERC20(addressList[2]);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _QUOTE_TOKEN_ = IERC20(addressList[3]);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _QUOTE_TOKEN_ = IERC20(addressList[3]);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _BIDDER_PERMISSION_ = IPermissionManager(addressList[4]);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _BIDDER_PERMISSION_ = IPermissionManager(addressList[4]);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _MT_FEE_RATE_MODEL_ = IFeeRateModel(addressList[5]);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _MT_FEE_RATE_MODEL_ = IFeeRateModel(addressList[5]);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _POOL_FACTORY_ = addressList[6];</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _POOL_FACTORY_ = addressList[6];</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> /*</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> /*</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> Time Line</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> Time Line</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> 0. phase bid starttime</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> 0. phase bid starttime</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> 1. phase bid duration</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> 1. phase bid duration</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> 2. phase calm duration</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> 2. phase calm duration</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> 3. freeze duration</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> 3. freeze duration</td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> 4. vesting duration</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> 4. vesting duration</td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">5.</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">claim</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">freeze</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">duration</span></td>
|
|
<td class="AlignCenter">+-</td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">6.</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">claim</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">vesting</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">duration</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame"> */</td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame"> */</td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionAll">
|
|
<td class="TextItemSigMod"> require(timeLine.length == <span class="TextSegSigDiff">7</span>, "LIST_LENGTH_WRONG");</td>
|
|
<td class="AlignCenter"><></td>
|
|
<td class="TextItemSigMod"> require(timeLine.length == <span class="TextSegSigDiff">5</span>, "LIST_LENGTH_WRONG");</td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _PHASE_BID_STARTTIME_ = timeLine[0];</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _PHASE_BID_STARTTIME_ = timeLine[0];</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _PHASE_BID_ENDTIME_ = _PHASE_BID_STARTTIME_.add(timeLine[1]);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _PHASE_BID_ENDTIME_ = _PHASE_BID_STARTTIME_.add(timeLine[1]);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _PHASE_CALM_ENDTIME_ = _PHASE_BID_ENDTIME_.add(timeLine[2]);</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _PHASE_CALM_ENDTIME_ = _PHASE_BID_ENDTIME_.add(timeLine[2]);</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _FREEZE_DURATION_ = timeLine[3];</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _FREEZE_DURATION_ = timeLine[3];</td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> _VESTING_DURATION_ = timeLine[4];</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _VESTING_DURATION_ = timeLine[4];</td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">_TOKEN_CLAIM_DURATION_</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">=</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">timeLine[5];</span></td>
|
|
<td class="AlignCenter"><></td>
|
|
<td class="TextItemSigMod"> </td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">_TOKEN_VESTING_DURATION_</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">=</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">timeLine[6];</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame"> require(block.timestamp <= _PHASE_BID_STARTTIME_, "TIMELINE_WRONG");</td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame"> require(block.timestamp <= _PHASE_BID_STARTTIME_, "TIMELINE_WRONG");</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> /*</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> /*</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> Value List</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> Value List</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> 0. pool quote cap</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> 0. pool quote cap</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> 1. k</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> 1. k</td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> 2. i</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> 2. i</td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSigMod"> 3. <span class="TextSegSigDiff">lp</span><span class="TextSegInsigDiff"> </span>cliff rate</td>
|
|
<td class="AlignCenter"><></td>
|
|
<td class="TextItemSigMod"> 3. cliff rate</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">4.</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">base</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">token</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">cliff</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">rate</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">5.</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">lp</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">fee</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">rate</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame"> */</td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame"> */</td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionAll">
|
|
<td class="TextItemSigMod"> require(valueList.length == <span class="TextSegSigDiff">6</span>, "LIST_LENGTH_WRONG");</td>
|
|
<td class="AlignCenter"><></td>
|
|
<td class="TextItemSigMod"> require(valueList.length == <span class="TextSegSigDiff">4</span>, "LIST_LENGTH_WRONG");</td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _POOL_QUOTE_CAP_ = valueList[0];</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _POOL_QUOTE_CAP_ = valueList[0];</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _K_ = valueList[1];</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _K_ = valueList[1];</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _I_ = valueList[2];</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _I_ = valueList[2];</td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> _CLIFF_RATE_ = valueList[3];</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _CLIFF_RATE_ = valueList[3];</td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">_TOKEN_CLIFF_RATE_</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">=</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">valueList[4];</span></td>
|
|
<td class="AlignCenter">+-</td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">_POOL_FEE_RATE_</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">=</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">valueList[5];</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> require(_I_ > 0 && _I_ <= 1e36, "I_VALUE_WRONG");</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> require(_I_ > 0 && _I_ <= 1e36, "I_VALUE_WRONG");</td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> require(_K_ <= 1e18, "K_VALUE_WRONG");</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> require(_K_ <= 1e18, "K_VALUE_WRONG");</td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> require(_CLIFF_RATE_ <= 1e18, "CLIFF_RATE_WRONG");</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> require(_CLIFF_RATE_ <= 1e18, "CLIFF_RATE_WRONG");</td>
|
|
</tr>
|
|
<tr class="SectionAll">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">require(_TOKEN_CLIFF_RATE_</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff"><=</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">1e18,</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">"TOKEN_CLIFF_RATE_WRONG");</span></td>
|
|
<td class="AlignCenter">+-</td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> _TOTAL_BASE_ = _BASE_TOKEN_.balanceOf(address(this));</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> _TOTAL_BASE_ = _BASE_TOKEN_.balanceOf(address(this));</td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">_IS_OVERCAP_STOP</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">=</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">switches[0];</span></td>
|
|
<td class="AlignCenter"><></td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSigMod"> _IS_OPEN_TWAP_ = <span class="TextSegSigDiff">s</span><span class="TextSegSigDiff">witches[1]</span>;</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSigMod"> _IS_OPEN_TWAP_ = <span class="TextSegSigDiff">isOpenTWAP</span>;</td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemSame"> </td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSame"> require(address(this).balance == _SETTEL_FUND_, "SETTLE_FUND_NOT_MATCH");</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> require(address(this).balance == _SETTEL_FUND_, "SETTLE_FUND_NOT_MATCH");</td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSame"> }</td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> }</td>
|
|
</tr>
|
|
<tr class="SectionBegin">
|
|
<td class="TextItemInsigMod"> </td>
|
|
<td class="AlignCenter">+-</td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">//</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">============</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">Version</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">Control</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">============</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemInsigMod"> </td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">function</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">version()</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">virtual</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">external</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">pure</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">returns</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">(string</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">memory)</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">{</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionMiddle">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">return</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">"CP</span><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">2.0.0";</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionEnd">
|
|
<td class="TextItemSigMod"><span class="TextSegInsigDiff"> </span><span class="TextSegSigDiff">}</span></td>
|
|
<td class="AlignCenter"> </td>
|
|
<td class="TextItemSame"> </td>
|
|
</tr>
|
|
<tr class="SectionAll">
|
|
<td class="TextItemSame">}</td>
|
|
<td class="AlignCenter">=</td>
|
|
<td class="TextItemSame">}</td>
|
|
</tr>
|
|
</table>
|
|
<br>
|
|
</body>
|
|
</html>
|