Skip to content

Commit

Permalink
autopilot: abort renewal/refresh/formation when encountering non-exis…
Browse files Browse the repository at this point in the history
…tent output error
  • Loading branch information
ChrisSchinnerl committed Mar 25, 2024
1 parent b30999c commit d71bf80
Showing 1 changed file with 11 additions and 0 deletions.
11 changes: 11 additions & 0 deletions autopilot/contractor.go
Expand Up @@ -1436,6 +1436,8 @@ func (c *contractor) renewContract(ctx context.Context, w Worker, ci contractInf
)
if utils.IsErr(err, wallet.ErrInsufficientBalance) && !worker.IsErrHost(err) {
return api.ContractMetadata{}, false, err
} else if isNonexistentSiacoinOutputErr(err) {
return api.ContractMetadata{}, false, err
}
return api.ContractMetadata{}, true, err
}
Expand Down Expand Up @@ -1515,6 +1517,8 @@ func (c *contractor) refreshContract(ctx context.Context, w Worker, ci contractI
c.logger.Errorw("refresh failed", zap.Error(err), "hk", hk, "fcid", fcid)
if utils.IsErr(err, wallet.ErrInsufficientBalance) && !worker.IsErrHost(err) {
return api.ContractMetadata{}, false, err
} else if isNonexistentSiacoinOutputErr(err) {
return api.ContractMetadata{}, false, err
}
return api.ContractMetadata{}, true, err
}
Expand Down Expand Up @@ -1579,6 +1583,8 @@ func (c *contractor) formContract(ctx context.Context, w Worker, host hostdb.Hos
c.logger.Errorw(fmt.Sprintf("contract formation failed, err: %v", err), "hk", hk)
if strings.Contains(err.Error(), wallet.ErrInsufficientBalance.Error()) {
return api.ContractMetadata{}, false, err
} else if isNonexistentSiacoinOutputErr(err) {
return api.ContractMetadata{}, false, err
}
return api.ContractMetadata{}, true, err
}
Expand Down Expand Up @@ -1690,6 +1696,11 @@ func initialContractFundingMinMax(cfg api.AutopilotConfig) (min types.Currency,
return
}

func isNonexistentSiacoinOutputErr(err error) bool {
return utils.IsErr(err, errors.New("transaction spends a nonexisting siacoin output")) ||
utils.IsErr(err, errors.New("spends nonexistent siacoin output"))
}

func refreshPriceTable(ctx context.Context, w Worker, host *hostdb.Host) error {
// return early if the host's pricetable is not expired yet
if time.Now().Before(host.PriceTable.Expiry) {
Expand Down

0 comments on commit d71bf80

Please sign in to comment.