如何自动将ERC 20令牌发送给ETH的发送者(可靠性)

时间:2018-01-05 12:01:14

标签: blockchain ethereum solidity

我正在使用solidity创建erc20令牌。我不是编码专家。我magedd从谷歌收集代码。在以太坊网络上部署合同之前,我想做以下事情:

每当有人将ETH发送到智能合约地址时,等效的令牌应自动发送到该ETH交易的起始地址。怎么做?另外我想在eth中设置令牌的价格..请为我提供一个示例代码...

2 个答案:

答案 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'的变量的值。