Alright I was going through the keepers contract to understand how it works from a contract perspective. There are two parameters that I don't understand what they're used for in the register function which is the uint96 amount and the uint8 source if anyone could help out if you know what they're for that'd be awesome.

  function register(
    string memory name,
    bytes calldata encryptedEmail,
    address upkeepContract,
    uint32 gasLimit,
    address adminAddress,
    bytes calldata checkData,
    uint96 amount,
    uint8 source
  ) external onlyLINK {
    require(adminAddress != address(0), "invalid admin address");
    bytes32 hash = keccak256(abi.encode(upkeepContract, gasLimit, adminAddress, checkData));

    emit RegistrationRequested(

    AutoApprovedConfig memory config = s_config;
    if (config.enabled && _underApprovalLimit(config)) {

      _approve(name, upkeepContract, gasLimit, adminAddress, checkData, amount, hash);
    } else {
      uint96 newBalance = s_pendingRequests[hash].balance.add(amount);
      s_pendingRequests[hash] = PendingRequest({admin: adminAddress, balance: newBalance});

In the natspec the details of the params were...

@param amount quantity of LINK upkeep is funded with (specified in Juels)
@param source application sending this request

I have no idea what a juels is and what they mean by application sending the request as a uint8 parameter.

1 Answer 1


The source param is not used except for internal metrics. You will not need to use that.

The amount param specifies amount of LINK, and the smallest denomination of LINK is a Juels. The Juels is to Link what Wei is to Ether. The Juels is named after one of the cofounders and the Chief Scientist at Chainlink Labs (reference).

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.