(ctx sdk.Context, provider sdk.AccAddress, tier vtypes.VerificationTier)
| 1277 | } |
| 1278 | |
| 1279 | func (k *keeper) validateProviderPrerequisites(ctx sdk.Context, provider sdk.AccAddress, tier vtypes.VerificationTier) error { |
| 1280 | if !vtypes.TierRequiresSnapshot(tier) { |
| 1281 | return nil |
| 1282 | } |
| 1283 | |
| 1284 | params := k.GetParams(ctx) |
| 1285 | if err := k.validateProviderAge(ctx, provider, tier, params); err != nil { |
| 1286 | return err |
| 1287 | } |
| 1288 | if err := k.validateProviderLeaseCompletion(ctx, provider, tier, params); err != nil { |
| 1289 | return err |
| 1290 | } |
| 1291 | |
| 1292 | snapshot, found := k.GetProviderSnapshot(ctx, provider) |
| 1293 | if !found { |
| 1294 | return moduletypes.ErrSnapshotNonCompliant |
| 1295 | } |
| 1296 | if snapshot.Suspended || snapshot.ComplianceDeadline.Before(ctx.BlockTime()) { |
| 1297 | return moduletypes.ErrProviderSnapshotSuspended |
| 1298 | } |
| 1299 | |
| 1300 | var bond vtypes.ProviderBondRecord |
| 1301 | if vtypes.TierRequiresProviderBond(tier) { |
| 1302 | var found bool |
| 1303 | bond, found = k.GetProviderBond(ctx, provider) |
| 1304 | if !found { |
| 1305 | return moduletypes.ErrInsufficientProviderBond |
| 1306 | } |
| 1307 | required := requiredProviderBond(params, tier, snapshot.ResourceSummary) |
| 1308 | if err := requireCoinAtLeast(bond.BondedAmount, required, moduletypes.ErrInsufficientProviderBond); err != nil { |
| 1309 | return err |
| 1310 | } |
| 1311 | } |
| 1312 | if err := k.validateProviderSlashingHistory(ctx, tier, params, bond); err != nil { |
| 1313 | return err |
| 1314 | } |
| 1315 | if vtypes.TierAtLeast(tier, vtypes.TierTrusted) && !k.hasContinuousL3History(ctx, provider, params.MinL3DurationForL4) { |
| 1316 | return moduletypes.ErrInsufficientL3History |
| 1317 | } |
| 1318 | |
| 1319 | return nil |
| 1320 | } |
| 1321 | |
| 1322 | func (k *keeper) validateProviderLeaseCompletion(ctx sdk.Context, provider sdk.AccAddress, tier vtypes.VerificationTier, params vtypes.Params) error { |
| 1323 | if k.market == nil || !vtypes.TierAtLeast(tier, vtypes.TierEstablished) { |
no test coverage detected