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?
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 EVENTS
externen 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.
method
Wenn 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>)
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.
Ismael
ACluelessProgrammer