Parity Private Chain: Vertragsbereitstellungstransaktion wird nicht abgebaut

Ich habe einen einfachen Solidity-Code, um die Bereitstellung und den Aufruf von Verträgen zu testen. Es hat Methoden, um einen Wert in den Speicher zu schreiben, und eine Methode, um ihn zu lesen. Dies funktionierte perfekt mit einer privaten Kette mit einem Geth-Kunden.

Nach dem Umschalten auf den Parity-Client und eine Proof-of-Authority- Kette wird der Vertrag nicht bereitgestellt, da die Transaktion zum Bereitstellen nicht abgebaut wird. Ich habe versucht, das Gas auf 600 mil und den angebotenen Gaspreis auf 10 Gwei zu erhöhen. Einfache Überweisungen von Ether gehen durch. Außerdem wurde der Solidity-Code erfolgreich kompiliert. Versucht, das Konto entsperrt zu senden, und auch durch Eingabe des Kontokennworts im Bestätigungsfenster in der Browser-Benutzeroberfläche.

Vertragscode:

pragma solidity ^0.4.7;

contract owned {
  address owner;
  function owned() {
    owner = msg.sender;
  }
}

contract mortal is owned {
  function kill() {
    if (msg.sender == owner) selfdestruct(owner);
  }
}

contract IdMgmt is mortal {

  struct acl {
    string dataType;
    string permissions;
  }

  mapping (address => acl) public aclOf;

  function IdMgmt() { }

  function createId(address _user, string _dataType, string _permissions) {
    aclOf[_user].dataType = _dataType;
    aclOf[_user].permissions = _permissions;
  }

  function getPermissions(address _user, string _dataType) constant
    returns (string userPermissions) {

    if (stringsEqual(aclOf[_user].dataType, _dataType)) {
      userPermissions = aclOf[_user].permissions;
    }
    else {
      userPermissions = "NO DATA";
    }
  }

  function stringsEqual(string _a, string _b) internal returns (bool) {
    bytes memory a = bytes(_a);
    bytes memory b = bytes(_b);
    if (a.length != b.length) {
      return false;
    }
    for (uint i = 0; i < a.length; i ++) {
      if (a[i] != b[i]) return false;
    }
    return true;
  }
}

Welche anderen Informationen würden helfen, der Ursache auf den Grund zu gehen?

Hmm ... Ich habe versucht, die Vertragsbereitstellungstransaktion an einen anderen Peer-Knoten in der Kette zu senden. Diesmal wurde es abgebaut . Ich denke, es liegt jetzt an mir, herauszufinden, was auf dem Knoten falsch ist, wo es nicht abgebaut wird.
Dieses Problem trat auf, als ich versuchte, den Vertrag entweder mit der JSON-RPC-API oder mit der Benutzeroberfläche des Parity-Browsers bereitzustellen. Stattdessen habe ich versucht, die Bereitstellung mit der web3-JavaScript-API von Parity durchzuführen (wobei der Javascript-Code als NodeJS-App ausgeführt wird), und das funktioniert durchweg. Die Vertragsbereitstellungstransaktion wird abgebaut, und der Code ist an der zugewiesenen Adresse vorhanden.
Wenn dies Ihr Problem löst, können Sie Ihre eigene Frage beantworten.

Antworten (1)

Dieses Problem trat auf, als ich versuchte, den Vertrag entweder mit der JSON-RPC-API oder mit der Benutzeroberfläche des Parity-Browsers bereitzustellen. Stattdessen habe ich versucht, die Bereitstellung mit der web3-JavaScript-API von Parity durchzuführen (wobei der Javascript-Code als NodeJS-App ausgeführt wird), und das funktioniert durchweg. Die Vertragsbereitstellungstransaktion wird abgebaut, und der Code ist an der zugewiesenen Adresse vorhanden.

Glauben Sie, dass es durch diesen Ansatz wirklich gelöst ist? Ich habe das gleiche Problem und möchte verschiedene Schnittstellen wie Browser-UI, Browser-Solidity, web3.py usw. verwenden. Ich habe herausgefunden, dass es vom Konto abhängt, das ich verwende, mit den Unterzeichnerkonten funktioniert es, mit den Benutzerkonten nicht: ethereum.stackexchange.com/questions/13506/…
Nun ja. Es löst nicht das ursprüngliche Problem, aber das war genug für mich. Ich habe die JSON-RPC-API und die Browser-Benutzeroberfläche nur als Entwicklungstools verwendet, aber für das Projekt war nur die web3-JS-Schnittstelle erforderlich, um zu funktionieren. Also musste ich das nicht offen lassen. Wie ich sehe, haben Sie eine Frage eingereicht, in der Ihr Problem beschrieben wird, also können wir das so stehen lassen. (Siehe meinen Kommentar zu Ihrer Frage zu: einer möglichen Ursache)