Должен ли вызов API быть в бэкэнде Solidity или во внешнем интерфейсе Javascript?

Я довольно новичок в разработке блокчейна. Я хочу вызвать функцию в своем контракте, когда условие в API истинно. Должен ли я сделать этот вызов API в моем контракте или в моем внешнем интерфейсе?

А можно поподробнее? Смарт-контракты не имеют прямого доступа к ресурсам вне блокчейна, для таких вещей нужно использовать оракул.
@Ismael Я хочу завершить транзакцию, когда определенный параметр в RESTful API, к которому я хочу получить доступ, имеет значение true. Лучше использовать оркаль или просто использовать обычные методы в javascript?

Ответы (2)

Если ваше состояние возникает в вашем смарт-контракте, например, вы достигли определенного количества подписчиков на краудфандинг, вы можете отслеживать действия ваших смарт-контрактов с 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>)
Видите ли, я хочу завершить транзакцию, когда определенный параметр в RESTful API, к которому я хочу получить доступ, имеет значение true. Должен ли я использовать оракул для доступа к этим данным из моего смарт-контракта или просто использовать обычные методы в javascript?
добавил пример к моему ответу. как только ваше условие API становится истинным, вы можете вызвать этот фрагмент для выполнения своего контракта.
Итак, что вы говорите, я могу просто отслеживать, используя события и тому подобное, и выполнять вызовы API во внешнем интерфейсе? Вместо использования оракула.
Другие могут не согласиться, но я считаю подход оракула слишком сложным. Я использовал подход, описанный выше, и он отлично работает. Как бы то ни было, я планирую продолжить изучение метода оракула для взаимодействия в реальном мире.

Просто вызовите метод по контракту, чтобы проверить условие (это не стоит газа), если это правда, вызовите API, иначе не делайте этого. Если вы хотите постоянно проверять значение переменной, вы можете использовать веб-сокеты.