Как используются адреса обратного вызова в потребительском контракте по цепочке?

#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’. Первая функция позволяет выбирать.