Intelligenter Direktverkaufsvertrag, funktioniert das ohne Sicherheitsprobleme?

Ich möchte eine Seite für den direkten Verkauf meines Tokens erstellen, genau wie die in Loomx , mit einem festen Token-Preis (später von mir änderbar) und den Token sofort nach dem Kauf sicher an den Käufer übertragen.

Ich versuche, ihren Smart Contract zu „stehlen“, aber er ist nicht verifiziert und öffentlich. Wenn ich versuche, online zu suchen, sind die meisten Crowdsale , was zu kompliziert zu sein scheint.

Ich habe auch eine Direktverkaufsbibliothek gefunden , aber sie scheint nicht weit verbreitet zu sein.

Hier ist mein Code, der sehr einfach ist:

pragma solidity ^0.4.24;

import 'http://github.com/OpenZeppelin/openzeppelin-solidity/contracts/ownership/Ownable.sol';
import 'http://github.com/OpenZeppelin/openzeppelin-solidity/contracts/token/ERC20/ERC20.sol';

contract Directsale is Ownable {

    uint public tokensPerEther;
    ERC20 public token;
    bool public saleClosed = false;

    event FundTransfer(address backer, uint amount);

    constructor (
        uint tokenPerEachEther,
        address tokenAddress
    ) public {
        tokensPerEther = tokenPerEachEther * 1 ether;
        token = ERC20(tokenAddress);
    }

    function closeSale() external onlyOwner {
        saleClosed = true;
    }

    function setTokenPrice(uint tokenPerEachEther) external onlyOwner {
       tokensPerEther  = tokenPerEachEther * 1 ether;
    }

    function () payable public {
        require(!saleClosed);
        require(msg.value > 0);
        uint amount = msg.value;
        token.transfer(msg.sender, amount * tokensPerEther);
        emit FundTransfer(msg.sender, amount);
    }

}

Wäre das in Ordnung und würde kein Sicherheitsproblem verursachen?

Und gibt es ein gutes Open-Source-Beispiel, einschließlich des web3- Javascripts , mit dem ich lernen kann?

Antworten (1)

Nur eine kurze Antwort auf meine eigene Frage, ich habe die CappedCrowdsale.sol und AllowanceCrowdsale.sol von OpenZeppelin verwendet . Es sollte sicher und stabil genug sein, mein endgültiger Code ist hier:

pragma solidity ^0.4.24;

import 'openzeppelin-solidity/contracts/crowdsale/emission/AllowanceCrowdsale.sol';
import 'openzeppelin-solidity/contracts/crowdsale/validation/CappedCrowdsale.sol';
import "openzeppelin-solidity/contracts/ownership/HasNoTokens.sol";

contract CubikCrowdsale is CappedCrowdsale, AllowanceCrowdsale, HasNoTokens {

  event RateChange(uint256 amount);

  constructor (uint256 _rate, address _wallet, ERC20 _token, uint256 _cap) public Crowdsale(_rate, _wallet, _token) CappedCrowdsale(_cap) AllowanceCrowdsale(_wallet) {
  }

  function setRate(uint256 _rate) external onlyOwner {
    rate = _rate;
    emit RateChange(_rate);
  }

}

Für das Web3-Frontend konnte ich kein gut fertiges Beispiel finden und schrieb schließlich mein eigenes hier .