{-# LANGUAGE OverloadedStrings #-}
module Blockchain.DB.ModifyStateDB (
putAddressStates,
addToBalance,
addNonce,
pay
) where
--import Text.PrettyPrint.ANSI.Leijen hiding ((<$>))
import Blockchain.Context
import Blockchain.Data.Address
import Blockchain.Data.AddressState
--import Debug.Trace
putAddressStates::[Address]->AddressState->ContextM ()
putAddressStates [] _ = return ()
putAddressStates (address:rest) addressState = do
putAddressState address addressState
putAddressStates rest addressState
addToBalance::Address->Integer->ContextM ()
addToBalance address val = do
addressState <- getAddressState address
putAddressState address addressState{ balance = balance addressState + fromIntegral val }
addNonce::Address->ContextM ()
addNonce address = do
addressState <- getAddressState address
putAddressState address addressState{ addressStateNonce = addressStateNonce addressState + 1 }
pay::Address->Address->Integer->ContextM ()
pay fromAddr toAddr val = do
addToBalance fromAddr (-val)
addToBalance toAddr val