I am trying to make Airdrop smartcontract but it return "This contract may be abstract, not implement an abstract parent's methods completely or not invoke an inherited contract's constructor correctly." message when deployed.....The compile works fine though. Please check my code below
pragma solidity ^0.4.18;
contract ERC20 {
function transfer(address _to, uint256 _value)public returns(bool);
function balanceOf(address tokenOwner)public view returns(uint balance);
function transferFrom(address from, address to, uint256 tokens)public returns(bool success);
}
contract SimpleAirdrop is IERC20 {
IERC20 public token;
uint256 public _decimals = 18;
uint256 public _amount = 1*10**6*10**_decimals;
function SimpleAirdrop(address _tokenAddr) public {
token = IERC20(_tokenAddr);
}
function setAirdrop(uint256 amount, uint256 decimals) public {
_decimals = decimals;
_amount = amount*10**_decimals;
}
function getAirdrop(address reff) public returns (bool success) {
require (token.balanceOf(msg.sender) == 0);
//token.transfer(msg.sender, 1000000000000000000000);
//token.transfer(reff , 200000000000000000000);
token.transfer(msg.sender, _amount);
token.transfer(reff , _amount);
return true;
}
}
Your
SimpleAirdropinherits fromIERC20(see the first note).IERC20is an abstract contract - it only defines its functions, but it doesn't implement them. Which makesSimpleAirdrop(the child contract ofIERC20) an abstract contract as well.Solidity doesn't allow deploying abstract contracts. So you have two options to make it not abstract:
Implement the
transfer(),balanceOf()andtransferFrom()functions (in any of the two contracts).OR
Remove the inheritance, so that
contract SimpleAirdrop is IERC20becomes onlycontract SimpleAirdrop.Assuming by the context of your
SimpleAirdrop, which only executes functions on an externalIERC20address, but doesn't act as an ERC-20 token itself, option 2 is sufficient for your use case.Notes:
Your question defines
ERC20contract but the rest of the code usesIERC20. I'm assuming this is just a typo while copying your code to the question, and that otherwise you're using the same naming in all places.The current Solidity version (in June 2021) is
0.8.5. I recommend using the current version, there are security and bug fixes.