Я довольно новичок в разработке блокчейна. Я хочу вызвать функцию в своем контракте, когда условие в API истинно. Должен ли я сделать этот вызов API в моем контракте или в моем внешнем интерфейсе?
Если ваше состояние возникает в вашем смарт-контракте, например, вы достигли определенного количества подписчиков на краудфандинг, вы можете отслеживать действия ваших смарт-контрактов с EVENTS
помощью внешнего монитора (например, с помощью демона node.js). Когда событие запускается в вашем контракте, оно будет обнаружено демоном, который, в свою очередь, инициирует выполнение вашего предварительно запрограммированного кода/скрипта. У Ethers.io есть отличная библиотека смарт-контрактов, которую вы можете использовать для создания своего демона.
Если вам нужно вызвать method
ваш смарт-контракт, когда происходит внешнее событие (например, пользователь входит на ваш веб-сайт) , это так же просто, как использовать методы контракта библиотеки Web3.js.
Вот фрагмент того, как вызвать метод контракта Ethereum (с сервера API на основе JS):
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>)
Просто вызовите метод по контракту, чтобы проверить условие (это не стоит газа), если это правда, вызовите API, иначе не делайте этого. Если вы хотите постоянно проверять значение переменной, вы можете использовать веб-сокеты.
Исмаэль
ACCluelessProgramer