From d7502debba9e7ae4ff9bb125cfa76bd0fc3b99ee Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Tue, 3 Nov 2020 22:50:40 +0300 Subject: [PATCH] core: adjust storage update fees Follow neo-project/neo#2033. --- pkg/core/interop_system.go | 8 ++++++-- pkg/core/interop_system_test.go | 4 +++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/pkg/core/interop_system.go b/pkg/core/interop_system.go index c1f43d023..509d76344 100644 --- a/pkg/core/interop_system.go +++ b/pkg/core/interop_system.go @@ -396,8 +396,12 @@ func putWithContextAndFlags(ic *interop.Context, stc *StorageContext, key []byte if si == nil { si = &state.StorageItem{} sizeInc = len(key) + len(value) - } else if len(value) > len(si.Value) { - sizeInc = len(value) - len(si.Value) + } else if len(value) != 0 { + if len(value) <= len(si.Value) { + sizeInc = (len(value)-1)/4 + 1 + } else { + sizeInc = (len(si.Value)-1)/4 + 1 + len(value) - len(si.Value) + } } if !ic.VM.AddGas(int64(sizeInc) * StoragePrice) { return errGasLimitExceeded diff --git a/pkg/core/interop_system_test.go b/pkg/core/interop_system_test.go index 00d5644ea..0eaf8e274 100644 --- a/pkg/core/interop_system_test.go +++ b/pkg/core/interop_system_test.go @@ -364,7 +364,9 @@ func TestStoragePut(t *testing.T) { err := storagePut(ic) require.True(t, errors.Is(err, errGasLimitExceeded), "got: %v", err) }) - initVM(t, []byte{4}, []byte{5, 6, 7, 8}, 2*StoragePrice) + initVM(t, []byte{4}, []byte{5, 6, 7, 8}, 3*StoragePrice) + require.NoError(t, storagePut(ic)) + initVM(t, []byte{4}, []byte{5, 6}, StoragePrice) require.NoError(t, storagePut(ic)) }) }