#blockchain #ethereum #solidity #rsk
#блокчейн #ethereum #надежность #rsk
Вопрос:
У меня есть вопрос об интеграции RSK (в частности, о том, как используются адреса обратного вызова) https://github.com/smartcontractkit/chainlink-RSK/blob/master/test-runner/src/contracts/Consumer.sol
function requestRIFPriceByCallback(uint256 _payment, address _callback) public {
Chainlink.Request memory req = buildChainlinkRequest(specId, _callback, this.fulfill.selector);
req.add("get", "https://api.liquid.com/products/580");
req.add("path", "last_traded_price");
req.addInt("times", 100000000);
sendChainlinkRequest(req, _payment);
}
https://github.com/smartcontractkit/chainlink/blob/develop/evm-contracts/src/v0.4/tests/Consumer.sol
function requestEthereumPrice(string _currency) public {
Chainlink.Request memory req = buildChainlinkRequest(specId, this, this.fulfill.selector);
req.add("get", "https://min-api.cryptocompare.com/data/price?fsym=ETHamp;tsyms=USD,EUR,JPY");
string[] memory path = new string[](1);
path[0] = _currency;
req.addStringArray("path", path);
sendChainlinkRequest(req, ORACLE_PAYMENT);
}
Они получены от Consumer.sol (выше от RSK и ниже от original)
Почему потребителю RSK требуется адрес обратного вызова и что это делает / как это работает?
Ответ №1:
Обе эти функции имеют адреса обратного вызова. Вы увидите, что во втором методе они просто используют ‘это’. Адрес обратного вызова является параметром в функции buildchainlink request. Он указывает, в какой контракт возвращать данные. Это в сочетании с селектором функций позволяет вам выбрать, в какой контракт и функцию вы хотите вернуть свои данные.
У 2-го метода нет адреса обратного вызова, потому что для него установлено значение ‘this’. Первая функция позволяет выбирать.