Я новичок в блокчейне Эфириума. Я создал краудсейл и смарт-контракт ERC20 и развернул его в тестовой сети rinkeby. Функция передачи токена ERC20 работает нормально.
Но когда я проверяю функциональность функции покупки токена. Так что он запущен успешно. Но когда я проверяю его вывод на https://rinkeby.etherscan.io/ . Таким образом, он показывает 0 передачи токена. И это не показывает цену токена на кошельке.
Код смарт-контракта Crowd Sale выглядит следующим образом:
pragma solidity ^0.4.2;
import "./DappToken.sol";
contract DappTokenSale {
address admin;
DappToken public tokenContract;
uint256 public tokenPrice;
uint256 public tokensSold;
uint256 public decimals;
event Sell(address _buyer, uint256 _amount);
function DappTokenSale(DappToken _tokenContract, uint256 _tokenPrice) public {
admin = msg.sender;
tokenContract = _tokenContract;
tokenPrice = _tokenPrice;
}
function multiply(uint x, uint y) internal pure returns (uint z) {
require(y == 0 || (z = x * y) / y == x);
}
function buyTokens(address _receiver, uint256 _amount) public payable {
_amount = msg.value;
require(_receiver != address(0));
require(_amount > 0);
uint256 tokensToBuy = multiply(_amount, (10 ** decimals)) / 1 ether * tokenPrice;
require(tokenContract.transfer(msg.sender, tokensToBuy));
tokensSold += _amount;
emit Sell(msg.sender, tokensToBuy);
}
// Ending Token DappTokenSale
function endSale() public {
// Require admin
require (msg.sender == admin);
// Transfer remaing DappToken to admin
require(tokenContract.transfer(admin,tokenContract.balanceOf(this)));
// Destroy Contract
selfdestruct(admin);
}
}
Код солидности DappToken: -
pragma solidity ^0.4.24;
/**
* The contractName contract does this and that...
*/
contract DappToken {
// Name
string public name = "DappToken";
// Symbol
string public symbol = 'DAPP';
//standard
string public standard = 'DApp Token v1.0';
//Decimals
uint256 public decimals = 18;
//token price
uint256 public tokenPrice = 2000; //1 eth = 2000 tokens
uint256 public totalSupply;
event Transfer(
address indexed _form,
address indexed _to,
uint256 _value
);
event Approval(
address indexed _owner,
address indexed _spender,
uint256 _value
);
mapping(address => uint256) public balanceOf;
mapping(address => mapping (address => uint256)) public allowance;
// function DappToken (uint256 _intialSupply) public {
// balanceOf[msg.sender] = _intialSupply;
// totalSupply = _intialSupply;
// //allocate the intial supply
//
// }
constructor(uint256 _intialSupply) public
{
balanceOf[msg.sender] = _intialSupply;
totalSupply = _intialSupply;
}
//Transfar
function transfer(address _to,uint256 _value) public returns (bool success){
// Exception if account does not enough
require(balanceOf[msg.sender] >= _value);
// Transfar the balance
balanceOf[msg.sender] -= _value;
balanceOf[_to] += _value;
// Transfar Event
emit Transfer(msg.sender,_to,_value);
// Return a boolean
return true;
}
// approve
function approve(address _spender,uint256 _value) public returns (bool success){
//allowence
allowance[msg.sender][_spender] = _value;
// Approve event
emit Approval(msg.sender,_spender,_value);
return true;
}
// transfer form
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
require(_value <= balanceOf[_from]);
require(_value <= allowance[_from][msg.sender]);
// change the balance
balanceOf[_from] -= _value;
//update the balance
balanceOf[_to] += _value;
allowance[_from][msg.sender] -= _value;
emit Transfer(_from,_to,_value);
return true;
}
}
На самом деле я хочу купить функциональность токена следующим образом: -
Итак, мой запрос : -
Запрос-1 : Почему функция покупки токена не отправляет 6000 токенов на счет получателя??
Запрос-1 : Где я ошибаюсь в коде смарт-контракта?
Я думаю, что это должна быть ваша функция:
function buyTokens(address _receiver) public payable {
uint256 _amount = msg.value;
require(_receiver != address(0)); require(_amount > 0);
uint256 tokensToBuy = multiply(_amount, (10 * decimals)) / 1 ether tokenPrice;
require(tokenContract.transfer(_receiver, tokensToBuy));
tokensSold += _amount;
emit Sell(msg.sender, tokensToBuy); }
Редактировать: Вы можете проверить количество токенов, полученных конечным пользователем через Metamask .
Танвир Сингх
Анупам Джайн
Танвир Сингх
Анупам Джайн
Анупам Джайн
Танвир Сингх
Анупам Джайн
Танвир Сингх
Анупам Джайн
Танвир Сингх
Анупам Джайн
Анупам Джайн
Анупам Джайн