blockchain

package
v0.0.0-...-b414c1e Latest Latest
Warning

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

Go to latest
Published: Nov 3, 2022 License: MIT Imports: 23 Imported by: 0

Documentation

Index

Constants

View Source
const Difficulty = 14

Variables

This section is empty.

Functions

func ToHex

func ToHex(num int64) []byte

Types

type Block

type Block struct {
	Timestamp    int64
	Hash         []byte        `json:"hash,omitempty"`
	Transactions []Transaction `json:"transactions,omitempty"`
	PrevHash     []byte        `json:"prev_hash,omitempty"`
	Nonce        int
	Height       int
}

func Genesis

func Genesis(coinbase Transaction) Block

func NewBlock

func NewBlock(txs []Transaction, prevHash []byte, height int) Block

func (Block) Deserialize

func (b Block) Deserialize(buffer []byte) error

func (Block) HashTransactions

func (b Block) HashTransactions() []byte

func (Block) Serialize

func (b Block) Serialize() []byte

type BlockChain

type BlockChain struct {
	LastHash []byte
	Database *badger.DB
}

func ContinueBlockChain

func ContinueBlockChain(nodeId string) *BlockChain

func InitBlockChain

func InitBlockChain(address, nodeId string) *BlockChain

func (*BlockChain) AddBlock

func (chain *BlockChain) AddBlock(block *Block)

func (*BlockChain) FindTransaction

func (chain *BlockChain) FindTransaction(ID []byte) (Transaction, error)

func (*BlockChain) FindUTXO

func (chain *BlockChain) FindUTXO() map[string]TxOutputs

func (*BlockChain) FindUnspentTransactions

func (chain *BlockChain) FindUnspentTransactions(pubKeyHash []byte) []Transaction

func (*BlockChain) GetBestHeight

func (chain *BlockChain) GetBestHeight() int

func (*BlockChain) GetBlock

func (chain *BlockChain) GetBlock(blockHash []byte) (*Block, error)

func (*BlockChain) GetBlockHashes

func (chain *BlockChain) GetBlockHashes() [][]byte

func (*BlockChain) Iterator

func (chain *BlockChain) Iterator() *BlockChainIterator

func (*BlockChain) MineBlock

func (chain *BlockChain) MineBlock(transactions []Transaction) Block

func (*BlockChain) SignTransaction

func (chain *BlockChain) SignTransaction(tx Transaction, privKey ecdsa.PrivateKey)

func (*BlockChain) VerifyTransaction

func (chain *BlockChain) VerifyTransaction(tx Transaction) bool

type BlockChainIterator

type BlockChainIterator struct {
	CurrentHash []byte
	Database    *badger.DB
}

func (*BlockChainIterator) Next

func (iter *BlockChainIterator) Next() Block

type MerkleNode

type MerkleNode struct {
	Left  *MerkleNode
	Right *MerkleNode
	Data  []byte
}

func NewMerkleNode

func NewMerkleNode(left, right *MerkleNode, data []byte) *MerkleNode

type MerkleTree

type MerkleTree struct {
	RootNode *MerkleNode
}

func NewMerkleTree

func NewMerkleTree(data [][]byte) *MerkleTree

type ProofOfWork

type ProofOfWork struct {
	Block  Block
	Target *big.Int
}

func NewProof

func NewProof(b Block) *ProofOfWork

func (*ProofOfWork) InitData

func (pow *ProofOfWork) InitData(nonce int) []byte

func (*ProofOfWork) Run

func (pow *ProofOfWork) Run() (int, []byte)

func (*ProofOfWork) Validate

func (pow *ProofOfWork) Validate() bool

type Transaction

type Transaction struct {
	ID      []byte     `json:"id,omitempty"`
	Inputs  []TxInput  `json:"tx_input,omitempty"`
	Outputs []TxOutput `json:"tx_output,omitempty"`
}

func CoinbaseTx

func CoinbaseTx(to, data string) Transaction

func NewTransaction

func NewTransaction(wallet *wal.Wallet, to string, amount int, UTXO *UTXOSet) Transaction

func (*Transaction) Deserialize

func (tx *Transaction) Deserialize(buffer []byte) error

func (*Transaction) Hash

func (tx *Transaction) Hash() []byte

func (*Transaction) IsCoinbase

func (tx *Transaction) IsCoinbase() bool

func (*Transaction) Serialize

func (tx *Transaction) Serialize() []byte

func (*Transaction) SetID

func (tx *Transaction) SetID()

func (*Transaction) Sign

func (tx *Transaction) Sign(privKey *ecdsa.PrivateKey, prevTXs map[string]Transaction)

func (Transaction) String

func (tx Transaction) String() string

func (*Transaction) TrimmedCopy

func (tx *Transaction) TrimmedCopy() Transaction

func (*Transaction) Verify

func (tx *Transaction) Verify(prevTXs map[string]Transaction) bool

type TxInput

type TxInput struct {
	ID        []byte `json:"id,omitempty"`
	Out       int
	Signature []byte `json:"signature,omitempty"`
	PubKey    []byte `json:"pub_key,omitempty"`
}

func NewTxInput

func NewTxInput(id []byte, out int, signature []byte, pubKey []byte) TxInput

func (TxInput) UsesKey

func (in TxInput) UsesKey(pubKeyHash []byte) bool

type TxOutput

type TxOutput struct {
	Value      int
	PubKeyHash []byte `json:"pub_key_hash,omitempty"`
}

func NewTxOutput

func NewTxOutput(value int, address string) *TxOutput

func (*TxOutput) IsLockedWithKey

func (out *TxOutput) IsLockedWithKey(pubKeyHash []byte) bool

func (*TxOutput) Lock

func (out *TxOutput) Lock(address []byte)

type TxOutputs

type TxOutputs struct {
	Outputs []TxOutput
}

type UTXOSet

type UTXOSet struct {
	Blockchain *BlockChain
}

func (*UTXOSet) CountTransactions

func (u *UTXOSet) CountTransactions() int

func (*UTXOSet) DeleteByPrefix

func (u *UTXOSet) DeleteByPrefix(prefix []byte)

func (*UTXOSet) FindSpendableOutputs

func (u *UTXOSet) FindSpendableOutputs(pubKeyHash []byte, amount int) (int, map[string][]int)

func (*UTXOSet) FindUnspentTransactions

func (u *UTXOSet) FindUnspentTransactions(pubKeyHash []byte) []TxOutput

func (*UTXOSet) Reindex

func (u *UTXOSet) Reindex()

func (*UTXOSet) Update

func (u *UTXOSet) Update(block Block)

Jump to

Keyboard shortcuts

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