程式碼“.functions.swapExactETHforTokens”對應哪個包或庫?
我是 Python 的新手。我正在使用 Web3.py 包破譯一些程式碼行,我遇到了一些沒有說包或沒有在網頁上找到它的行。我解釋為最終購買有問題的代幣。
有誰知道 contract.functions.swapExactETHforTokens 屬於哪個包,或者它是否具有任何屬性綁定?
我試圖尋找 web3.py,但我無法獲得任何資訊。有人告訴我這是 pancakeswap 合約 (0x10ED43C718714eb63d5aA57B78B54704E256024E) 中的合約功能,但我找不到任何關於其他程式碼使用的 sintaxis 或文獻。
如果您提供任何連結來讀取所有屬性或如何解釋連結到 Pancakeswap 程式碼契約的參數,我將不勝感激。
我使用這些連結試圖尋找答案:
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。氣體是計算單位。
現在,讓我們看一下交易參數:
from
、value
、gas
和。gasPrice``nonce
from
, 是希望執行智能合約方法並建立交易的人的地址/“公鑰”。然後在私鑰的幫助下對交易進行簽名。如果您使用ganache
或geth
為您完成簽名。
value
. 一些智能合約方法是payable
,這意味著它們可以接收 Ether/BNB。例如,WETH/WBNB 代幣合約有一種存款方式,即將Ether/BNBpayable
轉換value
成對應的 WETH/BNB 代幣。
gasPrice
,您願意為執行交易期間燃燒的每單位 Gas支付的 Wei 金額。
gas
,您願意支付的最大天然氣量。gas * gasPrice
您願意支付的最大 Wei 也是如此。如果交易的計算達到這個限制,交易就會失敗。
nonce
,地址的滾動交易次數from
。參數
from
和value
可通過智能合約msg.sender
和msg.value
在智能合約內訪問,例如在 WBNB 合約的存款功能內。現在,所有交易參數都已經到位,可以進入智能合約方法呼叫,
swapExactETHForTokens
. 您連結到的 uniswap 文件中解釋了這些參數。