首页 > 解决方案 > 为什么我的合约中的address.transfer()函数只能发送1ether?

问题描述

为什么address.transfer()我的合约中只能发送 1ether 的功能?当值大于 1 ether 或小于 1 ether 时会报错。

我的代码:

pragma solidity ^0.4.24;

contract Lottery{

  uint public winn;

  //抽奖者
  struct lottery{

    uint money;   //奖金
    address name;    //名字(地址)
    
  }


  //庄家地址
  address private bankerAddress = 0x8b3234612c7D3b805F4c9CF1Aa55Cc47B82A0769;

  //得奖者数量
  uint32 public count;

  //得奖者集合
  lottery public l;



  //初始化
  constructor()public {
    count=0;
  }


  event getRandom (
    uint indexed _win);



  //开始抽奖的函数,返回奖金
  function start() public payable{
    
    
    //随机数生成
    uint win= uint(keccak256(now, msg.sender, now)) % 100;
    
    win = win % 12 +1;
    winn = win;
    
    
    l.money = winn;
    l.name = msg.sender;
    
    //发奖金操作
    msg.sender.transfer(winn*10000000000000000);


    //监听事件
    getRandom(winn);
  }

  function () public payable{}
}

下面是javascript代码:

lotteryInstance.start.sendTransaction({
  from: '0x8b3234612c7D3b805F4c9CF1Aa55Cc47B82A0769',
  value: 10000000000000000,
  gas: 210000,
  gasPrice: web3.toWei('1000', 'gwei')
});

和错误信息:

MetaMask - RPC Error: Error: Error: [ethjs-rpc] rpc error with payload {"id":7309825988666,"jsonrpc":"2.0","params":["0xf8721f85e8d4a510008303345094bcd5d351e5850774d1f720328dac1c8732d68eb7872386f26fc1000084be9a6555822d45a0a07b903c493ba6dee96a54bc74344d1c668cd3d9e8a7c757fdc5daa664ff4271a01bb6799a02054ecf1c8c5be51d6748b2c086eb330091b2e0500d43e756666f69"],"method":"eth_sendRawTransaction"错误:处理事务时出现 VM 异常:还原

Uncaught (in promise) Error: Error: Error: [ethjs-rpc] rpc error with payload {"id":7309825988666,"jsonrpc":"2.0","params":["0xf8721f85e8d4a510008303345094bcd5d351e5850774d1f720328dac1c8732d68eb7872386f26fc1000084be9a6555822d45a0a07b903c493ba6dee96a54bc74344d1c668cd3d9e8a7c757fdc5daa664ff4271a01bb6799a02054ecf1c8c5be51d6748b2c086eb330091b2e0500d43e756666f69"],"method":" eth_sendRawTransaction"} 错误:处理事务时出现 VM 异常:还原

标签: ethereumsolidity

解决方案


在下面的 JS 代码中:

lotteryInstance.start.sendTransaction({
    from: '0x8b3234612c7D3b805F4c9CF1Aa55Cc47B82A0769',
    value: 10000000000000000, // Here is the amount of ETH you give to start fuction
    gas: 210000,
    gasPrice: web3.toWei('1000', 'gwei')
});

tx 失败可能是因为你给了(ETH)一个你可能没有的金额!你有value: 10000000000000000很多以太币吗?

如果不是,则传递您拥有的一些金额,因为您没有对合同中的金额给出任何条件,您可以给出尽可能小的金额。

PS:你的合约收到的 ETH 没有存储在任何地方,这可能会导致 ETH 的丢失。


推荐阅读