Soll ein API-Aufruf im Solidity-Backend oder im Javascript-Frontend erfolgen?

Ich bin ziemlich neu in der Blockchain-Entwicklung. Ich möchte eine Funktion in meinem Vertrag aufrufen, wenn eine Bedingung in der API wahr ist. Soll ich diesen API-Aufruf in meinem Vertrag oder in meinem Frontend machen?

Können Sie mehr Details geben? Smart Contracts haben keinen direkten Zugriff auf Ressourcen außerhalb der Blockchain, Sie müssen für solche Dinge ein Orakel verwenden.
@Ismael Ich möchte eine Transaktion abschließen, wenn ein bestimmter Parameter in der RESTful-API, auf die ich zugreifen möchte, wahr ist. Ist es besser, ein Orcale zu verwenden oder einfach normale Methoden in Javascript zu verwenden?

Antworten (2)

Wenn Ihre Bedingung innerhalb Ihres Smart Contracts auftritt, z. B. Sie eine bestimmte Anzahl von Crowdfunding-Abonnenten erreicht haben, können Sie die Aktivitäten Ihrer Smart Contracts mithilfe eines EVENTSexternen Monitors (z. B. mithilfe eines node.js-Daemons) verfolgen. Wenn das Ereignis in Ihrem Vertrag ausgelöst wird, wird es vom Daemon erkannt, der wiederum die Ausführung Ihres vorprogrammierten Codes/Skripts auslöst. Ethers.io hat eine großartige intelligente Vertragsbibliothek, die Sie zum Erstellen Ihres Daemons verwenden können.

methodWenn Sie einen Smart Contract aufrufen müssen, wenn ein externes Ereignis eintritt (z. B. wenn sich ein Benutzer auf Ihrer Website anmeldet), ist dies so einfach wie die Verwendung der Vertragsmethoden der Web3.js- Bibliothek .


Hier ist ein Ausschnitt, wie man eine Methode für einen Ethereum-Vertrag aufruft (von einem JS-basierten API-Server):

const Web3 = require('web3')
const web3 = new Web3('https://mainnet.infura.io')

function myFunction(myParam) {
    var contractAddress = '<ENTER-YOUR-CONTRACT-ADDRESS-HERE>'
    var contractABI = [<ENTER-YOUR-ABI-HERE>]
    var contract = new web3.eth.Contract(contractABI, contractAddress)
    var callData = contract.methods.<CONTRACT-FUNCTION>(myParam).call()
    callData.then(function(result) {
        console.log(result)
    })
}

myFunction(<MY-PARAM>)
Sehen Sie, ich möchte eine Transaktion abschließen, wenn ein bestimmter Parameter in der RESTful-API, auf die ich zugreifen möchte, wahr ist. Sollte ich ein Orakel verwenden, um von meinem Smart Contract aus auf diese Daten zuzugreifen, oder einfach normale Methoden in Javascript verwenden?
fügte meiner Antwort ein Beispiel hinzu. Sobald Ihre API-Bedingung wahr wird, können Sie dieses Snippet aufrufen, um Ihren Vertrag auszuführen.
Also, was sagst du, ich kann einfach mit Ereignissen und dergleichen den Überblick behalten und meine API-Aufrufe im Frontend ausführen? Anstatt ein Orakel zu verwenden.
Andere mögen anderer Meinung sein, aber ich finde den Orakel-Ansatz zu kompliziert. Ich habe den oben beschriebenen Ansatz verwendet und es funktioniert ganz hervorragend. Unabhängig davon plane ich, die Orakelmethode der Interaktionen in der realen Welt weiter zu erforschen.

Rufen Sie einfach eine vertraglich vereinbarte Methode auf, um die Bedingung zu überprüfen (dies kostet kein Gas), wenn es wahr ist, rufen Sie die API auf, sonst nicht. Wenn Sie den Wert der Variablen kontinuierlich überprüfen möchten, können Sie Websockets verwenden.