Web3js

程式碼“.functions.swapExactETHforTokens”對應哪個包或庫?

  • December 25, 2021

我是 Python 的新手。我正在使用 Web3.py 包破譯一些程式碼行,我遇到了一些沒有說包或沒有在網頁上找到它的行。我解釋為最終購買有問題的代幣。

有誰知道 contract.functions.swapExactETHforTokens 屬於哪個包,或者它是否具有任何屬性綁定?

我試圖尋找 web3.py,但我無法獲得任何資訊。有人告訴我這是 pancakeswap 合約 (0x10ED43C718714eb63d5aA57B78B54704E256024E) 中的合約功能,但我找不到任何關於其他程式碼使用的 sintaxis 或文獻。

如果您提供任何連結來讀取所有屬性或如何解釋連結到 Pancakeswap 程式碼契約的參數,我將不勝感激。

我使用這些連結試圖尋找答案:

Web3.py 文件

Uniswap 文件

contract = web3.eth.contract(address=panRouterContractAddress, abi=panabi)


nonce = web3.eth.get_transaction_count(sender_address)

start = time.time()

pancakeswap2_txn = contract.functions.swapExactETHForTokens(
10000000000, # set to 0, or specify minimum amount of tokeny you want to receive - consider decimals!!!
[spend,tokenToBuy],
sender_address,
(int(time.time()) + 10000)
).buildTransaction({
'from': sender_address,
'value': web3.toWei(0.001,'ether'),#This is the Token(BNB) amount you want to Swap from
'gas': 250000,
'gasPrice': web3.toWei('5','gwei'),
'nonce': nonce,
})

這是我在 Pancakeswap Contract Source Code 上找到的與此相關的程式碼的一部分,但我不知道它們是否類似於使用。

function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
   external
   virtual
   override
   payable
   ensure(deadline)
   returns (uint[] memory amounts)
{
   require(path[0] == WETH, 'PancakeRouter: INVALID_PATH');
   amounts = PancakeLibrary.getAmountsOut(factory, msg.value, path);
   require(amounts[amounts.length - 1] >= amountOutMin, 'PancakeRouter: INSUFFICIENT_OUTPUT_AMOUNT');
   IWETH(WETH).deposit{value: amounts[0]}();
   assert(IWETH(WETH).transfer(PancakeLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
   _swap(amounts, path, to);
}

它不屬於 web3.py 本身,但 web3.py 從部署在乙太坊區塊鏈上的 uniswap 路由器訪問智能合約,地址為:0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

https://etherscan.io/address/0x7a250d5630b4cf539739df2c5dacb4c659f2488d

uniswap 路由器原始碼,包括函式 swapExactETHForTokens,可以在這裡找到https://github.com/Uniswap/v2-periphery/blob/master/contracts/UniswapV2Router02.sol

Pancakeswap只是幣安智能鏈上uniswap的一個拷貝,pancakeswap路由器地址如下:0x10ED43C718714eb63d5aA57B78B54704E256024E

https://bscscan.com/address/0x10ed43c718714eb63d5aa57b78b54704e256024e

根據 Joses 評論編輯:

所以,讓我們首先區分智能合約的呼叫swapExactETHForTokens有 4 個參數,而建構的交易有 5 個參數。交易包裝了對智能合約的呼叫。每次呼叫智能合約的方法,也就是每筆交易,改變區塊鏈的狀態,都必須用 wei 支付。Wei 是 Ether 的一小部分(或在 BSC 上是 BNB),是其最小單位。

一個人必須為交易付費,因為有很多人在競爭自己的交易以進入鏈的下一個區塊。競爭/未決交易被放置在交易池(也稱為記憶體池)中。您的交易是否贏得了進入下一個區塊的競爭,取決於添加下一個區塊的節點(通過探勘/堆疊決定)是否在其他交易中選擇您的交易。

人們決定為他們的交易支付的任何費用都會獎勵一個節點。這引入了激勵節點從記憶體池中選擇交易的動機,其中交易的所有者願意為每次計算支付更多的 wei。氣體是計算單位。

現在,讓我們看一下交易參數:fromvaluegas和。gasPrice``nonce

from, 是希望執行智能合約方法並建立交易的人的地址/“公鑰”。然後在私鑰的幫助下對交易進行簽名。如果您使用ganachegeth為您完成簽名。

value. 一些智能合約方法是payable,這意味著它們可以接收 Ether/BNB。例如,WETH/WBNB 代幣合約有一種存款方式,即將Ether/BNBpayable轉換value成對應的 WETH/BNB 代幣。

gasPrice,您願意為執行交易期間燃燒的每單位 Gas支付的 Wei 金額。

gas,您願意支付的最大天然氣量。gas * gasPrice您願意支付的最大 Wei 也是如此。如果交易的計算達到這個限制,交易就會失敗。

nonce,地址的滾動交易次數from

參數fromvalue可通過智能合約msg.sendermsg.value在智能合約內訪問,例如在 WBNB 合約的存款功能內

現在,所有交易參數都已經到位,可以進入智能合約方法呼叫,swapExactETHForTokens. 您連結到的 uniswap 文件中解釋了這些參數。

引用自:https://ethereum.stackexchange.com/questions/117215