module Anoma.Logic;
import Stdlib.Prelude open;
import Anoma.Internal.Transaction as Internal;
import Anoma.Transaction as Transaction open using {Transaction; module Transaction};
import Data.Map as Map;
module AuxMutual;
mkLogicFunction (f : Transaction -> Bool) : Internal.Transaction -> Bool :=
f ∘ mkTransaction;
mkDeltaComponent : Internal.DeltaComponent -> Transaction.Kind × Int
| (Internal.DeltaComponent.mk denom sign amount) :=
let
k := Transaction.Kind.Private.mk denom;
quantity := if sign (ofNat amount) (negNat amount);
in k, quantity;
mkDelta (d : Internal.Delta) : Transaction.Delta :=
Transaction.Delta.Private.mk (Map.fromList (map mkDeltaComponent d));
terminating
mkResource : Internal.Resource -> Transaction.Resource
| (Internal.Resource.mk logic label quantity data eph nonce npk rseed) :=
Transaction.Resource.mk
λ {r t := logic (mkInternalResource r) (mkInternalTransaction t)}
label
quantity
data
eph
nonce
npk
rseed;
terminating
mkTransaction : Internal.Transaction -> Transaction
| (Internal.Transaction.mk roots commitments nullifiers proofs delta extra preference) :=
Transaction.mk
roots
commitments
nullifiers
(map mkResource proofs)
(mkDelta delta)
extra
preference;
terminating
mkInternalDeltaComponent : Transaction.Kind × Int -> Internal.DeltaComponent
| (kind, quantity) :=
Internal.DeltaComponent.mk@{
denom := Transaction.Kind.Private.Kind.id kind;
sign := quantity >= 0;
amount := abs quantity
};
terminating
mkInternalDelta (d : Transaction.Delta) : Internal.Delta :=
map
mkInternalDeltaComponent
(Map.toList (Transaction.Delta.Private.Delta.unDelta d));
terminating
mkInternalResource : Transaction.Resource -> Internal.Resource
| (Transaction.Resource.mk logic label quantity data eph nonce npk rseed) :=
Internal.Resource.mk
λ {r t := logic (mkResource r) (mkTransaction t)}
label
quantity
data
eph
nonce
npk
rseed;
terminating
mkInternalTransaction : Transaction -> Internal.Transaction
| (Transaction.mk roots commitments nullifiers proofs delta extra preference) :=
Internal.Transaction.mk
roots
commitments
nullifiers
(map mkInternalResource proofs)
(mkInternalDelta delta)
extra
preference;
end;
open AuxMutual using {mkLogicFunction; mkInternalTransaction} public;
Last modified on 2024-04-18 10:12 UTC