交易已恢复为初始状态
我是牢固的新手,实际上,我直到最近才再次开始编程。
我正在尝试通过Remix推出SmartContract,但它一直在恢复。
我会收到以下错误:
事务已恢复为初始状态。 注意:如果您发送值,并且发送的值应小于当前余额,则应支付调用功能。 调试交易以获取更多信息。
如果有人可以提供帮助,我将最感激。
谢谢克里斯
。
下面的代码:
// 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;
}
}
I am new to solidity, in fact I have only recently started programming again.
I am trying to launch a smartcontract on remix, but it keeps reverting.
I get the following error:
The transaction has been reverted to the initial state.
Note: The called function should be payable if you send value and the value you send should be less than your current balance.
Debug the transaction to get more information.
If anyone can help, I would be most grateful.
Thanks
Chris.
code below:
// 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;
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我解决了这个问题。
构造函数函数中的数组语句存在问题。
我将其更改为:
这解决了问题。
I solved this.
There was a problem with the array statement in the constructor function.
I changed it to:
This solved the issue.