Truffle

無法使用 truffle 控制台使用 solc 0.8.4 將 ETH 發送到合約(還原)

  • May 13, 2021

我在這個問題上花了大約 6 到 8 個小時,最後在這裡詢問以下問題。

目標

我想將 ETH 從預設的 Ganache 地址之一發送到已部署的合約SportBet

版本

Truffle v5.3.4 (core: 5.3.4)
Solidity - 0.8.4 (solc-js)
Node v15.9.0
Web3.js v1.3.5
Ganache v2.5.4

使用

macOS 11.2.3
vsCode 1.56.1

契約

contract SportBet {

string public name = "SportBet";
address public owner;

event Received(address, uint256);

receive() external payable {
   emit Received(msg.sender, msg.value);
}

fallback() external payable {}
}

然後在松露控制台上聲明

sportBet = await SportBet.deployed()

現在使用 web3 發送 ETH

web3.eth.sendTransaction({to:sportBet.address, from:accounts[0], value: web3.utils.toWei('1'), gas: 100000})

總是以

Uncaught Error: Returned error: VM Exception while processing transaction: revert

獲取汽油價格

web3.eth.getGasPrice()

結果

'20000000000'

更新

當我在松露控制台上執行時

migrate --reset

我明白了

2_deploy_contracts.js

=====================

替換“SportBet”

錯誤:*** 部署失敗 ***

"SportBet" -- Provided address g is invalid, the capitalization checksum test failed, or it's an indirect IBAN address which can't be converted..

提前致謝!

這很可能是由於您的遷移文件有錯誤。

確保文件migrations夾中有遷移文件。你可以命名它2_deploy_contract.js

const SportBet = artifacts.require("SportBet");

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

項目根目錄下的truffle-config.js文件應如下所示:

module.exports = {

 networks: {
     development: {
     host: "127.0.0.1",     // Localhost (default: none)
     port: 8545,            // Standard Ethereum port (default: none)
     network_id: "*",       // Any network (default: none)
    },
 },

 // Set default mocha options here, use special reporters etc.
 mocha: {
   // timeout: 100000
 },

 // Configure your compilers
 compilers: {
   solc: {
      version: "0.8.4",    // Fetch exact version from solc-bin (default: truffle's version)
   }
 }
};

那麼您應該對以下過程感到滿意:

  1. truffle develop使用命令行打開 truffle 開發控制台。
  2. 使用 部署智能合約truffle migrate --reset
  3. 獲取合約實例:

sportBet = await SportBet.deployed()

  1. 將 ETH 發送到合約以觸發receive功能:

web3.eth.sendTransaction({to:sportBet.address, from:accounts[0], value: web3.utils.toWei('1'), gas: 100000}) 5. 檢查智能合約的 ETH 餘額:

web3.eth.getBalance(sportBet.address)

'1000000000000000000'按預期返回。

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