Почему функция address.transfer () может отправлять только 1 в моем контракте? - PullRequest
0 голосов
/ 11 декабря 2018

Почему функция address.transfer() может отправлять только 1 эфир в моем контракте?Он будет сообщать об ошибках, когда значение больше 1 эфира или меньше 1 эфира.

Мой код:

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: ошибка: ошибка: [ethjs-rpc] ошибка rpc с полезной нагрузкой {"id": 7309825988666, "jsonrpc": "2.0", "params":[ "0xf8721f85e8d4a510008303345094bcd5d351e5850774d1f720328dac1c8732d68eb7872386f26fc1000084be9a6555822d45a0a07b903c493ba6dee96a54bc74344d1c668cd3d9e8a7c757fdc5daa664ff4271a01bb6799a02054ecf1c8c5be51d6748b2c086eb330091b2e0500d43e756666f69"], "метод": "eth_sendRawTransaction"} Ошибка: В.М. Исключение при обработке транзакции: вновь обратиться

Uncaught (в обещании) Ошибка: Ошибка: Ошибка: [ethjs-RPC] RPC ошибки с полезной нагрузкой {"идентификатор": 7309825988666, "jsonrpc": "2,0", "PARAMS": [ "0xf8721f85e8d4a510008303345094bcd5d351e5850774d1f720328dac1c8732d68eb7872386f26fc1000084be9a6555822d45a0a07b903c493ba6dee96a54bc74344d1c668cd3d9e8a7c757fdc5daa664ff4271a01bb6799a02054ecf1c8c5be51d6748b2c086eb330091b2e0500d43e756666f69 "]," method ":" eth_sendRawTransaction "} Ошибка: исключение виртуальной машины при обработке транзакции: возврат

1 Ответ

0 голосов
/ 11 декабря 2018

В вашем 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')
});

Возможно, передача не удалась, потому что вы даете (ETH) сумму, которой у вас может не быть!У вас есть value: 10000000000000000 много Эфиров?

Если нет, то передайте некоторую сумму, которую вы имеете, так как вы не указали никаких условий относительно суммы в вашем контракте, вы можете дать наименьшую возможную сумму.

PS: ETH, который получает ваш контракт, нигде не сохраняется, это может привести к потере Эфиров.

...