Solidity Solc-Compilerfehler bei Code, den Remix kompilieren kann

Ich versuche, den folgenden Solidity-Code mit Solc in NodeJS zu kompilieren.

pragma solidity ^0.4.11;

contract helloWorld {

  string public message;

  function constructor() public{
    message = "Hello World";
  }

  function sayHi() constant public returns (string){
    return message;
  }
}

Die Befehle, die ich dafür in NodeJS geschrieben habe, sind:

var source = `source code above`
var compiled = solc.compile(source)

Wenn ich mir das 'kompilierte' Objekt ansehe, sehe ich die folgenden Fehler:

formal:
   { errors:
      [ ':5:3: Error: Type "string" not supported for state variable.\n  string public message;\n  ^-------------------^\n' ] },
  sourceList: [ '' ],
  sources: { '': { AST: [Object] } } }

Ich habe eine funktionierende TestRPC-Instanz geöffnet und kann web3.eth.accounts von der Knotenkonsole zu dieser TestRPC-Instanz (über Port 8485) ausführen. Der Code wird in Remix korrekt kompiliert. Ich folge einem Leitfaden, um diese Bibliotheken auf einem Windows-Computer zum Laufen zu bringen, daher sehe ich nicht, warum irgendetwas nicht miteinander kompatibel sein könnte.

Die von mir verwendeten Versionen sind

  • Solc - 0.4.11
  • web3 - 0.19.0
Könnten Sie versuchen, Ihren Compiler (solc) zu aktualisieren und pragma solidity ^0.4.11;zu pragma solidity ^0.4.22;(der neuesten Version) zu wechseln?

Antworten (1)

Der Fehler, den Sie erhalten, stammt von der Funktion

publicsayHi() constant public returns (string)

~~~Ich denke, dass die Solidity-Funktion den Typ String nicht zurückgeben kann.~~~ (Da lag ich falsch)

Dies ist falsch, Solidity-Funktionen können Zeichenfolgen zurückgeben
Du hast Recht. Aber warum sagte der Fehler.Error: Type "string" not supported for state variable.
Es gibt mehrere Quellen im Internet, in denen Leute Zeichenfolgen zurückgeben, wie z. B. diese hier: forum.ethereum.org/discussion/8053/…
Ich weiß es nicht, aber ich vermute, dass es sich möglicherweise um eine alte Version des Compilers handelt.
Ich entdecke etwas. function constructor() publicSoll das sein function helloWorld() public?
dies gilt für solidity 0.4.21 und früher. aber trotzdem würde es nicht den Zeichenfolgenfehler erzeugen.