// Copyright 2023 The AthanorLabs/atomic-swap Authors // SPDX-License-Identifier: LGPL-3.0-only package coins import ( "github.com/cockroachdb/apd/v3" ) // // Notes on the Exponent field of apd.Decimal: // * All external apd.Decimal input values come from JSON. // * apd.Decimal's unmarshalling code will throw an error if the exponent // of a value exceeds apd.MaxExponent (100,000). // * Since our software will never have an apd.Decimal value with an // exponent that can be overflowed/underflowed, panic error handling // is fine. // * Overflow checking is done and centralized here so code auditors do // do not waste time. // func increaseExponent(n *apd.Decimal, delta uint8) { delta32 := int32(delta) e := n.Exponent n.Exponent += delta32 if n.Exponent < e { panic("overflow") } } func decreaseExponent(n *apd.Decimal, delta uint8) { delta32 := int32(delta) e := n.Exponent n.Exponent -= delta32 if n.Exponent > e { panic("underflow") } }