Solidity

設置事務的 msg.value 的問題

  • October 27, 2022

首先我們要注意,這個 Dapp 是部署在 Polygon 測試網上的,所以它使用 MATIC 代幣,所有的計算都應該符合這個事實。

在下面的函式中,應提供一個字元串作為函式的參數,以見證正確的互動。同時,應將特定數量的乙太幣作為 msg.value 與交易一起發送到合約中。

在此處輸入圖像描述

另一方面,這是我的 JS 腳本(用於使用者界面)的函式,我在其中嘗試通過ethers.js庫執行 payDong() 函式。

在此處輸入圖像描述

但是,我相信我做錯了什麼,因為在每次執行時,我的瀏覽器控制台中都會出現以下關於事務msg.value的錯誤。

在此處輸入圖像描述

我知道每個要發送到區塊鏈的整數都應該轉換為一個大數字,但由於 dong 值有時可能是一個小數,我無法想出一個很好的解決方案來解決這個問題。

在此先感謝您的幫助

msg.value 定義uint256,用於傳遞隨消息發送的**wei數。**因此,您不能將小數與msg.value. 可能的解決方案是以“wei”命名您的dong變數。

使用 ethers.js,您可以使用以下程式碼:

const maticsInWei = ethers.utils.parseEther("1.2");
// Value of maticsInWei: BigNumber { value: "1200000000000000000" }

通常,在為要從我們的 JS 程式碼廣播到區塊鏈的交易設置msg.value時,格式應該是BigNumber。這通常是通過ethers.utils.parseEther("value")

另一方面,在讀取從區塊鏈檢索到的值時,我們應該將 BigNumber 轉換為要使用的字元串或數字,通常使用ethers.utils.formatEther("retrievedValue")

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