seekia/internal/messaging/secretInboxEpoch/secretInboxEpoch.go

71 lines
2.5 KiB
Go
Raw Normal View History

// secretInboxEpoch provides a function to calculate start and end times of secret inbox epochs.
// A secret inbox epoch is the time period during which a secret inbox is active.
package secretInboxEpoch
// When a secret inbox is active, the sender should send their messages to the inbox.
// Once the epoch has passed, the recipient will check the inbox to a sufficient degree and then stop checking it.
// Here is an example of how the epoch time works
// Example epoch origin time = 100
// Example Epoch Duration = 10
// Example epochs:
// 1st epoch start time: 100
// 1st epoch end time: 110
// 2nd epoch start time: 111
// 2nd epoch end time: 121
// 3rd epoch start time: 122
// 3rd epoch end time: 132
// ...
import "seekia/internal/helpers"
import "seekia/internal/parameters/getParameters"
import "errors"
// This is a unix time value from which the secret inbox epochs are calculated.
// This value should never change (once the Seekia network goes live)
const secretInboxEpochOriginTime int64 = 1670000000
// This function returns the epoch start and end times at the time of the provided messageSentTime
//Outputs:
// -bool: Parameters exist
// -int64: Current epoch start time
// -int64: Current epoch end time
// -int64: Next epoch start time
// -int64: Next epoch start time
// -error
func GetSecretInboxEpochStartAndEndTimes(networkType byte, messageSentTime int64)(bool, int64, int64, int64, int64, error){
isValid := helpers.VerifyNetworkType(networkType)
if (isValid == false){
networkTypeString := helpers.ConvertByteToString(networkType)
return false, 0, 0, 0, 0, errors.New("GetSecretInboxEpochStartAndEndTimes called with invalid networkType: " + networkTypeString)
}
if (messageSentTime < secretInboxEpochOriginTime){
return false, 0, 0, 0, 0, errors.New("GetSecretInboxEpochStartAndEndTimes called with invalid messageSentTime.")
}
parametersExist, epochDuration, err := getParameters.GetSecretInboxEpochDuration(networkType, messageSentTime)
if (err != nil) { return false, 0, 0, 0, 0, err }
if (parametersExist == false){
return false, 0, 0, 0, 0, nil
}
remainder := (messageSentTime - secretInboxEpochOriginTime) % (epochDuration + 1)
currentEpochStartTime := messageSentTime - remainder
currentEpochEndTime := currentEpochStartTime + epochDuration
nextEpochStartTime := currentEpochEndTime + 1
nextEpochEndTime := nextEpochStartTime + epochDuration
return true, currentEpochStartTime, currentEpochEndTime, nextEpochStartTime, nextEpochEndTime, nil
}