我正在使用solidity创建erc20令牌。我不是编码专家。我magedd从谷歌收集代码。在以太坊网络上部署合同之前,我想做以下事情:
每当有人将ETH发送到智能合约地址时,等效的令牌应自动发送到该ETH交易的起始地址。怎么做?另外我想在eth中设置令牌的价格..请为我提供一个示例代码...
答案 0 :(得分:2)
当合同通过转移接收以太时,它会执行回退功能,您可以在那里访问msg.value
并知道msg.sender
发送的Wei单位中的以太多。如果您有令牌费率,您可以根据发送的数量发出令牌。
//fallback function can be used to buy tokens
function () external payable {
buyTokens(msg.sender);
}
// low level token purchase function
function buyTokens(address beneficiary) public payable {
require(beneficiary != address(0));
require(validPurchase());
uint256 weiAmount = msg.value;
// calculate token amount to be created
uint256 tokens = weiAmount.mul(rate);
// update state
weiRaised = weiRaised.add(weiAmount);
token.mint(beneficiary, tokens);
TokenPurchase(msg.sender, beneficiary, weiAmount, tokens);
forwardFunds();
}
来源:https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/crowdsale/Crowdsale.sol#L63
答案 1 :(得分:1)
您可以在第一时间为令牌添加值,例如:
uint price = 0.0001 ether ;
你必须在你开始合同描述的可靠性代码中添加这一行 - 所以在这里的行之后:
string public name;
uint8 integer decimals;
string public symbol;
然后创建一个“应付款”'允许您的合同获得付款的功能(接收以太币付款),您可以简单地铸造硬币(使您的合同能够签发新的代币)并将其发送给人们。
例如,当有人向合同地址支付0.01以太的金额时,他将获得100个代币(因为1个代币= 0.0001以太定义)
下面是一些简单的代码:
function() public payable {
uint toMint = msg.value/price;
totalSupply += toMint;
balances[msg.sender] += toMint;
emit Transfer(0, msg.sender, toMint);
}
它创建100个令牌的数量,然后它从合同中更新令牌的总供应量,然后将该金额发送给用户。用户地址是' msg.sender'。最后但并非最不重要的是,我们必须将交易广播到区块链中,以便将其挖掘然后变得可见(以便用户可以看到他的新余额)。这是通过Transfer完成的。转移的来源是合同地址(内部的值为0),目的地是用户地址,发送的金额是名为' toMint'的变量的值。