阅读视图

发现新文章,点击刷新页面。
🔲 ☆

friend_tech 第一笔交易只能买 1 个key?

<h2 id="背景"><a href="#背景" class="headerlink" title="背景"></a>背景</h2><p>群里有人说friend tech 第一笔交易只能自己购买1笔?</p><p>我当时就反驳了他,毕竟我也算看过 friend tech 合约代码的人,合约没有限制只能买 1 笔啊</p><h2 id="废话少说,直接看代码"><a href="#废话少说,直接看代码" class="headerlink" title="废话少说,直接看代码"></a>废话少说,直接看代码</h2><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">buyShares</span>(<span class="params">address sharesSubject, uint256 amount</span>) public payable &#123;</span><br><span class="line"> uint256 supply = sharesSupply[sharesSubject];</span><br><span class="line"> <span class="built_in">require</span>(supply &gt; <span class="number">0</span> || sharesSubject == msg.<span class="property">sender</span>, <span class="string">&quot;Only the shares&#x27; subject can buy the first share&quot;</span>);</span><br><span class="line"> uint256 price = <span class="title function_">getPrice</span>(supply, amount);</span><br><span class="line"> uint256 protocolFee = price * protocolFeePercent / <span class="number">1</span> ether;</span><br><span class="line"> uint256 subjectFee = price * subjectFeePercent / <span class="number">1</span> ether;</span><br><span class="line"> <span class="built_in">require</span>(msg.<span class="property">value</span> &gt;= price + protocolFee + subjectFee, <span class="string">&quot;Insufficient payment&quot;</span>);</span><br><span class="line"> sharesBalance[sharesSubject][msg.<span class="property">sender</span>] = sharesBalance[sharesSubject][msg.<span class="property">sender</span>] + amount;</span><br><span class="line"> sharesSupply[sharesSubject] = supply + amount;</span><br><span class="line"> emit <span class="title class_">Trade</span>(msg.<span class="property">sender</span>, sharesSubject, <span class="literal">true</span>, amount, price, protocolFee, subjectFee, supply + amount);</span><br><span class="line"> (bool success1,) = protocolFeeDestination.<span class="property">call</span>&#123;<span class="attr">value</span>: protocolFee&#125;(<span class="string">&quot;&quot;</span>);</span><br><span class="line"> (bool success2,) = sharesSubject.<span class="property">call</span>&#123;<span class="attr">value</span>: subjectFee&#125;(<span class="string">&quot;&quot;</span>);</span><br><span class="line"> <span class="built_in">require</span>(success1 &amp;&amp; success2, <span class="string">&quot;Unable to send funds&quot;</span>);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>一看代码很简单,唯一限制的就这一句</p><p><code>require(supply &gt; 0 || sharesSubject == msg.sender, &quot;Only the shares&#39; subject can buy the first share&quot;);</code></p><p>这句话的意思 新注册用户,只能自己买入第一笔. 也没有限制买多少key啊…</p><h2 id="没那么简单"><a href="#没那么简单" class="headerlink" title="没那么简单"></a>没那么简单</h2><p>那别人为啥还言之凿凿说确实只能买 1 个key 呢?</p><p>严谨一点直接用forge模拟买买看就知道了.</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> &#123;<span class="title class_">TestHarness</span>&#125; <span class="keyword">from</span> <span class="string">&quot;../../TestHarness.sol&quot;</span>;</span><br><span class="line"></span><br><span class="line">interface iFriendtech &#123;</span><br><span class="line"> <span class="keyword">function</span> <span class="title function_">buyShares</span>(<span class="params">address sharesSubject, uint256 amount</span>) external payable;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">contract fuck_friend_tech is <span class="title class_">TestHarness</span> &#123;</span><br><span class="line"> iFriendtech friendtech = <span class="title function_">iFriendtech</span>(<span class="number">0xCF205808Ed36593aa40a44F10c7f7C2F67d4A4d4</span>);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">function</span> <span class="title function_">setUp</span>(<span class="params"></span>) external &#123;</span><br><span class="line"> cheat.<span class="title function_">createSelectFork</span>(<span class="string">&quot;base&quot;</span>, <span class="number">4_119_770</span>);</span><br><span class="line"> cheat.<span class="title function_">deal</span>(<span class="title function_">address</span>(<span class="variable language_">this</span>), <span class="number">100</span> ether);</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">function</span> <span class="title function_">test_attack</span>(<span class="params"></span>) external &#123;</span><br><span class="line"> friendtech.<span class="property">buyShares</span>&#123;<span class="attr">value</span>: <span class="number">100</span> ether&#125;(<span class="title function_">address</span>(<span class="variable language_">this</span>), <span class="number">2</span>);</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="title function_">receive</span>() external payable &#123;&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>你别说,还真失败了…报错为 <code>[FAIL. Reason: Arithmetic over/underflow] test_attack() (gas: 3252)</code></p><p>显示溢出报错.肯定是哪里做运算出错了</p><p>再回头看<code>buyShares</code>的代码,唯一有疑点的地方就是<code>getPrice</code></p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">getPrice</span>(<span class="params">uint256 supply, uint256 amount</span>) public view <span class="title function_">returns</span> (uint256) &#123;</span><br><span class="line"> uint256 sum1 = supply == <span class="number">0</span> ? <span class="number">0</span> : (supply - <span class="number">1</span>) * (supply) * (<span class="number">2</span> * (supply - <span class="number">1</span>) + <span class="number">1</span>) / <span class="number">6</span>;</span><br><span class="line"> uint256 sum2 = supply == <span class="number">0</span> &amp;&amp; amount == <span class="number">1</span></span><br><span class="line"> ? <span class="number">0</span></span><br><span class="line"> : (supply - <span class="number">1</span> + amount) * (supply + amount) * (<span class="number">2</span> * (supply - <span class="number">1</span> + amount) + <span class="number">1</span>) / <span class="number">6</span>;</span><br><span class="line"></span><br><span class="line"> uint256 summation = sum2 - sum1;</span><br><span class="line"> <span class="keyword">return</span> summation * <span class="number">1</span> ether / <span class="number">16_000</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>出现问题在sum2… supply-1+amount这边就出错了…毕竟 solidity 语言有点傻,0-1&#x3D;-1就直接溢出了…</p><p>好吧,原来不能第一次买多个的原因是 团队写 bug 了…改正也很简单,先+后-就可以了,这也算 solidity 开发常见的问题了,<strong>要先加后减,先乘后除</strong></p><p><code>(supply - 1 + amount) * (supply + amount) * (2 * (supply - 1 + amount) + 1) / 6;</code><br><code>(supply + amount - 1) * (supply + amount) * (2 * (supply + amount - 1) + 1) / 6;</code></p><h2 id="getPrice-分析"><a href="#getPrice-分析" class="headerlink" title="getPrice 分析"></a>getPrice 分析</h2><p>再回头看getPrice的代码.<br>估计第一眼看过去的都会比较迷糊,这到底是干啥了…当然数学大神一下就能看出来这是平方和公式</p><p>我们可以借助 ChatGPT</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">Q: (supply - 1) * (supply) * (2 * (supply - 1) + 1) / 6 这是什么公式?</span><br><span class="line"></span><br><span class="line">A: </span><br><span class="line">这个公式是用来计算一个整数变量(通常表示为&quot;supply&quot;)的平方和平方和的一种表示方式。公式的具体步骤如下:</span><br><span class="line"></span><br><span class="line">1. 先将&quot;supply&quot;的值减去1,即&quot;(supply - 1)&quot;。</span><br><span class="line">2. 然后将该值与&quot;supply&quot;相乘,即&quot;(supply - 1) * supply&quot;。</span><br><span class="line">3. 接下来,将2乘以&quot;(supply - 1)&quot;,即&quot;2 * (supply - 1)&quot;。</span><br><span class="line">4. 将上一步骤的结果加1,即&quot;2 * (supply - 1) + 1&quot;。</span><br><span class="line">5. 最后,将前三步骤的结果相乘,并将其除以6,即&quot;(supply - 1) * supply * (2 * (supply - 1) + 1) / 6&quot;。</span><br><span class="line"></span><br><span class="line">这个公式可以用来计算一系列连续整数的平方和,其中&quot;supply&quot;代表整数的上限。这种形式的平方和通常在数学和统计学中有多种应用,比如计算方差、概率分布等。</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>知道这是平方求和公式就简单了,这段代码就很好理解了<br><code>((supply-1+amount)的平方和 - (supply-1)的平方和) / 16000</code></p><p><br /><strong>本文作者</strong>:高金<br /><strong>本文地址</strong>: <a href="https://igaojin.me/2023/09/19/friend-tech-%E7%AC%AC%E4%B8%80%E7%AC%94%E4%BA%A4%E6%98%93%E5%8F%AA%E8%83%BD%E4%B9%B0-1-%E4%B8%AAkey/">https://igaojin.me/2023/09/19/friend-tech-第一笔交易只能买-1-个key/</a> <br /><strong>版权声明</strong>:转载请注明出处!</p><div id="gitalk-container"></div><script src="https://cdn.bootcss.com/blueimp-md5/2.12.0/js/md5.min.js"></script><link rel="stylesheet" href="https://unpkg.com/gitalk/dist/gitalk.css"><script src="https://unpkg.com/gitalk/dist/gitalk.min.js"></script><script>var gitalkConfig = {"clientID":"935e92a5333436856348","clientSecret":"e655566eaf920d216ec6283978d67874bf0850a6","repo":"jin10086.github.io","owner":"jin10086","admin":["jin10086"],"distractionFreeMode":false,"id":"page.date","createIssueManually":false}; gitalkConfig.id = md5(location.pathname);var gitalk = new Gitalk(gitalkConfig); gitalk.render("gitalk-container"); </script>
🔲 ☆

friend_tech 套利到底有多卷

<h2 id="背景"><a href="#背景" class="headerlink" title="背景"></a>背景</h2><p>最近有准备搞一下friend tech的套利…</p><p>就写个 sql看看目前有多少人盈利.这个数据不会基于没有卖出去的key</p><p><a href="https://dune.com/queries/3032730/5041320">数据在这friend tech top profit</a></p><p>按照盈利金额排序</p><img src="/2023/09/18/friend-tech-%E5%A5%97%E5%88%A9%E5%88%B0%E5%BA%95%E6%9C%89%E5%A4%9A%E5%8D%B7/friend_tech_top_profit1.png" class="" title="friend tech top profit"><p>按照亏损金额排序</p><img src="/2023/09/18/friend-tech-%E5%A5%97%E5%88%A9%E5%88%B0%E5%BA%95%E6%9C%89%E5%A4%9A%E5%8D%B7/friend_tech_top_profit2.png" class="" title="friend tech top profit"><p>头几个盈利的肯定是机器人账号.就看看他们的数据,这一看就发现了一些问题.</p><h2 id="数据分析"><a href="#数据分析" class="headerlink" title="数据分析"></a>数据分析</h2><p>所有的数据基于block <a href="https://basescan.org/txs?block=4119771&p=10">411977</a>,真实用户<a href="https://basescan.org/address/0xda68eee4c5b10d8a574b9ec072335c583b1c67a2">0xda</a>, <a href="https://basescan.org/tx/0x0c499027221fe9195f2b0b0f9038b97e0317b19cae9e55774ceb85767bd07d56">购买 tx</a></p><h3 id="数据长这样"><a href="#数据长这样" class="headerlink" title="数据长这样"></a>数据长这样</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">fromnoncetotransactionIndexgasPricegasFeestatusnew_status</span><br><span class="line">00xa3afA500e3d88CAfA41AA7B95a8dEF7d2CBce92b941660xfF231524719dB94a0Ef08A88fC4e6939134EadE811254698872434951723127900</span><br><span class="line">10x135557B95fc164cB152e853568b25880Ba06F94A94870x4Ff30D7222B852c67A66Dc8E8d56A8cf92B8411c21254698872394616413986700</span><br><span class="line">20x8ac85761268B9Ac3fDe06d381611b64B232CEa97662930x4Ff30D7222B852c67A66Dc8E8d56A8cf92B8411c31254698872397503555135900</span><br><span class="line">30x1BA4C73e7831b8099377c0583acfF4DBE488dFc6166260x4C99B25DdD0887D88b6C1364E3Df63a3bE76A5c341254698872428797029923900</span><br><span class="line">40xa92a6331d0174c0eDC463B097E8564a492D451FA936090xfF231524719dB94a0Ef08A88fC4e6939134EadE851254698872434951723127900</span><br><span class="line">50x9a34845CCBeA93925B15F5af6d9F4aFae4EC590a937550xfF231524719dB94a0Ef08A88fC4e6939134EadE861254698872434951723127900</span><br><span class="line">60x5ED1222A1c0BdBA479B61201231f539ac131DD69641310x4C99B25DdD0887D88b6C1364E3Df63a3bE76A5c371254698872428797029923900</span><br><span class="line">70xe8C5433d6E8Fc7a2b38eF0391FabA7470c9576e451420x4C99B25DdD0887D88b6C1364E3Df63a3bE76A5c381254698872428797029923900</span><br><span class="line">80x38Cd1a8474A948a5a3e4d4b06c4069F2116DD184855740x4Ff30D7222B852c67A66Dc8E8d56A8cf92B8411c91254698872406164978583500</span><br><span class="line">90x3c2c170296446e241dE2eE39d7036254d55Df9E4936020xfF231524719dB94a0Ef08A88fC4e6939134EadE8101254698872426290299680300</span><br></pre></td></tr></table></figure><h3 id="交易数量"><a href="#交易数量" class="headerlink" title="交易数量"></a>交易数量</h3><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> json</span><br><span class="line"><span class="keyword">import</span> pandas <span class="keyword">as</span> pd</span><br><span class="line"></span><br><span class="line"><span class="keyword">from</span> hexbytes <span class="keyword">import</span> HexBytes</span><br><span class="line"></span><br><span class="line"><span class="keyword">with</span> <span class="built_in">open</span>(<span class="string">&#x27;4119771_da681.json&#x27;</span>) <span class="keyword">as</span> f:</span><br><span class="line"> txs = json.loads(f.read())</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">filter_da68</span>(<span class="params">txs</span>):</span><br><span class="line"> flashruntxs = []</span><br><span class="line"> <span class="keyword">for</span> tx <span class="keyword">in</span> txs:</span><br><span class="line"> _<span class="built_in">input</span> = tx[<span class="string">&quot;input&quot;</span>]</span><br><span class="line"> <span class="keyword">if</span> <span class="string">&quot;da68ee&quot;</span> <span class="keyword">in</span> _<span class="built_in">input</span>:</span><br><span class="line"> flashruntxs.append(</span><br><span class="line"> &#123;</span><br><span class="line"> <span class="string">&quot;from&quot;</span>: tx[<span class="string">&quot;from&quot;</span>],</span><br><span class="line"> <span class="string">&quot;nonce&quot;</span>: tx[<span class="string">&quot;nonce&quot;</span>],</span><br><span class="line"> <span class="string">&quot;to&quot;</span>: tx[<span class="string">&quot;to&quot;</span>],</span><br><span class="line"> <span class="string">&quot;transactionIndex&quot;</span>: tx[<span class="string">&quot;transactionIndex&quot;</span>],</span><br><span class="line"> <span class="string">&quot;gasPrice&quot;</span>: tx[<span class="string">&quot;gasPrice&quot;</span>],</span><br><span class="line"> <span class="string">&quot;gasFee&quot;</span>: tx[<span class="string">&quot;gasFee&quot;</span>],</span><br><span class="line"> <span class="string">&quot;status&quot;</span>: tx[<span class="string">&quot;status&quot;</span>],</span><br><span class="line"> &#125;</span><br><span class="line"> )</span><br><span class="line"> <span class="keyword">return</span> flashruntxs</span><br><span class="line"></span><br><span class="line">da68 = filter_da68(txs)</span><br><span class="line"></span><br><span class="line"><span class="built_in">len</span>(da68),<span class="built_in">len</span>(txs)</span><br><span class="line"></span><br><span class="line">(<span class="number">506</span>, <span class="number">517</span>)</span><br></pre></td></tr></table></figure><p>可以看到整个区块交易<strong>517</strong> 条,其中和da68相关的 <strong>506</strong>. 就非常离谱,97.87%的用户都是来抢跑的.</p><h3 id="一共有多少机器人?"><a href="#一共有多少机器人?" class="headerlink" title="一共有多少机器人?"></a>一共有多少机器人?</h3><p>我们这边按照合约地址分一下类. 可以看到有几个头部机器人.<br>前3 占了大部分交易.</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">to_count = df[<span class="string">&#x27;to&#x27;</span>].value_counts()</span><br><span class="line">to_count</span><br><span class="line"></span><br><span class="line"><span class="number">0x4C99B25DdD0887D88b6C1364E3Df63a3bE76A5c3</span> <span class="number">184</span></span><br><span class="line"><span class="number">0xfF231524719dB94a0Ef08A88fC4e6939134EadE8</span> <span class="number">161</span></span><br><span class="line"><span class="number">0x4Ff30D7222B852c67A66Dc8E8d56A8cf92B8411c</span> <span class="number">123</span></span><br><span class="line"><span class="number">0xCF205808Ed36593aa40a44F10c7f7C2F67d4A4d4</span> <span class="number">19</span></span><br><span class="line"><span class="number">0xe27ddadbC8779D01fC539Bf5BA8529D728418625</span> <span class="number">9</span></span><br><span class="line"><span class="number">0x27E8A5B043d3f58dde1c7ab96d2E3cF07558A1f1</span> <span class="number">8</span></span><br><span class="line"><span class="number">0xAfE6795A9097BbCE00fe61462d22CCeeF706a3e8</span> <span class="number">2</span></span><br><span class="line">Name: to, dtype: int64</span><br></pre></td></tr></table></figure><p>看看这几个机器人花了多少gas费,没想到发送 184 条交易才花 7.69刀.</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">ethprice = <span class="number">1640</span></span><br><span class="line"><span class="keyword">for</span> to <span class="keyword">in</span> to_count.index:</span><br><span class="line"> tteth = <span class="built_in">sum</span>(df[df.to==to].gasFee)/<span class="number">1e18</span></span><br><span class="line"> ttusd = tteth*ethprice</span><br><span class="line"> <span class="built_in">print</span>(tteth,ttusd)</span><br><span class="line"></span><br><span class="line"><span class="number">0.004690181471662096</span> <span class="number">7.691897613525838</span></span><br><span class="line"><span class="number">0.004104812550636566</span> <span class="number">6.731892583043968</span></span><br><span class="line"><span class="number">0.003097893590529322</span> <span class="number">5.080545488468088</span></span><br><span class="line"><span class="number">0.000457215606189089</span> <span class="number">0.749833594150106</span></span><br><span class="line"><span class="number">0.000226412037571068</span> <span class="number">0.3713157416165515</span></span><br><span class="line"><span class="number">0.00017632952477182</span> <span class="number">0.2891804206257848</span></span><br><span class="line"><span class="number">5.0244385725274e-05</span> <span class="number">0.08240079258944936</span></span><br></pre></td></tr></table></figure><p>再看看这些机器人有多少小号<br>有发现几个菜鸟机器人…</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">for</span> to <span class="keyword">in</span> to_count.index:</span><br><span class="line"> <span class="built_in">print</span>(<span class="string">&#x27;to:&#x27;</span>,to)</span><br><span class="line"> <span class="built_in">print</span>(df[df.to==to][<span class="string">&#x27;from&#x27;</span>].value_counts())</span><br><span class="line"> <span class="built_in">print</span>()</span><br><span class="line"> <span class="built_in">print</span>(<span class="string">&#x27;#&#x27;</span>*<span class="number">30</span>)</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">to: <span class="number">0x4C99B25DdD0887D88b6C1364E3Df63a3bE76A5c3</span></span><br><span class="line"><span class="number">0x5ED1222A1c0BdBA479B61201231f539ac131DD69</span> <span class="number">27</span></span><br><span class="line"><span class="number">0x1BA4C73e7831b8099377c0583acfF4DBE488dFc6</span> <span class="number">26</span></span><br><span class="line"><span class="number">0xd9E4b9579a5CF5B336E258820CC95cA34411c9D6</span> <span class="number">26</span></span><br><span class="line"><span class="number">0x27C2a598Db389b5276c0156f14B4dE75E490712F</span> <span class="number">26</span></span><br><span class="line"><span class="number">0xe8C5433d6E8Fc7a2b38eF0391FabA7470c9576e4</span> <span class="number">24</span></span><br><span class="line"><span class="number">0xDd2B7694259a83753918BF5b6dC6961fabd2FDbC</span> <span class="number">24</span></span><br><span class="line"><span class="number">0xC81a00ee6839EE0dFbF465d3C08E5F0b0291b71A</span> <span class="number">20</span></span><br><span class="line"><span class="number">0x3Ee2183b706cf381e7e4586b8063a779f1E7b7dA</span> <span class="number">11</span></span><br><span class="line">Name: <span class="keyword">from</span>, dtype: int64</span><br><span class="line"></span><br><span class="line"><span class="comment">##############################</span></span><br><span class="line">to: <span class="number">0xfF231524719dB94a0Ef08A88fC4e6939134EadE8</span></span><br><span class="line"><span class="number">0xa3afA500e3d88CAfA41AA7B95a8dEF7d2CBce92b</span> <span class="number">9</span></span><br><span class="line"><span class="number">0xa92a6331d0174c0eDC463B097E8564a492D451FA</span> <span class="number">9</span></span><br><span class="line"><span class="number">0x2bE3973950D0F1951E12C21bC7bB8e2428101Fdd</span> <span class="number">9</span></span><br><span class="line"><span class="number">0x63cEe818600f91C4473CD14cDfD9C10d918B587b</span> <span class="number">9</span></span><br><span class="line"><span class="number">0x92c21dB4a7cC0302ccCb71d444aE674Ec3980c93</span> <span class="number">9</span></span><br><span class="line"><span class="number">0xCb44B9062eB0Cd22c4C0701385e6482BF4a77759</span> <span class="number">9</span></span><br><span class="line"><span class="number">0x57ae46a097751124f8c35A86f64B4c38d2C62675</span> <span class="number">9</span></span><br><span class="line"><span class="number">0x8eE3847cAE34e6e0292dc3DF8DD3C0C69a266b97</span> <span class="number">9</span></span><br><span class="line"><span class="number">0x807db242cD37b5E2B53697842197611f51693C06</span> <span class="number">9</span></span><br><span class="line"><span class="number">0xDb6f56639AaeA09FfEA6080D31A32851524128d4</span> <span class="number">9</span></span><br><span class="line"><span class="number">0x9D94BdAf42d7906b3D3c011053ed2cBF42A1cA3f</span> <span class="number">9</span></span><br><span class="line"><span class="number">0x244Fb415A8765812B9bc5B52cA14fd83C9d7E0e5</span> <span class="number">9</span></span><br><span class="line"><span class="number">0xF689ac0322786Ac2D7245Fcd665fe120ff1d0408</span> <span class="number">9</span></span><br><span class="line"><span class="number">0x895D2d10FB9b92D0e1002c1a1bCdb90Ed42c3588</span> <span class="number">9</span></span><br><span class="line"><span class="number">0xF53010525Df586e78b14114C9cd05481E79E6C8C</span> <span class="number">9</span></span><br><span class="line"><span class="number">0x3c2c170296446e241dE2eE39d7036254d55Df9E4</span> <span class="number">9</span></span><br><span class="line"><span class="number">0x9a34845CCBeA93925B15F5af6d9F4aFae4EC590a</span> <span class="number">9</span></span><br><span class="line"><span class="number">0x36da68690F238366156890010c411394FC529cd9</span> <span class="number">8</span></span><br><span class="line">Name: <span class="keyword">from</span>, dtype: int64</span><br><span class="line"></span><br><span class="line"><span class="comment">##############################</span></span><br><span class="line">to: <span class="number">0x4Ff30D7222B852c67A66Dc8E8d56A8cf92B8411c</span></span><br><span class="line"><span class="number">0x8ac85761268B9Ac3fDe06d381611b64B232CEa97</span> <span class="number">13</span></span><br><span class="line"><span class="number">0x135557B95fc164cB152e853568b25880Ba06F94A</span> <span class="number">12</span></span><br><span class="line"><span class="number">0x38Cd1a8474A948a5a3e4d4b06c4069F2116DD184</span> <span class="number">12</span></span><br><span class="line"><span class="number">0x3547DbcD816bc17D7dE0e7e67a8B8bEE74384ACF</span> <span class="number">12</span></span><br><span class="line"><span class="number">0xa9ff99346829E7c578E6d38C2269997a2FCcEEE1</span> <span class="number">12</span></span><br><span class="line"><span class="number">0xd65eD99CB8b3b65CE378e3E5CaE545B751f4DAc6</span> <span class="number">11</span></span><br><span class="line"><span class="number">0x1F238B47ab9fD915e5852601E83c6c1358297870</span> <span class="number">11</span></span><br><span class="line"><span class="number">0x75Ff68BDe78974ab54a642fD294369447bD9Feef</span> <span class="number">10</span></span><br><span class="line"><span class="number">0xf1E7E7Ad07C046abb6e488F73c126B897892755c</span> <span class="number">10</span></span><br><span class="line"><span class="number">0x76eF08c772Db73E05fa00398746FbA31eFC5804F</span> <span class="number">10</span></span><br><span class="line"><span class="number">0x7CfE232Ed8b0acc111ec780b7Cb95C68f3CF7Aa6</span> <span class="number">10</span></span><br><span class="line">Name: <span class="keyword">from</span>, dtype: int64</span><br><span class="line"></span><br><span class="line"><span class="comment">##############################</span></span><br><span class="line">to: <span class="number">0xCF205808Ed36593aa40a44F10c7f7C2F67d4A4d4</span></span><br><span class="line"><span class="number">0x188eCF8f4290C4e5d641449B88CEf94574174972</span> <span class="number">15</span></span><br><span class="line"><span class="number">0xDa68EEe4c5b10D8A574b9ec072335c583B1C67A2</span> <span class="number">1</span></span><br><span class="line"><span class="number">0xbEbA981C5697b1CFa7c04fCB523E94bD42F79afB</span> <span class="number">1</span></span><br><span class="line"><span class="number">0x40954b9B4bAfC41Ec6387325fD0069C68674a04d</span> <span class="number">1</span></span><br><span class="line"><span class="number">0x296D3324Ee4b2316E87f965F4A04F073780f5310</span> <span class="number">1</span></span><br><span class="line">Name: <span class="keyword">from</span>, dtype: int64</span><br><span class="line"></span><br><span class="line"><span class="comment">##############################</span></span><br><span class="line">to: <span class="number">0xe27ddadbC8779D01fC539Bf5BA8529D728418625</span></span><br><span class="line"><span class="number">0xeFa4b454A64049ff93cC37b54102982ACEdf4Eae</span> <span class="number">9</span></span><br><span class="line">Name: <span class="keyword">from</span>, dtype: int64</span><br><span class="line"></span><br><span class="line"><span class="comment">##############################</span></span><br><span class="line">to: <span class="number">0x27E8A5B043d3f58dde1c7ab96d2E3cF07558A1f1</span></span><br><span class="line"><span class="number">0x8b113ad5c2b2E3ddb102305e32259c6b23D12aa3</span> <span class="number">4</span></span><br><span class="line"><span class="number">0x89B5BB48f016b809EB2eE78416550487334C1331</span> <span class="number">4</span></span><br><span class="line">Name: <span class="keyword">from</span>, dtype: int64</span><br><span class="line"></span><br><span class="line"><span class="comment">##############################</span></span><br><span class="line">to: <span class="number">0xAfE6795A9097BbCE00fe61462d22CCeeF706a3e8</span></span><br><span class="line"><span class="number">0xC1322133ACbAd823614bf79Ca9eC409fA3A7E39A</span> <span class="number">2</span></span><br><span class="line">Name: <span class="keyword">from</span>, dtype: int64</span><br><span class="line"></span><br><span class="line"><span class="comment">##############################</span></span><br></pre></td></tr></table></figure><h3 id="最后总览看看"><a href="#最后总览看看" class="headerlink" title="最后总览看看"></a>最后总览看看</h3><p>26是用户的交易.可以看到所有的 gasPrice都和用户的一样…</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 筛选出 transactionIndex 在 16-40 范围内的数据</span></span><br><span class="line">filtered_df = df[(df[<span class="string">&#x27;transactionIndex&#x27;</span>] &gt;= <span class="number">16</span>) &amp; (df[<span class="string">&#x27;transactionIndex&#x27;</span>] &lt;= <span class="number">36</span>)]</span><br><span class="line"></span><br><span class="line"><span class="comment"># 按照 transactionIndex 从小到大排序</span></span><br><span class="line">sorted_df = filtered_df.sort_values(by=<span class="string">&#x27;transactionIndex&#x27;</span>)</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">highlight_row</span>(<span class="params">row</span>):</span><br><span class="line"> <span class="keyword">if</span> row[<span class="string">&#x27;transactionIndex&#x27;</span>] == <span class="number">26</span>:</span><br><span class="line"> <span class="keyword">return</span> [<span class="string">&#x27;background-color: yellow&#x27;</span>] * <span class="built_in">len</span>(row)</span><br><span class="line"> <span class="keyword">else</span>:</span><br><span class="line"> <span class="keyword">return</span> [<span class="string">&#x27;&#x27;</span>] * <span class="built_in">len</span>(row)</span><br><span class="line"></span><br><span class="line">highlighted_df = filtered_df.style.apply(highlight_row, axis=<span class="number">1</span>)</span><br><span class="line">highlighted_df</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> <span class="keyword">from</span>noncetotransactionIndexgasPricegasFeestatus</span><br><span class="line"><span class="number">15</span><span class="number">0xa9ff99346829E7c578E6d38C2269997a2FCcEEE1</span><span class="number">73039</span><span class="number">0x4Ff30D7222B852c67A66Dc8E8d56A8cf92B8411c</span><span class="number">16</span><span class="number">125469887</span><span class="number">24061649785835</span><span class="number">0</span></span><br><span class="line"><span class="number">16</span><span class="number">0x895D2d10FB9b92D0e1002c1a1bCdb90Ed42c3588</span><span class="number">94987</span><span class="number">0xfF231524719dB94a0Ef08A88fC4e6939134EadE8</span><span class="number">17</span><span class="number">125469887</span><span class="number">24349517231279</span><span class="number">0</span></span><br><span class="line"><span class="number">17</span><span class="number">0xDd2B7694259a83753918BF5b6dC6961fabd2FDbC</span><span class="number">3180</span><span class="number">0x4C99B25DdD0887D88b6C1364E3Df63a3bE76A5c3</span><span class="number">18</span><span class="number">125469887</span><span class="number">24287970299239</span><span class="number">0</span></span><br><span class="line"><span class="number">18</span><span class="number">0xF689ac0322786Ac2D7245Fcd665fe120ff1d0408</span><span class="number">94382</span><span class="number">0xfF231524719dB94a0Ef08A88fC4e6939134EadE8</span><span class="number">19</span><span class="number">125469887</span><span class="number">24349517231279</span><span class="number">0</span></span><br><span class="line"><span class="number">19</span><span class="number">0xC81a00ee6839EE0dFbF465d3C08E5F0b0291b71A</span><span class="number">2708</span><span class="number">0x4C99B25DdD0887D88b6C1364E3Df63a3bE76A5c3</span><span class="number">20</span><span class="number">125469887</span><span class="number">24287970299239</span><span class="number">0</span></span><br><span class="line"><span class="number">20</span><span class="number">0x244Fb415A8765812B9bc5B52cA14fd83C9d7E0e5</span><span class="number">56203</span><span class="number">0xfF231524719dB94a0Ef08A88fC4e6939134EadE8</span><span class="number">21</span><span class="number">125469887</span><span class="number">24234031585311</span><span class="number">0</span></span><br><span class="line"><span class="number">21</span><span class="number">0x5ED1222A1c0BdBA479B61201231f539ac131DD69</span><span class="number">64132</span><span class="number">0x4C99B25DdD0887D88b6C1364E3Df63a3bE76A5c3</span><span class="number">22</span><span class="number">125469887</span><span class="number">24287970299239</span><span class="number">0</span></span><br><span class="line"><span class="number">22</span><span class="number">0xeFa4b454A64049ff93cC37b54102982ACEdf4Eae</span><span class="number">6682</span><span class="number">0xe27ddadbC8779D01fC539Bf5BA8529D728418625</span><span class="number">23</span><span class="number">125469887</span><span class="number">23374811326750</span><span class="number">1</span></span><br><span class="line"><span class="number">23</span><span class="number">0x1BA4C73e7831b8099377c0583acfF4DBE488dFc6</span><span class="number">16627</span><span class="number">0x4C99B25DdD0887D88b6C1364E3Df63a3bE76A5c3</span><span class="number">24</span><span class="number">125469887</span><span class="number">24201356064763</span><span class="number">0</span></span><br><span class="line"><span class="number">24</span><span class="number">0xd65eD99CB8b3b65CE378e3E5CaE545B751f4DAc6</span><span class="number">66063</span><span class="number">0x4Ff30D7222B852c67A66Dc8E8d56A8cf92B8411c</span><span class="number">25</span><span class="number">125469887</span><span class="number">24061649785835</span><span class="number">0</span></span><br><span class="line"><span class="number">25</span><span class="number">0xDa68EEe4c5b10D8A574b9ec072335c583B1C67A2</span><span class="number">0</span><span class="number">0xCF205808Ed36593aa40a44F10c7f7C2F67d4A4d4</span><span class="number">26</span><span class="number">125469887</span><span class="number">28895454735018</span><span class="number">1</span></span><br><span class="line"><span class="number">26</span><span class="number">0x9D94BdAf42d7906b3D3c011053ed2cBF42A1cA3f</span><span class="number">55712</span><span class="number">0xfF231524719dB94a0Ef08A88fC4e6939134EadE8</span><span class="number">27</span><span class="number">125469887</span><span class="number">33659956846186</span><span class="number">1</span></span><br><span class="line"><span class="number">27</span><span class="number">0xe8C5433d6E8Fc7a2b38eF0391FabA7470c9576e4</span><span class="number">5143</span><span class="number">0x4C99B25DdD0887D88b6C1364E3Df63a3bE76A5c3</span><span class="number">28</span><span class="number">125469887</span><span class="number">25586583629689</span><span class="number">0</span></span><br><span class="line"><span class="number">28</span><span class="number">0xd9E4b9579a5CF5B336E258820CC95cA34411c9D6</span><span class="number">7656</span><span class="number">0x4C99B25DdD0887D88b6C1364E3Df63a3bE76A5c3</span><span class="number">29</span><span class="number">125469887</span><span class="number">25586583629689</span><span class="number">0</span></span><br><span class="line"><span class="number">29</span><span class="number">0x1F238B47ab9fD915e5852601E83c6c1358297870</span><span class="number">188626</span><span class="number">0x4Ff30D7222B852c67A66Dc8E8d56A8cf92B8411c</span><span class="number">30</span><span class="number">125469887</span><span class="number">25293638606288</span><span class="number">0</span></span><br><span class="line"><span class="number">30</span><span class="number">0xDb6f56639AaeA09FfEA6080D31A32851524128d4</span><span class="number">55742</span><span class="number">0xfF231524719dB94a0Ef08A88fC4e6939134EadE8</span><span class="number">31</span><span class="number">125469887</span><span class="number">25474803297854</span><span class="number">0</span></span><br><span class="line"><span class="number">31</span><span class="number">0x27C2a598Db389b5276c0156f14B4dE75E490712F</span><span class="number">8112</span><span class="number">0x4C99B25DdD0887D88b6C1364E3Df63a3bE76A5c3</span><span class="number">32</span><span class="number">125469887</span><span class="number">25586583629689</span><span class="number">0</span></span><br><span class="line"><span class="number">32</span><span class="number">0x8ac85761268B9Ac3fDe06d381611b64B232CEa97</span><span class="number">66294</span><span class="number">0x4Ff30D7222B852c67A66Dc8E8d56A8cf92B8411c</span><span class="number">33</span><span class="number">125469887</span><span class="number">25293638606288</span><span class="number">0</span></span><br><span class="line"><span class="number">33</span><span class="number">0x75Ff68BDe78974ab54a642fD294369447bD9Feef</span><span class="number">74796</span><span class="number">0x4Ff30D7222B852c67A66Dc8E8d56A8cf92B8411c</span><span class="number">34</span><span class="number">125469887</span><span class="number">25207024371812</span><span class="number">0</span></span><br><span class="line"><span class="number">34</span><span class="number">0xDd2B7694259a83753918BF5b6dC6961fabd2FDbC</span><span class="number">3181</span><span class="number">0x4C99B25DdD0887D88b6C1364E3Df63a3bE76A5c3</span><span class="number">35</span><span class="number">125469887</span><span class="number">25586583629689</span><span class="number">0</span></span><br><span class="line"><span class="number">35</span><span class="number">0x807db242cD37b5E2B53697842197611f51693C06</span><span class="number">55979</span><span class="number">0xfF231524719dB94a0Ef08A88fC4e6939134EadE8</span><span class="number">36</span><span class="number">125469887</span><span class="number">25474803297854</span><span class="number">0</span></span><br><span class="line"></span><br></pre></td></tr></table></figure><h2 id="代码以及相关数据下载"><a href="#代码以及相关数据下载" class="headerlink" title="代码以及相关数据下载"></a>代码以及相关数据下载</h2><p><a href="https://github.com/jin10086/friend-tech-bot-analyze">https://github.com/jin10086/friend-tech-bot-analyze</a></p><p><br /><strong>本文作者</strong>:高金<br /><strong>本文地址</strong>: <a href="https://igaojin.me/2023/09/18/friend-tech-%E5%A5%97%E5%88%A9%E5%88%B0%E5%BA%95%E6%9C%89%E5%A4%9A%E5%8D%B7/">https://igaojin.me/2023/09/18/friend-tech-套利到底有多卷/</a> <br /><strong>版权声明</strong>:转载请注明出处!</p><div id="gitalk-container"></div><script src="https://cdn.bootcss.com/blueimp-md5/2.12.0/js/md5.min.js"></script><link rel="stylesheet" href="https://unpkg.com/gitalk/dist/gitalk.css"><script src="https://unpkg.com/gitalk/dist/gitalk.min.js"></script><script>var gitalkConfig = {"clientID":"935e92a5333436856348","clientSecret":"e655566eaf920d216ec6283978d67874bf0850a6","repo":"jin10086.github.io","owner":"jin10086","admin":["jin10086"],"distractionFreeMode":false,"id":"page.date","createIssueManually":false}; gitalkConfig.id = md5(location.pathname);var gitalk = new Gitalk(gitalkConfig); gitalk.render("gitalk-container"); </script>
❌