bscscan testnet未显示持有人
我创建了ERC20令牌,它可以在混音中运行良好,因此我想在BSCSCAN TestNet上对其进行测试。
据我所知,它是ERC20和BEP20符合的……尽管我有点缺乏经验,所以我可能已经错了。
它可以正确交易,但是在BSCSCAN上,它没有显示任何持有人。谁能帮忙?
谢谢。克里斯...代码下面:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.15;
contract Share {
mapping(address => uint256) public balances;
mapping(address => User) public Users ;
address[] public Userlist;
mapping(address => mapping(address => uint256)) public allowance;
uint256 public totalSupply = 1000000 * 10 **18;
string public _name;
string public _symbol;
uint8 public decimals = 18;
uint public Usercount = 0;
address public creater;
uint256 tax = 10;
uint256 public createdtime;
struct User {
address Useraddress;
uint256 Account;
uint256 Number;
uint256 Purchasetime;
bool Boughtbefore;
}
event Transfer(address indexed from , address indexed to, uint256 amount);
event Approval(address indexed _owner, address indexed _spender, uint256 _value);
event reward(address indexed receiver, uint256 amount);
constructor(string memory name_, string memory symbol_) {
Usercount += 1;
_name = name_;
_symbol = symbol_;
User memory newUser = User(msg.sender,totalSupply,Usercount,block.timestamp,true);
Users[msg.sender] = newUser;
creater = Users[msg.sender].Useraddress;
createdtime = block.timestamp;
Userlist.push(msg.sender);
balances[msg.sender]= totalSupply;
emit Transfer(address(0), msg.sender, totalSupply);
}
function transfer(address _to, uint256 _value) public returns(bool) {
require(balances[msg.sender]>= _value, 'Account too low');
uint256 transferamount = _value - ((_value*tax)/100);
uint256 rewardamount = (_value*tax)/100;
if(Users[_to].Boughtbefore){
Users[_to].Account += transferamount;
Users[msg.sender].Account -= _value;
balances[_to] += transferamount;
balances[msg.sender] -= _value;
}
if(!Users[_to].Boughtbefore){
Usercount += 1;
User memory NewUser = User(_to,transferamount,Usercount,block.timestamp,true);
Users[_to] = NewUser;
Users[msg.sender].Account -= _value;
Userlist.push(_to);
balances[_to] += transferamount;
balances[msg.sender] -= _value;
}
if(Users[msg.sender].Account == 0){
removefromlist(Users[msg.sender].Number);
delete Users[msg.sender];
Usercount -= 1;
}
emit Transfer(msg.sender, _to, transferamount);
distribute(rewardamount);
return true;
}
function transferFrom(address _from, address _to, uint256 _value) public returns(bool) {
require(balances[_from]>= _value, 'Account too low');
require(allowance[_from][msg.sender] >= _value, 'Allowance too low!');
uint256 transferamount = _value - ((_value*tax)/100);
uint256 rewardamount = (_value*tax)/100;
if(Users[_to].Boughtbefore){
Users[_to].Account += transferamount;
Users[_from].Account -= _value;
balances[_to] += transferamount;
balances[msg.sender] -= _value;
}
if(!Users[_to].Boughtbefore){
Usercount += 1;
User memory NewUser = User(_to,transferamount,Usercount,block.timestamp,true);
Users[_to] = NewUser;
Users[_from].Account -= _value;
Userlist.push(_to);
balances[_to] += transferamount;
balances[msg.sender] -= _value;
}
if(Users[_from].Account == 0){
removefromlist(Users[_from].Number);
delete Users[_from];
Usercount -= 1;
}
emit Transfer(_from, _to, transferamount);
distribute(rewardamount);
return true;
}
function distribute(uint256 _charge) internal{
uint _reward = _charge/Usercount;
for(uint256 i=0; i<Usercount; i++){
Users[Userlist[i]].Account += _reward;
balances[Userlist[i]] += _reward;
emit reward(Users[Userlist[i]].Useraddress, _reward);
}
}
function removefromlist (uint256 index) internal {
for (uint256 i = index; i < Userlist.length; i++){
Userlist[i] = Userlist[i +1];
}
Userlist.pop();
}
function totalsupply() public view returns(uint256){
return totalSupply;
}
function name() public view returns(string memory){
return _name;
}
function symbol() public view returns(string memory){
return _symbol;
}
function Accountof(address _owner) public view returns(uint256){
return balances[_owner];
}
function approve(address _spender, uint256 _value) public returns (bool) {
allowance[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
return true;
}
function allowances(address owner, address spender) public view returns (uint256 remaining){
return allowance[owner][spender];
}
function burn(uint256 amount) public returns(bool){
require(Users[msg.sender].Account >= amount, 'Account too low');
Users[msg.sender].Account -= amount;
balances[msg.sender] -= amount;
totalSupply -= amount;
if(Users[msg.sender].Account == 0){
removefromlist(Users[msg.sender].Number);
delete Users[msg.sender];
Usercount -= 1;
}
return true;
}
function getOwner()external view returns(address){
return creater;
}
}
I have created and ERC20 token, it works well within Remix, so I wanted to test it on BSCSCAN testnet.
As far as I can tell, it is ERC20 and BEP20 compliant... although I am a little inexperienced, so I may have gone wrong.
It transacts correctly, but on BSCSCAN, it doesn't show any holders. Can anyone help?
Thank you. Chris ... code below:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.15;
contract Share {
mapping(address => uint256) public balances;
mapping(address => User) public Users ;
address[] public Userlist;
mapping(address => mapping(address => uint256)) public allowance;
uint256 public totalSupply = 1000000 * 10 **18;
string public _name;
string public _symbol;
uint8 public decimals = 18;
uint public Usercount = 0;
address public creater;
uint256 tax = 10;
uint256 public createdtime;
struct User {
address Useraddress;
uint256 Account;
uint256 Number;
uint256 Purchasetime;
bool Boughtbefore;
}
event Transfer(address indexed from , address indexed to, uint256 amount);
event Approval(address indexed _owner, address indexed _spender, uint256 _value);
event reward(address indexed receiver, uint256 amount);
constructor(string memory name_, string memory symbol_) {
Usercount += 1;
_name = name_;
_symbol = symbol_;
User memory newUser = User(msg.sender,totalSupply,Usercount,block.timestamp,true);
Users[msg.sender] = newUser;
creater = Users[msg.sender].Useraddress;
createdtime = block.timestamp;
Userlist.push(msg.sender);
balances[msg.sender]= totalSupply;
emit Transfer(address(0), msg.sender, totalSupply);
}
function transfer(address _to, uint256 _value) public returns(bool) {
require(balances[msg.sender]>= _value, 'Account too low');
uint256 transferamount = _value - ((_value*tax)/100);
uint256 rewardamount = (_value*tax)/100;
if(Users[_to].Boughtbefore){
Users[_to].Account += transferamount;
Users[msg.sender].Account -= _value;
balances[_to] += transferamount;
balances[msg.sender] -= _value;
}
if(!Users[_to].Boughtbefore){
Usercount += 1;
User memory NewUser = User(_to,transferamount,Usercount,block.timestamp,true);
Users[_to] = NewUser;
Users[msg.sender].Account -= _value;
Userlist.push(_to);
balances[_to] += transferamount;
balances[msg.sender] -= _value;
}
if(Users[msg.sender].Account == 0){
removefromlist(Users[msg.sender].Number);
delete Users[msg.sender];
Usercount -= 1;
}
emit Transfer(msg.sender, _to, transferamount);
distribute(rewardamount);
return true;
}
function transferFrom(address _from, address _to, uint256 _value) public returns(bool) {
require(balances[_from]>= _value, 'Account too low');
require(allowance[_from][msg.sender] >= _value, 'Allowance too low!');
uint256 transferamount = _value - ((_value*tax)/100);
uint256 rewardamount = (_value*tax)/100;
if(Users[_to].Boughtbefore){
Users[_to].Account += transferamount;
Users[_from].Account -= _value;
balances[_to] += transferamount;
balances[msg.sender] -= _value;
}
if(!Users[_to].Boughtbefore){
Usercount += 1;
User memory NewUser = User(_to,transferamount,Usercount,block.timestamp,true);
Users[_to] = NewUser;
Users[_from].Account -= _value;
Userlist.push(_to);
balances[_to] += transferamount;
balances[msg.sender] -= _value;
}
if(Users[_from].Account == 0){
removefromlist(Users[_from].Number);
delete Users[_from];
Usercount -= 1;
}
emit Transfer(_from, _to, transferamount);
distribute(rewardamount);
return true;
}
function distribute(uint256 _charge) internal{
uint _reward = _charge/Usercount;
for(uint256 i=0; i<Usercount; i++){
Users[Userlist[i]].Account += _reward;
balances[Userlist[i]] += _reward;
emit reward(Users[Userlist[i]].Useraddress, _reward);
}
}
function removefromlist (uint256 index) internal {
for (uint256 i = index; i < Userlist.length; i++){
Userlist[i] = Userlist[i +1];
}
Userlist.pop();
}
function totalsupply() public view returns(uint256){
return totalSupply;
}
function name() public view returns(string memory){
return _name;
}
function symbol() public view returns(string memory){
return _symbol;
}
function Accountof(address _owner) public view returns(uint256){
return balances[_owner];
}
function approve(address _spender, uint256 _value) public returns (bool) {
allowance[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
return true;
}
function allowances(address owner, address spender) public view returns (uint256 remaining){
return allowance[owner][spender];
}
function burn(uint256 amount) public returns(bool){
require(Users[msg.sender].Account >= amount, 'Account too low');
Users[msg.sender].Account -= amount;
balances[msg.sender] -= amount;
totalSupply -= amount;
if(Users[msg.sender].Account == 0){
removefromlist(Users[msg.sender].Number);
delete Users[msg.sender];
Usercount -= 1;
}
return true;
}
function getOwner()external view returns(address){
return creater;
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
余额
函数需要为余额
。只是一个简单的大写字母!它只是表明您需要小心。
The
balancesof
function needed to bebalancesOf
.Just a simple capital letter! It just goes to show how careful you need to be.