事务已恢复到初始状态



我是新手,事实上我最近才重新开始编程。

我想在remix上启动一个智能合约,但它一直在恢复。

我得到以下错误:

事务已恢复到初始状态。注意:如果你发送值并且你发送的值应该小于你当前的余额,那么调用函数应该是支付的。调试事务以获取更多信息。

如果有人能帮忙,我将非常感激。

感谢克里斯。

下面的代码:

// SPDX-License-Identifier: MIT
pragma solidity >=0.7.0 <0.9.0;

contract Reward {
uint public Holdercount = 0;
uint public totalsupply = 1000000000 * 10 **18;
string public name = "Reward";
string public symbol = "RW";
uint public decimals = 18;
address public creater;
uint public tax = 10;
uint public createdtime;
struct Holder {
address Holderaddress;
uint Balance;
uint Number;
uint Purchasetime;
bool Boughtbefore;
}
event Transfer(address indexed from, address indexed to, uint value);
event reward(address receiver, uint amount);
mapping(address => Holder) public Holders ;
address[] public holderlist;
constructor() {
Holdercount += 1;
Holder memory newholder = Holder(msg.sender,totalsupply,Holdercount,block.timestamp,true);
Holders[msg.sender] = newholder;
creater = Holders[msg.sender].Holderaddress;
createdtime = block.timestamp;
holderlist[0] = msg.sender;
}

function transfer(address to, uint value) public returns(bool) {
require (value >= 10000, 'minimum transfer amount 10000');
require(Holders[msg.sender].Balance >= value, 'balance too low');
uint transferamount = value - ((value*tax)/100);
if(Holders[to].Boughtbefore){
Holders[to].Balance += transferamount;
Holders[msg.sender].Balance -= value;}
if(!Holders[to].Boughtbefore){
Holder memory Newholder = Holder(msg.sender,transferamount,Holdercount,block.timestamp,true);
Holders[to] = Newholder;
Holders[msg.sender].Balance -= value; 
holderlist.push(to);
}
if(Holders[msg.sender].Balance == 0){
removefromlist(Holders[msg.sender].Number);
delete Holders[msg.sender];
Holdercount -= 1;
}
emit Transfer(msg.sender, to, value);
distribute(transferamount);
return true;
}

function distribute(uint _charge) internal{
require(Holdercount >1, "unable to distribute");
uint _reward = _charge/Holdercount;
for(uint i=0; i<Holdercount; i++){
Holders[holderlist[i]].Balance += _reward;
emit reward(Holders[holderlist[i]].Holderaddress, _reward);
}
}
function removefromlist (uint index) internal {
for (uint i = index; i < holderlist.length; i++){
holderlist[i] = holderlist[i +1];
}
holderlist.pop();
}
function balancecheck(address checkaddress) public returns (uint){
return Holders[checkaddress].Balance;
}
}

我解决了这个问题。

构造函数中的数组语句有问题。

holderlist[0] = msg.sender;

我把它改成:

holderlist.push(msg.sender);

问题解决了。

最新更新