seekia/internal/network/fundedStatus/fundedStatus.go

122 lines
4.1 KiB
Go

// fundedStatus provides functions to check the funded status of identities, mate profiles, messages, and reports
// Some content must be funded via the account credit servers
// This package will retrieve from the verified and trusted funded status packages.
package fundedStatus
// Be aware that Funded means that the content/identity will be hosted by the network
// It may have been funded at one point in the past, but if it has expired, it is no longer considered Funded
import "seekia/internal/helpers"
import "seekia/internal/network/verifiedFundedStatus"
import "seekia/internal/network/trustedFundedStatus"
import "errors"
//Outputs:
// -bool: Status is known (it may not be fully up to date, but it at least has been checked once)
// -bool: Identity is funded status
// -error
func GetIdentityIsFundedStatus(identityHash [16]byte, networkType byte)(bool, bool, error){
isValid := helpers.VerifyNetworkType(networkType)
if (isValid == false){
networkTypeString := helpers.ConvertByteToString(networkType)
return false, false, errors.New("GetIdentityIsFundedStatus called with invalid networkType: " + networkTypeString)
}
verifiedStatusIsKnown, verifiedIdentityIsFundedStatus, _, timeOfCheckingVerified, err := verifiedFundedStatus.GetVerifiedIdentityIsFundedStatus(identityHash, networkType)
if (err != nil) { return false, false, err }
trustedStatusIsKnown, trustedIdentityIsFundedStatus, timeOfCheckingTrusted, err := trustedFundedStatus.GetTrustedIdentityIsFundedStatus(identityHash, networkType)
if (err != nil) { return false, false, err }
if (verifiedStatusIsKnown == false && trustedStatusIsKnown == false){
return false, false, nil
}
if (verifiedStatusIsKnown == true && trustedStatusIsKnown == false){
return true, verifiedIdentityIsFundedStatus, nil
}
if (verifiedStatusIsKnown == false && trustedStatusIsKnown == true){
return true, trustedIdentityIsFundedStatus, nil
}
// Both statuses are known and are the same
if (verifiedIdentityIsFundedStatus == trustedIdentityIsFundedStatus){
return true, verifiedIdentityIsFundedStatus, nil
}
// Both statuses are known, and they disagree.
// We rely on the verified status more, unless it is older than the trusted status by at least 1 day
if (timeOfCheckingTrusted > (timeOfCheckingVerified + 86400)){
return true, trustedIdentityIsFundedStatus, nil
}
return true, verifiedIdentityIsFundedStatus, nil
}
// Outputs:
// -bool: Status is known
// -bool: Profile is funded status
// -error
func GetMateProfileIsFundedStatus(profileHash [28]byte)(bool, bool, error){
statusIsKnown, profileIsFunded, _, _, err := verifiedFundedStatus.GetVerifiedMateProfileIsFundedStatus(profileHash)
if (err != nil) { return false, false, err }
if (statusIsKnown == true){
return true, profileIsFunded, nil
}
statusIsKnown, profileIsFunded, err = trustedFundedStatus.GetTrustedMateProfileIsFundedStatus(profileHash)
if (err != nil) { return false, false, err }
if (statusIsKnown == true){
return true, profileIsFunded, nil
}
return false, false, nil
}
//Outputs:
// -bool: Status is known
// -bool: Message is funded
// -error
func GetMessageIsFundedStatus(messageHash [26]byte)(bool, bool, error){
statusIsKnown, messageIsFunded, _, _, err := verifiedFundedStatus.GetVerifiedMessageIsFundedStatus(messageHash)
if (err != nil) { return false, false, err }
if (statusIsKnown == true){
return true, messageIsFunded, nil
}
statusIsKnown, messageIsFunded, err = trustedFundedStatus.GetTrustedMessageIsFundedStatus(messageHash)
if (err != nil) { return false, false, err }
if (statusIsKnown == true){
return true, messageIsFunded, nil
}
return false, false, nil
}
func GetReportIsFundedStatus(reportHash [30]byte)(bool, bool, error){
statusIsKnown, reportIsFunded, _, _, err := verifiedFundedStatus.GetVerifiedReportIsFundedStatus(reportHash)
if (err != nil) { return false, false, err }
if (statusIsKnown == true){
return true, reportIsFunded, nil
}
statusIsKnown, reportIsFunded, err = trustedFundedStatus.GetTrustedReportIsFundedStatus(reportHash)
if (err != nil) { return false, false, err }
if (statusIsKnown == true){
return true, reportIsFunded, nil
}
return false, false, nil
}