Wie erstelle ich im Testregime „Hello World“ – meinen allerersten und einfachen Vertrag in Parity Wallet for Win

  1. Parity.exe

  2. "Verträge"

  3. "Vertrag entwickeln"

  4. Im Fenster "New Solidity Contract" schrieb:

    /*
    from here:
    https://ethereum-homestead.readthedocs.io/en/latest/contracts-and-transactions/contracts.html#writing-a-contract
    */
    
    contract HelloWorld {
            event Print(string out);
            function() { Print("Hello, World!"); }
    }
    
  5. Kompilieren

  6. Einsetzen

  7. Dann was?

Ich stecke hier fest (ich habe kein Benzin/kein Geld auf dem Girokonto)

Hinweis: Das Originaldokument von Parity über Verträge ist mir unklar:

https://github.com/paritytech/parity/wiki/Tutorial-Teil-6

Antworten (1)

Parity Ethereum unterstützt die zustandsorientierte Programmierung von Smart Contracts mit der Programmiersprache Solidity für die Ethereum-Blockchain. Die Brieftasche enthält eine integrierte Solidity-Entwicklungsumgebung, mit der Sie Verträge schreiben, kompilieren und bereitstellen können.

Verträge-Entwicklung-0 Die Vertragsentwicklungsansicht enthält ein Vertragscodefeld (links) und Konfigurationsparameter (rechts).

Verträge-Entwicklung-1 Um mit Ihrem ersten Vertrag loszulegen, können Sie bestehende Verträge laden oder importieren.

Unser erster Vertrag wird ein Greeter "Hello, World!" Vertrag:

pragma solidity ^0.4.11;

contract greeter {

    address owner;
    string message;

    function greeter(string _message) public {
        owner = msg.sender;
        message = _message;
    }

    function say() constant returns (string) {
        return message;
    }

    function die() {
        if (msg.sender == owner) {
            selfdestruct(owner);
        }
    }
}

Dieser Vertrag enthält zwei Member-Variablen, einen Konstruktor und zwei Funktionen. Der Konstruktor wird einmal bei der Vertragsbereitstellung aufgerufen, setzt den Eigentümer des Vertrags auf den Absender der Transaktion und speichert die bereitgestellte Nachricht.

Die konstante Funktion say()gibt bei jedem Aufruf einfach die bereitgestellte Nachricht zurück und die()ermöglicht es dem Ersteller des Vertrags, den Vertrag selbst zu zerstören und den Zustand zu bereinigen.

Verträge-Entwicklung-2 Lassen Sie uns den Greeter-Vertrag in der integrierten Solidity-Entwicklungsumgebung erstellen. Beachten Sie, dass pragma solidity ^0.4.11dies eine Solidity-Compiler-Version von 0.4.11 oder höher erfordert, die rechts ausgewählt werden kann.

Verträge-Entwicklung-3 Bevor wir den Vertrag erstellen, speichern wir den Greeter "Hello, world!" Vertrag für die spätere Nutzung.

Verträge-Entwicklung-4 Jetzt ermöglicht die Parity Solidity-Umgebung das Kompilieren des Bytecodes, der für die Bereitstellung auf der Blockchain erforderlich ist, und das Generieren der binären Anwendungsschnittstelle (ABI), die für die Vertragsinteraktion erforderlich ist.

Verträge-Entwicklung-5 Eine praktische Funktion ist die Code-Optimierung und automatische Kompilierung, die den Bytecode und die ABI beim Codieren regeneriert.

Sobald diese Schritte abgeschlossen sind, stellt uns Parity Ethereum die folgende JSON-Schnittstelle (ABI), Bytecode, Metadaten und den Schwarm-Hash zur Verfügung.

Application Binary Interface (ABI):

[
  {
    "constant":false,
    "inputs":[

    ],
    "name":"die",
    "outputs":[

    ],
    "payable":false,
    "type":"function"
  },
  {
    "constant":true,
    "inputs":[

    ],
    "name":"say",
    "outputs":[
      {
        "name":"",
        "type":"string"
      }
    ],
    "payable":false,
    "type":"function"
  },
  {
    "inputs":[
      {
        "name":"_message",
        "type":"string"
      }
    ],
    "payable":false,
    "type":"constructor"
  }
]

Kompilierter Bytecode:

0x6060604052341561000c57fe5b604051610307380380610307833981016040528051015b60008054600160a060020a03191633600160a060020a03161790558051610051906001906020840190610059565b505b506100f9565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061009a57805160ff19168380011785556100c7565b828001600101855582156100c7579182015b828111156100c75782518255916020019190600101906100ac565b5b506100d49291506100d8565b5090565b6100f691905b808211156100d457600081556001016100de565b5090565b90565b6101ff806101086000396000f300606060405263ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166335f469948114610045578063954ab4b214610057575bfe5b341561004d57fe5b6100556100e7565b005b341561005f57fe5b610067610129565b6040805160208082528351818301528351919283929083019185019080838382156100ad575b8051825260208311156100ad57601f19909201916020918201910161008d565b505050905090810190601f1680156100d95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6000543373ffffffffffffffffffffffffffffffffffffffff908116911614156101265760005473ffffffffffffffffffffffffffffffffffffffff16ff5b5b565b6101316101c1565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156101b65780601f1061018b576101008083540402835291602001916101b6565b820191906000526020600020905b81548152906001019060200180831161019957829003601f168201915b505050505090505b90565b604080516020810190915260008152905600a165627a7a72305820bcb6dac55886f2319f381c72002482234ee43206c088e0eea076260a472d83230029

Vertragsmetadaten:

{
  "compiler":{
    "version":"0.4.11+commit.68ef5810"
  },
  "language":"Solidity",
  "output":{
    "abi":[
      {
        "constant":false,
        "inputs":[

        ],
        "name":"die",
        "outputs":[

        ],
        "payable":false,
        "type":"function"
      },
      {
        "constant":true,
        "inputs":[

        ],
        "name":"say",
        "outputs":[
          {
            "name":"",
            "type":"string"
          }
        ],
        "payable":false,
        "type":"function"
      },
      {
        "inputs":[
          {
            "name":"_message",
            "type":"string"
          }
        ],
        "payable":false,
        "type":"constructor"
      }
    ],
    "devdoc":{
      "methods":{

      }
    },
    "userdoc":{
      "methods":{

      }
    }
  },
  "settings":{
    "compilationTarget":{
      "GreeterHelloWorld":"greeter"
    },
    "libraries":{

    },
    "optimizer":{
      "enabled":true,
      "runs":200
    },
    "remappings":[

    ]
  },
  "sources":{
    "GreeterHelloWorld":{
      "keccak256":"0xe8f8f27c4b8e16a9d3b488f689b9e3018d25bdee6a67734444c9bbbf7a59c731",
      "urls":[
        "bzzr://ed1e3e9a69578ad5ccc4bb33539f802ee94b243163491f6ee3f9456b0ae4d281"
      ]
    }
  },
  "version":1
}

Schwarm-Hash:

bcb6dac55886f2319f381c72002482234ee43206c088e0eea076260a472d8323

Diese Informationen sind wichtig, um Ihren Smart Contract in der Ethereum-Blockchain bereitzustellen und in Ihre dezentralen Anwendungen zu integrieren. Bewahren Sie sie zum späteren Nachschlagen auf.

Übrigens, wenn Sie lieber die Befehlszeile verwenden und einen Solidity-Compiler installiert haben, können Sie dasselbe erreichen, indem Sie den folgenden Befehl ausgeben, vorausgesetzt, Sie haben Ihren Vertragscode in einer Datei namens gespeichert greeter.sol:

solc --optimize --abi --bin --metadata greeter.sol

======= greeter.sol:greeter =======
Binary:
6060604052341561000c57fe5b604051610307380380610307833981016040528051015b60008054600160a060020a03191633600160a060020a03161790558051610051906001906020840190610059565b505b506100f9565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061009a57805160ff19168380011785556100c7565b828001600101855582156100c7579182015b828111156100c75782518255916020019190600101906100ac565b5b506100d49291506100d8565b5090565b6100f691905b808211156100d457600081556001016100de565b5090565b90565b6101ff806101086000396000f300606060405263ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166335f469948114610045578063954ab4b214610057575bfe5b341561004d57fe5b6100556100e7565b005b341561005f57fe5b610067610129565b6040805160208082528351818301528351919283929083019185019080838382156100ad575b8051825260208311156100ad57601f19909201916020918201910161008d565b505050905090810190601f1680156100d95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6000543373ffffffffffffffffffffffffffffffffffffffff908116911614156101265760005473ffffffffffffffffffffffffffffffffffffffff16ff5b5b565b6101316101c1565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156101b65780601f1061018b576101008083540402835291602001916101b6565b820191906000526020600020905b81548152906001019060200180831161019957829003601f168201915b505050505090505b90565b604080516020810190915260008152905600a165627a7a7230582033ca9aeef924a814a80886e9f27b539e8c3b71780e6da527ebcd4df6076c45000029
Metadata:
{"compiler":{"version":"0.4.11+commit.68ef5810"},"language":"Solidity","output":{"abi":[{"constant":false,"inputs":[],"name":"die","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"say","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"inputs":[{"name":"_message","type":"string"}],"payable":false,"type":"constructor"}],"devdoc":{"methods":{}},"userdoc":{"methods":{}}},"settings":{"compilationTarget":{"greeter.sol":"greeter"},"libraries":{},"optimizer":{"enabled":true,"runs":200},"remappings":[]},"sources":{"greeter.sol":{"keccak256":"0x2914014e6c5ef4ffd0de42461548cfb78b006af718a3ddf18c9fb851ba457854","urls":["bzzr://622e562f0f51d94c6bd395063133657d178c6c5c7bfd43db6c10470f59eb34ac"]}},"version":1}
Contract JSON ABI
[{"constant":false,"inputs":[],"name":"die","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"say","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"inputs":[{"name":"_message","type":"string"}],"payable":false,"type":"constructor"}]

urlsBeachten Sie, dass der Schwarm-Hash bei Verwendung von im Feld der Metadaten codiert ist solc.

Jetzt wollen wir endlich unseren Vertrag bereitstellen, klicken Sie auf die Schaltfläche Bereitstellen .

Verträge-bereitstellen-0 Die Greeter-Verträge können direkt aus Parity heraus bereitgestellt werden.

Verträge-Bereitstellung-1 Wählen Sie eine Zeichenfolge, die Sie begrüßt.

Verträge-Bereitstellung-2 Einmal bereitgestellt und abgebaut, ...

Verträge-Bereitstellung-3 ... der Vertrag wird in Ihrer Parity Ethereum-Brieftasche verfügbar und ermöglicht eine grundlegende Interaktion.

Verträge-Bereitstellung-4 Nutzen Sie die Vertragsschnittstelle, um die Funktion abzufragen sayund die Ergebnisse sofort zu überprüfen.

Um den Vertrag über die JSON-RPC-API bereitzustellen, müssen wir zuerst den Gasbedarf mit dem eth_estimateGasRPC-Aufruf schätzen, indem wir den kompilierten Bytecode übergeben.

curl --data '{"jsonrpc":"2.0","method": "eth_estimateGas", "params": [{"from": "0x00a329c0648769a73afac7f9381e08fb43dbea72", "data": "0x6060604052341561000c57fe5b6040516103aa3803806103aa833981016040528080518201919050505b33600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060019080519060200190610080929190610088565b505b5061012d565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100c957805160ff19168380011785556100f7565b828001600101855582156100f7579182015b828111156100f65782518255916020019190600101906100db565b5b5090506101049190610108565b5090565b61012a91905b8082111561012657600081600090555060010161010e565b5090565b90565b61026e8061013c6000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806335f4699414610046578063954ab4b214610058575bfe5b341561004e57fe5b6100566100f1565b005b341561006057fe5b610068610185565b60405180806020018281038252838181518152602001915080519060200190808383600083146100b7575b8051825260208311156100b757602082019150602081019050602083039250610093565b505050905090810190601f1680156100e35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018257600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b5b565b61018d61022e565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156102235780601f106101f857610100808354040283529160200191610223565b820191906000526020600020905b81548152906001019060200180831161020657829003601f168201915b505050505090505b90565b6020604051908101604052806000815250905600a165627a7a72305820d7c4be18c8e86dd70b00aa0b072cde72893fcaafc766ff7bb86debf4d9357cac00290000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001048656c6c6f2c20457468657265756d2100000000000000000000000000000000"}], "id": 1}' -H "Content-Type: application/json" -X POST localhost:8545
{"jsonrpc":"2.0","result":"0x4414b","id":1}

Jetzt, da wir wissen, dass die Vertragsbereitstellung 278859 Gas (hex 0x4414b) kosten wird, können wir die Transaktion übertragen:

curl --data '{"method":"eth_sendTransaction","params":[{"from":"0x00a329c0648769a73afac7f9381e08fb43dbea72","gas":"0x4414b","data":"0x6060604052341561000c57fe5b6040516103aa3803806103aa833981016040528080518201919050505b33600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060019080519060200190610080929190610088565b505b5061012d565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100c957805160ff19168380011785556100f7565b828001600101855582156100f7579182015b828111156100f65782518255916020019190600101906100db565b5b5090506101049190610108565b5090565b61012a91905b8082111561012657600081600090555060010161010e565b5090565b90565b61026e8061013c6000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806335f4699414610046578063954ab4b214610058575bfe5b341561004e57fe5b6100566100f1565b005b341561006057fe5b610068610185565b60405180806020018281038252838181518152602001915080519060200190808383600083146100b7575b8051825260208311156100b757602082019150602081019050602083039250610093565b505050905090810190601f1680156100e35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018257600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b5b565b61018d61022e565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156102235780601f106101f857610100808354040283529160200191610223565b820191906000526020600020905b81548152906001019060200180831161020657829003601f168201915b505050505090505b90565b6020604051908101604052806000815250905600a165627a7a72305820d7c4be18c8e86dd70b00aa0b072cde72893fcaafc766ff7bb86debf4d9357cac00290000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001048656c6c6f2c20457468657265756d2100000000000000000000000000000000"}],"id":1,"jsonrpc":"2.0"}' -H "Content-Type: application/json" -X POST localhost:8545
{"jsonrpc":"2.0","result":"0x9f79dbaeab3f0e24bbe2c885432dae3ff4350e357a497e7bf8820a64c219e011","id":1}

Beachten Sie, dass Sie, wenn das Konto noch nicht entsperrt ist, zur Wallet-Benutzeroberfläche wechseln und die Transaktion mit dem vertrauenswürdigen Unterzeichner bestätigen müssen.

Jetzt erhalten Sie einen Überblick über das Schreiben, Kompilieren und Bereitstellen von Verträgen für eine Ethereum-Kette und wissen, wie Sie die say()Funktion unseres bereitgestellten Greeter-Vertrags aufrufen.

Es gibt zwei verschiedene Möglichkeiten, mit Smart Contracts auf der Ethereum-Blockchain zu interagieren. Sie können den Vertrag entweder aufrufen (abfragen) oder aufrufen (ausführen). Das Aufrufen eines Vertrags ist ein schreibgeschützter Vorgang und in der Regel kostenlos. Das Aufrufen eines Vertrags erfordert das Senden einer Transaktion, um Funktionen des gewünschten Vertrags auszuführen, und muss mit einer Gebühr abgedeckt werden. Lassen Sie uns also unseren Greeter-Vertrag ausführen. Es kann nur eine Funktion ausgeführt werden: die().

Verträge-Kill-0 Es ist im Allgemeinen eine gute Praxis, nach der Entwicklung aufzuräumen. Jetzt, da wir wissen, dass unser entwickelter Greeter-Vertrag funktioniert, werden wir ihn aus der Blockchain entfernen, indem wir die Die-Funktion aufrufen, die den Vertrag selbst zerstört.

Verträge-Kill-2 Nach dem Mining wird die Selbstzerstörungsfunktion Speicherplatz aus dem aktuellen Blockchain-Zustand freigeben.

Verträge-Kill-3 Da es nicht möglich ist, mit einem gekündigten Vertrag zu interagieren, entfernen wir ihn, indem wir auf die Schaltfläche „ Vergessen “ klicken .

Um die die()Funktion über RPC auszuführen, müssen wir zuerst die Funktionssignatur nachschlagen. Dies kann erfolgen über solc --hash:

 $ solc --hash greeter.sol

======= greeter.sol:greeter =======
Function signatures:
35f46994: die()
954ab4b2: say()

Jetzt müssen wir nur noch mit dem Datenladen eine Transaktion zu unserem Greeter 0x1A3E28181B5043aC359B1146a8CCcce2a950212b- Vertrag erstellen 0x35f46994. Ein Self-Destruct-Call kostet normalerweise nicht viel Gebühr, daher nehmen wir nur einen kleinen Betrag an 0xc350.

curl --data '{"method":"eth_sendTransaction","params":[{"from":"0x00a329c0648769a73afac7f9381e08fb43dbea72",to:"0x1A3E28181B5043aC359B1146a8CCcce2a950212b","gas":"0xc350","data":"0x35f46994"}],"id":1,"jsonrpc":"2.0"}' -H "Content-Type: application/json" -X POST localhost:8545
{"jsonrpc":"2.0","result":"0x8423e6ed270f92621c14302f0d3db647eaf9677ef8f2ba0dd3374b79d2567c78","id":1}

Ich hoffe, das beantwortet Ihre Frage direkt. Ich bevorzuge den Greeter-Vertrag, weil er sterben kann . Aber Sie werden die Idee verstehen und diese anpassen können, damit Ihr HelloWorld- Vertrag funktioniert.