Rufen Sie eine Ansichtsfunktion eines Ethereum Smart Contracts mit einem in C geschriebenen Programm auf

mein Versuch ist, eine Ansichtsfunktion aufzurufen, um einige Daten aus einem Vertrag auf der Blockchain mit einem C-Programm abzurufen. Ich habe die Schnittstelle des Vertrages.

Ich denke, ich muss zwei Dinge tun, um diese Aufgabe zu erfüllen:

  • Zunächst muss das Programm eine Verbindung zu einem Knoten herstellen, auf dem die EVM ausgeführt wird. Normalerweise einfach mit Metamask und web3.js. Ich denke, es ist nicht einmal in diesem Fall so einfach. Ist es möglich, eine Verbindung zu einem Knoten herzustellen, ohne Metamask zu verwenden? Was würden Sie tun, um dies zu tun? Was wird Ihrer Meinung nach das größte Problem bei dieser Aufgabe sein?
  • Zweitens muss ich eine Raw-Transaktion erstellen, um sie an den Knoten zu senden, und mit Raw meine ich echtes Raw. Wie auch immer, sobald ich eine Verbindung habe, sollte dies nicht unmöglich sein. Da ich nur eine Funktion aufrufen muss, dachte ich daran, einen Aufruf mit Remix oder Trüffel zu tätigen, dann die gesendeten Daten zu überprüfen und zu versuchen, die vom C-Programm geöffnete Verbindung zu replizieren. Glaubst du, dass es möglich ist, so etwas zu tun? Welcher Teil erscheint Ihnen unmöglich?

Natürlich frage ich dich auch, ob du ein Projekt oder Leute kennst, die so etwas gemacht haben, auch in anderen Sprachen, ich würde mich sehr freuen, wenn du es postest.

Ich entwickle eine Brieftasche, komplett in C++, sie sendet Transaktionen an Verträge und EOAs, also ist es möglich, in C zu tun, was Sie wollen. Aber ich frage mich, warum Sie C brauchen, wenn Sie eher ein Java-Programmierer sind.
@Nulik danke für deine Antwort. Das Gerät, auf dem das Programm dann ausgeführt werden soll, gehört nicht mir, sie sagten, es kann die JVM nicht ausführen und es muss in C ausgeführt werden.
Nun, die gemeinsam genutzte Bibliothek mit allen Funktionen zum Senden von Transaktionen ist 4,1 MB groß. Fügen Sie den Code hinzu, um die Bibliothek tatsächlich zu verwenden, und senden Sie die Rohtransaktion über HTTP an das Netzwerk, und das haben Sie am Ende als ausführbare Größe. Und meine Brieftasche ist 14 MB groß, einschließlich Debugging-Symbole, nicht gestrippt, nicht optimiert.

Antworten (2)

Ich denke, Sie können sich auf natives Dapp beziehen. Wir können den Golang-Code an den Smart Contract binden und ihn dann aufrufen

https://github.com/ethereum/go-ethereum/wiki/Native-DApps:-Go-bindings-to-Ethereum-contracts

Ich schaue mir das so schnell wie möglich an und gebe dann bescheid. Danke für Ihre schnelle Antwort.
okay, Sie können sich auch auf c-like lib beziehen: nethereum.readthedocs.io/en/latest/#what-is-nethereum

Gibt es eine C++-Bibliothek zum Codieren von abi

Sie müssen Stream-Operationen in char *Sachen ändern.
Informationen zum Codieren von Argumenten https://docs.soliditylang.org/en/v0.5.3/abi-spec.html
, sodass Sie einen Knotenanbieter und einen Dienst benötigen, um tx zu signieren, ohne Code eingeben zu müssen. ich benutzeethsigner