Solidity

使用 web3.js 將乙太坊發送到智能聯繫人我是一個sk___米和噸一種米一種sķmetamask

  • August 25, 2021

這個功能:

 web3.eth.sendTransaction({from:myaddress,to:toaddress, value:web3.toWei(1, "ether")}, function(err, transactionHash) {
 if (!err)
   console.log(transactionHash); 
 });

當我為元遮罩返回設置智能合約地址時,完全可以將 ETH 從發送**ethereum-acount-addressethereum-acount-address**BUT toaddress

Transaction Error. Exception thrown in contract code.

我的穩固契約是

pragma solidity ^0.4.17;

contract mysmartContract{


       function whitdrawETH() payable public {

       }

       function getContactEthBalance() constant returns(uint) {

       return this.balance;
       }

   }

為了使乙太坊可以接受智能合約,您需要實現回退功能

function() public payable { }

直接接收 Ether(沒有函式呼叫,即使用 send 或 transfer)但沒有定義回退函式的合約會拋出異常,將 Ether 發回(這在 Solidity v0.4.0 之前是不同的)。所以如果你想讓你的合約接收乙太幣,你必須實現一個備份功能。

如果您想通過函式將乙太幣發送到您的智能合約mysmartContractwhitdrawETH()您需要將此函式的 methodSignature 發送到數據欄位,如下所示:

web3.eth.sendTransaction({
  from: myaddress,
  to: toaddress,
  data: web3.eth.abi.encodeFunctionSignature('whitdrawETH()')
  value: web3.toWei(1, "ether")
}

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