通过一个蜜罐合约来理解以太坊上的抢跑者

币安买币 8 10

在以太坊收集有如许一批人,通过更高的 gas 价格来抢走交易收益。

在那篇文章中,我将向你展现若何检测以太坊的抢跑者。为此,我开发了特殊的“蜜罐(honey pot)”合约,该合约允许任何人以足够快的速度提取一些以太币。我们将让抢跑者如许做,以便研究他们的行为。 ![蜜罐合约来检测以太坊上的抢跑者](https://img.learnblockchain.cn/pics/20201017172017.png) 可能那不是更好的办法,因为你应该允许一些人窃取你实在的ETH。更好的法子是监视内存池,并测验考试识别高gas优先的交易(PGA:Priority Gas Auctions)。但那不是一件容易的事,需要更多的开发,所以让我们从简单的研究起头。 ## 蜜罐合约 为了演示,我编写了一个简洁但功用强大的智能合约。你只能通过两种体例与合约交互 - 锁定以太币息争锁(撤回)以太币。过程很简单: - 想象一些难以推测的强密码。 - 计算密码的哈希值(假设为sha256) - 通过供给密码的哈希值来锁定你的以太币 - 通过供给原始密码来解锁你的以太币。合约将自行计算哈希并将其与步调2中指定的哈希运算停止比力。若是哈希婚配 - 合约将向你发送锁定的以太币。很容易看到 - 只要你能够提取以太币,因为没有人晓得原始密码。实的吗? ```solidity pragma solidity ^0.6.0; contract TryToGetYourMoney { mapping(bytes32 = uint) passwordHashToBalance; function lockEthersWithPassword( bytes32 passwordHash ) public payable { passwordHashToBalance[passwordHash] += msg.value; } function getHash(string memory raw) public view returns(bytes32) { return keccak256(abi.encodePacked(raw)); } function unlockEthersWithPassword( string memory password ) public { bytes32 passwordHash = getHash(password); require( passwordHashToBalance[passwordHash] 0, "No Ethers locked with specified password" ); msg.sender.transfer(passwordHashToBalance[passwordHash]); passwordHashToBalance[passwordHash] = 0; } } ``` 好吧,可能不是。任何抢跑者都能够在交易处于待处置形态时看到该交易,提取原始密码,并以更高的 gas 价格发送本身的解锁交易。因为较高的 gas 价格意味着更快确实认,因而抢跑者的交易可能将起首被挖出,而且他会收到你的以太币。 ## 停止尝试 我已经在以太坊主收集中摆设了以上合约([0x9478abe9244872274808d324b968c30f29e1a442] (https://etherscan.io/address/0x9478abe9244872274808d324b968c30f29e1a442)).我已经测验考试过两次锁定以太坊并对其停止解锁-两项解锁交易均已在前端停止! ![img](https://img.learnblockchain.cn/pics/20201017172040.png) 两个锁-0.1 ETH和0.05 ETH。 两个失败的交易是解锁交易。 他们失败了,因为有人已经窃取了锁定的ETH! 让我们看看为什么交易失败。你能够看到原因不异:“No Ethers locked with specified password”。但是怎么可能呢?为了答复那个问题,让我们看一下Etherscan的 **Internal txns**部门: ![img](https://img.learnblockchain.cn/pics/20201017173847.png) 通过那些交易,抢跑者窃取了我的ETH。让我们比力一下我的交易0xa88 ..和0x3fa ....他们俩都试图解锁0.1以太币。 ![img](https://img.learnblockchain.cn/pics/20201017173852.jpg) 我的交易在右边,抢跑交易在右边。 查看 gas 价格若何影响确认时间。我的交易价格为50 Gwei ,在3分钟内得到确认。抢跑者指定了58 Gwei - 在30秒内停止了确认!即便我先发送领会锁交易,但他的交易被确认比我早11个区块。 ## 他们是怎么做到的? 打造抢跑机器人没有任何手艺上的障碍。起首,你需要监视所有新的以太坊交易。因为你想成为第一个领会新交易的人,因而你可能需要在世界各地利用多个交易侦听器。 收到有关新交易的通知后,你需要模仿不异的挪用,但是利用你本身的地址。若是交易未复原(即没有失败),而你的收益超越了收入,请将其发送到主网!此外,别忘了设定更高的 gas 价格以代替原始交易。仅此罢了。 ## 测验考试本身引诱抢跑者 你也能够测验考试引诱抢跑者!为此,只需利用供给的智能合约。 - 想象一下一些强密码。假设是 **nooneeverguess123** - 计算密码的哈希值。在etherscan “读取合约” [页面] (https://etherscan.io/address/0x9478abe9244872274808d324b968c30f29e1a442#readContract)上利用**getHash**办法,按Query,然后复造以0x为前缀的长字符串。 ![img](https://img.learnblockchain.cn/pics/20201017173900.png) - 转到“写合约”部门,毗连到Web3,然后找到`lockEthersWithPassword`办法。在`payableAmount`字段中,指定要用做诱饵的以太币数量(我认为0.01足够了)。在提交的`passwordHash`中,填入在步调2中复造的密码哈希。单击`write`,确认交易,然后期待交易被挖出。 ![img](https://img.learnblockchain.cn/pics/20201017173908.png) - 如今有趣的部门起头了!测验考试利用`unlockEthersWithPassword`办法取回你的以太币。在密码字段中指定原始密码(在我的情况下为`nooneeverguess123`)。单击写入,单击确认,然后期待。 ![img](https://img.learnblockchain.cn/pics/20201017173913.png) 在弹出窗口中,你能够测验考试自定义 gas 价格(详细信息 - gas 费 - 编纂),以把持被抢跑的胜利概率。你指定的 gas 价格越多,确认交易的速度就越快,被抢占先机的时机就越少。 ![img](https://img.learnblockchain.cn/pics/20201017173920.png) 若是您想获得领先,请保留默认选项。 你的交易很可能会失败!请参阅内部挪用部门,以查找前端交易的发送者。 ------ 原文:https://sergeypotekhin.com/detect-ethereum-front-runners/ 做者:谢尔盖·波泰欣(Sergey Potekhin)

在那篇文章中,我将向你展现若何检测以太坊的抢跑者。为此,我开发了特殊的“蜜罐(honey pot)”合约,该合约允许任何人以足够快的速度提取一些以太币。我们将让抢跑者如许做,以便研究他们的行为。

可能那不是更好的办法,因为你应该允许一些人窃取你实在的ETH。更好的法子是监视内存池,并测验考试识别高gas优先的交易(PGA:Priority Gas Auctions)。但那不是一件容易的事,需要更多的开发,所以让我们从简单的研究起头。

蜜罐合约

为了演示,我编写了一个简洁但功用强大的智能合约。你只能通过两种体例与合约交互 - 锁定以太币息争锁(撤回)以太币。过程很简单:

想象一些难以推测的强密码。 计算密码的哈希值(假设为sha256) 通过供给密码的哈希值来锁定你的以太币 通过供给原始密码来解锁你的以太币。合约将自行计算哈希并将其与步调2中指定的哈希运算停止比力。若是哈希婚配 - 合约将向你发送锁定的以太币。很容易看到 - 只要你能够提取以太币,因为没有人晓得原始密码。实的吗? pragma solidity ^0.6.0; contract TryToGetYourMoney { mapping(bytes32 = uint) passwordHashToBalance; function lockEthersWithPassword( bytes32 passwordHash ) public payable { passwordHashToBalance[passwordHash] += msg.value; function getHash(string memory raw) public view returns(bytes32) { return keccak256(abi.encodePacked(raw)); function unlockEthersWithPassword( string memory password ) public { bytes32 passwordHash = getHash(password); require( passwordHashToBalance[passwordHash] 0, "No Ethers locked with specified password" msg.sender.transfer(passwordHashToBalance[passwordHash]); passwordHashToBalance[passwordHash] = 0; }

好吧,可能不是。任何抢跑者都能够在交易处于待处置形态时看到该交易,提取原始密码,并以更高的 gas 价格发送本身的解锁交易。因为较高的 gas 价格意味着更快确实认,因而抢跑者的交易可能将起首被挖出,而且他会收到你的以太币。

停止尝试

我已经在以太坊主收集中摆设了以上合约([0x9478abe9244872274808d324b968c30f29e1a442] (https://etherscan.io/address/0x9478abe9244872274808d324b968c30f29e1a442)).我已经测验考试过两次锁定以太坊并对其停止解锁-两项解锁交易均已在前端停止!

两个锁-0.1 ETH和0.05 ETH。 两个失败的交易是解锁交易。 他们失败了,因为有人已经窃取了锁定的ETH!

让我们看看为什么交易失败。你能够看到原因不异:“No Ethers locked with specified password”。但是怎么可能呢?为了答复那个问题,让我们看一下Etherscan的 Internal txns部门:

通过那些交易,抢跑者窃取了我的ETH。让我们比力一下我的交易0xa88 ..和0x3fa ....他们俩都试图解锁0.1以太币。

我的交易在右边,抢跑交易在右边。

查看 gas 价格若何影响确认时间。我的交易价格为50 Gwei ,在3分钟内得到确认。抢跑者指定了58 Gwei - 在30秒内停止了确认!即便我先发送领会锁交易,但他的交易被确认比我早11个区块。

他们是怎么做到的?

打造抢跑机器人没有任何手艺上的障碍。起首,你需要监视所有新的以太坊交易。因为你想成为第一个领会新交易的人,因而你可能需要在世界各地利用多个交易侦听器。

收到有关新交易的通知后,你需要模仿不异的挪用,但是利用你本身的地址。若是交易未复原(即没有失败),而你的收益超越了收入,请将其发送到主网!此外,别忘了设定更高的 gas 价格以代替原始交易。仅此罢了。

测验考试本身引诱抢跑者

你也能够测验考试引诱抢跑者!为此,只需利用供给的智能合约。

想象一下一些强密码。假设是 nooneeverguess123

计算密码的哈希值。在etherscan “读取合约” [页面] (https://etherscan.io/address/0x9478abe9244872274808d324b968c30f29e1a442#readContract)上利用**getHash**办法,按Query,然后复造以0x为前缀的长字符串。

转到“写合约”部门,毗连到Web3,然后找到lockEthersWithPassword办法。在payableAmount字段中,指定要用做诱饵的以太币数量(我认为0.01足够了)。在提交的passwordHash中,填入在步调2中复造的密码哈希。单击write,确认交易,然后期待交易被挖出。

如今有趣的部门起头了!测验考试利用unlockEthersWithPassword办法取回你的以太币。在密码字段中指定原始密码(在我的情况下为nooneeverguess123)。单击写入,单击确认,然后期待。

在弹出窗口中,你能够测验考试自定义 gas 价格(详细信息 - gas 费 - 编纂),以把持被抢跑的胜利概率。你指定的 gas 价格越多,确认交易的速度就越快,被抢占先机的时机就越少。

若是您想获得领先,请保留默认选项。

你的交易很可能会失败!请参阅内部挪用部门,以查找前端交易的发送者。

原文:https://sergeypotekhin.com/detect-ethereum-front-runners/ 做者:谢尔盖·波泰欣(Sergey Potekhin)

本文参与登链社区写做鼓励方案 ,好文好收益,欢送正在阅读的你也参加。

颁发于 2020-10-17 19:56 阅读 ( 1206 ) 学分 ( 112 ) 分类:以太坊

也许您对下面的内容还感兴趣:

留言8

  1. 柯欣公子
    回复
    doge坏的话可能就这价格横盘几个月,和上次0.0X的价格差不多
  1. 金顶爱豪
    回复
    么找到trust的哈希值呢
  1. 伏象芫华
    回复
    炒比特币需要佛系才行。关于佛系炒币,不是拿着不动,拿着不动是傻。佛系炒币应该是带着大慈大悲的心态炒币,在市场陷入低谷,众生都在痛苦中挣扎的时候,你要拿出大慈大悲的行动,解救众生于水火,把大家的币买过来,把大家的痛苦接过来,让自己痛苦,尽自己所能解救大家,正所谓我不入地狱谁入地狱。在市场大涨之时,币价天天上涨,一币难求,你应该想众生之所想,急众生之所急,把币全部卖给大家,解大家买不到币的焦急之苦啊。炒币要以众生为基,大慈大悲,摒弃贪念,这样才能称为佛系炒币。
  1. 冷亦可爱吗
    回复
    等!我已经看两次狗币爬,所有币基本跌
  1. 雨巷少年思双
    回复
    就狗币那市值,这群里的韭菜一起去全仓狗币都拉不起来
  1. 金顶阏逢
    回复
    除了智能合约获利,没有什么可以相信能赚钱了
  1. 奉天静静
    回复
    我也刚转了智能合约一次,现在开始第二次
  1. 星熊雪山
    回复
    我的比特币在钱包里取不出来了,因为没有gas.谁能转账我一个ETH.我将比特币拿出来后还给他

评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。