AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 77619710
Accepted
János Barna
János Barna
Asked: 2023-12-07 19:41:33 +0800 CST2023-12-07 19:41:33 +0800 CST 2023-12-07 19:41:33 +0800 CST

Não consigo ver os dados solicitados (Chainlink) em meu contrato inteligente

  • 772

Estou tentando obter dados em meu contrato inteligente, que são obtidos de um adaptador externo Chainlink:

buscar ponte "{"dados":{"resultado":{"id":"UCAl9Ld79qaZxp9JzEOwd3aA","statistics":{"subscriberCount":"209000"}}},"jobRunId":"0x84aae6f7b7144fbc8196230158918797","statusCode": 200}"

Nome: Yutu

requestData: {"id": $(jobSpec.externalJobID), "data": { "chid": $(decode_cbor.chid)},"key": $(decode_cbor.key)}

analisar jsonparse "209000"

caminho: dados,resultado,estatísticas,subscriberCount

dados: $(buscar)

encode_data ethabiencode "0x00000000000000000000000000000000000000000000000000000033068"

abi: (valor uint256)

dados: { "valor": $(parse) }

encode_tx ethabiencode "0x4ab0d1902a02a37be17119894c2d9400f9bcf563bd4be47496af9a493a96eb412676916c000000000000000000000000000000000000000000 000000de0b6b3a764000000000000000000000000002e495ea15b191aff2dea171abba537dc597d6f117642d375000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000006571ad180000000000000000000000000000000000000000 00000000000000033068"

abi: cumprirOracleRequest (bytes32 requestId, pagamento uint256, endereço callbackAddress, bytes4 callbackFunctionId, expiração uint256, dados bytes32)

dados: {"requestId": $(decode_log.requestId), "pagamento": $(decode_log.payment), "callbackAddress": $(decode_log.callbackAddr), "callbackFunctionId": $(decode_log.callbackFunctionId), "expiração" : $(decode_log.cancelExpiration), "dados": $(encode_data)}

submit_tx ethtx para: 0x34b33d85A6a642A6Eaa1fE554f576c6122FF64b6

dados: $(encode_tx)

Estou tentando obter o número de assinantes no smartcontract abaixo: // SPDX-License-Identifier: MIT pragma solidity ^0.8.7;

importar "@chainlink/contracts/src/v0.8/ChainlinkClient.sol"; importar "@chainlink/contracts/src/v0.8/ConfirmedOwner.sol";

/**

  • ESTE É UM EXEMPLO DE CONTRATO QUE USA CÓDIGO NÃO AUDITADO.
  • NÃO USE ESTE CÓDIGO NA PRODUÇÃO. */

contrato ConsumerContract é ChainlinkClient, ConfirmedOwner {usando Chainlink para Chainlink.Request;

uint256 private constant ORACLE_PAYMENT = 1 * LINK_DIVISIBILITY; // 1 * 10**18
uint256 public lastRetrievedSubscriberCount;

event RequestForSubscriberCountFulfilled(
    bytes32 indexed requestId,
    uint256 indexed subscriberCount
);

/**
 *  Goerli
 * @dev LINK address in Sepholia network: 0x779877A7B0D9E8603169DdbD7836e478b4624789
 * @dev Check https://docs.chain.link/docs/link-token-contracts/ for LINK address for the right network
 */
constructor() ConfirmedOwner(msg.sender) {
    setChainlinkToken(0x779877A7B0D9E8603169DdbD7836e478b4624789);
}

function requestSubscriberCount(
    address _oracle,
    string memory _jobId,
    string memory channelId,
    string memory apiKey
) public onlyOwner {
    Chainlink.Request memory req = buildOperatorRequest(
        stringToBytes32(_jobId),
        this.fulfillRequestInfo.selector
    );

    req.add("chid", channelId);
    req.add("key", apiKey);
    sendOperatorRequestTo(_oracle, req, ORACLE_PAYMENT);
}

function fulfillRequestInfo(bytes32 _requestId, string memory _info)
    public
    recordChainlinkFulfillment(_requestId)
{
    // Parse the JSON data to extract the subscriberCount
    (uint256 subscriberCount, ) = abi.decode(bytes(_info), (uint256, uint256));

    emit RequestForSubscriberCountFulfilled(_requestId, subscriberCount);
    lastRetrievedSubscriberCount = subscriberCount;
}

function getSubscriberCount() public view returns (uint256) {
    return lastRetrievedSubscriberCount;
}

/*
========= UTILITY FUNCTIONS ==========
*/

function contractBalances()
    public
    view
    returns (uint256 eth, uint256 link)
{
    eth = address(this).balance;

    LinkTokenInterface linkContract = LinkTokenInterface(
        chainlinkTokenAddress()
    );
    link = linkContract.balanceOf(address(this));
}

function getChainlinkToken() public view returns (address) {
    return chainlinkTokenAddress();
}

function withdrawLink() public onlyOwner {
    LinkTokenInterface link = LinkTokenInterface(chainlinkTokenAddress());
    require(
        link.transfer(msg.sender, link.balanceOf(address(this))),
        "Unable to transfer Link"
    );
}

function withdrawBalance() public onlyOwner {
    payable(msg.sender).transfer(address(this).balance);
}

function cancelRequest(
    bytes32 _requestId,
    uint256 _payment,
    bytes4 _callbackFunctionId,
    uint256 _expiration
) public onlyOwner {
    cancelChainlinkRequest(
        _requestId,
        _payment,
        _callbackFunctionId,
        _expiration
    );
}

function stringToBytes32(string memory source)
    private
    pure
    returns (bytes32 result)
{
    bytes memory tempEmptyStringTest = bytes(source);
    if (tempEmptyStringTest.length == 0) {
        return 0x0;
    }

    assembly {
        // solhint-disable-line no-inline-assembly
        result := mload(add(source, 32))
    }
}

}

solidity
  • 1 1 respostas
  • 21 Views

1 respostas

  • Voted
  1. Best Answer
    Derek
    2023-12-07T23:27:12+08:002023-12-07T23:27:12+08:00

    Você pode nos indicar a transação de sua solicitação e o endereço oracle para o qual você está fazendo isso?

    Com base no contexto, presumo que você esteja fazendo uma solicitação contra o oráculo testnet ETH Sepolia da Chainlink em 0x34b33d85a6a642a6eaa1fe554f576c6122ff64b6.

    Com base no momento da sua pergunta, presumo que uma dessas transações com falha no Oracle Cumprimento seja sua:

    1. https://sepolia.etherscan.io/tx/0x7a440e81964e7552ba7784d7246fdd6b35b310f910c3639a8f88372e007640a4
    2. https://sepolia.etherscan.io/tx/0x45862741e98669d733f6645f53b2078ab9359d9f0a46798ccab26d87ce6ba29a
    3. https://sepolia.etherscan.io/tx/0xac2ce4aca4fbe7fff50234c3de568a4dbdaeea249a7e881d9f46152f4e93a7f5
    4. https://sepolia.etherscan.io/tx/0xa50050fb9c77b40ebcb22dad25f095c4c9bdbd7ee22f52ffd2aa7f1e87c9d2ed

    Se você observar qualquer uma das transações de preenchimento acima, verá o erro de execução do contrato Data versions must match.

    Olhando para o contrato Operator.sol (oracle), aqui está a condição de falha: https://github.com/smartcontractkit/chainlink/blob/develop/contracts/src/v0.7/Operator.sol#L480

    Qual versão ChainlinkClient.solvocê está importando para o seu contrato inteligente? Sugiro que você use a versão mais recente para ver se isso faz diferença aqui.

    • 0

relate perguntas

  • A instalação do capacete está caindo para instalar

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    destaque o código em HTML usando <font color="#xxx">

    • 2 respostas
  • Marko Smith

    Por que a resolução de sobrecarga prefere std::nullptr_t a uma classe ao passar {}?

    • 1 respostas
  • Marko Smith

    Você pode usar uma lista de inicialização com chaves como argumento de modelo (padrão)?

    • 2 respostas
  • Marko Smith

    Por que as compreensões de lista criam uma função internamente?

    • 1 respostas
  • Marko Smith

    Estou tentando fazer o jogo pacman usando apenas o módulo Turtle Random e Math

    • 1 respostas
  • Marko Smith

    java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.<init>(java.net.URI, java.time.Duration, java.time.Duratio

    • 3 respostas
  • Marko Smith

    Por que 'char -> int' é promoção, mas 'char -> short' é conversão (mas não promoção)?

    • 4 respostas
  • Marko Smith

    Por que o construtor de uma variável global não é chamado em uma biblioteca?

    • 1 respostas
  • Marko Smith

    Comportamento inconsistente de std::common_reference_with em tuplas. Qual é correto?

    • 1 respostas
  • Marko Smith

    Somente operações bit a bit para std::byte em C++ 17?

    • 1 respostas
  • Martin Hope
    fbrereto Por que a resolução de sobrecarga prefere std::nullptr_t a uma classe ao passar {}? 2023-12-21 00:31:04 +0800 CST
  • Martin Hope
    比尔盖子 Você pode usar uma lista de inicialização com chaves como argumento de modelo (padrão)? 2023-12-17 10:02:06 +0800 CST
  • Martin Hope
    Amir reza Riahi Por que as compreensões de lista criam uma função internamente? 2023-11-16 20:53:19 +0800 CST
  • Martin Hope
    Michael A formato fmt %H:%M:%S sem decimais 2023-11-11 01:13:05 +0800 CST
  • Martin Hope
    God I Hate Python std::views::filter do C++20 não filtrando a visualização corretamente 2023-08-27 18:40:35 +0800 CST
  • Martin Hope
    LiDa Cute Por que 'char -> int' é promoção, mas 'char -> short' é conversão (mas não promoção)? 2023-08-24 20:46:59 +0800 CST
  • Martin Hope
    jabaa Por que o construtor de uma variável global não é chamado em uma biblioteca? 2023-08-18 07:15:20 +0800 CST
  • Martin Hope
    Panagiotis Syskakis Comportamento inconsistente de std::common_reference_with em tuplas. Qual é correto? 2023-08-17 21:24:06 +0800 CST
  • Martin Hope
    Alex Guteniev Por que os compiladores perdem a vetorização aqui? 2023-08-17 18:58:07 +0800 CST
  • Martin Hope
    wimalopaan Somente operações bit a bit para std::byte em C++ 17? 2023-08-17 17:13:58 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve