github.com/hyperledger/burrow@v0.34.5-0.20220512172541-77f09336001d/execution/names/names.go (about) 1 // Copyright Monax Industries Limited 2 // SPDX-License-Identifier: Apache-2.0 3 4 package names 5 6 import ( 7 "fmt" 8 "reflect" 9 10 "github.com/hyperledger/burrow/event/query" 11 ) 12 13 var MinNameRegistrationPeriod uint64 = 5 14 15 const ( 16 17 // NOTE: base costs and validity checks are here so clients 18 // can use them without importing state 19 20 // cost for storing a name for a block is 21 // CostPerBlock*CostPerByte*(len(data) + 32) 22 NameByteCostMultiplier uint64 = 1 23 NameBlockCostMultiplier uint64 = 1 24 25 MaxNameLength = 64 26 MaxDataLength = 1 << 16 27 ) 28 29 func (e *Entry) String() string { 30 return fmt.Sprintf("NameEntry{%v -> %v; Expires: %v, Owner: %v}", e.Name, e.Data, e.Expires, e.Owner) 31 } 32 33 func (e *Entry) Get(key string) (value interface{}, ok bool) { 34 return query.GetReflect(reflect.ValueOf(e), key) 35 } 36 37 type Reader interface { 38 GetName(name string) (*Entry, error) 39 } 40 41 type Writer interface { 42 // Updates the name entry creating it if it does not exist 43 UpdateName(entry *Entry) error 44 // Remove the name entry 45 RemoveName(name string) error 46 } 47 48 type ReaderWriter interface { 49 Reader 50 Writer 51 } 52 53 type Iterable interface { 54 IterateNames(consumer func(*Entry) error) (err error) 55 } 56 57 type IterableReader interface { 58 Iterable 59 Reader 60 } 61 62 type IterableReaderWriter interface { 63 Iterable 64 ReaderWriter 65 } 66 67 // base cost is "effective" number of bytes 68 func NameBaseCost(name, data string) uint64 { 69 return uint64(len(data) + 32) 70 } 71 72 func NameCostPerBlock(baseCost uint64) uint64 { 73 return NameBlockCostMultiplier * NameByteCostMultiplier * baseCost 74 } 75 76 func NameCostForExpiryIn(name, data string, expiresIn uint64) uint64 { 77 return NameCostPerBlock(NameBaseCost(name, data)) * expiresIn 78 }