diff --git a/README.md b/README.md index 176d234..67e2167 100644 --- a/README.md +++ b/README.md @@ -42,88 +42,88 @@ This section presents detailed gas usage data for various swapping scenarios acr ### Fusion ``` -┌─────────────────────────────────────────────────────────────────────────┐ -│ Fusion │ -├───────────────────────────────────────────┬─────────┬─────────┬─────────┤ -│ case │ 1inch │ uniswap │ cowswap │ -├───────────────────────────────────────────┼─────────┼─────────┼─────────┤ -│ WETH => DAI w/o callback by EOA │ 116,226 │ 128,145 │ 131,704 │ -├───────────────────────────────────────────┼─────────┼─────────┼─────────┤ -│ WETH => DAI w/o callback by contract │ 116,586 │ 128,618 │ 135,778 │ -├───────────────────────────────────────────┼─────────┼─────────┼─────────┤ -│ WETH => DAI with callback, resolver funds │ 120,779 │ 132,890 │ 140,905 │ -├───────────────────────────────────────────┼─────────┼─────────┼─────────┤ -│ WETH => DAI with callback, taker funds │ 137,600 │ 146,413 │ 154,551 │ -└───────────────────────────────────────────┴─────────┴─────────┴─────────┘ +┌─────────────────────────────────────────────────────────────────────────────────────────────┐ +│ Fusion │ +├───────────────────────────────────────────┬─────────┬───────────────────┬───────────────────┤ +│ case │ 1inch │ uniswap │ cowswap │ +├───────────────────────────────────────────┼─────────┼─────────┬─────────┼─────────┬─────────┤ +│ WETH => DAI w/o callback by EOA │ 116,214 │ 128,157 │ +10.28% │ 131,704 │ +13.33% │ +├───────────────────────────────────────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ +│ WETH => DAI w/o callback by contract │ 116,586 │ 128,618 │ +10.32% │ 135,778 │ +16.46% │ +├───────────────────────────────────────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ +│ WETH => DAI with callback, resolver funds │ 120,767 │ 132,878 │ +10.03% │ 140,917 │ +16.69% │ +├───────────────────────────────────────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ +│ WETH => DAI with callback, taker funds │ 137,624 │ 146,425 │ +6.39% │ 154,575 │ +12.32% │ +└───────────────────────────────────────────┴─────────┴─────────┴─────────┴─────────┴─────────┘ ``` ### Limit Orders ``` -┌──────────────────────────────────────────────────────┐ -│ Limit Orders │ -├─────────────┬─────────┬─────────┬─────────┬──────────┤ -│ case │ 1inch │ uniswap │ 0x │ paraswap │ -├─────────────┼─────────┼─────────┼─────────┴──────────┤ -│ ETH => DAI │ 90,345 │ 113,519 │ │ -├─────────────┼─────────┼─────────┼─────────┬──────────┤ -│ WETH => DAI │ 102,560 │ 113,389 │ 111,045 │ 153,674 │ -└─────────────┴─────────┴─────────┴─────────┴──────────┘ +┌──────────────────────────────────────────────────────────────────────────────────┐ +│ Limit Orders │ +├─────────────┬─────────┬───────────────────┬──────────────────┬───────────────────┤ +│ case │ 1inch │ uniswap │ 0x │ paraswap │ +├─────────────┼─────────┼─────────┬─────────┼──────────────────┴───────────────────┤ +│ ETH => DAI │ 90,345 │ 113,519 │ +25.65% │ │ +├─────────────┼─────────┼─────────┼─────────┼─────────┬────────┬─────────┬─────────┤ +│ WETH => DAI │ 102,560 │ 113,377 │ +10.55% │ 111,045 │ +8.27% │ 153,693 │ +49.86% │ +└─────────────┴─────────┴─────────┴─────────┴─────────┴────────┴─────────┴─────────┘ ``` ### Router ``` -┌─────────────────────────────────────────────────────────────────────────────────────────────┐ -│ UniswapV2 pools │ -├─────────────────────────────┬─────────┬─────────┬───────────────────┬────────────┬──────────┤ -│ path │ 1inch │ 0x │ uniswap_universal │ uniswap_v2 │ paraswap │ -├─────────────────────────────┼─────────┼─────────┼───────────────────┼────────────┼──────────┤ -│ ETH => DAI │ 88,124 │ 92,367 │ 99,047 │ 91,558 │ 98,119 │ -├─────────────────────────────┼─────────┼─────────┼───────────────────┼────────────┼──────────┤ -│ ETH => USDC => DAI │ 140,942 │ 146,011 │ 155,271 │ 148,765 │ 151,554 │ -├─────────────────────────────┼─────────┼─────────┼───────────────────┼────────────┼──────────┤ -│ DAI => ETH │ 100,153 │ 101,197 │ 104,985 │ 103,127 │ 101,185 │ -├─────────────────────────────┼─────────┼─────────┼───────────────────┼────────────┼──────────┤ -│ DAI => WETH │ 84,087 │ 87,789 │ 100,457 │ 87,209 │ 92,808 │ -├─────────────────────────────┼─────────┼─────────┼───────────────────┼────────────┼──────────┤ -│ DAI => WETH => USDC │ 136,874 │ 140,628 │ 157,420 │ 143,612 │ 148,397 │ -├─────────────────────────────┼─────────┼─────────┼───────────────────┼────────────┼──────────┤ -│ DAI => WETH => USDC => USDT │ 190,978 │ 194,795 │ 214,242 │ 201,269 │ 203,672 │ -└─────────────────────────────┴─────────┴─────────┴───────────────────┴────────────┴──────────┘ +┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ UniswapV2 pools │ +├─────────────────────────────┬─────────┬──────────────────┬───────────────────┬──────────────────┬───────────────────┤ +│ path │ 1inch │ 0x │ uniswap_universal │ uniswap_v2 │ paraswap │ +├─────────────────────────────┼─────────┼─────────┬────────┼─────────┬─────────┼─────────┬────────┼─────────┬─────────┤ +│ ETH => DAI │ 88,124 │ 92,367 │ +4.81% │ 99,047 │ +12.40% │ 91,558 │ +3.90% │ 98,119 │ +11.34% │ +├─────────────────────────────┼─────────┼─────────┼────────┼─────────┼─────────┼─────────┼────────┼─────────┼─────────┤ +│ ETH => USDC => DAI │ 140,942 │ 146,011 │ +3.60% │ 155,271 │ +10.17% │ 148,765 │ +5.55% │ 151,566 │ +7.54% │ +├─────────────────────────────┼─────────┼─────────┼────────┼─────────┼─────────┼─────────┼────────┼─────────┼─────────┤ +│ DAI => ETH │ 100,153 │ 101,197 │ +1.04% │ 104,985 │ +4.82% │ 103,127 │ +2.97% │ 101,185 │ +1.03% │ +├─────────────────────────────┼─────────┼─────────┼────────┼─────────┼─────────┼─────────┼────────┼─────────┼─────────┤ +│ DAI => WETH │ 84,087 │ 87,789 │ +4.40% │ 100,457 │ +19.47% │ 87,209 │ +3.71% │ 92,808 │ +10.37% │ +├─────────────────────────────┼─────────┼─────────┼────────┼─────────┼─────────┼─────────┼────────┼─────────┼─────────┤ +│ DAI => WETH => USDC │ 136,874 │ 140,628 │ +2.74% │ 157,420 │ +15.01% │ 143,612 │ +4.92% │ 148,397 │ +8.42% │ +├─────────────────────────────┼─────────┼─────────┼────────┼─────────┼─────────┼─────────┼────────┼─────────┼─────────┤ +│ DAI => WETH => USDC => USDT │ 190,978 │ 194,795 │ +2.00% │ 214,242 │ +12.18% │ 201,269 │ +5.39% │ 203,672 │ +6.65% │ +└─────────────────────────────┴─────────┴─────────┴────────┴─────────┴─────────┴─────────┴────────┴─────────┴─────────┘ ``` ``` -┌─────────────────────────────────────────────────────────────────────────────────────────────┐ -│ UniswapV3 pools │ -├─────────────────────────────┬─────────┬─────────┬───────────────────┬────────────┬──────────┤ -│ path │ 1inch │ 0x │ uniswap_universal │ uniswap_v3 │ paraswap │ -├─────────────────────────────┼─────────┼─────────┼───────────────────┼────────────┼──────────┤ -│ ETH => DAI │ 109,119 │ 117,748 │ 115,811 │ 112,900 │ 118,816 │ -├─────────────────────────────┼─────────┼─────────┼───────────────────┼────────────┼──────────┤ -│ ETH => USDC => DAI │ 174,754 │ 185,069 │ 182,870 │ 184,693 │ 184,578 │ -├─────────────────────────────┼─────────┼─────────┼───────────────────┼────────────┼──────────┤ -│ DAI => ETH │ 112,362 │ 118,745 │ 114,522 │ 120,384 │ 114,008 │ -├─────────────────────────────┼─────────┼─────────┼───────────────────┼────────────┼──────────┤ -│ DAI => WETH │ 98,770 │ 105,028 │ 109,994 │ 100,526 │ 105,598 │ -├─────────────────────────────┼─────────┼─────────┼───────────────────┼────────────┼──────────┤ -│ DAI => WETH => USDC │ 169,355 │ 177,184 │ 181,886 │ 177,169 │ 178,335 │ -├─────────────────────────────┼─────────┼─────────┼───────────────────┼────────────┼──────────┤ -│ DAI => WETH => USDC => USDT │ 244,670 │ 253,911 │ 258,324 │ 257,859 │ 255,280 │ -└─────────────────────────────┴─────────┴─────────┴───────────────────┴────────────┴──────────┘ +┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ UniswapV3 pools │ +├─────────────────────────────┬─────────┬──────────────────┬───────────────────┬──────────────────┬──────────────────┤ +│ path │ 1inch │ 0x │ uniswap_universal │ uniswap_v3 │ paraswap │ +├─────────────────────────────┼─────────┼─────────┬────────┼─────────┬─────────┼─────────┬────────┼─────────┬────────┤ +│ ETH => DAI │ 100,497 │ 109,126 │ +8.59% │ 107,166 │ +6.64% │ 104,266 │ +3.75% │ 110,171 │ +9.63% │ +├─────────────────────────────┼─────────┼─────────┼────────┼─────────┼─────────┼─────────┼────────┼─────────┼────────┤ +│ ETH => USDC => DAI │ 174,796 │ 185,111 │ +5.90% │ 182,888 │ +4.63% │ 184,723 │ +5.68% │ 184,596 │ +5.61% │ +├─────────────────────────────┼─────────┼─────────┼────────┼─────────┼─────────┼─────────┼────────┼─────────┼────────┤ +│ DAI => ETH │ 117,147 │ 123,530 │ +5.45% │ 119,307 │ +1.84% │ 125,169 │ +6.85% │ 118,769 │ +1.38% │ +├─────────────────────────────┼─────────┼─────────┼────────┼─────────┼─────────┼─────────┼────────┼─────────┼────────┤ +│ DAI => WETH │ 103,555 │ 109,813 │ +6.04% │ 114,779 │ +10.84% │ 105,311 │ +1.70% │ 110,359 │ +6.57% │ +├─────────────────────────────┼─────────┼─────────┼────────┼─────────┼─────────┼─────────┼────────┼─────────┼────────┤ +│ DAI => WETH => USDC │ 174,198 │ 182,027 │ +4.49% │ 186,729 │ +7.19% │ 182,012 │ +4.49% │ 183,154 │ +5.14% │ +├─────────────────────────────┼─────────┼─────────┼────────┼─────────┼─────────┼─────────┼────────┼─────────┼────────┤ +│ DAI => WETH => USDC => USDT │ 249,513 │ 258,754 │ +3.70% │ 263,167 │ +5.47% │ 262,702 │ +5.29% │ 260,099 │ +4.24% │ +└─────────────────────────────┴─────────┴─────────┴────────┴─────────┴─────────┴─────────┴────────┴─────────┴────────┘ ``` ### Mixed pools ``` -┌─────────────────────────────────────────────────────────┐ -│ Mixed pools │ -├─────────────────────────────────────┬─────────┬─────────┤ -│ path │ 1inch │ uniswap │ -├─────────────────────────────────────┼─────────┼─────────┤ -│ ETH =(uniV2)=> DAI =(uniV3)=> USDC │ 158,554 │ 175,835 │ -├─────────────────────────────────────┼─────────┼─────────┤ -│ ETH =(uniV3)=> DAI =(uniV2)=> USDC │ 160,936 │ 177,095 │ -├─────────────────────────────────────┼─────────┼─────────┤ -│ DAI =(uniV2)=> WETH =(uniV3)=> USDC │ 164,124 │ 185,319 │ -├─────────────────────────────────────┼─────────┼─────────┤ -│ DAI =(uniV3)=> WETH =(uniV2)=> USDC │ 161,045 │ 181,608 │ -└─────────────────────────────────────┴─────────┴─────────┘ +┌───────────────────────────────────────────────────────────────────┐ +│ Mixed pools │ +├─────────────────────────────────────┬─────────┬───────────────────┤ +│ path │ 1inch │ uniswap │ +├─────────────────────────────────────┼─────────┼─────────┬─────────┤ +│ ETH =(uniV2)=> DAI =(uniV3)=> USDC │ 158,538 │ 175,822 │ +10.90% │ +├─────────────────────────────────────┼─────────┼─────────┼─────────┤ +│ ETH =(uniV3)=> DAI =(uniV2)=> USDC │ 161,891 │ 178,050 │ +9.98% │ +├─────────────────────────────────────┼─────────┼─────────┼─────────┤ +│ DAI =(uniV2)=> WETH =(uniV3)=> USDC │ 154,754 │ 175,949 │ +13.70% │ +├─────────────────────────────────────┼─────────┼─────────┼─────────┤ +│ DAI =(uniV3)=> WETH =(uniV2)=> USDC │ 151,513 │ 172,076 │ +13.57% │ +└─────────────────────────────────────┴─────────┴─────────┴─────────┘ ``` ## Contribution diff --git a/test/RouterUniV3.js b/test/RouterUniV3.js index 69557e1..e0a6bed 100644 --- a/test/RouterUniV3.js +++ b/test/RouterUniV3.js @@ -20,7 +20,7 @@ describe('Router [UniV3]', async function () { ...(await initRouterContracts()), settings: { gasUsedTableRow: gasUsedTable.addRow(['ETH => DAI']), - amount: ether('1'), + amount: ether('0.0001'), }, }; } @@ -135,7 +135,7 @@ describe('Router [UniV3]', async function () { ...(await initRouterContracts()), settings: { gasUsedTableRow: gasUsedTable.addRow(['ETH => USDC => DAI']), - amount: ether('1'), + amount: ether('0.0001'), }, }; } @@ -290,7 +290,7 @@ describe('Router [UniV3]', async function () { ...(await initRouterContracts()), settings: { gasUsedTableRow: gasUsedTable.addRow(['DAI => ETH']), - amount: ether('1'), + amount: ether('0.0001'), }, }; } @@ -427,7 +427,7 @@ describe('Router [UniV3]', async function () { ...(await initRouterContracts()), settings: { gasUsedTableRow: gasUsedTable.addRow(['DAI => WETH']), - amount: ether('1'), + amount: ether('0.0001'), }, }; } @@ -549,7 +549,7 @@ describe('Router [UniV3]', async function () { ...(await initRouterContracts()), settings: { gasUsedTableRow: gasUsedTable.addRow(['DAI => WETH => USDC']), - amount: ether('1'), + amount: ether('0.0001'), }, }; } @@ -697,7 +697,7 @@ describe('Router [UniV3]', async function () { ...(await initRouterContracts()), settings: { gasUsedTableRow: gasUsedTable.addRow(['DAI => WETH => USDC => USDT']), - amount: ether('1'), + amount: ether('0.0001'), }, }; } diff --git a/test/helpers/table.js b/test/helpers/table.js index 8ddde48..16f1207 100644 --- a/test/helpers/table.js +++ b/test/helpers/table.js @@ -72,6 +72,14 @@ class GasUsedTable { } toString() { + return this.toStringWithPercentages(); + } + + toStringDefault() { + return this.table.toString(); + } + + toStringWithColors() { for (let i = 1; i < this.table.length; i++) { const row = this.table[i]; const sortRow = row.slice(1).sort(this.compareElementsHook); @@ -95,6 +103,49 @@ class GasUsedTable { return this.table.toString(); } + toStringWithPercentages() { + // Patch table lline with dex names + for (let i = 2; i < this.table[0].length; i++) { + this.table[0][i] = { colSpan: 2, content: this.table[0][i] }; + this.table.options.colAligns[(i - 2) * 2 + 2] = 'center'; + this.table.options.colAligns[(i - 2) * 2 + 3] = 'center'; + this.table.options.head[0].colSpan++; + } + + // Patch table lines with percentages and colors + for (let i = 1; i < this.table.length; i++) { + const row = this.table[i]; + const sortRow = row.slice(1).sort(this.compareElementsHook); + const best = sortRow[sortRow.length - 1]; + const worst = sortRow[0]; + const comparePercentageValue = this.table[i][1]; + const tmpRow = [this.table[i][0]]; + for (let j = 1; j < row.length; j++) { + let cellColor; + switch (row[j]) { + case best: + cellColor = this.colors.best; + break; + case worst: + cellColor = this.colors.worst; + break; + default: + cellColor = this.colors.neutral; + } + if (j === 1) { + tmpRow[j] = chalk[cellColor](this.table[i][j]); + } else { + let diff = (parseFloat(this.table[i][j].replace(/,/g, '')) / parseFloat(comparePercentageValue.replace(/,/g, ''))) * 100 - 100; + diff = diff > 0 ? `+${diff.toFixed(2)}` : diff.toFixed(2); + tmpRow[(j - 2) * 2 + 2] = chalk[cellColor](this.table[i][j]); + tmpRow[(j - 2) * 2 + 3] = chalk[cellColor](`${diff}%`); + } + } + this.table[i] = tmpRow; + } + return this.table.toString(); + } + setColors(colors) { this.colors = colors || this.DEFAULT_COLORS; }