Truffle 控制台:通過 Solidity 函式發送 3 或 ‘3000000000000000’ 但接收者獲得 ‘0.000000000000000003’ 乙太幣
我正在嘗試使用 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 開發控制台工作:
- 部署智能合約
打開 truffle 開發控制台並執行
truffle migrate --reset
. 請注意,您目前的遷移文件不起作用:您必須更改MyContract2
為myContract2
.
- 獲取智能合約實例
C1 = await myContract1.deployed() C2 = await myContract2.deployed()
- 向智能合約 1 發送 3 ETH
要發送的值必須轉換為 Wei。
web3.eth.sendTransaction({to:C1.address, from:accounts[0], value:web3.utils.toWei("3", "ether")})
- 將 ETH 從智能合約 1 發送到智能合約 2
C1.sendTo(C2.address, web3.utils.toWei('3',"ether"), {from: accounts[0]})
- 獲取智能合約餘額2
C2bal = await web3.eth.getBalance(C2.address) web3.utils.fromWei(C2bal, "ether") //returns '3'