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  }