Prüfungsantrag wegen Paranoia [geschlossen]

Ich bin paranoid, ob der folgende Vertrag funktionieren wird, und die einzigen Kommentare beziehen sich darauf, wo ich paranoid bin; Also, das ist, wo die Fragen/Paranoia wirklich sind.
Dies ist im Wesentlichen mein einziges Mal, dass ich jemals Token/Blockchain verwenden werde, ist dieses Token für Spendenaktionen/Geschäftsinteraktionen, und ich möchte es nicht verwenden (hier Software/Dienst einfügen; ich möchte auch kein erzwungenes Ende des Spendenzeitraums).

Ich habe mir ein wenig Mühe gegeben, dieses ConsenSys-Dokument zu ändern, und ich möchte wirklich nur, dass es funktioniert (wieder kein Interesse an der Software/dem Dienst Ihrer Wahl). Es ist teilweise Ego und teilweise nicht mehr mein json/utc (was Sinn macht, wenn Sie sehen, dass ich auf die Absicht verweise, eine bestimmte Adresse zu verwenden):

(Das Einfügen hat unerwartet gehandelt, also habe ich die Zeile hinzugefügt)


pragma solidity ^0.4.21;

import "./EIP20Interface.sol";


contract ablockstoken is EIP20Interface {

    uint256 constant private MAX_UINT256 = 2**256 - 1;
    mapping (address => uint256) public balances;
    mapping (address => mapping (address => uint256)) public allowed;

    uint8 public decimals;      // I'm paranoid I did decimals wrong
    uint256 public totalSupply;
    string public name;                                   
    string public symbol;   


    uint price = 0.01 ether;            // and this is why
    string terms = 'Language explaining the terms of repurchasement at a later date';  

    function ablockstoken(      // faux name, I know.  Paranoia
        uint256 initialSupply,
        uint8 public decimals = 18, // and this is where I did the decimals
        string name,            // I think I've botched it
        string symbol
    ) public {

        totalSupply = initialSupply * 65536 ** uint256(decimals);  
        balanceOf[0xaddy] = totalSupply;// I mentioned in another post about my paranoia
        totalSupply = initialSupply;    // Also, remix gives an error for                    
        name = "ablockstoken";          // balanceOf regarding it being                  
        symbol = "abt";                 // undefined?
    }

    function transfer(address _to, uint256 _value) public returns (bool success) {
        require(balances[msg.sender] >= _value);
        balances[msg.sender] -= _value;
        balances[_to] += _value;
        emit Transfer(msg.sender, _to, _value); 
        return true;
    }

// Most of this is as ConsenSys had done it, the last four functions are different

    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
        uint256 allowance = allowed[_from][msg.sender];
        require(balances[_from] >= _value && allowance >= _value);
        balances[_to] += _value;
        balances[_from] -= _value;
        if (allowance < MAX_UINT256) {
            allowed[_from][msg.sender] -= _value;
        }
        emit Transfer(_from, _to, _value); 
        return true;
    }

    function balanceOf(address _owner) public view returns (uint256 balance) {
        return balances[_owner];
    }

    function approve(address _spender, uint256 _value) public returns (bool success) {
        allowed[msg.sender][_spender] = _value;
        emit Approval(msg.sender, _spender, _value); 
        return true;
    }

    function allowance(address _owner, address _spender) public view returns (uint256 remaining) {
        return allowed[_owner][_spender];
    }

    // terms mentioned at the start of contract; literal human language explanation

    function getTerms() constant returns(string) {
        return terms;
    }

    // This was stolen from the programmingtheblockchain and should be good,
        // but does it work when added here?  Additionally, I may be confused
    // from some explanation on either ethereum.org or here, but...
    // does the token purchaser cover gas or do I need to cover it


    function withdraw() public {
        msg.sender.transfer(address(this).balance);
    }

    function deposit(uint256 amount) payable public {
        require(msg.value == amount);

    }

    function getBalance() public view returns (uint256) {
        return address(this).balance;
    }

}

Antworten (1)

Du bist nicht paranoid genug. Ich habe mehrere Mängel entdeckt, als ich es nur angeschaut habe. Gehen Sie verantwortungsvoll mit den Geldern anderer um. Wenn es wirklich wichtig ist, dass Sie Leute finden, die es kalibrieren, um es richtig zu machen. In den meisten Fällen verdienen es die Benutzer, Ihren Qualitätssicherungsprozess im Detail zu kennen.

Der Entwickler sollte sie auch erkennen können. Der Code überträgt das Know-how des Teams, das ihn erstellt hat.

Nicht die Antwort, die Sie wollten, aber ich hoffe, es hilft trotzdem,

Es ist das Geschäft von mir und meiner Familie; Ich kann mir andere Leute nicht wirklich leisten. Ich hatte gehofft, es sei besser als mehrere unspezifische Mängel.
Vielleicht erwägen Sie, die Frage umzuformulieren? "Audit" impliziert einen gründlichen Prozess und ein Reputationsrisiko. Es hört sich so an, als ob Sie kurz davor stehen, es für das Familienunternehmen ins Mainnet zu stellen. Ich glaube, du hast alle vergrault. Auf praktischer Basis können Sie den Vertrag sicher in Remix laden (und sollten dies in Betracht ziehen) und iterieren, bis er kompiliert ist, und dann Truffle verwenden, um ihn zu testen, um zu bestätigen, dass Ihre Funktionen das tun, was sie tun sollen, und nichts, was sie nicht tun tun soll.