如何解决Solidity:TypeError:函数声明为视图,但此表达式修改了状态,因此需要不可支付默认或可支付
我一直在尝试创建一个智能合约/令牌,将在币安智能链测试网上部署它。我遵循了一些文档并从这个开始。我正在处理这个功能问题。函数被声明为只读。这是源代码
该函数正在改变所有者地址的状态,还有什么其他选项可以将其声明为只读
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.2;
//import "Context.sol";
//import "IBEP20.sol";
//import "SafeMath.sol";
//import "Ownable.sol";
contract SampleTaken {
mapping(address => uint) public balances;
uint public totalSupply = 1000000 * 10 ** 18;
string public name ="Sample Token";
string public symbol ="KJA";
uint public decimals = 18;
/** Events aailable for the Contract**/
event Transfer(address indexed _from,address indexed _to,uint256 _value);
constructor(){
balances[msg.sender] = totalSupply;
}
function balanceOf(address _ownerAddress) public view returns (uint){
return balances[_ownerAddress];
}
function transfer(address _toAddress,uint _noOfTokens) public view returns (bool){
require(balanceOf(msg.sender) >= _noOfTokens,"Total balance is less than the number of Tokens asked for !!!");
balances[_toAddress] +=_noOfTokens;
balances[msg.sender] -= _noOfTokens;
emit Transfer(msg.sender,_toAddress,_noOfTokens);
return true;
}
function transferFrom(address _from,address _to,uint _value) public returns (bool){
require(balanceOf(_from) >= _value,"Balance is less than the number of Tokens asked for !!!");
// require(allowance[_from][msg.sender] >= _value,"Allowance too low");
balances[_to] += _value;
balances[_from] -= _value;
emit Transfer (_from,_to,_value);
return true;
}
}
非常感谢任何帮助。
问候
解决方法
您的 transfer()
函数被声明为 view
函数。
函数可以声明为视图,在这种情况下,它们承诺不修改状态。
但是这些行(在 transfer()
函数中)修改了状态:
balances[_toAddress] +=_noOfTokens;
balances[msg.sender] -= _noOfTokens;
emit Transfer(msg.sender,_toAddress,_noOfTokens);
如果您希望您的函数修改状态,则它不能是 view
(也不是 pure
)函数 - 您需要删除 view
修饰符:
function transfer(address _toAddress,uint _noOfTokens) public returns (bool){
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。