Wie füge ich Sicherheit zum Smart Contract hinzu?

Ich habe diesen Vertrag bereitgestellt und auch mit Ganache interagiert.

     pragma solidity ^0.4.0;
    contract Counter {
     int private count = 0;
     function incrementCounter() public {
      count += 1;
      }
      function decrementCounter() public {
    count -= 1;
      }
      function getCount() public constant returns (int) {
    return count;
      }
    }

Bei der Interaktion mit dem Vertrag kann jedoch jedes Konto auf Ganache damit interagieren und die Funktion erhöhen. Wie kann ich nur ein Konto von Ganache definieren, um diese Funktion ändern zu können? Ich möchte nur etwas Sicherheit zum Vertrag hinzufügen?

Dies ist der Link für den Smart Contract, dem ich folge: https://medium.com/crypto-currently/build-your-first-smart-contract-fc36a8ff50ca

Antworten (3)

Schauen Sie sich die OwnableBibliothek https://github.com/OpenZeppelin/openzeppelin-solidity/blob/master/contracts/ownership/Ownable.sol an . Es gibt Ihnen einen Modifikator namens onlyOwner, den Sie zu allen Funktionen hinzufügen können, bei denen Sie den Zugriff einschränken müssen.

Die Verwendung des onlyOwnerModifikators blockiert den Zugriff von allen außer dem Eigentümer. Eigentümer ist standardmäßig derjenige, der den Vertrag erstellt hat.

Es gibt auch andere Alternativen dazu, aber Ownablees ist wahrscheinlich die am weitesten verbreitete und akzeptierte Lösung.

Sie können Ihren Funktionen eine Einschränkung wie folgt hinzufügen:

pragma solidity ^0.4.0;
    contract Counter {

        int private count = 0;
        address public admin;

        constructor() public {
            admin = msg.sender;
        }

        function incrementCounter() public {
            require(msg.sender==admin);
            count += 1;
        }

        function decrementCounter() public {
            require(msg.sender==admin);
            count -= 1;
        }

        function getCount() public constant returns (int) {
            return count;
        }
    }

Im Konstruktor ist der Administrator auf das Konto festgelegt, das den Vertrag bereitgestellt hat. Dann require(msg.sender==admin)wird überprüft, ob das Konto, das versucht, die Funktionen auszuführen, der Administrator Ihres Systems ist. Wenn nicht, wird es ausgelöst und die Funktion wird nicht ausgeführt.

hoffe das hilft.

Sie müssen modifierdem Vertrag nur ein hinzufügen und dann den Modifikator dort einfügen, wo Sie die zusätzliche Sicherheit wünschen. Unten isAdminwurde der Modifikator zu den Funktionen incrementCounterund hinzugefügt decrementCounter.

pragma solidity ^0.4.0;

contract Counter {
    int private count = 0;

    modifier isAdmin() {
        require(msg.sender == 0xYOUR-ADDRESS-HERE);
        _;
    }

    function incrementCounter() public isAdmin {
        count += 1;
    }

    function decrementCounter() public isAdmin {
        count -= 1;
    }

    function getCount() public constant returns (int) {
        return count;
    }
}
Ich habe Ihre Lösung ausprobiert, aber es gibt mir diesen Fehler ": Expected primary expression. require(msg.sender == 0x0x081D55360Acf2990791656c195Ee94124d84B186) ^-^" . Wie kann ich diesen Fehler beheben?
Sie haben eine zusätzliche 0x, sollte sein0x081D55360Acf2990791656c195Ee94124d84B186
Ich habe den öffentlichen Schlüssel hinzugefügt, der dem privaten Schlüssel entspricht, der zum Bereitstellen des Vertrags verwendet wird. Ich erhalte diesen Fehler bei der Funktion, die den mpdifier verwendet: „the tx has not have the correct nonce. account has nonce of: 3 tx has nonce of : 2"
Öffentlicher Schlüssel?? Ich bin mit Ganache nicht sehr vertraut, aber das klingt nach einem Problem mit Ihrem Client. Wahrscheinlich am besten eine neue Frage stellen.