liquid-staking

Solidity API

ApyOracle

constructor

constructor(address dataFeed, address dpos) public

maxValidatorStakeCapacity

uint256 maxValidatorStakeCapacity

nodeCount

uint256 nodeCount

nodesList

address[] nodesList

nodes

mapping(address => struct IApyOracle.NodeData) nodes

OnlyDataFeed

modifier OnlyDataFeed()

getNodeCount

function getNodeCount() external view returns (uint256)

getNodesForDelegation

function getNodesForDelegation(uint256 amount) external view returns (struct IApyOracle.TentativeDelegation[])

Returns the list of nodes that can be delegated to, along with the amount that can be delegated to each node.

Parameters

Name Type Description
amount uint256 The amount to be delegated

updateNodeCount

function updateNodeCount(uint256 count) external

getDataFeedAddress

function getDataFeedAddress() external view returns (address)

getNodeData

function getNodeData(address node) external view returns (struct IApyOracle.NodeData)

updateNodeData

function updateNodeData(address node, struct IApyOracle.NodeData data) external

Lara

protocolStartTimestamp

uint256 protocolStartTimestamp

epochDuration

uint256 epochDuration

maxValidatorStakeCapacity

uint256 maxValidatorStakeCapacity

minStakeAmount

uint256 minStakeAmount

stTaraToken

contract IstTara stTaraToken

dposContract

contract DposInterface dposContract

apyOracle

contract IApyOracle apyOracle

delegators

address[] delegators

validators

address[] validators

protocolTotalStakeAtValidator

mapping(address => uint256) protocolTotalStakeAtValidator

isCompounding

mapping(address => bool) isCompounding

stakedAmounts

mapping(address => uint256) stakedAmounts

delegatedAmounts

mapping(address => uint256) delegatedAmounts

claimableRewards

mapping(address => uint256) claimableRewards

undelegated

mapping(address => uint256) undelegated

lastEpochTotalDelegatedAmount

uint256 lastEpochTotalDelegatedAmount

isEpochRunning

bool isEpochRunning

constructor

constructor(address _sttaraToken, address _dposContract, address _apyOracle) public

fallback

fallback() external payable

receive

receive() external payable

onlyUser

modifier onlyUser(address user)

getDelegatorAtIndex

function getDelegatorAtIndex(uint256 index) public view returns (address)

Getter for a certain delegator at a certain index

Parameters

Name Type Description
index uint256 the index of the delegator

isValidatorRegistered

function isValidatorRegistered(address validator) public view returns (bool)

Checks if a validator is registered in the protocol

Parameters

Name Type Description
validator address the validator address

setEpochDuration

function setEpochDuration(uint256 _epochDuration) public

Setter for epochDuration

Parameters

Name Type Description
_epochDuration uint256 new epoch duration (in seconds)

setCompound

function setCompound(address user, bool value) public

Setter for compounding

Parameters

Name Type Description
user address the user for which to set compounding
value bool the new value for compounding(T/F)

setMaxValidatorStakeCapacity

function setMaxValidatorStakeCapacity(uint256 _maxValidatorStakeCapacity) external

onlyOwner Setter for maxValidatorStakeCapacity

Parameters

Name Type Description
_maxValidatorStakeCapacity uint256 new maxValidatorStakeCapacity

setMinStakeAmount

function setMinStakeAmount(uint256 _minStakeAmount) external

onlyOwner Setter for minStakeAmount

Parameters

Name Type Description
_minStakeAmount uint256 the new minStakeAmount

stake

function stake(uint256 amount) public payable

Stake function In the stake function, the user sends the amount of TARA tokens he wants to stake. This method takes the payment and mints the stTARA tokens to the user. The tokens are not DELEGATED INSTANTLY, but on the next epoch.

Parameters

Name Type Description
amount uint256 the amount to stake

reDelegate

function reDelegate(address from, address to, uint256 amount) public

ReDelegate method to move stake from one validator to another inside the protocol. The method is intended to be called by the protocol owner on a need basis. In this V0 there is no on-chain trigger or management function for this, will be triggere from outside.

Parameters

Name Type Description
from address the validator from which to move stake
to address the validator to which to move stake
amount uint256 the amount to move

confirmUndelegate

function confirmUndelegate(address validator, uint256 amount) public

Confirm undelegate method to confirm the undelegation of a user from a certain validator. Will fail if called before the undelegation period is over. msg.sender is the delegator

Parameters

Name Type Description
validator address the validator from which to undelegate
amount uint256 the amount to undelegate

cancelUndelegate

function cancelUndelegate(address validator, uint256 amount) public

Cancel undelegate method to cancel the undelegation of a user from a certain validator. The undelegated value will be returned to the origin validator.

Parameters

Name Type Description
validator address the validator from which to undelegate
amount uint256 the amount to undelegate

removeStake

function removeStake(uint256 amount) public

Removes the stake of a user from the protocol. reverts on missing approval for the amount. The user needs to provide the amount of stTARA tokens he wants to get back as TARA

Parameters

Name Type Description
amount uint256 the amount of stTARA tokens to remove

requestUndelegate

function requestUndelegate(uint256 amount) public

Undelegates the amount from one or more validators. The user needs to provide the amount of stTARA tokens he wants to undelegate. The protocol will burn them. reverts on missing approval for the amount.

Parameters

Name Type Description
amount uint256 the amount of tokens to undelegate

claimRewards

function claimRewards() public

Public method for claiming rewards. The user can claim his rewards at any time but if there is an epoch running, he will only get the rewards from the last epoch. Pays rewards in TARA.

startEpoch

function startEpoch() external

OnlyOwner method for starting a staking epoch.

endEpoch

function endEpoch() public

OnlyOwner method for ending a staking epoch.

delegateToValidators

function delegateToValidators(uint256 amount) internal returns (uint256 remainingAmount)

NotAuthorized

error NotAuthorized()

It is returned if the caller is not authorized

RewardClaimFailed

error RewardClaimFailed()

It is returned if reward claim from DPOS fails

StakeAmountTooLow

error StakeAmountTooLow(uint256 amount, uint256 minAmount)

StakeValueTooLow

error StakeValueTooLow(uint256 sentAmount, uint256 targetAmount)

DelegationFailed

error DelegationFailed(address validator, address delegator, uint256 amount)

It is returned if the delegation to a certain validator fails.

IApyOracle

NodeData

struct NodeData {
  address account;
  uint16 rank;
  uint256 rating;
  uint16 apy;
  uint64 fromBlock;
  uint64 toBlock;
}

TentativeDelegation

struct TentativeDelegation {
  address validator;
  uint256 amount;
}

NodeDataUpdated

event NodeDataUpdated(address node, uint16 apy, uint256 pbftCount)

getNodeCount

function getNodeCount() external view returns (uint256)

getNodesForDelegation

function getNodesForDelegation(uint256 amount) external view returns (struct IApyOracle.TentativeDelegation[])

updateNodeCount

function updateNodeCount(uint256 count) external

getNodeData

function getNodeData(address node) external view returns (struct IApyOracle.NodeData)

updateNodeData

function updateNodeData(address node, struct IApyOracle.NodeData data) external

getDataFeedAddress

function getDataFeedAddress() external view returns (address)

DposInterface

Delegated

event Delegated(address delegator, address validator, uint256 amount)

Undelegated

event Undelegated(address delegator, address validator, uint256 amount)

UndelegateConfirmed

event UndelegateConfirmed(address delegator, address validator, uint256 amount)

UndelegateCanceled

event UndelegateCanceled(address delegator, address validator, uint256 amount)

Redelegated

event Redelegated(address delegator, address from, address to, uint256 amount)

RewardsClaimed

event RewardsClaimed(address account, address validator, uint256 amount)

CommissionRewardsClaimed

event CommissionRewardsClaimed(address account, address validator, uint256 amount)

CommissionSet

event CommissionSet(address validator, uint16 commission)

ValidatorRegistered

event ValidatorRegistered(address validator)

ValidatorInfoSet

event ValidatorInfoSet(address validator)

ValidatorBasicInfo

struct ValidatorBasicInfo {
  uint256 total_stake;
  uint256 commission_reward;
  uint16 commission;
  uint64 last_commission_change;
  address owner;
  string description;
  string endpoint;
}

ValidatorData

struct ValidatorData {
  address account;
  struct DposInterface.ValidatorBasicInfo info;
}

UndelegateRequest

struct UndelegateRequest {
  uint256 eligible_block_num;
  uint256 amount;
}

DelegatorInfo

struct DelegatorInfo {
  uint256 stake;
  uint256 rewards;
}

DelegationData

struct DelegationData {
  address account;
  struct DposInterface.DelegatorInfo delegation;
}

UndelegationData

struct UndelegationData {
  uint256 stake;
  uint64 block;
  address validator;
  bool validator_exists;
}

delegate

function delegate(address validator) external payable

undelegate

function undelegate(address validator, uint256 amount) external

confirmUndelegate

function confirmUndelegate(address validator) external

cancelUndelegate

function cancelUndelegate(address validator) external

reDelegate

function reDelegate(address validator_from, address validator_to, uint256 amount) external

claimRewards

function claimRewards(address validator) external

claimAllRewards

function claimAllRewards(uint32 batch) external returns (bool end)

Claims staking rewards from all validators (limited by batch) that caller has delegated to

Parameters

Name Type Description
batch uint32 Batch number - there is a limit of 10 validators per batch that delegator can claim rewards from in single tranaction

Return Values

Name Type Description
end bool Flag if there are no more validators left that delegator can claim rewards from

claimCommissionRewards

function claimCommissionRewards(address validator) external

registerValidator

function registerValidator(address validator, bytes proof, bytes vrf_key, uint16 commission, string description, string endpoint) external payable

setValidatorInfo

function setValidatorInfo(address validator, string description, string endpoint) external

Sets some of the static validator details.

Parameters

Name Type Description
validator address  
description string New description (e.g name, short purpose description, etc…)
endpoint string New endpoint, might be a validator’s website

setCommission

function setCommission(address validator, uint16 commission) external

isValidatorEligible

function isValidatorEligible(address validator) external view returns (bool)

getTotalEligibleVotesCount

function getTotalEligibleVotesCount() external view returns (uint64)

getValidatorEligibleVotesCount

function getValidatorEligibleVotesCount(address validator) external view returns (uint64)

getValidator

function getValidator(address validator) external view returns (struct DposInterface.ValidatorBasicInfo validator_info)

getValidators

function getValidators(uint32 batch) external view returns (struct DposInterface.ValidatorData[] validators, bool end)

getValidatorsFor

function getValidatorsFor(address owner, uint32 batch) external view returns (struct DposInterface.ValidatorData[] validators, bool end)

Returns list of validators owned by an address

Parameters

Name Type Description
owner address Owner address
batch uint32 Batch number to be fetched. If the list is too big it cannot return all validators in one call. Instead, users are fetching batches of 100 account at a time

Return Values

Name Type Description
validators struct DposInterface.ValidatorData[] Batch of N validators basic info
end bool Flag if there are no more accounts left. To get all accounts, caller should fetch all batches until he sees end == true

getTotalDelegation

function getTotalDelegation(address delegator) external view returns (uint256 total_delegation)

Parameters

Name Type Description
delegator address delegator account address

getDelegations

function getDelegations(address delegator, uint32 batch) external view returns (struct DposInterface.DelegationData[] delegations, bool end)

Returns list of delegations for specified delegator - which validators delegator delegated to

Parameters

Name Type Description
delegator address delegator account address
batch uint32 Batch number to be fetched. If the list is too big it cannot return all delegations in one call. Instead, users are fetching batches of 50 delegations at a time

Return Values

Name Type Description
delegations struct DposInterface.DelegationData[] Batch of N delegations
end bool Flag if there are no more delegations left. To get all delegations, caller should fetch all batches until he sees end == true

getUndelegations

function getUndelegations(address delegator, uint32 batch) external view returns (struct DposInterface.UndelegationData[] undelegations, bool end)

Returns list of undelegations for specified delegator

Parameters

Name Type Description
delegator address delegator account address
batch uint32 Batch number to be fetched. If the list is too big it cannot return all undelegations in one call. Instead, users are fetching batches of 50 undelegations at a time

Return Values

Name Type Description
undelegations struct DposInterface.UndelegationData[] Batch of N undelegations
end bool Flag if there are no more undelegations left. To get all undelegations, caller should fetch all batches until he sees end == true

ILara

Staked

event Staked(address user, uint256 amount)

Delegated

event Delegated(address user, uint256 amount)

EpochStarted

event EpochStarted(uint256 totalEpochDelegation, uint256 timestamp)

RewardsClaimed

event RewardsClaimed(address user, uint256 amount, uint256 timestamp)

EpochEnded

event EpochEnded(uint256 totalEpochDelegation, uint256 totalEpochReward, uint256 timestamp)

Undelegated

event Undelegated(address user, address validator, uint256 amount)

TaraSent

event TaraSent(address user, uint256 amount, uint256 blockNumber)

StakeRemoved

event StakeRemoved(address user, uint256 amount)

getDelegatorAtIndex

function getDelegatorAtIndex(uint256 index) external view returns (address)

isValidatorRegistered

function isValidatorRegistered(address validator) external view returns (bool)

setEpochDuration

function setEpochDuration(uint256 _epochDuration) external

setCompound

function setCompound(address user, bool value) external

setMaxValidatorStakeCapacity

function setMaxValidatorStakeCapacity(uint256 _maxValidatorStakeCapacity) external

setMinStakeAmount

function setMinStakeAmount(uint256 _minStakeAmount) external

stake

function stake(uint256 amount) external payable

removeStake

function removeStake(uint256 amount) external

reDelegate

function reDelegate(address from, address to, uint256 amount) external

confirmUndelegate

function confirmUndelegate(address validator, uint256 amount) external

cancelUndelegate

function cancelUndelegate(address validator, uint256 amount) external

requestUndelegate

function requestUndelegate(uint256 amount) external

claimRewards

function claimRewards() external

startEpoch

function startEpoch() external

endEpoch

function endEpoch() external

INodeContinuityOracle

NodeStats

struct NodeStats {
  uint64 dagsCount;
  uint64 lastDagTimestamp;
  uint64 lastPbftTimestamp;
  uint64 lastTransactionTimestamp;
  uint64 pbftCount;
  uint64 transactionsCount;
}

NodeDataUpdated

event NodeDataUpdated(address node, uint64 timestamp, uint256 pbftCount)

getNodeUpdateTimestamps

function getNodeUpdateTimestamps(address node) external view returns (uint64[] timestamps)

getNodeStatsFrom

function getNodeStatsFrom(uint64 timestamp) external view returns (struct INodeContinuityOracle.NodeStats)

updateNodeStats

function updateNodeStats(address node, uint64 timestamp, struct INodeContinuityOracle.NodeStats stats) external

getDataFeedAddress

function getDataFeedAddress() external view returns (address)

IstTara

mint

function mint(address recipient, uint256 amount) external payable

burn

function burn(address user, uint256 amount) external

MockDpos

Undelegation

struct Undelegation {
  address delegator;
  uint256 amount;
  uint256 blockNumberClaimable;
}

validators

mapping(address => struct MockIDPOS.ValidatorData) validators

validatorDatas

struct MockIDPOS.ValidatorData[] validatorDatas

undelegations

mapping(address => struct MockDpos.Undelegation) undelegations

UNDELEGATION_DELAY_BLOCKS

uint256 UNDELEGATION_DELAY_BLOCKS

constructor

constructor(address[] _internalValidators) public payable

isValidatorRegistered

function isValidatorRegistered(address validator) external view returns (bool)

getValidator

function getValidator(address validator) external view returns (struct MockIDPOS.ValidatorBasicInfo)

getValidators

function getValidators(uint32 batch) external view returns (struct MockIDPOS.ValidatorData[] validatorsOut, bool end)

getValidatorsFor

function getValidatorsFor(address owner, uint32 batch) external view returns (struct MockIDPOS.ValidatorData[] validatorsOut, bool end)

delegate

function delegate(address validator) external payable

registerValidator

function registerValidator(address validator, bytes proof, bytes vrf_key, uint16 commission, string description, string endpoint) external payable

undelegate

function undelegate(address validator, uint256 amount) external

DelegationRewards

event DelegationRewards(uint256 totalStakes, uint256 totalRewards)

claimAllRewards

function claimAllRewards(uint32 batch) external returns (bool end)

reDelegate

function reDelegate(address validator_from, address validator_to, uint256 amount) external

confirmUndelegate

function confirmUndelegate(address validator) external

CallerCheck

event CallerCheck(address CallerCheck)

cancelUndelegate

function cancelUndelegate(address validator) external

MockIDPOS

Delegated

event Delegated(address delegator, address validator, uint256 amount)

Undelegated

event Undelegated(address delegator, address validator, uint256 amount)

UndelegateConfirmed

event UndelegateConfirmed(address delegator, address validator, uint256 amount)

UndelegateCanceled

event UndelegateCanceled(address delegator, address validator, uint256 amount)

RewardsClaimed

event RewardsClaimed(address account, address validator)

CommissionRewardsClaimed

event CommissionRewardsClaimed(address account, address validator)

CommissionSet

event CommissionSet(address validator, uint16 comission)

ValidatorRegistered

event ValidatorRegistered(address validator)

ValidatorInfoSet

event ValidatorInfoSet(address validator)

Redelegated

event Redelegated(address delegator, address from, address to, uint256 amount)

ValidatorBasicInfo

struct ValidatorBasicInfo {
  uint256 total_stake;
  uint256 commission_reward;
  uint16 commission;
  uint64 last_commission_change;
  address owner;
  string description;
  string endpoint;
}

ValidatorData

struct ValidatorData {
  address account;
  struct MockIDPOS.ValidatorBasicInfo info;
}

UndelegateRequest

struct UndelegateRequest {
  uint256 eligible_block_num;
  uint256 amount;
}

DelegatorInfo

struct DelegatorInfo {
  uint256 stake;
  uint256 rewards;
}

DelegationData

struct DelegationData {
  address account;
  struct MockIDPOS.DelegatorInfo delegation;
}

UndelegationData

struct UndelegationData {
  uint256 stake;
  uint64 block;
  address validator;
  bool validator_exists;
}

delegate

function delegate(address validator) external payable

registerValidator

function registerValidator(address validator, bytes proof, bytes vrf_key, uint16 commission, string description, string endpoint) external payable

getValidator

function getValidator(address validator) external view returns (struct MockIDPOS.ValidatorBasicInfo validator_info)

undelegate

function undelegate(address validator, uint256 amount) external

getValidators

function getValidators(uint32 batch) external view returns (struct MockIDPOS.ValidatorData[] validators, bool end)

getValidatorsFor

function getValidatorsFor(address owner, uint32 batch) external view returns (struct MockIDPOS.ValidatorData[] validators, bool end)

claimAllRewards

function claimAllRewards(uint32 batch) external returns (bool end)

reDelegate

function reDelegate(address validator_from, address validator_to, uint256 amount) external

confirmUndelegate

function confirmUndelegate(address validator) external

cancelUndelegate

function cancelUndelegate(address validator) external

stTARA

DepositAmountTooLow

error DepositAmountTooLow(uint256 amount, uint256 minAmount)

MintValueTooLow

error MintValueTooLow(uint256 sentAmount, uint256 minAmount)

WrongBurnAddress

error WrongBurnAddress(address wrongAddress)

InsufficientUserAllowanceForBurn

error InsufficientUserAllowanceForBurn(uint256 amount, uint256 senderBalance, uint256 protocolBalance)

InsufficientProtocolBalanceForBurn

error InsufficientProtocolBalanceForBurn(uint256 amount, uint256 protocolBalance)

Minted

event Minted(address user, uint256 amount)

Burned

event Burned(address user, uint256 amount)

minDepositAmount

uint256 minDepositAmount

lara

address lara

constructor

constructor() public

onlyLara

modifier onlyLara()

setMinDepositAmount

function setMinDepositAmount(uint256 _minDepositAmount) external

setLaraAddress

function setLaraAddress(address _lara) external

mint

function mint(address recipient, uint256 amount) external

burn

function burn(address user, uint256 amount) external

CompoundTest

staker0

address staker0

staker1

address staker1

staker2

address staker2

MAX_VALIDATOR_STAKE_CAPACITY

uint256 MAX_VALIDATOR_STAKE_CAPACITY

setUp

function setUp() public

getTotalDposStake

function getTotalDposStake() public view returns (uint256)

testFuzz_testStakeToSingleValidator

function testFuzz_testStakeToSingleValidator(uint256 amount) public

testStakeToMultipleValidators

function testStakeToMultipleValidators() public

calculateExpectedRewardForUser

function calculateExpectedRewardForUser(address staker) public view returns (uint256)

test_launchNextEpoch

function test_launchNextEpoch() public

DelegateTest

setUp

function setUp() public

testGetNodesForDelegation

function testGetNodesForDelegation() public

testFuzz_GetNodesForDelegation

function testFuzz_GetNodesForDelegation(uint256 amount) public

testFailStakeAmountTooLow

function testFailStakeAmountTooLow() public

testFailStakeValueTooLow

function testFailStakeValueTooLow() public

firstAmountToStake

uint256 firstAmountToStake

testFuzz_testStakeToSingleValidator

function testFuzz_testStakeToSingleValidator(uint256 amount) public

DelegationReward

event DelegationReward(uint256 totalStakes, uint256 totalRewards)

testStakeToMultipleValidators

function testStakeToMultipleValidators() public

testFailValidatorsFull

function testFailValidatorsFull() public

GetValidatorsTest

setUp

function setUp() public

testGetLotsOfNodesForDelegation

function testGetLotsOfNodesForDelegation() public

testFuzz_GetLotsOfNodesForDelegation

function testFuzz_GetLotsOfNodesForDelegation(uint256 amount) public

ReDelegateTest

setUp

function setUp() public

testFuzz_testRedelegateStakeToSingleValidator

function testFuzz_testRedelegateStakeToSingleValidator(uint256 amount) public

testFuzz_testRedelegateStakeToMultipleValidators

function testFuzz_testRedelegateStakeToMultipleValidators(uint256 amount) public

TestSetup

lara

contract Lara lara

mockApyOracle

contract ApyOracle mockApyOracle

mockDpos

contract MockDpos mockDpos

stTaraToken

contract stTARA stTaraToken

numValidators

uint16 numValidators

validators

address[] validators

setupValidators

function setupValidators() public

setupApyOracle

function setupApyOracle() public

setupLara

function setupLara() public

checkValidatorTotalStakesAreZero

function checkValidatorTotalStakesAreZero() public

findValidatorWithStake

function findValidatorWithStake(uint256 stake) public view returns (address)

ManyValidatorsTestSetup

lara

contract Lara lara

mockApyOracle

contract ApyOracle mockApyOracle

mockDpos

contract MockDpos mockDpos

stTaraToken

contract stTARA stTaraToken

numValidators

uint16 numValidators

validators

address[] validators

UpToThis

event UpToThis(uint256 value)

setupValidators

function setupValidators() public

setupApyOracle

function setupApyOracle() public

setupLara

function setupLara() public

checkValidatorTotalStakesAreZero

function checkValidatorTotalStakesAreZero() public

findValidatorWithStake

function findValidatorWithStake(uint256 stake) public view returns (address)

LaraSetterTest

delegators

address[] delegators

setUp

function setUp() public

testFuzz_setMaxValdiatorStakeCapacity

function testFuzz_setMaxValdiatorStakeCapacity(address setter) public

testFuzz_setMinStakeAmount

function testFuzz_setMinStakeAmount(address setter) public

UndelegateTest

setUp

function setUp() public

fallback

fallback() external payable

receive

receive() external payable

testFuzz_testStakeAndRemoveStake

function testFuzz_testStakeAndRemoveStake(uint256 amount) public

invariant_testStakeAndRemoveStake

function invariant_testStakeAndRemoveStake() public

testFuzz_failsToUndelegateDuringEpoch

function testFuzz_failsToUndelegateDuringEpoch(uint256 amount) public

testFuzz_failsToUndelegateWithoutApproval

function testFuzz_failsToUndelegateWithoutApproval(uint256 amount) public

testFuzz_failsToUndelegateForSomeoneElse

function testFuzz_failsToUndelegateForSomeoneElse(uint256 amount) public

testFuzz_singleStakeAndUnstake

function testFuzz_singleStakeAndUnstake(uint256 amount) public

invariant_testFuzz_singleStakeAndUnstake

function invariant_testFuzz_singleStakeAndUnstake() public

NodeContinuityOracle

constructor

constructor(address dataFeed) public

nodeStatsUpdateTimestamps

mapping(address => uint64[]) nodeStatsUpdateTimestamps

nodeStats

mapping(uint64 => struct INodeContinuityOracle.NodeStats) nodeStats

OnlyDataFeed

modifier OnlyDataFeed()

getDataFeedAddress

function getDataFeedAddress() external view returns (address)

updateNodeStats

function updateNodeStats(address node, uint64 timestamp, struct INodeContinuityOracle.NodeStats data) external

getNodeUpdateTimestamps

function getNodeUpdateTimestamps(address node) external view returns (uint64[] timestamps)

getNodeStatsFrom

function getNodeStatsFrom(uint64 timestamp) external view returns (struct INodeContinuityOracle.NodeStats)