首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sushi交换路由处理器的生成路由processRoute契约方法

Sushi交换路由处理器的生成路由processRoute契约方法
EN

Ethereum用户
提问于 2023-04-14 23:29:15
回答 2查看 228关注 0票数 2

我正试图通过Sushi交换来编程地使用RouteProcessor智能契约。在这里,您可以看到合同https://etherscan.io/address/0xF70c086618dcf2b1A461311275e00D6B722ef914。我收集了所有参数的信息,但找不到关于如何确定路由参数的任何描述。那么你是如何生成路由的呢?

谢谢你的帮助。

这是我试图运行的代码,用于交换仲裁Nova链中的ETH -> ARB。

代码语言:javascript
复制
from eth_abi import encode
from web3 import Web3

arbitrum_nova_rpc_url = 'https://nova.arbitrum.io/rpc'
wallet_address = '<your address here>'

route_processor_abi = '[{"inputs":[{"internalType":"address","name":"_bentoBox","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"bentoBox","outputs":[{"internalType":"contract IBentoBoxMinimal","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"route","type":"bytes"}],"name":"processRoute","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"transferValueTo","type":"address"},{"internalType":"uint256","name":"amountValueTransfer","type":"uint256"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"route","type":"bytes"}],"name":"transferValueAndprocessRoute","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]'
route_processor_arbitrum_nova_address = '0xaB235da7f52d35fb4551AfBa11BFB56e18774A65'

# Generate route here
arbitrum_nova_ether_address = '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE'
arbitrum_nova_weth_address = '0x722E8BdD2ce80A4422E880164f2079488e115365'
arbitrum_nova_arbitrum_address = '0xf823C3cD3CeBE0a1fA952ba88Dc9EEf8e0Bf46AD'

byte_ether_address = encode(['address'], [web3.to_checksum_address(arbitrum_nova_ether_address)])
byte_weth_address = encode(['address'], [web3.to_checksum_address(arbitrum_nova_weth_address)])
byte_arb_address = encode(['address'], [web3.to_checksum_address(arbitrum_nova_arbitrum_address)])

route = byte_ether_address + byte_weth_address + byte_arb_address

web3 = Web3(Web3.HTTPProvider(arbitrum_nova_rpc_url))

contract = web3.eth.contract(
    address=route_processor_arbitrum_nova_address, 
    abi=route_processor_abi
)

tx = contract.functions.processRoute(
    web3.to_checksum_address(arbitrum_nova_ether_address),  # token in
    web3.to_wei(0.0001, 'ether'),  # amount in
    web3.to_checksum_address(arbitrum_nova_arbitrum_address),  # token out
    0,  # amount out min
    web3.to_checksum_address(address),  # to address
    route # route
)

tx.build_transaction({
    "nonce": web3.eth.get_transaction_count(address),
    "value": 0
})
EN

回答 2

Ethereum用户

发布于 2023-04-15 01:15:59

route参数应该是编码要交换的令牌路径的bytes值。

就像您想要将以太交换为ARBITRUM,并且路径包括首先将Ether转换为WETH,然后将WETH转换为ARBITRUMroute类似于下面的示例

代码语言:javascript
复制
from eth_abi import encode_single

eth_address = web3.to_checksum_address(arbitrum_nova_ether_address)
weth_address = web3.to_checksum_address(arbitrum_nova_weth_address)
arb_address = web3.to_checksum_address(arbitrum_nova_arbitrum_address)

encoded_eth = encode_single('address', eth_address)
encoded_weth = encode_single('address', weth_address)
encoded_arb = encode_single('address', arb_address)

您只需将编码的令牌addresses连接起来,形成route参数:route = encoded_eth + encoded_weth + encoded_arb,然后将这个route参数传递给processRoute()

票数 0
EN

Ethereum用户

发布于 2023-04-16 09:42:27

Sushiswap交叉链交换正在接入Layer0 0‘S 星门桥基础设施。在这个项目中,路由器值的输入是基于chainID的。为了更好地理解,我建议阅读这位医生

星际之门是什么

2- sushiswap多链交换文章

3- starGate gitBook

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/148976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档