清算机器人,从0到1跑通全流程
本文翻译自Robert Miller的Anatomy of an MEV Strategy: Synthetix 几个月前,臭名昭著的阿尔法泄密者KALEB在Flashbots公共搜索者不和谐中,发布了以下消息:KALEB此前曾泄露了数十万美元的Alpha版本,用于对Synthetix的更改。 在这个机器人操作者的巢穴里分享阿尔法就像向狮子扔红肉一样,快速浏览一下合同,就可以确认这是一笔令人眼花缭乱的资金。 在接下来的几周里,我计划并试图执行一项策略来捕获上面分享的MEV KALEB。第一步,识别机会我不是一个Synthetix专家,因此第一步是去学习我将要涉及的操作。具体如下:我找出了相关合约我在Synthetix博客里读了它们的高级别功能并且搜索了相关文档我确保理解了将要实行的治理变动范围我查找了相关函数总结一下这阶段的工作,Synthetix已经试验了以ETH为抵押去铸造(mint)sUSD和sETH。你可以在合约中存入ETH并铸造那些资产,只要你留意你的抵押资产不要下跌到低于你铸造的资产的一定水平。(可能亏钱) 然后,在一年后,协议投票通过结束了此试验。当还有数百万差不多...
Solana的与众不同
转自推特gm365老哥 对于一个长期浸淫在 EVM (以太坊、L2、BSC、Avax等)世界的人,刚切换到 Solana 生态时,除了要换一个浏览器插件钱包、交易更便宜外,可能你会觉得两条公链差别也不是很大 但一番深入研究下来,发现二者从底层设计理念,到各个层面,几乎天差地别 这里将我前期学习了解的一些特性加以总结,帮你更快速入门 Solana ,少走一些弯路普通用户对普通用户而言, Solana 的实际差别不会特别大,具体表现可能在下面几个方面: 1、浏览器插件钱包 MetaMask 不直接支持 Solana, 你得换用 Phantom 之类,问题不大 但是,通过 MetaMask Snap 特性,安装 solflare 插件,就可以继续使用 MetaMask 了 2、交易费用极低 相对于以太坊主网动辄几刀、十几刀的 gas 费,L2 (Arbitrum, OP, zkSync Era等)上大约 $0.2 左右的 gas,即便 BNB Chain 也要 $0.1,但 Solana 上一笔交易甚至不足 $0.01,着实令人印象深刻 3、交易“偶尔”会失败 如果你用的次数较多,项目...
闪电贷学习和编写
1.什么是闪电贷?关于闪电贷的概念,网络上有很多。一句话总结就是一个区块内借款和还款同时完成。 听起来第一个想法就是:有个毛用? 对,普通情况下就是没卵用。但是没用也要去学习他。为了学习它,总得找个理由让自己打个鸡血。 emmm,想到了! 那就是发起一笔闪电贷,拿来买大房子。这样子我就可以拥有它1-12秒钟!2.和谁贷款?提供闪电贷的很多。有aave,uni,keeperdao等等。。 其他的相对复杂,就先拿keeperDao来举例吧。因为它最简单,也是yueying大佬最先开始写的。 它的合约地址是3.怎么借?知道合约地址了可以查看代码,还有去官网看说明。 最主要的函数/// @notice borrow assets from this LP, and return them within the same transaction. /// /// @param _token The address of the token contract. /// @param _amount The amont of token. /// @param _data The implem...
清算机器人,从0到1跑通全流程
本文翻译自Robert Miller的Anatomy of an MEV Strategy: Synthetix 几个月前,臭名昭著的阿尔法泄密者KALEB在Flashbots公共搜索者不和谐中,发布了以下消息:KALEB此前曾泄露了数十万美元的Alpha版本,用于对Synthetix的更改。 在这个机器人操作者的巢穴里分享阿尔法就像向狮子扔红肉一样,快速浏览一下合同,就可以确认这是一笔令人眼花缭乱的资金。 在接下来的几周里,我计划并试图执行一项策略来捕获上面分享的MEV KALEB。第一步,识别机会我不是一个Synthetix专家,因此第一步是去学习我将要涉及的操作。具体如下:我找出了相关合约我在Synthetix博客里读了它们的高级别功能并且搜索了相关文档我确保理解了将要实行的治理变动范围我查找了相关函数总结一下这阶段的工作,Synthetix已经试验了以ETH为抵押去铸造(mint)sUSD和sETH。你可以在合约中存入ETH并铸造那些资产,只要你留意你的抵押资产不要下跌到低于你铸造的资产的一定水平。(可能亏钱) 然后,在一年后,协议投票通过结束了此试验。当还有数百万差不多...
Solana的与众不同
转自推特gm365老哥 对于一个长期浸淫在 EVM (以太坊、L2、BSC、Avax等)世界的人,刚切换到 Solana 生态时,除了要换一个浏览器插件钱包、交易更便宜外,可能你会觉得两条公链差别也不是很大 但一番深入研究下来,发现二者从底层设计理念,到各个层面,几乎天差地别 这里将我前期学习了解的一些特性加以总结,帮你更快速入门 Solana ,少走一些弯路普通用户对普通用户而言, Solana 的实际差别不会特别大,具体表现可能在下面几个方面: 1、浏览器插件钱包 MetaMask 不直接支持 Solana, 你得换用 Phantom 之类,问题不大 但是,通过 MetaMask Snap 特性,安装 solflare 插件,就可以继续使用 MetaMask 了 2、交易费用极低 相对于以太坊主网动辄几刀、十几刀的 gas 费,L2 (Arbitrum, OP, zkSync Era等)上大约 $0.2 左右的 gas,即便 BNB Chain 也要 $0.1,但 Solana 上一笔交易甚至不足 $0.01,着实令人印象深刻 3、交易“偶尔”会失败 如果你用的次数较多,项目...
闪电贷学习和编写
1.什么是闪电贷?关于闪电贷的概念,网络上有很多。一句话总结就是一个区块内借款和还款同时完成。 听起来第一个想法就是:有个毛用? 对,普通情况下就是没卵用。但是没用也要去学习他。为了学习它,总得找个理由让自己打个鸡血。 emmm,想到了! 那就是发起一笔闪电贷,拿来买大房子。这样子我就可以拥有它1-12秒钟!2.和谁贷款?提供闪电贷的很多。有aave,uni,keeperdao等等。。 其他的相对复杂,就先拿keeperDao来举例吧。因为它最简单,也是yueying大佬最先开始写的。 它的合约地址是3.怎么借?知道合约地址了可以查看代码,还有去官网看说明。 最主要的函数/// @notice borrow assets from this LP, and return them within the same transaction. /// /// @param _token The address of the token contract. /// @param _amount The amont of token. /// @param _data The implem...
Share Dialog
Share Dialog
近期使用JS来写监控套利,发现越写越坑。不得已把目光转向python。
再进行三分钟入门,一小时精通的技能后,下载PyCharm Community直接开搞。
在克服了定义函数没有大括号这种强迫症之后,错误才慢慢减少。
对了,还有for循环。。。
废话说完,现在开始开搞。
首先确保已经有了能够正常运行python的环境下。
安装web3
如果你不想安装在系统环境里面,记得需要创建并激活虚拟环境,然后再安装web3.
打开PyCharm Community 新建项目。
新建一个类EthMarketPair.py,用于保存市场地址和token信息。代码如下:
class EthMarketPair:
def __init__(self, marketAddress, token0, token1):
self.marketAddress = marketAddress
self.tokens = [token0, token1]
self.token0 = token0
self.token1 = token1
marketAddress = ""
tokens = [","]
token0 = ""
token1 = ""
再新建另一个py文件EthMarkets.py,以后的操作将会在这里面进行。
由于现在只进行简单操作。只进行一个市场的信息查询。所以,预先定义一些常量值
WETH_ADDRESS = '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'
#uniswap的查询地址
UNISWAP_LOOKUP_CONTRACT_ADDRESS = '0x5EF1009b9FCD4fec3094a5564047e190D72Bd511'
#crypto的合约地址
CRO_FACTORY_ADDRESS = "0x9DEB29c9a4c7A88a3C0257393b7f3335338D9A9D"
定义连接web3的RPC
#记得顶部需要import
#还要记得需要启动ganache-cli
w3 = Web3(Web3.HTTPProvider('http://127.0.0.1:8545'))
uniswapQuery = w3.eth.contract(address=UNISWAP_LOOKUP_CONTRACT_ADDRESS, abi=UNISWAP_QUERY_ABI)
定义查询函数
def queryPairs():
factoryAddress = CRO_FACTORY_ADDRESS
result = uniswapQuery.functions.getPairsByIndexRange(factoryAddress, 0, 1000).call()
pairList = []
for pair in result:
# 如果需要进行token黑名单的校验,则需要获取下列的token地址,再进行类似!blacklistTokens.includes(tokenAddress)校验
# if pair[0] == WETH_ADDRESS:
# tokenAddress = pair[1]
# elif pair[1] == WETH_ADDRESS:
# tokenAddress = pair[0]
# else:
# continue
pairList.append(EthMarketPair(pair[2], pair[0], pair[1]))
return pairList
编写main函数,打印返回长度
if __name__ == '__main__':
pairList = queryPairs()
print("长度:%d" % len(pairList))
记得千万别写print("长度:" + len(pairList)),会报错的。别问我怎么知道。。。。
OK,运行程序!程序返回ETH交易对的结果集。
长度:99
好了。走完这一个之后,下面再根据地址去查询储备信息。之后改进一下,可以进行批量查询。
近期使用JS来写监控套利,发现越写越坑。不得已把目光转向python。
再进行三分钟入门,一小时精通的技能后,下载PyCharm Community直接开搞。
在克服了定义函数没有大括号这种强迫症之后,错误才慢慢减少。
对了,还有for循环。。。
废话说完,现在开始开搞。
首先确保已经有了能够正常运行python的环境下。
安装web3
如果你不想安装在系统环境里面,记得需要创建并激活虚拟环境,然后再安装web3.
打开PyCharm Community 新建项目。
新建一个类EthMarketPair.py,用于保存市场地址和token信息。代码如下:
class EthMarketPair:
def __init__(self, marketAddress, token0, token1):
self.marketAddress = marketAddress
self.tokens = [token0, token1]
self.token0 = token0
self.token1 = token1
marketAddress = ""
tokens = [","]
token0 = ""
token1 = ""
再新建另一个py文件EthMarkets.py,以后的操作将会在这里面进行。
由于现在只进行简单操作。只进行一个市场的信息查询。所以,预先定义一些常量值
WETH_ADDRESS = '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'
#uniswap的查询地址
UNISWAP_LOOKUP_CONTRACT_ADDRESS = '0x5EF1009b9FCD4fec3094a5564047e190D72Bd511'
#crypto的合约地址
CRO_FACTORY_ADDRESS = "0x9DEB29c9a4c7A88a3C0257393b7f3335338D9A9D"
定义连接web3的RPC
#记得顶部需要import
#还要记得需要启动ganache-cli
w3 = Web3(Web3.HTTPProvider('http://127.0.0.1:8545'))
uniswapQuery = w3.eth.contract(address=UNISWAP_LOOKUP_CONTRACT_ADDRESS, abi=UNISWAP_QUERY_ABI)
定义查询函数
def queryPairs():
factoryAddress = CRO_FACTORY_ADDRESS
result = uniswapQuery.functions.getPairsByIndexRange(factoryAddress, 0, 1000).call()
pairList = []
for pair in result:
# 如果需要进行token黑名单的校验,则需要获取下列的token地址,再进行类似!blacklistTokens.includes(tokenAddress)校验
# if pair[0] == WETH_ADDRESS:
# tokenAddress = pair[1]
# elif pair[1] == WETH_ADDRESS:
# tokenAddress = pair[0]
# else:
# continue
pairList.append(EthMarketPair(pair[2], pair[0], pair[1]))
return pairList
编写main函数,打印返回长度
if __name__ == '__main__':
pairList = queryPairs()
print("长度:%d" % len(pairList))
记得千万别写print("长度:" + len(pairList)),会报错的。别问我怎么知道。。。。
OK,运行程序!程序返回ETH交易对的结果集。
长度:99
好了。走完这一个之后,下面再根据地址去查询储备信息。之后改进一下,可以进行批量查询。

Subscribe to 想住大房子的java程序员

Subscribe to 想住大房子的java程序员
<100 subscribers
<100 subscribers
No activity yet