return
}
+func isIssuer(c *document.Cert) bool {
+ return c.Issuer == c.Holder
+}
+
func newDebitCert(w *work) (*document.DebitCert, error) {
cert := new(document.DebitCert)
cert.Holder = w.draft.Drawer
// internal error
return nil, err
}
+ // TODO: make sure oldcert and newcert cannot become inconsistent
// TODO: this is a hack
oldcert, err := document.ToCert(iv)
if err != nil {
if cert.Balance <= -IntLimit {
return nil, fmt.Errorf("balance limit exceeded: %d", cert.Balance)
}
- if oldcert.Balance > 0 && cert.Balance < 0 {
- return nil, fmt.Errorf("insufficient funds: %d", oldcert.Balance)
+ if !isIssuer(&cert.Cert) && cert.Balance < 0 {
+ return nil, fmt.Errorf("insufficient funds: %d, draft: %d", oldcert.Balance, cert.Difference)
}
cert.LastDebitSerial = oldcert.LastDebitSerial
cert.LastCreditSerial = oldcert.LastCreditSerial
if cert.Balance >= IntLimit {
return nil, fmt.Errorf("balance limit exceeded: %d", cert.Balance)
}
+ // sanity check
+ if isIssuer(&cert.Cert) && cert.Balance > 0 {
+ return nil, fmt.Errorf("internal error")
+ }
cert.LastDebitSerial = oldcert.LastDebitSerial
cert.LastCreditSerial = oldcert.LastCreditSerial
if _, ok := iv.(*document.DebitCert); ok {