Ether

Truffle 控制台:通過 Solidity 函式發送 3 或 ‘3000000000000000’ 但接收者獲得 ‘0.000000000000000003’ 乙太幣

  • April 24, 2021

我正在嘗試使用 truffle 控制台通過兩種不同的技術以 Ether 單位發送 Ether,即 3 個 Ether:

1)truffle(development)> C1.sendTo(C2.address, 3)

2)truffle(development)> C1.sendTo(C2.address, 3000000000000000)

(其中 sendTo(…) 是 myContract1 的方法,C1 是 myContract1 的對象,C2 是 myContract2 的對象。但在接收端,即 C2,我總是得到 ‘0.000000000000000003’。myContract1、myContract2 和遷移文件如下:

pragma solidity ^0.5.8;
contract myContract1 {
   address owner;
   constructor() public {
       owner = msg.sender;
   }
   function sendTo(address payable receiver, uint amount) public {
      receiver.transfer(amount);
   }
   function() external payable{
    }
}

我的契約2:

pragma solidity ^0.5.8;
contract myContract2 {
   //This contract will receive Ether sent by myContract1
   address owner;
   constructor() public {
      owner = msg.sender;
   }
   function() external payable {   
   }
}

遷移文件是:

const myContract1 = artifacts.require("myContract1");
const myContract2 = artifacts.require("myContract2");

module.exports = function(deployer) {
deployer.deploy(myContract1);
deployer.deploy(MyContract2);
};

我正在通過 Truffle 控制台訪問 myContract1 的 sendTo(..) 函式。我想通過 ‘sendTo(..)’ 方法發送 Ether 中的金額,但我認為它接受 Wei 中的金額並以小數點而不是整數列印值。請指導我如何通過 Truffle 控制台發送值,使其為整數。輸出如下所示,目前 C1 有 7 個乙太幣餘額:

松露(開發)> C1bal =等待web3.eth.getBalance(C1.address)未定義松露(開發)> web3.utils.fromWei(C1bal,“乙太”)‘6.993999999999999997’

同樣:

松露(開發)> web3.utils.fromWei(C2bal,“乙太”)‘0.000000000000000003’

有人請指導我。祖爾菲。

這是一個單位轉換問題。

3 乙太幣 = 3000000000000000000 韋。

以下工作流程使用 Truffle 開發控制台工作:

  1. 部署智能合約

打開 truffle 開發控制台並執行truffle migrate --reset. 請注意,您目前的遷移文件不起作用:您必須更改MyContract2myContract2.

  1. 獲取智能合約實例
C1 = await myContract1.deployed()
C2 = await myContract2.deployed()
  1. 向智能合約 1 發送 3 ETH

要發送的值必須轉換為 Wei。

   web3.eth.sendTransaction({to:C1.address, from:accounts[0], value:web3.utils.toWei("3", "ether")})
  1. 將 ETH 從智能合約 1 發送到智能合約 2
C1.sendTo(C2.address, web3.utils.toWei('3',"ether"), {from: accounts[0]})
  1. 獲取智能合約餘額2
C2bal = await web3.eth.getBalance(C2.address) 

web3.utils.fromWei(C2bal, "ether") //returns '3' 

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