X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=pkg%2Fserver%2Fserver.go;h=8be10b2a0821577c1f50b7d448e34782644e16a5;hb=5e9fc897c292d0c51e263f6d8a4f6cd31da131cc;hp=0271155f406f85438856993a59ec12c7ff5ea6d9;hpb=e3a33b9736e993b64c2b869df13878da565e2986;p=epoint diff --git a/pkg/server/server.go b/pkg/server/server.go index 0271155..8be10b2 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -308,7 +308,7 @@ func handle(w *work) { } else { panic("unreachable") } - log.Printf("finish work: %s outlen: %d, errtype: %T", w.account, len(w.out), w.err) + log.Printf("finish work: %s outlen: %d", w.account, len(w.out)) delchan <- w w.sync <- 0 } @@ -429,6 +429,10 @@ func handleDebit(w *work) (c []byte, err error) { 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 @@ -461,6 +465,7 @@ func newDebitCert(w *work) (*document.DebitCert, error) { // 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 { @@ -473,8 +478,8 @@ func newDebitCert(w *work) (*document.DebitCert, error) { 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 @@ -536,6 +541,10 @@ func newCreditCert(w *work) (*document.CreditCert, error) { 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 {