# 【教學】繞過前端,用 Metamask 發合約交易 - Author:Lee Ting Ting - 這邊以 pancakeswap 上從 WBNB 換成 CAKE為例 - https://pancakeswap.finance/swap ## 前言 - 如何讓 Fork 跟 DEX 互動? 參加 DeFi Portfolio 比賽的學員使用 Tenderly Fork 區塊鏈,連接上 Metamask 後發現許多 DEX 連接 Metamask 時只會連接主網、無法連接 Fork 網。 本教學文章教大家如何讓繞過 DEX 前端網頁的阻擋,讓 Fork 能夠跟 DEX 進行交易。 ## 步驟 1. 用正常前端跟合約互動,從 Metamask 紀錄找出要互動的合約地址 - 0x10ED43C718714eb63d5aA57B78B54704E256024E - ![](https://i.imgur.com/3Uxdqch.png =250x)![](https://i.imgur.com/DbsPO7A.png =250x)![](https://i.imgur.com/t795HIa.png =250x)![](https://i.imgur.com/QWGF3M0.png =250x) 2. 發交易後從 [block explorer](https://github.com/etherparty/explorer ) 上拿到資料,並複製 Input 欄位(註:需 git clone 下來並修改 rpc url) ![](https://i.imgur.com/BpFgtkG.png) - 將 data 貼到解碼 Tx data 的工具,右邊就是解碼完的資料 - https://lab.miguelmota.com/ethereum-input-data-decoder/example/ - ![](https://i.imgur.com/tcrH2Yo.jpg) - 找到 contract ABI 並貼上 - https://bscscan.com/address/0x10ED43C718714eb63d5aA57B78B54704E256024E#code - ![](https://i.imgur.com/6ryvcGu.png) - 補充:為何要這麼麻煩從這邊撈資料?因為 Metamask 上看不到這個 data ![](https://i.imgur.com/pIwMWMl.png =300x) - 如果你是用 Tenderly 產生 forked rpc url 的話,可以從他 dashboard 裡找到一樣的 data 資料 ![](https://i.imgur.com/9juKrdR.png) 3. 剛解碼完的 input 那邊共有三個地址,第三個是我們發交易的地址,第一個是 WBNB 代幣合約,第二個是 CAKE 代幣合約(從 BSCscan 上貼地址找到) - 由此可推論這欄位意思是從 WBNB 換成 CAKE 4. 因此,如果我們想反過來,從 CAKE 換成 WBNB,需要顛倒這個 array 裡的參數順序 5. 接著看 input 的第一個 hex number 0x90fe74b63161effb 是什麼,轉換完再除以 10^18 是 10.44,也就代表我們該交易完後收到了 10.44 CAKE - 線上轉換器:https://www.rapidtables.com/convert/number/hex-to-decimal.html 6. 再來看 input 的第二個 hex number 0x627a044a,換算完是 1652163658,從下面的 names 對應到最後一個參數代表 deadline,可以知道他是 unix timestamp,也就是 2022-05-10 14:20,而從交易紀錄可知,交易的發送時間是 14:01,也就是超過這個時間交易還沒被確認的話,這筆買賣會無效 - 線上轉換器:https://www.rapidtables.com/convert/number/hex-to-decimal.html 7. 最上面的 method swapExactETHForTokens 代表我們是想執行換幣的動作 8. 了解這些之後,就能自己做交易 input data 了!首先找到這個 encode data 網站 - https://abi.hashex.org/ 9. 輸入以下參數,將 CAKE 換成 WBNB,產生以下 data 後複製 ![](https://i.imgur.com/WzYnGfi.jpg) 10. 到 Metamask 上 transfer 到這個合約地址,並貼上剛剛的字串到 hex data 欄位 ![](https://i.imgur.com/4sZRbPl.png =250x) 11. 按下 Next 就能成功發送交易換幣成功! 12. 把一樣的 input hex data 貼上 Tenderly 做 Simulation 能更看清楚這之中發生了什麼事 ![](https://i.imgur.com/QChnUFR.png) 13. 按上圖輸入好後按下一步,如果之後有交易失敗,也能用這個方式 Debug ![](https://i.imgur.com/GyPNT4b.png) 14. 這樣就成功把 CAKE 換回成 WBNB 了! ## 補充 更簡單的方式是用 Tenderly 發交易,他會幫你 encode input parameter,輸入完一樣按送出就可以了,記得右邊 from 要貼上自己送出交易的地址,不然預設會從 0x0 空地址送出 ![](https://i.imgur.com/UZAqc2r.png =350x)