Ethereum 为什么address.transfer()函数只能在我的合同中发送1?

Ethereum 为什么address.transfer()函数只能在我的合同中发送1?,ethereum,solidity,Ethereum,Solidity,为什么address.transfer()功能只能在我的合同中发送1个?当值大于1乙醚或小于1乙醚时,它将报告错误 我的代码: pragma-solidity^0.4.24; 合同彩票{ uint public winn; //抽奖者 结构彩票{ 单位货币//奖金 地址名称//名字(地址) } //庄家地址 地址私人银行地址=0x8b3234612c7D3b805F4c9CF1Aa55Cc47B82A0769; //得奖者数量 uint32公众计数; //得奖者集合 彩票公共图书馆; //初始化

为什么
address.transfer()
功能只能在我的合同中发送1个?当值大于1乙醚或小于1乙醚时,它将报告错误

我的代码:

pragma-solidity^0.4.24;
合同彩票{
uint public winn;
//抽奖者
结构彩票{
单位货币//奖金
地址名称//名字(地址)
}
//庄家地址
地址私人银行地址=0x8b3234612c7D3b805F4c9CF1Aa55Cc47B82A0769;
//得奖者数量
uint32公众计数;
//得奖者集合
彩票公共图书馆;
//初始化
构造函数()公共{
计数=0;
}
事件getRandom(
uint索引(u-win);
//开始抽奖的函数,返回奖金
函数start()是公共函数{
//随机数生成
uint win=uint(keccak256(现在,msg.sender,现在))%100;
赢=赢%12+1;
winn=赢;
l、 钱=温;
l、 name=msg.sender;
//发奖金操作
消息发送方转账(winn*100000000000000);
//监听事件
getRandom(winn);
}
函数(){}
}
下面是javascript代码:

lotteryInstance.start.sendTransaction({
发件人:“0x8b3234612c7D3b805F4c9CF1Aa55Cc47B82A0769”,
价值:100000000000000,
煤气:210000,
加斯普里斯:web3.toWei('1000','gwei')
});
以及错误消息:

MetaMask-RPC错误:错误:[ethjs-RPC]RPC错误,有效负载为{“id”:7309825988666,“jsonrpc”:“2.0”,“params”:[“0xF8721F85E8D4A510008303345094BCD5D351E5850774D1F720328DAC1C8732D68EB7872386F26FC1000084BE9A655822D45A07B903C493BA6DEE96A54BC744D1C668CD3D9E8A7C757FDC5DAA664FF4271A01BB6799A02054ECF1C8BE51D674B2C086EB330091E0500D43E75666F69]”,“方法”:“eth\U SENDTRANSACTION”}处理事务时出错:VM异常

未捕获(承诺中)错误:错误:错误:[ethjs rpc]rpc错误,有效负载为{“id”:7309825988666,“jsonrpc”:“2.0”,“params”:[”0xF8721F85E8D4A510008303345094BCD5D351E5850774D1F720328DAC1C8732D68EB7872386F26FC1000084BE9A655822D45A07B903C493BA6DEE96A54BC74344D1C668CD3D9E8A7C757FDC5DAA664FF4271A01BB6799A02054ECF1C8BE51D674B2C086EB330091B2E0500D43E7566F69“,“方法”:“eth\U SENDTRANSACTION:revert”错误:处理事务时VM异常


在下面的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)一个您可能没有的金额!您有
值:100000000000000
多个以太吗

如果没有,那么传递一些你拥有的金额,因为你没有在合同中给出任何关于金额的条件,你可以给出最小的金额


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

价值的公司是伟。今天,我用send代替了transfer,当我在web3中调用start功能时,它可以转移到合同地址,但活期账户只能通过这种方式获得1以太传递价值:
 web3.toWei('1000','gwei')
,也许这会有帮助。你的建议很好!我已经解决了只能传输1个乙醚的问题。这个问题是我在使用banker地址传输10个乙醚到contract后清理metamask
缓存,如果我不清理缓存,玩家可以获得足够的乙醚。但是我不知道为什么。它会清理e吗合同地址的问题?我想如果你使用自定义RPC或本地主机网络,它会出现。但这是你必须搜索或询问的另一个问题。