Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor dataTrieTracker #4491

Merged
merged 8 commits into from
Sep 26, 2022
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions common/interface.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,13 @@ type KeyBuilder interface {
Clone() KeyBuilder
}

// DataTrieHandler is an interface that declares the methods used for dataTries
type DataTrieHandler interface {
RootHash() ([]byte, error)
GetAllLeavesOnChannel(leavesChannel chan core.KeyValueHolder, ctx context.Context, rootHash []byte, keyBuilder KeyBuilder) error
IsInterfaceNil() bool
}

// StorageManager manages all trie storage operations
type StorageManager interface {
Get(key []byte) ([]byte, error)
Expand Down
2 changes: 1 addition & 1 deletion epochStart/metachain/baseRewards.go
Original file line number Diff line number Diff line change
Expand Up @@ -331,7 +331,7 @@ func (brc *baseRewardsCreator) isSystemDelegationSC(address []byte) bool {
return false
}

val, err := userAcc.DataTrieTracker().RetrieveValue([]byte(core.DelegationSystemSCKey))
val, err := userAcc.RetrieveValue([]byte(core.DelegationSystemSCKey))
if err != nil {
return false
}
Expand Down
13 changes: 5 additions & 8 deletions epochStart/metachain/baseRewards_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -855,15 +855,12 @@ func TestBaseRewardsCreator_isSystemDelegationSCTrue(t *testing.T) {
args.UserAccountsDB = &stateMock.AccountsStub{
GetExistingAccountCalled: func(address []byte) (vmcommon.AccountHandler, error) {
return &stateMock.UserAccountStub{
DataTrieTrackerCalled: func() state.DataTrieTracker {
return &mock.DataTrieTrackerStub{
RetrieveValueCalled: func(key []byte) ([]byte, error) {
if bytes.Equal(key, []byte("delegation")) {
return []byte("value"), nil
}
return nil, fmt.Errorf("error")
},
RetrieveValueCalled: func(key []byte) ([]byte, error) {
if bytes.Equal(key, []byte("delegation")) {
return []byte("value"), nil
}

return nil, fmt.Errorf("error")
},
}, nil
},
Expand Down
2 changes: 1 addition & 1 deletion epochStart/metachain/rewards_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -767,7 +767,7 @@ func TestRewardsCreator_ValidatorInfoWithMetaAddressAddedToProtocolSustainabilit

acc, _ := args.UserAccountsDB.LoadAccount(vm.FirstDelegationSCAddress)
userAcc, _ := acc.(state.UserAccountHandler)
_ = userAcc.DataTrieTracker().SaveKeyValue([]byte(core.DelegationSystemSCKey), []byte(core.DelegationSystemSCKey))
_ = userAcc.SaveKeyValue([]byte(core.DelegationSystemSCKey), []byte(core.DelegationSystemSCKey))
_ = args.UserAccountsDB.SaveAccount(userAcc)

miniBlocks, err := rwdc.CreateRewardsMiniBlocks(metaBlk, valInfo, &metaBlk.EpochStart.Economics)
Expand Down
2 changes: 1 addition & 1 deletion epochStart/metachain/stakingDataProvider_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -450,7 +450,7 @@ func saveOutputAccounts(t *testing.T, accountsDB state.AccountsAdapter, vmOutput

userAccount, _ := account.(state.UserAccountHandler)
for _, storeUpdate := range outputAccount.StorageUpdates {
_ = userAccount.DataTrieTracker().SaveKeyValue(storeUpdate.Offset, storeUpdate.Data)
_ = userAccount.SaveKeyValue(storeUpdate.Offset, storeUpdate.Data)
}

err := accountsDB.SaveAccount(account)
Expand Down
2 changes: 1 addition & 1 deletion epochStart/metachain/systemSCs.go
Original file line number Diff line number Diff line change
Expand Up @@ -891,7 +891,7 @@ func (s *systemSCProcessor) processSCOutputAccounts(

storageUpdates := process.GetSortedStorageUpdates(outAcc)
for _, storeUpdate := range storageUpdates {
err = acc.DataTrieTracker().SaveKeyValue(storeUpdate.Offset, storeUpdate.Data)
err = acc.SaveKeyValue(storeUpdate.Offset, storeUpdate.Data)
if err != nil {
return err
}
Expand Down
56 changes: 28 additions & 28 deletions epochStart/metachain/systemSCs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -265,7 +265,7 @@ func checkNodesStatusInSystemSCDataTrie(t *testing.T, nodes []*state.ValidatorIn
systemScAccount, ok := account.(state.UserAccountHandler)
require.True(t, ok)
for _, nodeInfo := range nodes {
buff, err = systemScAccount.DataTrieTracker().RetrieveValue(nodeInfo.PublicKey)
buff, err = systemScAccount.RetrieveValue(nodeInfo.PublicKey)
require.Nil(t, err)
require.True(t, len(buff) > 0)

Expand Down Expand Up @@ -547,7 +547,7 @@ func createEligibleNodes(numNodes int, stakingSCAcc state.UserAccountHandler, ma
StakeValue: big.NewInt(100),
}
marshaledData, _ := marshalizer.Marshal(stakedData)
_ = stakingSCAcc.DataTrieTracker().SaveKeyValue([]byte(fmt.Sprintf("waiting_%d", i)), marshaledData)
_ = stakingSCAcc.SaveKeyValue([]byte(fmt.Sprintf("waiting_%d", i)), marshaledData)
}
}

Expand All @@ -562,7 +562,7 @@ func createJailedNodes(numNodes int, stakingSCAcc state.UserAccountHandler, user
OwnerAddress: []byte("ownerForAll"),
}
marshaledData, _ := marshalizer.Marshal(stakedData)
_ = stakingSCAcc.DataTrieTracker().SaveKeyValue([]byte(fmt.Sprintf("jailed__%d", i)), marshaledData)
_ = stakingSCAcc.SaveKeyValue([]byte(fmt.Sprintf("jailed__%d", i)), marshaledData)

_ = userAccounts.SaveAccount(stakingSCAcc)

Expand Down Expand Up @@ -629,11 +629,11 @@ func addValidatorDataWithUnStakedKey(
OwnerAddress: ownerKey,
}
marshaledData, _ := marshalizer.Marshal(stakingData)
_ = stakingAccount.DataTrieTracker().SaveKeyValue(bls, marshaledData)
_ = stakingAccount.SaveKeyValue(bls, marshaledData)
}

marshaledData, _ := marshalizer.Marshal(validatorData)
_ = validatorAccount.DataTrieTracker().SaveKeyValue(ownerKey, marshaledData)
_ = validatorAccount.SaveKeyValue(ownerKey, marshaledData)

_ = accountsDB.SaveAccount(validatorAccount)
_ = accountsDB.SaveAccount(stakingAccount)
Expand All @@ -650,7 +650,7 @@ func createWaitingNodes(numNodes int, stakingSCAcc state.UserAccountHandler, use
StakeValue: big.NewInt(100),
}
marshaledData, _ := marshalizer.Marshal(stakedData)
_ = stakingSCAcc.DataTrieTracker().SaveKeyValue([]byte(fmt.Sprintf("waiting_%d", i)), marshaledData)
_ = stakingSCAcc.SaveKeyValue([]byte(fmt.Sprintf("waiting_%d", i)), marshaledData)
previousKey := string(waitingKeyInList)
waitingKeyInList = []byte("w_" + fmt.Sprintf("waiting_%d", i))
waitingListHead := &systemSmartContracts.WaitingList{
Expand All @@ -659,7 +659,7 @@ func createWaitingNodes(numNodes int, stakingSCAcc state.UserAccountHandler, use
Length: uint32(numNodes),
}
marshaledData, _ = marshalizer.Marshal(waitingListHead)
_ = stakingSCAcc.DataTrieTracker().SaveKeyValue([]byte("waitingList"), marshaledData)
_ = stakingSCAcc.SaveKeyValue([]byte("waitingList"), marshaledData)

waitingListElement := &systemSmartContracts.ElementInList{
BLSPublicKey: []byte(fmt.Sprintf("waiting_%d", i)),
Expand All @@ -674,7 +674,7 @@ func createWaitingNodes(numNodes int, stakingSCAcc state.UserAccountHandler, use
}

marshaledData, _ = marshalizer.Marshal(waitingListElement)
_ = stakingSCAcc.DataTrieTracker().SaveKeyValue(waitingKeyInList, marshaledData)
_ = stakingSCAcc.SaveKeyValue(waitingKeyInList, marshaledData)

vInfo := &state.ValidatorInfo{
PublicKey: []byte(fmt.Sprintf("waiting_%d", i)),
Expand Down Expand Up @@ -713,7 +713,7 @@ func addValidatorData(
}

marshaledData, _ := marshalizer.Marshal(validatorData)
_ = validatorSC.DataTrieTracker().SaveKeyValue(ownerKey, marshaledData)
_ = validatorSC.SaveKeyValue(ownerKey, marshaledData)

_ = accountsDB.SaveAccount(validatorSC)
}
Expand All @@ -732,7 +732,7 @@ func addStakedData(
StakeValue: big.NewInt(0),
}
marshaledData, _ := marshalizer.Marshal(stakedData)
_ = stakingSCAcc.DataTrieTracker().SaveKeyValue(stakedKey, marshaledData)
_ = stakingSCAcc.SaveKeyValue(stakedKey, marshaledData)

_ = accountsDB.SaveAccount(stakingSCAcc)
}
Expand All @@ -754,7 +754,7 @@ func prepareStakingContractWithData(
StakeValue: big.NewInt(100),
}
marshaledData, _ := marshalizer.Marshal(stakedData)
_ = stakingSCAcc.DataTrieTracker().SaveKeyValue(stakedKey, marshaledData)
_ = stakingSCAcc.SaveKeyValue(stakedKey, marshaledData)
_ = accountsDB.SaveAccount(stakingSCAcc)

saveOneKeyToWaitingList(accountsDB, waitingKey, marshalizer, rewardAddress, ownerAddress)
Expand All @@ -772,7 +772,7 @@ func prepareStakingContractWithData(
}

marshaledData, _ = marshalizer.Marshal(validatorData)
_ = validatorSC.DataTrieTracker().SaveKeyValue(rewardAddress, marshaledData)
_ = validatorSC.SaveKeyValue(rewardAddress, marshaledData)

_ = accountsDB.SaveAccount(validatorSC)
_, err := accountsDB.Commit()
Expand All @@ -794,7 +794,7 @@ func saveOneKeyToWaitingList(
StakeValue: big.NewInt(100),
}
marshaledData, _ := marshalizer.Marshal(stakedData)
_ = stakingSCAcc.DataTrieTracker().SaveKeyValue(waitingKey, marshaledData)
_ = stakingSCAcc.SaveKeyValue(waitingKey, marshaledData)

waitingKeyInList := []byte("w_" + string(waitingKey))
waitingListHead := &systemSmartContracts.WaitingList{
Expand All @@ -803,15 +803,15 @@ func saveOneKeyToWaitingList(
Length: 1,
}
marshaledData, _ = marshalizer.Marshal(waitingListHead)
_ = stakingSCAcc.DataTrieTracker().SaveKeyValue([]byte("waitingList"), marshaledData)
_ = stakingSCAcc.SaveKeyValue([]byte("waitingList"), marshaledData)

waitingListElement := &systemSmartContracts.ElementInList{
BLSPublicKey: waitingKey,
PreviousKey: waitingKeyInList,
NextKey: make([]byte, 0),
}
marshaledData, _ = marshalizer.Marshal(waitingListElement)
_ = stakingSCAcc.DataTrieTracker().SaveKeyValue(waitingKeyInList, marshaledData)
_ = stakingSCAcc.SaveKeyValue(waitingKeyInList, marshaledData)

_ = accountsDB.SaveAccount(stakingSCAcc)
}
Expand All @@ -833,18 +833,18 @@ func addKeysToWaitingList(
StakeValue: big.NewInt(100),
}
marshaledData, _ := marshalizer.Marshal(stakedData)
_ = stakingSCAcc.DataTrieTracker().SaveKeyValue(waitingKey, marshaledData)
_ = stakingSCAcc.SaveKeyValue(waitingKey, marshaledData)
}

marshaledData, _ := stakingSCAcc.DataTrieTracker().RetrieveValue([]byte("waitingList"))
marshaledData, _ := stakingSCAcc.RetrieveValue([]byte("waitingList"))
waitingListHead := &systemSmartContracts.WaitingList{}
_ = marshalizer.Unmarshal(waitingListHead, marshaledData)
waitingListHead.Length += uint32(len(waitingKeys))
lastKeyInList := []byte("w_" + string(waitingKeys[len(waitingKeys)-1]))
waitingListHead.LastKey = lastKeyInList

marshaledData, _ = marshalizer.Marshal(waitingListHead)
_ = stakingSCAcc.DataTrieTracker().SaveKeyValue([]byte("waitingList"), marshaledData)
_ = stakingSCAcc.SaveKeyValue([]byte("waitingList"), marshaledData)

numWaitingKeys := len(waitingKeys)
previousKey := waitingListHead.FirstKey
Expand All @@ -863,17 +863,17 @@ func addKeysToWaitingList(
}

marshaledData, _ = marshalizer.Marshal(waitingListElement)
_ = stakingSCAcc.DataTrieTracker().SaveKeyValue(waitingKeyInList, marshaledData)
_ = stakingSCAcc.SaveKeyValue(waitingKeyInList, marshaledData)

previousKey = waitingKeyInList
}

marshaledData, _ = stakingSCAcc.DataTrieTracker().RetrieveValue(waitingListHead.FirstKey)
marshaledData, _ = stakingSCAcc.RetrieveValue(waitingListHead.FirstKey)
waitingListElement := &systemSmartContracts.ElementInList{}
_ = marshalizer.Unmarshal(waitingListElement, marshaledData)
waitingListElement.NextKey = []byte("w_" + string(waitingKeys[0]))
marshaledData, _ = marshalizer.Marshal(waitingListElement)
_ = stakingSCAcc.DataTrieTracker().SaveKeyValue(waitingListHead.FirstKey, marshaledData)
_ = stakingSCAcc.SaveKeyValue(waitingListHead.FirstKey, marshaledData)

_ = accountsDB.SaveAccount(stakingSCAcc)
}
Expand Down Expand Up @@ -1484,7 +1484,7 @@ func addDelegationData(
}

marshaledData, _ := marshalizer.Marshal(dStatus)
_ = delegatorSC.DataTrieTracker().SaveKeyValue([]byte("delegationStatus"), marshaledData)
_ = delegatorSC.SaveKeyValue([]byte("delegationStatus"), marshaledData)
_ = accountsDB.SaveAccount(delegatorSC)
}

Expand Down Expand Up @@ -1563,7 +1563,7 @@ func TestSystemSCProcessor_ProcessSystemSmartContractUnStakeFromDelegationContra
assert.Equal(t, 4, len(validatorInfos[0]))

delegationSC := loadSCAccount(args.UserAccountsDB, delegationAddr)
marshalledData, err := delegationSC.DataTrie().Get([]byte("delegationStatus"))
marshalledData, err := delegationSC.DataTrie().(common.Trie).Get([]byte("delegationStatus"))
assert.Nil(t, err)
dStatus := &systemSmartContracts.DelegationContractStatus{
StakedKeys: make([]*systemSmartContracts.NodesData, 0),
Expand Down Expand Up @@ -1652,7 +1652,7 @@ func TestSystemSCProcessor_ProcessSystemSmartContractShouldUnStakeFromAdditional
}

delegationSC := loadSCAccount(args.UserAccountsDB, delegationAddr)
marshalledData, err := delegationSC.DataTrie().Get([]byte("delegationStatus"))
marshalledData, err := delegationSC.DataTrie().(common.Trie).Get([]byte("delegationStatus"))
assert.Nil(t, err)
dStatus := &systemSmartContracts.DelegationContractStatus{
StakedKeys: make([]*systemSmartContracts.NodesData, 0),
Expand Down Expand Up @@ -1742,7 +1742,7 @@ func TestSystemSCProcessor_ProcessSystemSmartContractUnStakeFromAdditionalQueue(
assert.Nil(t, err)

delegationSC := loadSCAccount(args.UserAccountsDB, delegationAddr2)
marshalledData, err := delegationSC.DataTrie().Get([]byte("delegationStatus"))
marshalledData, err := delegationSC.DataTrie().(common.Trie).Get([]byte("delegationStatus"))
assert.Nil(t, err)
dStatus := &systemSmartContracts.DelegationContractStatus{
StakedKeys: make([]*systemSmartContracts.NodesData, 0),
Expand All @@ -1758,7 +1758,7 @@ func TestSystemSCProcessor_ProcessSystemSmartContractUnStakeFromAdditionalQueue(
assert.Equal(t, []byte("waitingPubKe3"), dStatus.UnStakedKeys[1].BLSKey)

stakingSCAcc := loadSCAccount(args.UserAccountsDB, vm.StakingSCAddress)
marshaledData, _ := stakingSCAcc.DataTrieTracker().RetrieveValue([]byte("waitingList"))
marshaledData, _ := stakingSCAcc.RetrieveValue([]byte("waitingList"))
waitingListHead := &systemSmartContracts.WaitingList{}
_ = args.Marshalizer.Unmarshal(waitingListHead, marshaledData)
assert.Equal(t, uint32(3), waitingListHead.Length)
Expand Down Expand Up @@ -1827,14 +1827,14 @@ func TestSystemSCProcessor_TogglePauseUnPause(t *testing.T) {
assert.Nil(t, err)

validatorSC := loadSCAccount(s.userAccountsDB, vm.ValidatorSCAddress)
value, _ := validatorSC.DataTrie().Get([]byte("unStakeUnBondPause"))
value, _ := validatorSC.DataTrie().(common.Trie).Get([]byte("unStakeUnBondPause"))
assert.True(t, value[0] == 1)

err = s.ToggleUnStakeUnBond(false)
assert.Nil(t, err)

validatorSC = loadSCAccount(s.userAccountsDB, vm.ValidatorSCAddress)
value, _ = validatorSC.DataTrie().Get([]byte("unStakeUnBondPause"))
value, _ = validatorSC.DataTrie().(common.Trie).Get([]byte("unStakeUnBondPause"))
assert.True(t, value[0] == 0)
}

Expand Down
66 changes: 0 additions & 66 deletions epochStart/mock/dataTrieTrackerStub.go

This file was deleted.

Loading