Truffle
無法使用 truffle 控制台使用 solc 0.8.4 將 ETH 發送到合約(還原)
我在這個問題上花了大約 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) } } };
那麼您應該對以下過程感到滿意:
truffle develop
使用命令行打開 truffle 開發控制台。- 使用 部署智能合約
truffle migrate --reset
。- 獲取合約實例:
sportBet = await SportBet.deployed()
- 將 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'
按預期返回。