From 2d42b14a1d65111a187b553d3d4393ad091e917f Mon Sep 17 00:00:00 2001
From: Vsevolod Brekelov <vbrekelov@nspcc.ru>
Date: Thu, 28 Nov 2019 19:06:09 +0300
Subject: [PATCH] core: renames entities-> state and removed State prefix

---
 pkg/core/blockchain.go                        | 26 +++----
 pkg/core/blockchainer.go                      | 12 +--
 pkg/core/dao.go                               | 73 +++++++++----------
 pkg/core/dao_test.go                          | 24 +++---
 pkg/core/entities/coin_state.go               | 12 ---
 pkg/core/interop_neo.go                       | 40 +++++-----
 pkg/core/interop_neo_test.go                  | 16 ++--
 pkg/core/interop_system.go                    |  8 +-
 pkg/core/interops.go                          |  6 +-
 .../account_state.go => state/account.go}     | 22 +++---
 .../account_test.go}                          |  8 +-
 .../asset_state.go => state/asset.go}         | 12 +--
 .../asset_test.go}                            | 10 +--
 pkg/core/state/coin.go                        | 12 +++
 .../contract_state.go => state/contract.go}   | 20 ++---
 .../contract_test.go}                         | 10 +--
 .../{entities => state}/notification_event.go |  2 +-
 .../notification_event_test.go                |  2 +-
 pkg/core/{entities => state}/storage_item.go  |  2 +-
 .../{entities => state}/storage_item_test.go  |  2 +-
 .../validator_state.go => state/validator.go} | 26 +++----
 .../validator_test.go}                        | 12 +--
 pkg/core/unspent_coin_state.go                | 16 ++--
 pkg/core/unspent_coint_state_test.go          | 14 ++--
 pkg/network/helper_test.go                    | 12 +--
 pkg/rpc/client.go                             |  4 +-
 pkg/rpc/neoScanBalanceGetter.go               |  4 +-
 pkg/rpc/neoScanTypes.go                       |  4 +-
 pkg/rpc/wrappers/account_state.go             |  8 +-
 pkg/rpc/wrappers/asset_state.go               |  8 +-
 pkg/rpc/wrappers/unspents.go                  | 16 ++--
 31 files changed, 221 insertions(+), 222 deletions(-)
 delete mode 100644 pkg/core/entities/coin_state.go
 rename pkg/core/{entities/account_state.go => state/account.go} (81%)
 rename pkg/core/{entities/account_state_test.go => state/account_test.go} (93%)
 rename pkg/core/{entities/asset_state.go => state/asset.go} (85%)
 rename pkg/core/{entities/asset_state_test.go => state/asset_test.go} (85%)
 create mode 100644 pkg/core/state/coin.go
 rename pkg/core/{entities/contract_state.go => state/contract.go} (78%)
 rename pkg/core/{entities/contract_state_test.go => state/contract_test.go} (90%)
 rename pkg/core/{entities => state}/notification_event.go (98%)
 rename pkg/core/{entities => state}/notification_event_test.go (98%)
 rename pkg/core/{entities => state}/storage_item.go (96%)
 rename pkg/core/{entities => state}/storage_item_test.go (97%)
 rename pkg/core/{entities/validator_state.go => state/validator.go} (74%)
 rename pkg/core/{entities/validator_state_test.go => state/validator_test.go} (89%)

diff --git a/pkg/core/blockchain.go b/pkg/core/blockchain.go
index 9228a4c68..87ca8a2f1 100644
--- a/pkg/core/blockchain.go
+++ b/pkg/core/blockchain.go
@@ -11,7 +11,7 @@ import (
 	"time"
 
 	"github.com/CityOfZion/neo-go/config"
-	"github.com/CityOfZion/neo-go/pkg/core/entities"
+	"github.com/CityOfZion/neo-go/pkg/core/state"
 	"github.com/CityOfZion/neo-go/pkg/core/storage"
 	"github.com/CityOfZion/neo-go/pkg/core/transaction"
 	"github.com/CityOfZion/neo-go/pkg/crypto/keys"
@@ -378,7 +378,7 @@ func (bc *Blockchain) storeBlock(block *Block) error {
 				if err != nil {
 					return err
 				}
-				unspent.states[input.PrevIndex] = entities.CoinStateSpent
+				unspent.states[input.PrevIndex] = state.CoinSpent
 				if err = cache.PutUnspentCoinState(input.PrevHash, unspent); err != nil {
 					return err
 				}
@@ -439,7 +439,7 @@ func (bc *Blockchain) storeBlock(block *Block) error {
 		// Process the underlying type of the TX.
 		switch t := tx.Data.(type) {
 		case *transaction.RegisterTX:
-			err := cache.PutAssetState(&entities.AssetState{
+			err := cache.PutAssetState(&state.Asset{
 				ID:         tx.Hash(),
 				AssetType:  t.AssetType,
 				Name:       t.Name,
@@ -499,7 +499,7 @@ func (bc *Blockchain) storeBlock(block *Block) error {
 			if t.NeedStorage {
 				properties |= smartcontract.HasStorage
 			}
-			contract := &entities.ContractState{
+			contract := &state.Contract{
 				Script:      t.Script,
 				ParamList:   t.ParamList,
 				ReturnType:  t.ReturnType,
@@ -555,7 +555,7 @@ func (bc *Blockchain) storeBlock(block *Block) error {
 					"err":   err,
 				}).Warn("contract invocation failed")
 			}
-			aer := &entities.AppExecResult{
+			aer := &state.AppExecResult{
 				TxHash:      tx.Hash(),
 				Trigger:     trigger.Application,
 				VMState:     v.State(),
@@ -588,7 +588,7 @@ func processOutputs(tx *transaction.Transaction, dao *dao) error {
 		if err != nil {
 			return err
 		}
-		account.Balances[output.AssetID] = append(account.Balances[output.AssetID], entities.UnspentBalance{
+		account.Balances[output.AssetID] = append(account.Balances[output.AssetID], state.UnspentBalance{
 			Tx:    tx.Hash(),
 			Index: uint16(index),
 			Value: output.Amount,
@@ -739,12 +739,12 @@ func (bc *Blockchain) GetTransaction(hash util.Uint256) (*transaction.Transactio
 }
 
 // GetStorageItem returns an item from storage.
-func (bc *Blockchain) GetStorageItem(scripthash util.Uint160, key []byte) *entities.StorageItem {
+func (bc *Blockchain) GetStorageItem(scripthash util.Uint160, key []byte) *state.StorageItem {
 	return bc.dao.GetStorageItem(scripthash, key)
 }
 
 // GetStorageItems returns all storage items for a given scripthash.
-func (bc *Blockchain) GetStorageItems(hash util.Uint160) (map[string]*entities.StorageItem, error) {
+func (bc *Blockchain) GetStorageItems(hash util.Uint160) (map[string]*state.StorageItem, error) {
 	return bc.dao.GetStorageItems(hash)
 }
 
@@ -830,7 +830,7 @@ func (bc *Blockchain) HeaderHeight() uint32 {
 }
 
 // GetAssetState returns asset state from its assetID.
-func (bc *Blockchain) GetAssetState(assetID util.Uint256) *entities.AssetState {
+func (bc *Blockchain) GetAssetState(assetID util.Uint256) *state.Asset {
 	asset, err := bc.dao.GetAssetState(assetID)
 	if asset == nil && err != storage.ErrKeyNotFound {
 		log.Warnf("failed to get asset state %s : %s", assetID, err)
@@ -839,7 +839,7 @@ func (bc *Blockchain) GetAssetState(assetID util.Uint256) *entities.AssetState {
 }
 
 // GetContractState returns contract by its script hash.
-func (bc *Blockchain) GetContractState(hash util.Uint160) *entities.ContractState {
+func (bc *Blockchain) GetContractState(hash util.Uint160) *state.Contract {
 	contract, err :=  bc.dao.GetContractState(hash)
 	if contract == nil && err != storage.ErrKeyNotFound {
 		log.Warnf("failed to get contract state: %s", err)
@@ -848,7 +848,7 @@ func (bc *Blockchain) GetContractState(hash util.Uint160) *entities.ContractStat
 }
 
 // GetAccountState returns the account state from its script hash.
-func (bc *Blockchain) GetAccountState(scriptHash util.Uint160) *entities.AccountState {
+func (bc *Blockchain) GetAccountState(scriptHash util.Uint160) *state.Account {
 	as, err := bc.dao.GetAccountState(scriptHash)
 	if as == nil && err != storage.ErrKeyNotFound {
 		log.Warnf("failed to get account state: %s", err)
@@ -1166,7 +1166,7 @@ func (bc *Blockchain) GetValidators(txes ...*transaction.Transaction) ([]*keys.P
 				if err != nil {
 					return nil, err
 				}
-				accountState.Balances[output.AssetID] = append(accountState.Balances[output.AssetID], entities.UnspentBalance{
+				accountState.Balances[output.AssetID] = append(accountState.Balances[output.AssetID], state.UnspentBalance{
 					Tx:    tx.Hash(),
 					Index: uint16(index),
 					Value: output.Amount,
@@ -1250,7 +1250,7 @@ func (bc *Blockchain) GetValidators(txes ...*transaction.Transaction) ([]*keys.P
 
 	validators := cache.GetValidators()
 
-	count := entities.GetValidatorsWeightedAverage(validators)
+	count := state.GetValidatorsWeightedAverage(validators)
 	standByValidators, err := bc.GetStandByValidators()
 	if err != nil {
 		return nil, err
diff --git a/pkg/core/blockchainer.go b/pkg/core/blockchainer.go
index 9e87ff209..9d42d0af6 100644
--- a/pkg/core/blockchainer.go
+++ b/pkg/core/blockchainer.go
@@ -2,7 +2,7 @@ package core
 
 import (
 	"github.com/CityOfZion/neo-go/config"
-	"github.com/CityOfZion/neo-go/pkg/core/entities"
+	"github.com/CityOfZion/neo-go/pkg/core/state"
 	"github.com/CityOfZion/neo-go/pkg/core/storage"
 	"github.com/CityOfZion/neo-go/pkg/core/transaction"
 	"github.com/CityOfZion/neo-go/pkg/crypto/keys"
@@ -20,19 +20,19 @@ type Blockchainer interface {
 	Close()
 	HeaderHeight() uint32
 	GetBlock(hash util.Uint256) (*Block, error)
-	GetContractState(hash util.Uint160) *entities.ContractState
+	GetContractState(hash util.Uint160) *state.Contract
 	GetHeaderHash(int) util.Uint256
 	GetHeader(hash util.Uint256) (*Header, error)
 	CurrentHeaderHash() util.Uint256
 	CurrentBlockHash() util.Uint256
 	HasBlock(util.Uint256) bool
 	HasTransaction(util.Uint256) bool
-	GetAssetState(util.Uint256) *entities.AssetState
-	GetAccountState(util.Uint160) *entities.AccountState
+	GetAssetState(util.Uint256) *state.Asset
+	GetAccountState(util.Uint160) *state.Account
 	GetValidators(txes... *transaction.Transaction) ([]*keys.PublicKey, error)
 	GetScriptHashesForVerifying(*transaction.Transaction) ([]util.Uint160, error)
-	GetStorageItem(scripthash util.Uint160, key []byte) *entities.StorageItem
-	GetStorageItems(hash util.Uint160) (map[string]*entities.StorageItem, error)
+	GetStorageItem(scripthash util.Uint160, key []byte) *state.StorageItem
+	GetStorageItems(hash util.Uint160) (map[string]*state.StorageItem, error)
 	GetTestVM() (*vm.VM, storage.Store)
 	GetTransaction(util.Uint256) (*transaction.Transaction, uint32, error)
 	GetUnspentCoinState(util.Uint256) *UnspentCoinState
diff --git a/pkg/core/dao.go b/pkg/core/dao.go
index bafe70b73..76a27ab3a 100644
--- a/pkg/core/dao.go
+++ b/pkg/core/dao.go
@@ -6,7 +6,7 @@ import (
 	"fmt"
 	"sort"
 
-	"github.com/CityOfZion/neo-go/pkg/core/entities"
+	"github.com/CityOfZion/neo-go/pkg/core/state"
 	"github.com/CityOfZion/neo-go/pkg/core/storage"
 	"github.com/CityOfZion/neo-go/pkg/core/transaction"
 	"github.com/CityOfZion/neo-go/pkg/crypto/keys"
@@ -42,15 +42,15 @@ func (dao *dao) Put(entity io.Serializable, key []byte) error {
 
 // -- start accounts.
 
-// GetAccountStateOrNew retrieves AccountState from temporary or persistent Store
+// GetAccountStateOrNew retrieves Account from temporary or persistent Store
 // or creates a new one if it doesn't exist and persists it.
-func (dao *dao) GetAccountStateOrNew(hash util.Uint160) (*entities.AccountState, error) {
+func (dao *dao) GetAccountStateOrNew(hash util.Uint160) (*state.Account, error) {
 	account, err := dao.GetAccountState(hash)
 	if err != nil {
 		if err != storage.ErrKeyNotFound {
 			return nil, err
 		}
-		account = entities.NewAccountState(hash)
+		account = state.NewAccount(hash)
 		if err = dao.PutAccountState(account); err != nil {
 			return nil, err
 		}
@@ -58,10 +58,10 @@ func (dao *dao) GetAccountStateOrNew(hash util.Uint160) (*entities.AccountState,
 	return account, nil
 }
 
-// GetAccountState returns AccountState from the given Store if it's
+// GetAccountState returns Account from the given Store if it's
 // present there. Returns nil otherwise.
-func (dao *dao) GetAccountState(hash util.Uint160) (*entities.AccountState, error) {
-	account := &entities.AccountState{}
+func (dao *dao) GetAccountState(hash util.Uint160) (*state.Account, error) {
+	account := &state.Account{}
 	key := storage.AppendPrefix(storage.STAccount, hash.BytesBE())
 	err := dao.GetAndDecode(account, key)
 	if err != nil {
@@ -70,8 +70,7 @@ func (dao *dao) GetAccountState(hash util.Uint160) (*entities.AccountState, erro
 	return account, err
 }
 
-// PutAccountState puts given AccountState into the given store.
-func (dao *dao) PutAccountState(as *entities.AccountState) error {
+func (dao *dao) PutAccountState(as *state.Account) error {
 	key := storage.AppendPrefix(storage.STAccount, as.ScriptHash.BytesBE())
 	return dao.Put(as, key)
 }
@@ -81,8 +80,8 @@ func (dao *dao) PutAccountState(as *entities.AccountState) error {
 // -- start assets.
 
 // GetAssetState returns given asset state as recorded in the given store.
-func (dao *dao) GetAssetState(assetID util.Uint256) (*entities.AssetState, error) {
-	asset := &entities.AssetState{}
+func (dao *dao) GetAssetState(assetID util.Uint256) (*state.Asset, error) {
+	asset := &state.Asset{}
 	key := storage.AppendPrefix(storage.STAsset, assetID.BytesBE())
 	err := dao.GetAndDecode(asset, key)
 	if err != nil {
@@ -95,7 +94,7 @@ func (dao *dao) GetAssetState(assetID util.Uint256) (*entities.AssetState, error
 }
 
 // PutAssetState puts given asset state into the given store.
-func (dao *dao) PutAssetState(as *entities.AssetState) error {
+func (dao *dao) PutAssetState(as *state.Asset) error {
 	key := storage.AppendPrefix(storage.STAsset, as.ID.BytesBE())
 	return dao.Put(as, key)
 }
@@ -106,8 +105,8 @@ func (dao *dao) PutAssetState(as *entities.AssetState) error {
 
 // GetContractState returns contract state as recorded in the given
 // store by the given script hash.
-func (dao *dao) GetContractState(hash util.Uint160) (*entities.ContractState, error) {
-	contract := &entities.ContractState{}
+func (dao *dao) GetContractState(hash util.Uint160) (*state.Contract, error) {
+	contract := &state.Contract{}
 	key := storage.AppendPrefix(storage.STContract, hash.BytesBE())
 	err := dao.GetAndDecode(contract, key)
 	if err != nil {
@@ -121,7 +120,7 @@ func (dao *dao) GetContractState(hash util.Uint160) (*entities.ContractState, er
 }
 
 // PutContractState puts given contract state into the given store.
-func (dao *dao) PutContractState(cs *entities.ContractState) error {
+func (dao *dao) PutContractState(cs *state.Contract) error {
 	key := storage.AppendPrefix(storage.STContract, cs.ScriptHash().BytesBE())
 	return dao.Put(cs, key)
 }
@@ -146,7 +145,7 @@ func (dao *dao) GetUnspentCoinStateOrNew(hash util.Uint256) (*UnspentCoinState,
 			return nil, err
 		}
 		unspent = &UnspentCoinState{
-			states: []entities.CoinState{},
+			states: []state.Coin{},
 		}
 		if err = dao.PutUnspentCoinState(hash, unspent); err != nil {
 			return nil, err
@@ -221,13 +220,13 @@ func (dao *dao) DeleteSpentCoinState(hash util.Uint256) error {
 // -- start validator.
 
 // GetValidatorStateOrNew gets validator from store or created new one in case of error.
-func (dao *dao) GetValidatorStateOrNew(publicKey *keys.PublicKey) (*entities.ValidatorState, error) {
+func (dao *dao) GetValidatorStateOrNew(publicKey *keys.PublicKey) (*state.Validator, error) {
 	validatorState, err := dao.GetValidatorState(publicKey)
 	if err != nil {
 		if err != storage.ErrKeyNotFound {
 			return nil, err
 		}
-		validatorState = &entities.ValidatorState{PublicKey: publicKey}
+		validatorState = &state.Validator{PublicKey: publicKey}
 		if err = dao.PutValidatorState(validatorState); err != nil {
 			return nil, err
 		}
@@ -237,11 +236,11 @@ func (dao *dao) GetValidatorStateOrNew(publicKey *keys.PublicKey) (*entities.Val
 }
 
 // GetValidators returns all validators from store.
-func (dao *dao) GetValidators() []*entities.ValidatorState {
-	var validators []*entities.ValidatorState
+func (dao *dao) GetValidators() []*state.Validator {
+	var validators []*state.Validator
 	dao.store.Seek(storage.STValidator.Bytes(), func(k, v []byte) {
 		r := io.NewBinReaderFromBuf(v)
-		validator := &entities.ValidatorState{}
+		validator := &state.Validator{}
 		validator.DecodeBinary(r)
 		if r.Err != nil {
 			return
@@ -252,8 +251,8 @@ func (dao *dao) GetValidators() []*entities.ValidatorState {
 }
 
 // GetValidatorState returns validator by publicKey.
-func (dao *dao) GetValidatorState(publicKey *keys.PublicKey) (*entities.ValidatorState, error) {
-	validatorState := &entities.ValidatorState{}
+func (dao *dao) GetValidatorState(publicKey *keys.PublicKey) (*state.Validator, error) {
+	validatorState := &state.Validator{}
 	key := storage.AppendPrefix(storage.STValidator, publicKey.Bytes())
 	err := dao.GetAndDecode(validatorState, key)
 	if err != nil {
@@ -262,14 +261,14 @@ func (dao *dao) GetValidatorState(publicKey *keys.PublicKey) (*entities.Validato
 	return validatorState, nil
 }
 
-// PutValidatorState puts given ValidatorState into the given store.
-func (dao *dao) PutValidatorState(vs *entities.ValidatorState) error {
+// PutValidatorState puts given Validator into the given store.
+func (dao *dao) PutValidatorState(vs *state.Validator) error {
 	key := storage.AppendPrefix(storage.STValidator, vs.PublicKey.Bytes())
 	return dao.Put(vs, key)
 }
 
-// DeleteValidatorState deletes given ValidatorState into the given store.
-func (dao *dao) DeleteValidatorState(vs *entities.ValidatorState) error {
+// DeleteValidatorState deletes given Validator into the given store.
+func (dao *dao) DeleteValidatorState(vs *state.Validator) error {
 	key := storage.AppendPrefix(storage.STValidator, vs.PublicKey.Bytes())
 	return dao.store.Delete(key)
 }
@@ -280,8 +279,8 @@ func (dao *dao) DeleteValidatorState(vs *entities.ValidatorState) error {
 
 // GetAppExecResult gets application execution result from the
 // given store.
-func (dao *dao) GetAppExecResult(hash util.Uint256) (*entities.AppExecResult, error) {
-	aer := &entities.AppExecResult{}
+func (dao *dao) GetAppExecResult(hash util.Uint256) (*state.AppExecResult, error) {
+	aer := &state.AppExecResult{}
 	key := storage.AppendPrefix(storage.STNotification, hash.BytesBE())
 	err := dao.GetAndDecode(aer, key)
 	if err != nil {
@@ -292,7 +291,7 @@ func (dao *dao) GetAppExecResult(hash util.Uint256) (*entities.AppExecResult, er
 
 // PutAppExecResult puts given application execution result into the
 // given store.
-func (dao *dao) PutAppExecResult(aer *entities.AppExecResult) error {
+func (dao *dao) PutAppExecResult(aer *state.AppExecResult) error {
 	key := storage.AppendPrefix(storage.STNotification, aer.TxHash.BytesBE())
 	return dao.Put(aer, key)
 }
@@ -302,14 +301,14 @@ func (dao *dao) PutAppExecResult(aer *entities.AppExecResult) error {
 // -- start storage item.
 
 // GetStorageItem returns StorageItem if it exists in the given Store.
-func (dao *dao) GetStorageItem(scripthash util.Uint160, key []byte) *entities.StorageItem {
+func (dao *dao) GetStorageItem(scripthash util.Uint160, key []byte) *state.StorageItem {
 	b, err := dao.store.Get(makeStorageItemKey(scripthash, key))
 	if err != nil {
 		return nil
 	}
 	r := io.NewBinReaderFromBuf(b)
 
-	si := &entities.StorageItem{}
+	si := &state.StorageItem{}
 	si.DecodeBinary(r)
 	if r.Err != nil {
 		return nil
@@ -320,7 +319,7 @@ func (dao *dao) GetStorageItem(scripthash util.Uint160, key []byte) *entities.St
 
 // PutStorageItem puts given StorageItem for given script with given
 // key into the given Store.
-func (dao *dao) PutStorageItem(scripthash util.Uint160, key []byte, si *entities.StorageItem) error {
+func (dao *dao) PutStorageItem(scripthash util.Uint160, key []byte, si *state.StorageItem) error {
 	return dao.Put(si, makeStorageItemKey(scripthash, key))
 }
 
@@ -331,8 +330,8 @@ func (dao *dao) DeleteStorageItem(scripthash util.Uint160, key []byte) error {
 }
 
 // GetStorageItems returns all storage items for a given scripthash.
-func (dao *dao) GetStorageItems(hash util.Uint160) (map[string]*entities.StorageItem, error) {
-	var siMap = make(map[string]*entities.StorageItem)
+func (dao *dao) GetStorageItems(hash util.Uint160) (map[string]*state.StorageItem, error) {
+	var siMap = make(map[string]*state.StorageItem)
 	var err error
 
 	saveToMap := func(k, v []byte) {
@@ -340,7 +339,7 @@ func (dao *dao) GetStorageItems(hash util.Uint160) (map[string]*entities.Storage
 			return
 		}
 		r := io.NewBinReaderFromBuf(v)
-		si := &entities.StorageItem{}
+		si := &state.StorageItem{}
 		si.DecodeBinary(r)
 		if r.Err != nil {
 			err = r.Err
@@ -546,7 +545,7 @@ func (dao *dao) IsDoubleSpend(tx *transaction.Transaction) bool {
 			return false
 		}
 		for _, input := range inputs {
-			if int(input.PrevIndex) >= len(unspent.states) || unspent.states[input.PrevIndex] == entities.CoinStateSpent {
+			if int(input.PrevIndex) >= len(unspent.states) || unspent.states[input.PrevIndex] == state.CoinSpent {
 				return true
 			}
 		}
diff --git a/pkg/core/dao_test.go b/pkg/core/dao_test.go
index 1bc2dbfff..7c014cfe7 100644
--- a/pkg/core/dao_test.go
+++ b/pkg/core/dao_test.go
@@ -3,7 +3,7 @@ package core
 import (
 	"testing"
 
-	"github.com/CityOfZion/neo-go/pkg/core/entities"
+	"github.com/CityOfZion/neo-go/pkg/core/state"
 	"github.com/CityOfZion/neo-go/pkg/core/storage"
 	"github.com/CityOfZion/neo-go/pkg/core/testutil"
 	"github.com/CityOfZion/neo-go/pkg/core/transaction"
@@ -53,7 +53,7 @@ func TestGetAccountStateOrNew_New(t *testing.T) {
 func TestPutAndGetAccountStateOrNew(t *testing.T) {
 	dao := &dao{store: storage.NewMemCachedStore(storage.NewMemoryStore())}
 	hash := testutil.RandomUint160()
-	accountState := &entities.AccountState{ScriptHash: hash}
+	accountState := &state.Account{ScriptHash: hash}
 	err := dao.PutAccountState(accountState)
 	require.NoError(t, err)
 	gotAccount, err := dao.GetAccountStateOrNew(hash)
@@ -64,7 +64,7 @@ func TestPutAndGetAccountStateOrNew(t *testing.T) {
 func TestPutAndGetAssetState(t *testing.T) {
 	dao := &dao{store: storage.NewMemCachedStore(storage.NewMemoryStore())}
 	id := testutil.RandomUint256()
-	assetState := &entities.AssetState{ID: id, Owner: keys.PublicKey{}}
+	assetState := &state.Asset{ID: id, Owner: keys.PublicKey{}}
 	err := dao.PutAssetState(assetState)
 	require.NoError(t, err)
 	gotAssetState, err := dao.GetAssetState(id)
@@ -74,7 +74,7 @@ func TestPutAndGetAssetState(t *testing.T) {
 
 func TestPutAndGetContractState(t *testing.T) {
 	dao := &dao{store: storage.NewMemCachedStore(storage.NewMemoryStore())}
-	contractState := &entities.ContractState{Script: []byte{}, ParamList:[]smartcontract.ParamType{}}
+	contractState := &state.Contract{Script: []byte{}, ParamList:[]smartcontract.ParamType{}}
 	hash := contractState.ScriptHash()
 	err := dao.PutContractState(contractState)
 	require.NoError(t, err)
@@ -85,7 +85,7 @@ func TestPutAndGetContractState(t *testing.T) {
 
 func TestDeleteContractState(t *testing.T) {
 	dao := &dao{store: storage.NewMemCachedStore(storage.NewMemoryStore())}
-	contractState := &entities.ContractState{Script: []byte{}, ParamList:[]smartcontract.ParamType{}}
+	contractState := &state.Contract{Script: []byte{}, ParamList:[]smartcontract.ParamType{}}
 	hash := contractState.ScriptHash()
 	err := dao.PutContractState(contractState)
 	require.NoError(t, err)
@@ -118,7 +118,7 @@ func TestGetUnspentCoinState_Err(t *testing.T) {
 func TestPutGetUnspentCoinState(t *testing.T) {
 	dao := &dao{store: storage.NewMemCachedStore(storage.NewMemoryStore())}
 	hash := testutil.RandomUint256()
-	unspentCoinState := &UnspentCoinState{states:[]entities.CoinState{}}
+	unspentCoinState := &UnspentCoinState{states:[]state.Coin{}}
 	err := dao.PutUnspentCoinState(hash, unspentCoinState)
 	require.NoError(t, err)
 	gotUnspentCoinState, err := dao.GetUnspentCoinState(hash)
@@ -183,7 +183,7 @@ func TestGetValidatorStateOrNew_New(t *testing.T) {
 func TestPutGetValidatorState(t *testing.T) {
 	dao := &dao{store: storage.NewMemCachedStore(storage.NewMemoryStore())}
 	publicKey := &keys.PublicKey{}
-	validatorState := &entities.ValidatorState{
+	validatorState := &state.Validator{
 		PublicKey:  publicKey,
 		Registered: false,
 		Votes:      0,
@@ -198,7 +198,7 @@ func TestPutGetValidatorState(t *testing.T) {
 func TestDeleteValidatorState(t *testing.T) {
 	dao := &dao{store: storage.NewMemCachedStore(storage.NewMemoryStore())}
 	publicKey := &keys.PublicKey{}
-	validatorState := &entities.ValidatorState{
+	validatorState := &state.Validator{
 		PublicKey:  publicKey,
 		Registered: false,
 		Votes:      0,
@@ -215,7 +215,7 @@ func TestDeleteValidatorState(t *testing.T) {
 func TestGetValidators(t *testing.T) {
 	dao := &dao{store: storage.NewMemCachedStore(storage.NewMemoryStore())}
 	publicKey := &keys.PublicKey{}
-	validatorState := &entities.ValidatorState{
+	validatorState := &state.Validator{
 		PublicKey:  publicKey,
 		Registered: false,
 		Votes:      0,
@@ -230,7 +230,7 @@ func TestGetValidators(t *testing.T) {
 func TestPutGetAppExecResult(t *testing.T) {
 	dao := &dao{store: storage.NewMemCachedStore(storage.NewMemoryStore())}
 	hash := testutil.RandomUint256()
-	appExecResult := &entities.AppExecResult{TxHash: hash, Events:[]entities.NotificationEvent{}}
+	appExecResult := &state.AppExecResult{TxHash: hash, Events:[]state.NotificationEvent{}}
 	err := dao.PutAppExecResult(appExecResult)
 	require.NoError(t, err)
 	gotAppExecResult, err := dao.GetAppExecResult(hash)
@@ -242,7 +242,7 @@ func TestPutGetStorageItem(t *testing.T) {
 	dao := &dao{store: storage.NewMemCachedStore(storage.NewMemoryStore())}
 	hash := testutil.RandomUint160()
 	key := []byte{0}
-	storageItem := &entities.StorageItem{Value:[]uint8{}}
+	storageItem := &state.StorageItem{Value: []uint8{}}
 	err := dao.PutStorageItem(hash, key, storageItem)
 	require.NoError(t, err)
 	gotStorageItem := dao.GetStorageItem(hash, key)
@@ -253,7 +253,7 @@ func TestDeleteStorageItem(t *testing.T) {
 	dao := &dao{store: storage.NewMemCachedStore(storage.NewMemoryStore())}
 	hash := testutil.RandomUint160()
 	key := []byte{0}
-	storageItem := &entities.StorageItem{Value:[]uint8{}}
+	storageItem := &state.StorageItem{Value: []uint8{}}
 	err := dao.PutStorageItem(hash, key, storageItem)
 	require.NoError(t, err)
 	err = dao.DeleteStorageItem(hash, key)
diff --git a/pkg/core/entities/coin_state.go b/pkg/core/entities/coin_state.go
deleted file mode 100644
index cefc25de7..000000000
--- a/pkg/core/entities/coin_state.go
+++ /dev/null
@@ -1,12 +0,0 @@
-package entities
-
-// CoinState represents the state of a coin.
-type CoinState uint8
-
-// Viable CoinState constants.
-const (
-	CoinStateConfirmed CoinState = 0
-	CoinStateSpent     CoinState = 1 << 1
-	CoinStateClaimed   CoinState = 1 << 2
-	CoinStateFrozen    CoinState = 1 << 5
-)
diff --git a/pkg/core/interop_neo.go b/pkg/core/interop_neo.go
index 632181384..31576d95a 100644
--- a/pkg/core/interop_neo.go
+++ b/pkg/core/interop_neo.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"math"
 
-	"github.com/CityOfZion/neo-go/pkg/core/entities"
+	"github.com/CityOfZion/neo-go/pkg/core/state"
 	"github.com/CityOfZion/neo-go/pkg/core/transaction"
 	"github.com/CityOfZion/neo-go/pkg/crypto/keys"
 	"github.com/CityOfZion/neo-go/pkg/smartcontract"
@@ -317,7 +317,7 @@ func (ic *interopContext) bcGetAccount(v *vm.VM) error {
 	}
 	acc := ic.bc.GetAccountState(acchash)
 	if acc == nil {
-		acc = entities.NewAccountState(acchash)
+		acc = state.NewAccount(acchash)
 	}
 	v.Estack().PushVal(vm.NewInteropItem(acc))
 	return nil
@@ -341,7 +341,7 @@ func (ic *interopContext) bcGetAsset(v *vm.VM) error {
 // accountGetBalance returns balance for a given account.
 func (ic *interopContext) accountGetBalance(v *vm.VM) error {
 	accInterface := v.Estack().Pop().Value()
-	acc, ok := accInterface.(*entities.AccountState)
+	acc, ok := accInterface.(*state.Account)
 	if !ok {
 		return fmt.Errorf("%T is not an account state", acc)
 	}
@@ -361,7 +361,7 @@ func (ic *interopContext) accountGetBalance(v *vm.VM) error {
 // accountGetScriptHash returns script hash of a given account.
 func (ic *interopContext) accountGetScriptHash(v *vm.VM) error {
 	accInterface := v.Estack().Pop().Value()
-	acc, ok := accInterface.(*entities.AccountState)
+	acc, ok := accInterface.(*state.Account)
 	if !ok {
 		return fmt.Errorf("%T is not an account state", acc)
 	}
@@ -372,7 +372,7 @@ func (ic *interopContext) accountGetScriptHash(v *vm.VM) error {
 // accountGetVotes returns votes of a given account.
 func (ic *interopContext) accountGetVotes(v *vm.VM) error {
 	accInterface := v.Estack().Pop().Value()
-	acc, ok := accInterface.(*entities.AccountState)
+	acc, ok := accInterface.(*state.Account)
 	if !ok {
 		return fmt.Errorf("%T is not an account state", acc)
 	}
@@ -428,9 +428,9 @@ func (ic *interopContext) storageFind(v *vm.VM) error {
 }
 */
 // createContractStateFromVM pops all contract state elements from the VM
-// evaluation stack, does a lot of checks and returns ContractState if it
+// evaluation stack, does a lot of checks and returns Contract if it
 // succeeds.
-func (ic *interopContext) createContractStateFromVM(v *vm.VM) (*entities.ContractState, error) {
+func (ic *interopContext) createContractStateFromVM(v *vm.VM) (*state.Contract, error) {
 	if ic.trigger != trigger.Application {
 		return nil, errors.New("can't create contract when not triggered by an application")
 	}
@@ -468,7 +468,7 @@ func (ic *interopContext) createContractStateFromVM(v *vm.VM) (*entities.Contrac
 	if len(desc) > MaxContractStringLen {
 		return nil, errors.New("too big description")
 	}
-	contract := &entities.ContractState{
+	contract := &state.Contract{
 		Script:      script,
 		ParamList:   paramList,
 		ReturnType:  retType,
@@ -503,7 +503,7 @@ func (ic *interopContext) contractCreate(v *vm.VM) error {
 // contractGetScript returns a script associated with a contract.
 func (ic *interopContext) contractGetScript(v *vm.VM) error {
 	csInterface := v.Estack().Pop().Value()
-	cs, ok := csInterface.(*entities.ContractState)
+	cs, ok := csInterface.(*state.Contract)
 	if !ok {
 		return fmt.Errorf("%T is not a contract state", cs)
 	}
@@ -514,7 +514,7 @@ func (ic *interopContext) contractGetScript(v *vm.VM) error {
 // contractIsPayable returns whether contract is payable.
 func (ic *interopContext) contractIsPayable(v *vm.VM) error {
 	csInterface := v.Estack().Pop().Value()
-	cs, ok := csInterface.(*entities.ContractState)
+	cs, ok := csInterface.(*state.Contract)
 	if !ok {
 		return fmt.Errorf("%T is not a contract state", cs)
 	}
@@ -610,7 +610,7 @@ func (ic *interopContext) assetCreate(v *vm.VM) error {
 	if err != nil {
 		return gherr.Wrap(err, "failed to get issuer")
 	}
-	asset := &entities.AssetState{
+	asset := &state.Asset{
 		ID:         ic.tx.Hash(),
 		AssetType:  atype,
 		Name:       name,
@@ -632,7 +632,7 @@ func (ic *interopContext) assetCreate(v *vm.VM) error {
 // assetGetAdmin returns asset admin.
 func (ic *interopContext) assetGetAdmin(v *vm.VM) error {
 	asInterface := v.Estack().Pop().Value()
-	as, ok := asInterface.(*entities.AssetState)
+	as, ok := asInterface.(*state.Asset)
 	if !ok {
 		return fmt.Errorf("%T is not an asset state", as)
 	}
@@ -643,7 +643,7 @@ func (ic *interopContext) assetGetAdmin(v *vm.VM) error {
 // assetGetAmount returns the overall amount of asset available.
 func (ic *interopContext) assetGetAmount(v *vm.VM) error {
 	asInterface := v.Estack().Pop().Value()
-	as, ok := asInterface.(*entities.AssetState)
+	as, ok := asInterface.(*state.Asset)
 	if !ok {
 		return fmt.Errorf("%T is not an asset state", as)
 	}
@@ -654,7 +654,7 @@ func (ic *interopContext) assetGetAmount(v *vm.VM) error {
 // assetGetAssetId returns the id of an asset.
 func (ic *interopContext) assetGetAssetID(v *vm.VM) error {
 	asInterface := v.Estack().Pop().Value()
-	as, ok := asInterface.(*entities.AssetState)
+	as, ok := asInterface.(*state.Asset)
 	if !ok {
 		return fmt.Errorf("%T is not an asset state", as)
 	}
@@ -665,7 +665,7 @@ func (ic *interopContext) assetGetAssetID(v *vm.VM) error {
 // assetGetAssetType returns type of an asset.
 func (ic *interopContext) assetGetAssetType(v *vm.VM) error {
 	asInterface := v.Estack().Pop().Value()
-	as, ok := asInterface.(*entities.AssetState)
+	as, ok := asInterface.(*state.Asset)
 	if !ok {
 		return fmt.Errorf("%T is not an asset state", as)
 	}
@@ -676,7 +676,7 @@ func (ic *interopContext) assetGetAssetType(v *vm.VM) error {
 // assetGetAvailable returns available (not yet issued) amount of asset.
 func (ic *interopContext) assetGetAvailable(v *vm.VM) error {
 	asInterface := v.Estack().Pop().Value()
-	as, ok := asInterface.(*entities.AssetState)
+	as, ok := asInterface.(*state.Asset)
 	if !ok {
 		return fmt.Errorf("%T is not an asset state", as)
 	}
@@ -687,7 +687,7 @@ func (ic *interopContext) assetGetAvailable(v *vm.VM) error {
 // assetGetIssuer returns issuer of an asset.
 func (ic *interopContext) assetGetIssuer(v *vm.VM) error {
 	asInterface := v.Estack().Pop().Value()
-	as, ok := asInterface.(*entities.AssetState)
+	as, ok := asInterface.(*state.Asset)
 	if !ok {
 		return fmt.Errorf("%T is not an asset state", as)
 	}
@@ -698,7 +698,7 @@ func (ic *interopContext) assetGetIssuer(v *vm.VM) error {
 // assetGetOwner returns owner of an asset.
 func (ic *interopContext) assetGetOwner(v *vm.VM) error {
 	asInterface := v.Estack().Pop().Value()
-	as, ok := asInterface.(*entities.AssetState)
+	as, ok := asInterface.(*state.Asset)
 	if !ok {
 		return fmt.Errorf("%T is not an asset state", as)
 	}
@@ -709,7 +709,7 @@ func (ic *interopContext) assetGetOwner(v *vm.VM) error {
 // assetGetPrecision returns precision used to measure this asset.
 func (ic *interopContext) assetGetPrecision(v *vm.VM) error {
 	asInterface := v.Estack().Pop().Value()
-	as, ok := asInterface.(*entities.AssetState)
+	as, ok := asInterface.(*state.Asset)
 	if !ok {
 		return fmt.Errorf("%T is not an asset state", as)
 	}
@@ -723,7 +723,7 @@ func (ic *interopContext) assetRenew(v *vm.VM) error {
 		return errors.New("can't create asset when not triggered by an application")
 	}
 	asInterface := v.Estack().Pop().Value()
-	as, ok := asInterface.(*entities.AssetState)
+	as, ok := asInterface.(*state.Asset)
 	if !ok {
 		return fmt.Errorf("%T is not an asset state", as)
 	}
diff --git a/pkg/core/interop_neo_test.go b/pkg/core/interop_neo_test.go
index a20d38064..9cf07369e 100644
--- a/pkg/core/interop_neo_test.go
+++ b/pkg/core/interop_neo_test.go
@@ -4,7 +4,7 @@ import (
 	"math/big"
 	"testing"
 
-	"github.com/CityOfZion/neo-go/pkg/core/entities"
+	"github.com/CityOfZion/neo-go/pkg/core/state"
 	"github.com/CityOfZion/neo-go/pkg/core/storage"
 	"github.com/CityOfZion/neo-go/pkg/core/testutil"
 	"github.com/CityOfZion/neo-go/pkg/core/transaction"
@@ -323,7 +323,7 @@ func TestAssetGetPrecision(t *testing.T) {
 	require.Equal(t, big.NewInt(int64(assetState.Precision)), precision)
 }
 
-// Helper functions to create VM, InteropContext, TX, AccountState, ContractState, AssetState.
+// Helper functions to create VM, InteropContext, TX, Account, Contract, Asset.
 
 func createVMAndPushBlock(t *testing.T) (*vm.VM, *Block, *interopContext) {
 	v := vm.New()
@@ -339,9 +339,9 @@ func createVMAndPushTX(t *testing.T) (*vm.VM, *transaction.Transaction, *interop
 	return v, tx, context
 }
 
-func createVMAndAssetState(t *testing.T) (*vm.VM, *entities.AssetState, *interopContext) {
+func createVMAndAssetState(t *testing.T) (*vm.VM, *state.Asset, *interopContext) {
 	v := vm.New()
-	assetState := &entities.AssetState{
+	assetState := &state.Asset{
 		ID:         util.Uint256{},
 		AssetType:  transaction.GoverningToken,
 		Name:       "TestAsset",
@@ -361,9 +361,9 @@ func createVMAndAssetState(t *testing.T) (*vm.VM, *entities.AssetState, *interop
 	return v, assetState, context
 }
 
-func createVMAndContractState(t *testing.T) (*vm.VM, *entities.ContractState, *interopContext) {
+func createVMAndContractState(t *testing.T) (*vm.VM, *state.Contract, *interopContext) {
 	v := vm.New()
-	contractState := &entities.ContractState{
+	contractState := &state.Contract{
 		Script:      []byte("testscript"),
 		ParamList:   []smartcontract.ParamType{smartcontract.StringType, smartcontract.IntegerType, smartcontract.Hash160Type},
 		ReturnType:  smartcontract.ArrayType,
@@ -379,11 +379,11 @@ func createVMAndContractState(t *testing.T) (*vm.VM, *entities.ContractState, *i
 	return v, contractState, context
 }
 
-func createVMAndAccState(t *testing.T) (*vm.VM, *entities.AccountState, *interopContext) {
+func createVMAndAccState(t *testing.T) (*vm.VM, *state.Account, *interopContext) {
 	v := vm.New()
 	rawHash := "4d3b96ae1bcc5a585e075e3b81920210dec16302"
 	hash, err := util.Uint160DecodeStringBE(rawHash)
-	accountState := entities.NewAccountState(hash)
+	accountState := state.NewAccount(hash)
 
 	key := &keys.PublicKey{X: big.NewInt(1), Y: big.NewInt(1)}
 	accountState.Votes = []*keys.PublicKey{key}
diff --git a/pkg/core/interop_system.go b/pkg/core/interop_system.go
index ce104bb09..a399e67e7 100644
--- a/pkg/core/interop_system.go
+++ b/pkg/core/interop_system.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"math"
 
-	"github.com/CityOfZion/neo-go/pkg/core/entities"
+	"github.com/CityOfZion/neo-go/pkg/core/state"
 	"github.com/CityOfZion/neo-go/pkg/core/transaction"
 	"github.com/CityOfZion/neo-go/pkg/crypto/hash"
 	"github.com/CityOfZion/neo-go/pkg/crypto/keys"
@@ -342,7 +342,7 @@ func (ic *interopContext) runtimeCheckWitness(v *vm.VM) error {
 func (ic *interopContext) runtimeNotify(v *vm.VM) error {
 	// It can be just about anything.
 	e := v.Estack().Pop()
-	ne := entities.NotificationEvent{ScriptHash:getContextScriptHash(v, 0), Item:e.Item()}
+	ne := state.NotificationEvent{ScriptHash: getContextScriptHash(v, 0), Item: e.Item()}
 	ic.notifications = append(ic.notifications, ne)
 	return nil
 }
@@ -475,7 +475,7 @@ func (ic *interopContext) putWithContextAndFlags(stc *StorageContext, key []byte
 	}
 	si := ic.dao.GetStorageItem(stc.ScriptHash, key)
 	if si == nil {
-		si = &entities.StorageItem{}
+		si = &state.StorageItem{}
 	}
 	if si.IsConst {
 		return errors.New("storage item exists and is read-only")
@@ -558,7 +558,7 @@ func (ic *interopContext) contractDestroy(v *vm.VM) error {
 // contractGetStorageContext retrieves StorageContext of a contract.
 func (ic *interopContext) contractGetStorageContext(v *vm.VM) error {
 	csInterface := v.Estack().Pop().Value()
-	cs, ok := csInterface.(*entities.ContractState)
+	cs, ok := csInterface.(*state.Contract)
 	if !ok {
 		return fmt.Errorf("%T is not a contract state", cs)
 	}
diff --git a/pkg/core/interops.go b/pkg/core/interops.go
index 53691f5bf..33fac36c6 100644
--- a/pkg/core/interops.go
+++ b/pkg/core/interops.go
@@ -8,7 +8,7 @@ package core
 */
 
 import (
-	"github.com/CityOfZion/neo-go/pkg/core/entities"
+	"github.com/CityOfZion/neo-go/pkg/core/state"
 	"github.com/CityOfZion/neo-go/pkg/core/storage"
 	"github.com/CityOfZion/neo-go/pkg/core/transaction"
 	"github.com/CityOfZion/neo-go/pkg/vm"
@@ -20,12 +20,12 @@ type interopContext struct {
 	block         *Block
 	tx            *transaction.Transaction
 	dao           *dao
-	notifications []entities.NotificationEvent
+	notifications []state.NotificationEvent
 }
 
 func newInteropContext(trigger byte, bc Blockchainer, s storage.Store, block *Block, tx *transaction.Transaction) *interopContext {
 	dao := &dao{store: storage.NewMemCachedStore(s)}
-	nes := make([]entities.NotificationEvent, 0)
+	nes := make([]state.NotificationEvent, 0)
 	return &interopContext{bc, trigger, block, tx, dao, nes}
 }
 
diff --git a/pkg/core/entities/account_state.go b/pkg/core/state/account.go
similarity index 81%
rename from pkg/core/entities/account_state.go
rename to pkg/core/state/account.go
index f06b94ae3..e72fdc875 100644
--- a/pkg/core/entities/account_state.go
+++ b/pkg/core/state/account.go
@@ -1,4 +1,4 @@
-package entities
+package state
 
 import (
 	"github.com/CityOfZion/neo-go/pkg/crypto/keys"
@@ -17,8 +17,8 @@ type UnspentBalance struct {
 // UnspentBalances is a slice of UnspentBalance (mostly needed to sort them).
 type UnspentBalances []UnspentBalance
 
-// AccountState represents the state of a NEO account.
-type AccountState struct {
+// Account represents the state of a NEO account.
+type Account struct {
 	Version    uint8
 	ScriptHash util.Uint160
 	IsFrozen   bool
@@ -26,9 +26,9 @@ type AccountState struct {
 	Balances   map[util.Uint256][]UnspentBalance
 }
 
-// NewAccountState returns a new AccountState object.
-func NewAccountState(scriptHash util.Uint160) *AccountState {
-	return &AccountState{
+// NewAccount returns a new Account object.
+func NewAccount(scriptHash util.Uint160) *Account {
+	return &Account{
 		Version:    0,
 		ScriptHash: scriptHash,
 		IsFrozen:   false,
@@ -37,8 +37,8 @@ func NewAccountState(scriptHash util.Uint160) *AccountState {
 	}
 }
 
-// DecodeBinary decodes AccountState from the given BinReader.
-func (s *AccountState) DecodeBinary(br *io.BinReader) {
+// DecodeBinary decodes Account from the given BinReader.
+func (s *Account) DecodeBinary(br *io.BinReader) {
 	br.ReadLE(&s.Version)
 	br.ReadBytes(s.ScriptHash[:])
 	br.ReadLE(&s.IsFrozen)
@@ -55,8 +55,8 @@ func (s *AccountState) DecodeBinary(br *io.BinReader) {
 	}
 }
 
-// EncodeBinary encodes AccountState to the given BinWriter.
-func (s *AccountState) EncodeBinary(bw *io.BinWriter) {
+// EncodeBinary encodes Account to the given BinWriter.
+func (s *Account) EncodeBinary(bw *io.BinWriter) {
 	bw.WriteLE(s.Version)
 	bw.WriteBytes(s.ScriptHash[:])
 	bw.WriteLE(s.IsFrozen)
@@ -85,7 +85,7 @@ func (u *UnspentBalance) EncodeBinary(w *io.BinWriter) {
 
 // GetBalanceValues sums all unspent outputs and returns a map of asset IDs to
 // overall balances.
-func (s *AccountState) GetBalanceValues() map[util.Uint256]util.Fixed8 {
+func (s *Account) GetBalanceValues() map[util.Uint256]util.Fixed8 {
 	res := make(map[util.Uint256]util.Fixed8)
 	for k, v := range s.Balances {
 		balance := util.Fixed8(0)
diff --git a/pkg/core/entities/account_state_test.go b/pkg/core/state/account_test.go
similarity index 93%
rename from pkg/core/entities/account_state_test.go
rename to pkg/core/state/account_test.go
index 89d8d3026..e59215f3b 100644
--- a/pkg/core/entities/account_state_test.go
+++ b/pkg/core/state/account_test.go
@@ -1,4 +1,4 @@
-package entities
+package state
 
 import (
 	"testing"
@@ -30,7 +30,7 @@ func TestDecodeEncodeAccountState(t *testing.T) {
 		votes[i] = k.PublicKey()
 	}
 
-	a := &AccountState{
+	a := &Account{
 		Version:    0,
 		ScriptHash: testutil.RandomUint160(),
 		IsFrozen:   true,
@@ -42,7 +42,7 @@ func TestDecodeEncodeAccountState(t *testing.T) {
 	a.EncodeBinary(buf.BinWriter)
 	assert.Nil(t, buf.Err)
 
-	aDecode := &AccountState{}
+	aDecode := &Account{}
 	r := io.NewBinReaderFromBuf(buf.Bytes())
 	aDecode.DecodeBinary(r)
 	assert.Nil(t, r.Err)
@@ -60,7 +60,7 @@ func TestDecodeEncodeAccountState(t *testing.T) {
 func TestAccountStateBalanceValues(t *testing.T) {
 	asset1 := testutil.RandomUint256()
 	asset2 := testutil.RandomUint256()
-	as := AccountState{Balances: make(map[util.Uint256][]UnspentBalance)}
+	as := Account{Balances: make(map[util.Uint256][]UnspentBalance)}
 	ref := 0
 	for i := 0; i < 10; i++ {
 		ref += i
diff --git a/pkg/core/entities/asset_state.go b/pkg/core/state/asset.go
similarity index 85%
rename from pkg/core/entities/asset_state.go
rename to pkg/core/state/asset.go
index c81d3b5e3..b5268ce31 100644
--- a/pkg/core/entities/asset_state.go
+++ b/pkg/core/state/asset.go
@@ -1,4 +1,4 @@
-package entities
+package state
 
 import (
 	"github.com/CityOfZion/neo-go/pkg/core/transaction"
@@ -9,8 +9,8 @@ import (
 
 const feeMode = 0x0
 
-// AssetState represents the state of an NEO registered Asset.
-type AssetState struct {
+// Asset represents the state of an NEO registered Asset.
+type Asset struct {
 	ID         util.Uint256
 	AssetType  transaction.AssetType
 	Name       string
@@ -27,7 +27,7 @@ type AssetState struct {
 }
 
 // DecodeBinary implements Serializable interface.
-func (a *AssetState) DecodeBinary(br *io.BinReader) {
+func (a *Asset) DecodeBinary(br *io.BinReader) {
 	br.ReadBytes(a.ID[:])
 	br.ReadLE(&a.AssetType)
 
@@ -47,7 +47,7 @@ func (a *AssetState) DecodeBinary(br *io.BinReader) {
 }
 
 // EncodeBinary implements Serializable interface.
-func (a *AssetState) EncodeBinary(bw *io.BinWriter) {
+func (a *Asset) EncodeBinary(bw *io.BinWriter) {
 	bw.WriteBytes(a.ID[:])
 	bw.WriteLE(a.AssetType)
 	bw.WriteString(a.Name)
@@ -66,7 +66,7 @@ func (a *AssetState) EncodeBinary(bw *io.BinWriter) {
 }
 
 // GetName returns the asset name based on its type.
-func (a *AssetState) GetName() string {
+func (a *Asset) GetName() string {
 
 	if a.AssetType == transaction.GoverningToken {
 		return "NEO"
diff --git a/pkg/core/entities/asset_state_test.go b/pkg/core/state/asset_test.go
similarity index 85%
rename from pkg/core/entities/asset_state_test.go
rename to pkg/core/state/asset_test.go
index 58e4896ce..790ba4f68 100644
--- a/pkg/core/entities/asset_state_test.go
+++ b/pkg/core/state/asset_test.go
@@ -1,4 +1,4 @@
-package entities
+package state
 
 import (
 	"testing"
@@ -12,7 +12,7 @@ import (
 )
 
 func TestEncodeDecodeAssetState(t *testing.T) {
-	asset := &AssetState{
+	asset := &Asset{
 		ID:         testutil.RandomUint256(),
 		AssetType:  transaction.Token,
 		Name:       "super cool token",
@@ -30,7 +30,7 @@ func TestEncodeDecodeAssetState(t *testing.T) {
 	buf := io.NewBufBinWriter()
 	asset.EncodeBinary(buf.BinWriter)
 	assert.Nil(t, buf.Err)
-	assetDecode := &AssetState{}
+	assetDecode := &Asset{}
 	r := io.NewBinReaderFromBuf(buf.Bytes())
 	assetDecode.DecodeBinary(r)
 	assert.Nil(t, r.Err)
@@ -38,11 +38,11 @@ func TestEncodeDecodeAssetState(t *testing.T) {
 }
 
 func TestAssetState_GetName_NEO(t *testing.T) {
-	asset := &AssetState{AssetType:  transaction.GoverningToken}
+	asset := &Asset{AssetType: transaction.GoverningToken}
 	assert.Equal(t, "NEO", asset.GetName())
 }
 
 func TestAssetState_GetName_NEOGas(t *testing.T) {
-	asset := &AssetState{AssetType:  transaction.UtilityToken}
+	asset := &Asset{AssetType: transaction.UtilityToken}
 	assert.Equal(t, "NEOGas", asset.GetName())
 }
diff --git a/pkg/core/state/coin.go b/pkg/core/state/coin.go
new file mode 100644
index 000000000..650d3f7fa
--- /dev/null
+++ b/pkg/core/state/coin.go
@@ -0,0 +1,12 @@
+package state
+
+// Coin represents the state of a coin.
+type Coin uint8
+
+// Viable Coin constants.
+const (
+	CoinConfirmed Coin = 0
+	CoinSpent     Coin = 1 << 1
+	CoinClaimed   Coin = 1 << 2
+	CoinFrozen    Coin = 1 << 5
+)
diff --git a/pkg/core/entities/contract_state.go b/pkg/core/state/contract.go
similarity index 78%
rename from pkg/core/entities/contract_state.go
rename to pkg/core/state/contract.go
index 812d7766d..443bf918c 100644
--- a/pkg/core/entities/contract_state.go
+++ b/pkg/core/state/contract.go
@@ -1,4 +1,4 @@
-package entities
+package state
 
 import (
 	"github.com/CityOfZion/neo-go/pkg/crypto/hash"
@@ -7,8 +7,8 @@ import (
 	"github.com/CityOfZion/neo-go/pkg/util"
 )
 
-// ContractState holds information about a smart contract in the NEO blockchain.
-type ContractState struct {
+// Contract holds information about a smart contract in the NEO blockchain.
+type Contract struct {
 	Script      []byte
 	ParamList   []smartcontract.ParamType
 	ReturnType  smartcontract.ParamType
@@ -23,7 +23,7 @@ type ContractState struct {
 }
 
 // DecodeBinary implements Serializable interface.
-func (cs *ContractState) DecodeBinary(br *io.BinReader) {
+func (cs *Contract) DecodeBinary(br *io.BinReader) {
 	cs.Script = br.ReadVarBytes()
 	br.ReadArray(&cs.ParamList)
 	br.ReadLE(&cs.ReturnType)
@@ -37,7 +37,7 @@ func (cs *ContractState) DecodeBinary(br *io.BinReader) {
 }
 
 // EncodeBinary implements Serializable interface.
-func (cs *ContractState) EncodeBinary(bw *io.BinWriter) {
+func (cs *Contract) EncodeBinary(bw *io.BinWriter) {
 	bw.WriteVarBytes(cs.Script)
 	bw.WriteArray(cs.ParamList)
 	bw.WriteLE(cs.ReturnType)
@@ -50,7 +50,7 @@ func (cs *ContractState) EncodeBinary(bw *io.BinWriter) {
 }
 
 // ScriptHash returns a contract script hash.
-func (cs *ContractState) ScriptHash() util.Uint160 {
+func (cs *Contract) ScriptHash() util.Uint160 {
 	if cs.scriptHash.Equals(util.Uint160{}) {
 		cs.createHash()
 	}
@@ -58,21 +58,21 @@ func (cs *ContractState) ScriptHash() util.Uint160 {
 }
 
 // createHash creates contract script hash.
-func (cs *ContractState) createHash() {
+func (cs *Contract) createHash() {
 	cs.scriptHash = hash.Hash160(cs.Script)
 }
 
 // HasStorage checks whether the contract has storage property set.
-func (cs *ContractState) HasStorage() bool {
+func (cs *Contract) HasStorage() bool {
 	return (cs.Properties & smartcontract.HasStorage) != 0
 }
 
 // HasDynamicInvoke checks whether the contract has dynamic invoke property set.
-func (cs *ContractState) HasDynamicInvoke() bool {
+func (cs *Contract) HasDynamicInvoke() bool {
 	return (cs.Properties & smartcontract.HasDynamicInvoke) != 0
 }
 
 // IsPayable checks whether the contract has payable property set.
-func (cs *ContractState) IsPayable() bool {
+func (cs *Contract) IsPayable() bool {
 	return (cs.Properties & smartcontract.IsPayable) != 0
 }
diff --git a/pkg/core/entities/contract_state_test.go b/pkg/core/state/contract_test.go
similarity index 90%
rename from pkg/core/entities/contract_state_test.go
rename to pkg/core/state/contract_test.go
index ba9e5f44a..9f57d51e9 100644
--- a/pkg/core/entities/contract_state_test.go
+++ b/pkg/core/state/contract_test.go
@@ -1,4 +1,4 @@
-package entities
+package state
 
 import (
 	"testing"
@@ -12,7 +12,7 @@ import (
 func TestEncodeDecodeContractState(t *testing.T) {
 	script := []byte("testscript")
 
-	contract := &ContractState{
+	contract := &Contract{
 		Script:      script,
 		ParamList:   []smartcontract.ParamType{smartcontract.StringType, smartcontract.IntegerType, smartcontract.Hash160Type},
 		ReturnType:  smartcontract.BoolType,
@@ -28,7 +28,7 @@ func TestEncodeDecodeContractState(t *testing.T) {
 	buf := io.NewBufBinWriter()
 	contract.EncodeBinary(buf.BinWriter)
 	assert.Nil(t, buf.Err)
-	contractDecoded := &ContractState{}
+	contractDecoded := &Contract{}
 	r := io.NewBinReaderFromBuf(buf.Bytes())
 	contractDecoded.DecodeBinary(r)
 	assert.Nil(t, r.Err)
@@ -37,10 +37,10 @@ func TestEncodeDecodeContractState(t *testing.T) {
 }
 
 func TestContractStateProperties(t *testing.T) {
-	flaggedContract := ContractState{
+	flaggedContract := Contract{
 		Properties: smartcontract.HasStorage | smartcontract.HasDynamicInvoke | smartcontract.IsPayable,
 	}
-	nonFlaggedContract := ContractState{
+	nonFlaggedContract := Contract{
 		ReturnType: smartcontract.BoolType,
 	}
 	assert.Equal(t, true, flaggedContract.HasStorage())
diff --git a/pkg/core/entities/notification_event.go b/pkg/core/state/notification_event.go
similarity index 98%
rename from pkg/core/entities/notification_event.go
rename to pkg/core/state/notification_event.go
index 47ea291ef..d86165be9 100644
--- a/pkg/core/entities/notification_event.go
+++ b/pkg/core/state/notification_event.go
@@ -1,4 +1,4 @@
-package entities
+package state
 
 import (
 	"github.com/CityOfZion/neo-go/pkg/io"
diff --git a/pkg/core/entities/notification_event_test.go b/pkg/core/state/notification_event_test.go
similarity index 98%
rename from pkg/core/entities/notification_event_test.go
rename to pkg/core/state/notification_event_test.go
index 6bd7f47dc..7b41859c3 100644
--- a/pkg/core/entities/notification_event_test.go
+++ b/pkg/core/state/notification_event_test.go
@@ -1,4 +1,4 @@
-package entities
+package state
 
 import (
 	"testing"
diff --git a/pkg/core/entities/storage_item.go b/pkg/core/state/storage_item.go
similarity index 96%
rename from pkg/core/entities/storage_item.go
rename to pkg/core/state/storage_item.go
index 2e5965616..49845f07b 100644
--- a/pkg/core/entities/storage_item.go
+++ b/pkg/core/state/storage_item.go
@@ -1,4 +1,4 @@
-package entities
+package state
 
 import (
 	"github.com/CityOfZion/neo-go/pkg/io"
diff --git a/pkg/core/entities/storage_item_test.go b/pkg/core/state/storage_item_test.go
similarity index 97%
rename from pkg/core/entities/storage_item_test.go
rename to pkg/core/state/storage_item_test.go
index 6200cc19b..aeb7a5b80 100644
--- a/pkg/core/entities/storage_item_test.go
+++ b/pkg/core/state/storage_item_test.go
@@ -1,4 +1,4 @@
-package entities
+package state
 
 import (
 	"testing"
diff --git a/pkg/core/entities/validator_state.go b/pkg/core/state/validator.go
similarity index 74%
rename from pkg/core/entities/validator_state.go
rename to pkg/core/state/validator.go
index 48e6601de..c9f5a5862 100644
--- a/pkg/core/entities/validator_state.go
+++ b/pkg/core/state/validator.go
@@ -1,4 +1,4 @@
-package entities
+package state
 
 import (
 	"github.com/CityOfZion/neo-go/pkg/crypto/keys"
@@ -6,27 +6,27 @@ import (
 	"github.com/CityOfZion/neo-go/pkg/util"
 )
 
-// ValidatorState holds the state of a validator.
-type ValidatorState struct {
+// Validator holds the state of a validator.
+type Validator struct {
 	PublicKey  *keys.PublicKey
 	Registered bool
 	Votes      util.Fixed8
 }
 
 // RegisteredAndHasVotes returns true or false whether Validator is registered and has votes.
-func (vs *ValidatorState) RegisteredAndHasVotes() bool {
+func (vs *Validator) RegisteredAndHasVotes() bool {
 	return vs.Registered && vs.Votes > util.Fixed8(0)
 }
 
-// EncodeBinary encodes ValidatorState to the given BinWriter.
-func (vs *ValidatorState) EncodeBinary(bw *io.BinWriter) {
+// EncodeBinary encodes Validator to the given BinWriter.
+func (vs *Validator) EncodeBinary(bw *io.BinWriter) {
 	vs.PublicKey.EncodeBinary(bw)
 	bw.WriteLE(vs.Registered)
 	bw.WriteLE(vs.Votes)
 }
 
-// DecodeBinary decodes ValidatorState from the given BinReader.
-func (vs *ValidatorState) DecodeBinary(reader *io.BinReader) {
+// DecodeBinary decodes Validator from the given BinReader.
+func (vs *Validator) DecodeBinary(reader *io.BinReader) {
 	vs.PublicKey = &keys.PublicKey{}
 	vs.PublicKey.DecodeBinary(reader)
 	reader.ReadLE(&vs.Registered)
@@ -35,17 +35,17 @@ func (vs *ValidatorState) DecodeBinary(reader *io.BinReader) {
 
 // GetValidatorsWeightedAverage applies weighted filter based on votes for validator and returns number of validators.
 // Get back to it with further investigation in https://github.com/nspcc-dev/neo-go/issues/512.
-func GetValidatorsWeightedAverage(validators []*ValidatorState) int {
+func GetValidatorsWeightedAverage(validators []*Validator) int {
 	return int(weightedAverage(applyWeightedFilter(validators)))
 }
 
 // applyWeightedFilter is an implementation of the filter for validators votes.
 // C# reference https://github.com/neo-project/neo/blob/41caff115c28d6c7665b2a7ac72967e7ce82e921/neo/Helper.cs#L273
-func applyWeightedFilter(validators []*ValidatorState) map[*ValidatorState]float64 {
-	var validatorsWithVotes []*ValidatorState
+func applyWeightedFilter(validators []*Validator) map[*Validator]float64 {
+	var validatorsWithVotes []*Validator
 	var amount float64
 
-	weightedVotes := make(map[*ValidatorState]float64)
+	weightedVotes := make(map[*Validator]float64)
 	start := 0.25
 	end := 0.75
 	sum := float64(0)
@@ -85,7 +85,7 @@ func applyWeightedFilter(validators []*ValidatorState) map[*ValidatorState]float
 	return weightedVotes
 }
 
-func weightedAverage(weightedVotes map[*ValidatorState]float64) float64 {
+func weightedAverage(weightedVotes map[*Validator]float64) float64 {
 	sumWeight := float64(0)
 	sumValue := float64(0)
 	for vState, weight := range weightedVotes {
diff --git a/pkg/core/entities/validator_state_test.go b/pkg/core/state/validator_test.go
similarity index 89%
rename from pkg/core/entities/validator_state_test.go
rename to pkg/core/state/validator_test.go
index 521cf0827..ccd9d18d9 100644
--- a/pkg/core/entities/validator_state_test.go
+++ b/pkg/core/state/validator_test.go
@@ -1,4 +1,4 @@
-package entities
+package state
 
 import (
 	"math/big"
@@ -11,7 +11,7 @@ import (
 )
 
 func TestValidatorState_DecodeEncodeBinary(t *testing.T) {
-	state := &ValidatorState{
+	state := &Validator{
 		PublicKey:  &keys.PublicKey{},
 		Registered: false,
 		Votes:      util.Fixed8(10),
@@ -20,7 +20,7 @@ func TestValidatorState_DecodeEncodeBinary(t *testing.T) {
 	state.EncodeBinary(buf.BinWriter)
 	require.NoError(t, buf.Err)
 
-	decodedState := &ValidatorState{}
+	decodedState := &Validator{}
 	reader := io.NewBinReaderFromBuf(buf.Bytes())
 	decodedState.DecodeBinary(reader)
 	require.NoError(t, reader.Err)
@@ -28,7 +28,7 @@ func TestValidatorState_DecodeEncodeBinary(t *testing.T) {
 }
 
 func TestRegisteredAndHasVotes_Registered(t *testing.T) {
-	state := &ValidatorState{
+	state := &Validator{
 		PublicKey: &keys.PublicKey{
 			X: big.NewInt(1),
 			Y: big.NewInt(1),
@@ -40,7 +40,7 @@ func TestRegisteredAndHasVotes_Registered(t *testing.T) {
 }
 
 func TestRegisteredAndHasVotes_RegisteredWithVotes(t *testing.T) {
-	state := &ValidatorState{
+	state := &Validator{
 		PublicKey: &keys.PublicKey{
 			X: big.NewInt(1),
 			Y: big.NewInt(1),
@@ -52,7 +52,7 @@ func TestRegisteredAndHasVotes_RegisteredWithVotes(t *testing.T) {
 }
 
 func TestRegisteredAndHasVotes_NotRegisteredWithVotes(t *testing.T) {
-	state := &ValidatorState{
+	state := &Validator{
 		PublicKey: &keys.PublicKey{
 			X: big.NewInt(1),
 			Y: big.NewInt(1),
diff --git a/pkg/core/unspent_coin_state.go b/pkg/core/unspent_coin_state.go
index 3823a8879..c4c8f9723 100644
--- a/pkg/core/unspent_coin_state.go
+++ b/pkg/core/unspent_coin_state.go
@@ -1,22 +1,22 @@
 package core
 
 import (
-	"github.com/CityOfZion/neo-go/pkg/core/entities"
+	"github.com/CityOfZion/neo-go/pkg/core/state"
 	"github.com/CityOfZion/neo-go/pkg/io"
 )
 
 // UnspentCoinState hold the state of a unspent coin.
 type UnspentCoinState struct {
-	states []entities.CoinState
+	states []state.Coin
 }
 
 // NewUnspentCoinState returns a new unspent coin state with N confirmed states.
 func NewUnspentCoinState(n int) *UnspentCoinState {
 	u := &UnspentCoinState{
-		states: make([]entities.CoinState, n),
+		states: make([]state.Coin, n),
 	}
 	for i := 0; i < n; i++ {
-		u.states[i] = entities.CoinStateConfirmed
+		u.states[i] = state.CoinConfirmed
 	}
 	return u
 }
@@ -32,10 +32,10 @@ func (s *UnspentCoinState) EncodeBinary(bw *io.BinWriter) {
 // DecodeBinary decodes UnspentCoinState from the given BinReader.
 func (s *UnspentCoinState) DecodeBinary(br *io.BinReader) {
 	lenStates := br.ReadVarUint()
-	s.states = make([]entities.CoinState, lenStates)
+	s.states = make([]state.Coin, lenStates)
 	for i := 0; i < int(lenStates); i++ {
-		var state uint8
-		br.ReadLE(&state)
-		s.states[i] = entities.CoinState(state)
+		var coinState uint8
+		br.ReadLE(&coinState)
+		s.states[i] = state.Coin(coinState)
 	}
 }
diff --git a/pkg/core/unspent_coint_state_test.go b/pkg/core/unspent_coint_state_test.go
index 18627feab..8864619c6 100644
--- a/pkg/core/unspent_coint_state_test.go
+++ b/pkg/core/unspent_coint_state_test.go
@@ -3,19 +3,19 @@ package core
 import (
 	"testing"
 
-	"github.com/CityOfZion/neo-go/pkg/core/entities"
+	"github.com/CityOfZion/neo-go/pkg/core/state"
 	"github.com/CityOfZion/neo-go/pkg/io"
 	"github.com/stretchr/testify/assert"
 )
 
 func TestDecodeEncodeUnspentCoinState(t *testing.T) {
 	unspent := &UnspentCoinState{
-		states: []entities.CoinState{
-			entities.CoinStateConfirmed,
-			entities.CoinStateSpent,
-			entities.CoinStateSpent,
-			entities.CoinStateSpent,
-			entities.CoinStateConfirmed,
+		states: []state.Coin{
+			state.CoinConfirmed,
+			state.CoinSpent,
+			state.CoinSpent,
+			state.CoinSpent,
+			state.CoinConfirmed,
 		},
 	}
 
diff --git a/pkg/network/helper_test.go b/pkg/network/helper_test.go
index afbcc921e..da2039650 100644
--- a/pkg/network/helper_test.go
+++ b/pkg/network/helper_test.go
@@ -9,7 +9,7 @@ import (
 
 	"github.com/CityOfZion/neo-go/config"
 	"github.com/CityOfZion/neo-go/pkg/core"
-	"github.com/CityOfZion/neo-go/pkg/core/entities"
+	"github.com/CityOfZion/neo-go/pkg/core/state"
 	"github.com/CityOfZion/neo-go/pkg/core/storage"
 	"github.com/CityOfZion/neo-go/pkg/core/transaction"
 	"github.com/CityOfZion/neo-go/pkg/crypto/keys"
@@ -63,7 +63,7 @@ func (chain testChain) HeaderHeight() uint32 {
 func (chain testChain) GetBlock(hash util.Uint256) (*core.Block, error) {
 	panic("TODO")
 }
-func (chain testChain) GetContractState(hash util.Uint160) *entities.ContractState {
+func (chain testChain) GetContractState(hash util.Uint160) *state.Contract {
 	panic("TODO")
 }
 func (chain testChain) GetHeaderHash(int) util.Uint256 {
@@ -73,10 +73,10 @@ func (chain testChain) GetHeader(hash util.Uint256) (*core.Header, error) {
 	panic("TODO")
 }
 
-func (chain testChain) GetAssetState(util.Uint256) *entities.AssetState {
+func (chain testChain) GetAssetState(util.Uint256) *state.Asset {
 	panic("TODO")
 }
-func (chain testChain) GetAccountState(util.Uint160) *entities.AccountState {
+func (chain testChain) GetAccountState(util.Uint160) *state.Account {
 	panic("TODO")
 }
 func (chain testChain) GetValidators(...*transaction.Transaction) ([]*keys.PublicKey, error) {
@@ -85,13 +85,13 @@ func (chain testChain) GetValidators(...*transaction.Transaction) ([]*keys.Publi
 func (chain testChain) GetScriptHashesForVerifying(*transaction.Transaction) ([]util.Uint160, error) {
 	panic("TODO")
 }
-func (chain testChain) GetStorageItem(scripthash util.Uint160, key []byte) *entities.StorageItem {
+func (chain testChain) GetStorageItem(scripthash util.Uint160, key []byte) *state.StorageItem {
 	panic("TODO")
 }
 func (chain testChain) GetTestVM() (*vm.VM, storage.Store) {
 	panic("TODO")
 }
-func (chain testChain) GetStorageItems(hash util.Uint160) (map[string]*entities.StorageItem, error) {
+func (chain testChain) GetStorageItems(hash util.Uint160) (map[string]*state.StorageItem, error) {
 	panic("TODO")
 }
 func (chain testChain) CurrentHeaderHash() util.Uint256 {
diff --git a/pkg/rpc/client.go b/pkg/rpc/client.go
index 054861b64..e8a75bc81 100644
--- a/pkg/rpc/client.go
+++ b/pkg/rpc/client.go
@@ -11,7 +11,7 @@ import (
 	"sync"
 	"time"
 
-	"github.com/CityOfZion/neo-go/pkg/core/entities"
+	"github.com/CityOfZion/neo-go/pkg/core/state"
 	"github.com/CityOfZion/neo-go/pkg/core/transaction"
 	"github.com/CityOfZion/neo-go/pkg/crypto/keys"
 	"github.com/CityOfZion/neo-go/pkg/util"
@@ -158,7 +158,7 @@ func (c *Client) SetClient(cli *http.Client) {
 // asset belonging to specified address. This implementation uses GetUnspents
 // JSON-RPC call internally, so make sure your RPC server suppors that.
 func (c *Client) CalculateInputs(address string, asset util.Uint256, cost util.Fixed8) ([]transaction.Input, util.Fixed8, error) {
-	var utxos entities.UnspentBalances
+	var utxos state.UnspentBalances
 
 	resp, err := c.GetUnspents(address)
 	if err != nil || resp.Error != nil {
diff --git a/pkg/rpc/neoScanBalanceGetter.go b/pkg/rpc/neoScanBalanceGetter.go
index 709cb64e5..c0e95c595 100644
--- a/pkg/rpc/neoScanBalanceGetter.go
+++ b/pkg/rpc/neoScanBalanceGetter.go
@@ -6,7 +6,7 @@ import (
 	"net/http"
 	"sort"
 
-	"github.com/CityOfZion/neo-go/pkg/core/entities"
+	"github.com/CityOfZion/neo-go/pkg/core/state"
 	"github.com/CityOfZion/neo-go/pkg/core/transaction"
 	"github.com/CityOfZion/neo-go/pkg/rpc/wrappers"
 	"github.com/CityOfZion/neo-go/pkg/util"
@@ -68,7 +68,7 @@ func (s NeoScanServer) CalculateInputs(address string, assetIDUint util.Uint256,
 
 // unspentsToInputs uses UnspentBalances to create a slice of inputs for a new
 // transcation containing the required amount of asset.
-func unspentsToInputs(utxos entities.UnspentBalances, required util.Fixed8) ([]transaction.Input, util.Fixed8, error) {
+func unspentsToInputs(utxos state.UnspentBalances, required util.Fixed8) ([]transaction.Input, util.Fixed8, error) {
 	var (
 		num, i   uint16
 		selected = util.Fixed8(0)
diff --git a/pkg/rpc/neoScanTypes.go b/pkg/rpc/neoScanTypes.go
index 7e050348e..beb1f8fe1 100644
--- a/pkg/rpc/neoScanTypes.go
+++ b/pkg/rpc/neoScanTypes.go
@@ -1,7 +1,7 @@
 package rpc
 
 import (
-	"github.com/CityOfZion/neo-go/pkg/core/entities"
+	"github.com/CityOfZion/neo-go/pkg/core/state"
 	"github.com/CityOfZion/neo-go/pkg/util"
 )
 
@@ -20,7 +20,7 @@ type (
 
 	// Unspent stores Unspents per asset
 	Unspent struct {
-		Unspent entities.UnspentBalances
+		Unspent state.UnspentBalances
 		Asset   string      // "NEO" / "GAS"
 		Amount  util.Fixed8 // total unspent of this asset
 	}
diff --git a/pkg/rpc/wrappers/account_state.go b/pkg/rpc/wrappers/account_state.go
index 56f5d8569..2d0ff5d79 100644
--- a/pkg/rpc/wrappers/account_state.go
+++ b/pkg/rpc/wrappers/account_state.go
@@ -2,7 +2,7 @@ package wrappers
 
 import (
 	"bytes"
-	"github.com/CityOfZion/neo-go/pkg/core/entities"
+	"github.com/CityOfZion/neo-go/pkg/core/state"
 	"sort"
 
 	"github.com/CityOfZion/neo-go/pkg/crypto/keys"
@@ -10,7 +10,7 @@ import (
 )
 
 // AccountState wrapper used for the representation of
-// core.AccountState on the RPC Server.
+// state.Account on the RPC Server.
 type AccountState struct {
 	Version    uint8             `json:"version"`
 	ScriptHash util.Uint160      `json:"script_hash"`
@@ -32,8 +32,8 @@ type Balance struct {
 	Value util.Fixed8  `json:"value"`
 }
 
-// NewAccountState creates a new AccountState wrapper.
-func NewAccountState(a *entities.AccountState) AccountState {
+// NewAccountState creates a new Account wrapper.
+func NewAccountState(a *state.Account) AccountState {
 	balances := make(Balances, 0, len(a.Balances))
 	for k, v := range a.GetBalanceValues() {
 		balances = append(balances, Balance{
diff --git a/pkg/rpc/wrappers/asset_state.go b/pkg/rpc/wrappers/asset_state.go
index e0f3e472c..b9b08c3ce 100644
--- a/pkg/rpc/wrappers/asset_state.go
+++ b/pkg/rpc/wrappers/asset_state.go
@@ -1,14 +1,14 @@
 package wrappers
 
 import (
-	"github.com/CityOfZion/neo-go/pkg/core/entities"
+	"github.com/CityOfZion/neo-go/pkg/core/state"
 	"github.com/CityOfZion/neo-go/pkg/core/transaction"
 	"github.com/CityOfZion/neo-go/pkg/crypto"
 	"github.com/CityOfZion/neo-go/pkg/util"
 )
 
 // AssetState wrapper used for the representation of
-// core.AssetState on the RPC Server.
+// state.Asset on the RPC Server.
 type AssetState struct {
 	ID         util.Uint256          `json:"assetID"`
 	AssetType  transaction.AssetType `json:"assetType"`
@@ -25,8 +25,8 @@ type AssetState struct {
 	IsFrozen   bool                  `json:"is_frozen"`
 }
 
-// NewAssetState creates a new AssetState wrapper.
-func NewAssetState(a *entities.AssetState) AssetState {
+// NewAssetState creates a new Asset wrapper.
+func NewAssetState(a *state.Asset) AssetState {
 	return AssetState{
 		ID:         a.ID,
 		AssetType:  a.AssetType,
diff --git a/pkg/rpc/wrappers/unspents.go b/pkg/rpc/wrappers/unspents.go
index ef10fb279..38c14b901 100644
--- a/pkg/rpc/wrappers/unspents.go
+++ b/pkg/rpc/wrappers/unspents.go
@@ -2,18 +2,18 @@ package wrappers
 
 import (
 	"github.com/CityOfZion/neo-go/pkg/core"
-	"github.com/CityOfZion/neo-go/pkg/core/entities"
+	"github.com/CityOfZion/neo-go/pkg/core/state"
 	"github.com/CityOfZion/neo-go/pkg/util"
 )
 
 // UnspentBalanceInfo wrapper is used to represent single unspent asset entry
 // in `getunspents` output.
 type UnspentBalanceInfo struct {
-	Unspents    []entities.UnspentBalance `json:"unspent"`
-	AssetHash   util.Uint256              `json:"asset_hash"`
-	Asset       string                    `json:"asset"`
-	AssetSymbol string                    `json:"asset_symbol"`
-	Amount      util.Fixed8               `json:"amount"`
+	Unspents    []state.UnspentBalance `json:"unspent"`
+	AssetHash   util.Uint256           `json:"asset_hash"`
+	Asset       string                 `json:"asset"`
+	AssetSymbol string                 `json:"asset_symbol"`
+	Amount      util.Fixed8            `json:"amount"`
 }
 
 // Unspents wrapper is used to represent getunspents return result.
@@ -28,8 +28,8 @@ var GlobalAssets = map[string]string{
 	"602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7": "GAS",
 }
 
-// NewUnspents creates a new AccountState wrapper using given Blockchainer.
-func NewUnspents(a *entities.AccountState, chain core.Blockchainer, addr string) Unspents {
+// NewUnspents creates a new Account wrapper using given Blockchainer.
+func NewUnspents(a *state.Account, chain core.Blockchainer, addr string) Unspents {
 	res := Unspents{
 		Address: addr,
 		Balance: make([]UnspentBalanceInfo, 0, len(a.Balances)),