smartcontractkit / smartcontractkit/chainlink
[NODE] Job finished over 2,000 years ago and is "suspended"
Nobody has claimed this yet.
- Dominant language
- Go
- Stars
- 8.2k
- Forks
- 2k
- Avg merge
- 1d 23h
- Merged PRs (30d)
- 202
Description
Description

I have a job that using the "any API" feature of Chainlink that both:
- Finished over 2,000 years ago
- And is "suspended"
The weird thing is... It return data to my smart contract.
The solidity
function requestVolumeData() public returns (bytes32 requestId) {
Chainlink.Request memory request = buildChainlinkRequest(
jobId,
address(this),
this.fulfill.selector
);
// Set the URL to perform the GET request on
request.add("get", "https://min-api.cryptocompare.com/data/pricemultifull?fsyms=ETH&tsyms=USD");
request.add("path", "RAW,ETH,USD,VOLUME24HOUR"); // Chainlink nodes 1.0.0 and later support this format
// Multiply the result by 1000000000000000000 to remove decimals
int256 timesAmount = 10**18;
request.addInt("times", timesAmount);
// Sends the request
return sendChainlinkRequestTo(oracle, request, fee);
}
Chainlink node version: 1.2.1
The job spec:
type = "directrequest"
schemaVersion = 1
name = "Get > Uint256 (TOML)"
externalJobID = "d5270d1c-3119-41d0-b08b-ead21fea7747"
maxTaskDuration = "0s"
contractAddress = "0xc57B33452b4F7BB189bB5AfaE9cc4aBa1f7a4FD8"
minIncomingConfirmations = 0
observationSource = """
decode_log [type="ethabidecodelog"
abi="OracleRequest(bytes32 indexed specId, address requester, bytes32 requestId, uint256 payment, address callbackAddr, bytes4 callbackFunctionId, uint256 cancelExpiration, uint256 dataVersion, bytes data)"
data="$(jobRun.logData)"
topics="$(jobRun.logTopics)"]
decode_cbor [type="cborparse" data="$(decode_log.data)"]
fetch [type="http" method=GET url="$(decode_cbor.get)"]
parse [type="jsonparse" path="$(decode_cbor.path)" data="$(fetch)"]
multiply [type="multiply" input="$(parse)" times=100]
encode_data [type="ethabiencode" abi="(uint256 value)" data="{ \\"value\\": $(multiply) }"]
encode_tx [type="ethabiencode"
abi="fulfillOracleRequest(bytes32 requestId, uint256 payment, address callbackAddress, bytes4 callbackFunctionId, uint256 expiration, bytes32 data)"
data="{\\"requestId\\": $(decode_log.requestId), \\"payment\\": $(decode_log.payment), \\"callbackAddress\\": $(decode_log.callbackAddr), \\"callbackFunctionId\\": $(decode_log.callbackFunctionId), \\"expiration\\": $(decode_log.cancelExpiration), \\"data\\": $(encode_data)}"
]
submit_tx [type="ethtx" to="0xc57B33452b4F7BB189bB5AfaE9cc4aBa1f7a4FD8" data="$(encode_tx)"]
decode_log -> decode_cbor -> fetch -> parse -> multiply -> encode_data -> encode_tx -> submit_tx
"""
The contract is located on Kovan
The job is on the devrel VPN as well if you're on there.
- Network: [Kovan]
No idea how to reproduce this. It only happened once.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the Chainlink node v1.2.1 behavior for the provided directrequest job spec and compare it with the Kovan contract's requestVolumeData and fulfillment flow. Use the linked Kovan contract and the reported job details to investigate how a completed job could appear suspended and show a timestamp over 2,000 years old; done means identifying a reproducible cause or explaining why the state occurred.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- go, solidity
- Domain
- backend, blockchain
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100