Solidity Modifier einfach erklärt

Modifier – Solidity
Unser Smart Contract ist jetzt fast fertig. Das einzige Problem das wir noch haben ist, dass jeder auf unseren Smart Contract zugreifen kann. In diesem Fall möchten wir das nicht unbedingt. Um das zu ändern brauchen wir den sogenannten Solidity Modifier. Dadurch können wir gewährleistet, dass nur derjenige, der den Smart Contract erstellt hat etwas ändern kann.

Solidity Modifier einfach erklärt

Wenn du einen Smart Contract erstellst, wird eine Art Nachricht an die Blockchain gesendet. Diese Nachricht erlaubt dir sozusagen den Zugang zu deinem Contract. Damit nun niemand anderes außer der Ersteller des Smart Contracts etwas verändern kann, erstellen wir eine neue Variable vom Typ Adresse namens „_owner“.


pragma solidity ^0.4.0;

contract Bank {
      uint private _value;
      adresse private _owner;
 
}
Mit „address“ können wir einen 20-byte großen Wert speichern und Operationen wie zum Beispiel „==“ (Gleichheit) oder „>“ (größer als) durchführen. Dieser Datentyp besitzt darüber hinaus sogenannte „Member“. Das sind zusätzliche vorgeschrieben Methoden wie „send“ oder „balance“, die über einen Modifier aufgerufen werden können. Aber dazu kommen wir erst später.

Smart Contract Konstructor

Wir müssen jetzt noch im Konstruktor von Bank der privaten Variable „_owner“ die Nachricht beim Erstellen des Smart Contracts zuweisen. Konstruktoren funktionieren im Grunde wie normale Methoden bzw. Funktionen, jedoch haben sie ein paar signifikante Unterschiede. Zuerst einmal kommen wir zum Aufbau eines Konstruktors. Diese haben lediglich das Keyword „funtion“ vor dem eigentlichen Namen. Auch ist der Name nicht beliebig wählbar, denn dieser richtet sich immer nach dem Namen der Klasse bzw. in unserem Fall nach dem „contract“ (bei uns hier: „Bank“). Anders als bei Methoden hat der Konstruktor keine Rückgabewerte. Eine Klasse bzw. Contract kann so viele Konstruktoren haben, wie du möchtest, diese müssen sich jedoch mindestens in einem Parameter (die Variablen in den runden Klammern) unterscheiden. Diese Werte müssen beim Erstellen eines neuen Objektes bzw. Smart Contracts nach „new Contract ()“ in den Runden Klammern angegeben werden. (Contract c = new Contract( – hier -))

Das letzte und vielleicht wichtigste Merkmal eines Konstruktors ist, dass dieser nur einmal beim Erstellen eines Objektes bzw. Smart Contracts nach dem compilieren aufgerufen wird. Daher wird der Konstruktor in der Regel dafür verwendet, Startwerte (default-Werte) zu setzen und ungewünschte Eingaben mit Plausibilitätsprüfungen zu verhindern.
Dies sieht wie folgt aus:


pragma solidity ^0.4.0;

contract Bank {
      uint private _value;
      adresse private _owner;
 
       function Bank(uint amount){

              value = amount;
              owner = msg.sender;
       }
}

Erstelle einen Solidity Smart Contract Modifier

Um die private Variable „_owner“ jetzt benutzen zu können, müssen wir einen „modifier“ erstellen.


pragma solidity ^0.4.0;

contract Bank {

      uint private _value;
      adresse private _owner;

      function Bank(uint amount){

            value = amount;
            owner = msg.sender;
       }

       modifier _ownerFunc {

            require(owner == msg.sender);
            _;
      }
}

Dafür benutzten wir das Keyword „modifier“ und nennen unser Konstrukt „ownerFunc“. Jetzt legen wir noch die Anforderung mit „require“ fest, dass „_owner“ und die Nachricht des Erstellers gleich sein muss. Dabei wird lediglich die Adresse des Erstellers mit der des Senders verglichen. Ist diese Aussage „true“, wird der nachfolgende Code abgearbeitet. Bei „false“ passiert nichts. Danach setzten wir ein alleinstehendes „_;“ damit die Funktion immer als erstes ausgeführt wird. Dadurch wird ein Fehler angezeigt, wenn jemand der nicht der Ersteller des Smart Contract ist, etwas ändern möchte. Jetzt müssen wir nur noch unser modifier „ownerFunc“ zu jeder Funktion hinzufügen, wo wir nicht möchten, dass jemand außer der Ersteller etwas ändern kann.

Dabei fügen wir am Ende jeder betroffenen Methode nach den Parameterwerten unseren modifier „ownerFunc“ hinzu.


pragma solidity ^0.4.0;

contract Bank {
     uint private _value;
     adresse private _owner;
 
     modifier _ownerFunc {
            require(owner == msg.sender);
            _;
     }

     function deposit(unit amount) _ownerFunc {
             value += amount;
     }

     function withdraw(unit amount) _ownerFunc {
             if(checkValue(amount)) {
                value -= amount;
             }
     }
}

Nun kannst nur noch du als Ersteller des Smart Contracts Geld einzahlen und abheben.
Glückwunsch, damit hast du deinen ersten einfachen und funktionierenden Smart Contract erstellt.

Dir gefiel unser Artikel „Solidity Modifier einfach erklärt“  und möchtest mehr über Solidity erfahren?
Wenn du über die neusten Artikel informiert werden möchtest, folge uns auf Facebook, Pinterest und Steemit.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.