blockv

package module
v0.0.0-...-397601f Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 23, 2022 License: GPL-3.0 Imports: 20 Imported by: 0

README

blockv

A blockchain-based distributed kv storage written in Golang

Documentation

Index

Constants

View Source
const (
	PROTOTYPE_KV = 1
	PROTONAME_KV = "kv"
)
View Source
const (
	KV_OP_SET = iota
	KV_OP_DEL
)
View Source
const (
	PKTTYP_NIL = iota // raw data
	PKTTYP_GET        // get value (a block) by key
	PKTTYP_SET        // set value (a block) of key
	PKTTYP_DEL        // del value (a block) of key
	PKTTYP_LST        // list all peers
	PKTTYP_ERQ        // echo request
)
View Source
const (
	PKT_HEAD_LEN = 1 + 1 + 16
	PKT_DATA_LEN = 256
)
View Source
const PUB_KEY_TAIL = "㴁"

Variables

This section is empty.

Functions

func FormatDatagram

func FormatDatagram(m Message, t *tea.TEA) (data []byte, err error)

func NewWriterF

func NewWriterF(f func(writer *Writer)) []byte

func OpenWriterF

func OpenWriterF(f func(*Writer)) (b []byte, cl func())

OpenWriterF must call func cl to close

func PutBlock

func PutBlock(b *Block)

PutBlock 将 Block 放回池中

func PutPacket

func PutPacket(p *Packet)

PutPacket 将 Packet 放回池中

func PutWriter

func PutWriter(w *Writer)

PutWriter 将 Writer 放回池中

func RegisterProtocol

func RegisterProtocol(p Protocol) error

func Verify

func Verify(pubk, digest, signature []byte) bool

Types

type Block

type Block struct {
	// contains filtered or unexported fields
}

Block 区块链中的一块。 当有分支出现时,将选择 md5值最小的区块进行链接 其余区块将被丢弃,直到 在新的链的末尾重新发起 链接请求,重复比较过程

func NewBlock

func NewBlock(protos ...Protocol) (b *Block, err error)

func ParseBlock

func ParseBlock(data []byte) (b *Block, err error)

func SelectBlock

func SelectBlock() *Block

SelectBlock 从池中取出一个 Block

func (*Block) Buffer

func (b *Block) Buffer() (buf net.Buffers)

Buffer is used to marshal block into bytes

func (*Block) Sign

func (b *Block) Sign(me *Me, prev *Block) error

func (*Block) Verify

func (b *Block) Verify(prev *Block) (*[16]byte, error)

Verify pass means digest *[16]byte != nil and err == nil

type KV

type KV struct {
	Operation uint8
	Key       string
	Value     string // Value will store the reason of del on KV_OP_DEL

	Protocol
	// contains filtered or unexported fields
}

func (*KV) Len

func (kv *KV) Len() int

func (*KV) New

func (kv *KV) New() Protocol

func (*KV) Read

func (kv *KV) Read(p []byte) (n int, err error)

func (*KV) Reset

func (kv *KV) Reset()

func (*KV) String

func (*KV) String() string

func (*KV) Type

func (kv *KV) Type() ProtoType

func (*KV) Write

func (kv *KV) Write(p []byte) (n int, err error)

type Me

type Me struct {
	// contains filtered or unexported fields
}

func LoadMe

func LoadMe(storagepath, configpath string) (*Me, error)

LoadMe loads config from path

func NewMe

func NewMe(storagepath, addr, pubkey, privkey, teakey, peers string) (m *Me, err error)

NewMe addr such as 0.0.0.0:8000

func (*Me) Close

func (m *Me) Close() error

func (*Me) Listen

func (m *Me) Listen()

func (*Me) PrivateKey

func (m *Me) PrivateKey() string

func (*Me) PublicKey

func (m *Me) PublicKey() string

func (*Me) Save

func (m *Me) Save(path string) error

Save config to path

func (*Me) Sign

func (m *Me) Sign(digest []byte) ([]byte, error)

type Message

type Message struct {
	Typ uint8
	Dat []byte
}

func ParseDatagram

func ParseDatagram(data []byte, t *tea.TEA) (m Message, err error)

type Packet

type Packet struct {
	Dat []byte // an easy-to-use pointer of dat
	io.Reader
	io.ReaderFrom
	io.Writer
	io.WriterTo
	// contains filtered or unexported fields
}

func NewPacket

func NewPacket(m Message, t *tea.TEA) (p *Packet, err error)

func SelectPacket

func SelectPacket() *Packet

SelectPacket 从池中取出一个 Packet

func (*Packet) Decrypt

func (p *Packet) Decrypt(t *tea.TEA) error

func (*Packet) Read

func (p *Packet) Read(b []byte) (n int, err error)

func (*Packet) ReadFrom

func (p *Packet) ReadFrom(r io.Reader) (n int64, err error)

ReadFrom unmarshals data from r into p

func (*Packet) Write

func (p *Packet) Write(b []byte) (n int, err error)

Write unmarshals data b into p

func (*Packet) WriteTo

func (p *Packet) WriteTo(w io.Writer) (n int64, err error)

type Peer

type Peer struct {
	// contains filtered or unexported fields
}

func NewPeer

func NewPeer(conn *net.UDPConn, dst *net.UDPAddr, t *tea.TEA) Peer

func (*Peer) GetReply

func (peer *Peer) GetReply(m Message) (rep Message, err error)

func (*Peer) Send

func (peer *Peer) Send(m Message) (err error)

type ProtoType

type ProtoType uint8

ProtoType is used to decide whether Protocol should be called when parsing Block.dat

type Protocol

type Protocol interface {
	// take a wrapped data into self and consume it
	io.Writer
	// write data into buffer
	io.Reader
	// length of data that will be write by calling Read
	Len() int
	// protocol name
	fmt.Stringer
	// protocol type
	Type() ProtoType
	// new self instance
	New() Protocol
}

Protocol wrap any data format into Block.dat

type Storage

type Storage struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

func NewStorage

func NewStorage(folder string) (*Storage, error)

func (*Storage) AppendBlock

func (s *Storage) AppendBlock(b *Block) error

func (*Storage) Get

func (s *Storage) Get(k string) (v string, err error)

func (*Storage) Set

func (s *Storage) Set(k, v string) (err error)

func (*Storage) VerifyAllBlocks

func (s *Storage) VerifyAllBlocks() error

type Writer

type Writer bytes.Buffer

Writer 写入

func SelectWriter

func SelectWriter() *Writer

SelectWriter 从池中取出一个 Writer

func (*Writer) Bytes

func (w *Writer) Bytes() []byte

func (*Writer) FillUInt16

func (w *Writer) FillUInt16() (pos int)

func (*Writer) FillUInt32

func (w *Writer) FillUInt32() (pos int)

func (*Writer) Grow

func (w *Writer) Grow(n int)

func (*Writer) Len

func (w *Writer) Len() int

func (*Writer) Reset

func (w *Writer) Reset()

func (*Writer) String

func (w *Writer) String() string

func (*Writer) Write

func (w *Writer) Write(b []byte) (n int, err error)

func (*Writer) WriteBool

func (w *Writer) WriteBool(b bool)

func (*Writer) WriteByte

func (w *Writer) WriteByte(b byte) error

func (*Writer) WriteHex

func (w *Writer) WriteHex(h string)

func (*Writer) WriteString

func (w *Writer) WriteString(v string)

func (*Writer) WriteUInt16

func (w *Writer) WriteUInt16(v uint16)

func (*Writer) WriteUInt16At

func (w *Writer) WriteUInt16At(pos int, v uint16)

func (*Writer) WriteUInt16LE

func (w *Writer) WriteUInt16LE(v uint16)

func (*Writer) WriteUInt32

func (w *Writer) WriteUInt32(v uint32)

func (*Writer) WriteUInt32At

func (w *Writer) WriteUInt32At(pos int, v uint32)

func (*Writer) WriteUInt32LE

func (w *Writer) WriteUInt32LE(v uint32)

func (*Writer) WriteUInt64

func (w *Writer) WriteUInt64(v uint64)

func (*Writer) WriteUInt64LE

func (w *Writer) WriteUInt64LE(v uint64)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL