Merge pull request #1535 from nspcc-dev/core/policy_initialization

core: remove policy default values initialisation
This commit is contained in:
Roman Khimov 2020-11-10 18:18:10 +03:00 committed by GitHub
commit e700fb2c96
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -148,34 +148,6 @@ func (p *Policy) Metadata() *interop.ContractMD {
// Initialize initializes Policy native contract and implements Contract interface. // Initialize initializes Policy native contract and implements Contract interface.
func (p *Policy) Initialize(ic *interop.Context) error { func (p *Policy) Initialize(ic *interop.Context) error {
si := &state.StorageItem{
Value: make([]byte, 4, 8),
}
binary.LittleEndian.PutUint32(si.Value, defaultMaxBlockSize)
err := ic.DAO.PutStorageItem(p.ContractID, maxBlockSizeKey, si)
if err != nil {
return err
}
binary.LittleEndian.PutUint32(si.Value, defaultMaxTransactionsPerBlock)
err = ic.DAO.PutStorageItem(p.ContractID, maxTransactionsPerBlockKey, si)
if err != nil {
return err
}
si.Value = si.Value[:8]
binary.LittleEndian.PutUint64(si.Value, defaultFeePerByte)
err = ic.DAO.PutStorageItem(p.ContractID, feePerByteKey, si)
if err != nil {
return err
}
binary.LittleEndian.PutUint64(si.Value, defaultMaxBlockSystemFee)
err = ic.DAO.PutStorageItem(p.ContractID, maxBlockSystemFeeKey, si)
if err != nil {
return err
}
p.isValid = true p.isValid = true
p.maxTransactionsPerBlock = defaultMaxTransactionsPerBlock p.maxTransactionsPerBlock = defaultMaxTransactionsPerBlock
p.maxBlockSize = defaultMaxBlockSize p.maxBlockSize = defaultMaxBlockSize
@ -200,18 +172,10 @@ func (p *Policy) OnPersistEnd(dao dao.DAO) error {
p.lock.Lock() p.lock.Lock()
defer p.lock.Unlock() defer p.lock.Unlock()
maxTxPerBlock := p.getUint32WithKey(dao, maxTransactionsPerBlockKey) p.maxTransactionsPerBlock = p.getUint32WithKey(dao, maxTransactionsPerBlockKey, defaultMaxTransactionsPerBlock)
p.maxTransactionsPerBlock = maxTxPerBlock p.maxBlockSize = p.getUint32WithKey(dao, maxBlockSizeKey, defaultMaxBlockSize)
p.feePerByte = p.getInt64WithKey(dao, feePerByteKey, defaultFeePerByte)
maxBlockSize := p.getUint32WithKey(dao, maxBlockSizeKey) p.maxBlockSystemFee = p.getInt64WithKey(dao, maxBlockSystemFeeKey, defaultMaxBlockSystemFee)
p.maxBlockSize = maxBlockSize
feePerByte := p.getInt64WithKey(dao, feePerByteKey)
p.feePerByte = feePerByte
maxBlockSystemFee := p.getInt64WithKey(dao, maxBlockSystemFeeKey)
p.maxBlockSystemFee = maxBlockSystemFee
p.maxVerificationGas = defaultMaxVerificationGas p.maxVerificationGas = defaultMaxVerificationGas
p.blockedAccounts = make([]util.Uint160, 0) p.blockedAccounts = make([]util.Uint160, 0)
@ -248,7 +212,7 @@ func (p *Policy) GetMaxTransactionsPerBlockInternal(dao dao.DAO) uint32 {
if p.isValid { if p.isValid {
return p.maxTransactionsPerBlock return p.maxTransactionsPerBlock
} }
return p.getUint32WithKey(dao, maxTransactionsPerBlockKey) return p.getUint32WithKey(dao, maxTransactionsPerBlockKey, defaultMaxTransactionsPerBlock)
} }
// getMaxBlockSize is Policy contract method and returns maximum block size. // getMaxBlockSize is Policy contract method and returns maximum block size.
@ -263,7 +227,7 @@ func (p *Policy) GetMaxBlockSizeInternal(dao dao.DAO) uint32 {
if p.isValid { if p.isValid {
return p.maxBlockSize return p.maxBlockSize
} }
return p.getUint32WithKey(dao, maxBlockSizeKey) return p.getUint32WithKey(dao, maxBlockSizeKey, defaultMaxBlockSize)
} }
// getFeePerByte is Policy contract method and returns required transaction's fee // getFeePerByte is Policy contract method and returns required transaction's fee
@ -279,7 +243,7 @@ func (p *Policy) GetFeePerByteInternal(dao dao.DAO) int64 {
if p.isValid { if p.isValid {
return p.feePerByte return p.feePerByte
} }
return p.getInt64WithKey(dao, feePerByteKey) return p.getInt64WithKey(dao, feePerByteKey, defaultFeePerByte)
} }
// GetMaxVerificationGas returns maximum gas allowed to be burned during verificaion. // GetMaxVerificationGas returns maximum gas allowed to be burned during verificaion.
@ -303,7 +267,7 @@ func (p *Policy) GetMaxBlockSystemFeeInternal(dao dao.DAO) int64 {
if p.isValid { if p.isValid {
return p.maxBlockSystemFee return p.maxBlockSystemFee
} }
return p.getInt64WithKey(dao, maxBlockSystemFeeKey) return p.getInt64WithKey(dao, maxBlockSystemFeeKey, defaultMaxBlockSystemFee)
} }
// isBlocked is Policy contract method and checks whether provided account is blocked. // isBlocked is Policy contract method and checks whether provided account is blocked.
@ -475,40 +439,36 @@ func (p *Policy) unblockAccount(ic *interop.Context, args []stackitem.Item) stac
return stackitem.NewBool(true) return stackitem.NewBool(true)
} }
func (p *Policy) getUint32WithKey(dao dao.DAO, key []byte) uint32 { func (p *Policy) getUint32WithKey(dao dao.DAO, key []byte, defaultValue uint32) uint32 {
si := dao.GetStorageItem(p.ContractID, key) si := dao.GetStorageItem(p.ContractID, key)
if si == nil { if si == nil {
return 0 return defaultValue
} }
return binary.LittleEndian.Uint32(si.Value) return binary.LittleEndian.Uint32(si.Value)
} }
func (p *Policy) setUint32WithKey(dao dao.DAO, key []byte, value uint32) error { func (p *Policy) setUint32WithKey(dao dao.DAO, key []byte, value uint32) error {
si := dao.GetStorageItem(p.ContractID, key) si := &state.StorageItem{
binary.LittleEndian.PutUint32(si.Value, value) Value: make([]byte, 4),
err := dao.PutStorageItem(p.ContractID, key, si)
if err != nil {
return err
} }
return nil binary.LittleEndian.PutUint32(si.Value, value)
return dao.PutStorageItem(p.ContractID, key, si)
} }
func (p *Policy) getInt64WithKey(dao dao.DAO, key []byte) int64 { func (p *Policy) getInt64WithKey(dao dao.DAO, key []byte, defaultValue int64) int64 {
si := dao.GetStorageItem(p.ContractID, key) si := dao.GetStorageItem(p.ContractID, key)
if si == nil { if si == nil {
return 0 return defaultValue
} }
return int64(binary.LittleEndian.Uint64(si.Value)) return int64(binary.LittleEndian.Uint64(si.Value))
} }
func (p *Policy) setInt64WithKey(dao dao.DAO, key []byte, value int64) error { func (p *Policy) setInt64WithKey(dao dao.DAO, key []byte, value int64) error {
si := dao.GetStorageItem(p.ContractID, key) si := &state.StorageItem{
binary.LittleEndian.PutUint64(si.Value, uint64(value)) Value: make([]byte, 8),
err := dao.PutStorageItem(p.ContractID, key, si)
if err != nil {
return err
} }
return nil binary.LittleEndian.PutUint64(si.Value, uint64(value))
return dao.PutStorageItem(p.ContractID, key, si)
} }
func (p *Policy) checkValidators(ic *interop.Context) (bool, error) { func (p *Policy) checkValidators(ic *interop.Context) (bool, error) {