packages feed

ethereum-client-haskell-0.0.2: src/Blockchain/DB/ModifyStateDB.hs

{-# 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