【问题标题】:Chainlink node CRON job. How does it get paid?Chainlink 节点 CRON 作业。如何获得报酬?
【发布时间】:2022-01-18 01:08:40
【问题描述】:

这些是文档

https://docs.chain.link/docs/jobs/types/cron/

type            = "cron"
schemaVersion   = 1
schedule        = "CRON_TZ=UTC * */20 * * * *"
externalJobID       = "0EEC7E1D-D0D2-476C-A1A8-72DFB6633F01"
observationSource   = """
    fetch    [type="http" method=GET url="https://chain.link/ETH-USD"]
    parse    [type="jsonparse" path="data,price"]
    multiply [type="multiply" times=100]

    fetch -> parse -> multiply
"""

但我想知道的是,这份工作如何与 Oracle 合同联系起来。它如何与用户合同联系以获得报酬。作业以指定增量完成后,我们在哪里以及如何发送数据。

当作业发布到节点端时,作业是否开始。还是一旦用户合约调用它就开始计时?

任何帮助将不胜感激。我试图通过各种工作类型来熟悉chainlink节点的功能。

【问题讨论】:

    标签: cron jobs smartcontracts chainlink


    【解决方案1】:

    Chron 作业基于chron defined schedule 执行作业。这意味着它是基于 Chainlink 节点评估的某些条件触发的,而不是通过智能合约从外部触发的。因此,节点不会像处理 API 调用那样使用 LINK 令牌来处理请求,因为它自己发起请求,而不是从链上接收请求(和付款)。节点不能自行启动作业,然后期望从消费合约接收付款,如果您需要这样的功能,那么您可以尝试在调用的函数中设置一些逻辑以撤回一些 LINK。但是要注意谁可以调用这个函数。

    如果您想在作业完成后将数据链上发送到智能合约,您需要在 cron 作业结束时手动定义 ethtx task

    这是您的作业的扩展版本,它将结果发送回一个名为 someFunction 的函数,该函数位于部署在地址 0xa36085F69e2889c224210F603D836748e7dC0088 的合约中。数据可以是任何格式,只要函数的 abi 与作业中编码的内容相匹配。即如果函数需要一个字节参数,你需要确保你编码一个字节参数,如果它需要一个uint参数,那么你需要编码一个uint参数。在这个例子中,使用了一个字节参数

        type            = "cron"
    schemaVersion   = 1
    name = "GET > bytes32 (cron)"
    schedule        = "CRON_TZ=UTC @every 1m"
    observationSource   = """
        fetch    [type="http" method=GET url="https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD"]
        parse    [type="jsonparse" path="USD"]
        multiply [type="multiply" times=100]
      encode_response [type="ethabiencode"
                 abi="(uint256 data)"
                 data="{\\"data\\": $(multiply) }"] 
       encode_tx [type="ethabiencode"
                  abi="someFunction(bytes32 data)"
                  data="{ \\"data\\": $(encode_response) }"]
    
       submit_tx  [type="ethtx"
                   to="0x6495C9684Cc5702522A87adFd29517857FC99f45"
                   data="$(encode_tx)"]
    
        fetch -> parse -> multiply -> encode_response -> encode_tx -> submit_tx
    """
    

    这是上面 cron 作业的消费合同:

    // SPDX-Lincense-Identifier: MIT
    pragma solidity ^0.8.7;
    
    contract Cron {
    
        bytes32 public currentPrice; 
    
        function someFunction(bytes32 _price) public {
            currentPrice = _price;
        }
    }
    

    为了回答您的其他问题,它在节点上创建后立即处于活动状态,并将根据定义的计划开始评估触发条件以激活运行

    【讨论】:

    • 非常感谢!
    猜你喜欢
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多