Documentation ¶
Index ¶
- func HashPubKey(pubKey []byte) []byte
- func ValidateAddress(address string) bool
- type Block
- type Blockchain
- func (bc *Blockchain) AddBlock(block *Block)
- func (bc *Blockchain) CloseConnection()
- func (bc *Blockchain) FindTransaction(ID []byte) (Transaction, error)
- func (bc *Blockchain) FindUTXO() map[string]TXOutputs
- func (bc *Blockchain) GetBestHeight() int
- func (bc *Blockchain) GetBlock(blockHash []byte) (Block, error)
- func (bc *Blockchain) GetBlockHashes() [][]byte
- func (bc *Blockchain) Iterator() *BlockchainIterator
- func (bc *Blockchain) MineBlock(transactions []*Transaction) *Block
- func (bc *Blockchain) SignTransaction(tx *Transaction, privKey ecdsa.PrivateKey)
- func (bc *Blockchain) VerifyTransaction(tx *Transaction) bool
- type BlockchainIterator
- type MerkleNode
- type MerkleTree
- type ProofOfWork
- type TXInput
- type TXOutput
- type TXOutputs
- type Transaction
- func (tx *Transaction) Hash() []byte
- func (tx Transaction) IsCoinbase() bool
- func (tx Transaction) Serialize() []byte
- func (tx *Transaction) Sign(privKey ecdsa.PrivateKey, prevTXs map[string]Transaction)
- func (tx Transaction) String() string
- func (tx *Transaction) TrimmedCopy() Transaction
- func (tx *Transaction) Verify(prevTXs map[string]Transaction) bool
- type UTXOSet
- type Wallet
- type Wallets
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ValidateAddress ¶
ValidateAddress check if address if valid
Types ¶
type Block ¶
type Block struct { Timestamp int64 Transactions []*Transaction PrevBlockHash []byte Hash []byte Nonce int Height int }
Block represents a block in the blockchain
func DeserializeBlock ¶
DeserializeBlock deserializes a block
func NewBlock ¶
func NewBlock(transactions []*Transaction, prevBlockHash []byte, height int) *Block
NewBlock creates and returns Block
func NewGenesisBlock ¶
func NewGenesisBlock(coinbase *Transaction) *Block
NewGenesisBlock creates and returns genesis Block
func (*Block) HashTransactions ¶
HashTransactions returns a hash of the transactions in the block
type Blockchain ¶
type Blockchain struct {
// contains filtered or unexported fields
}
Blockchain implements interactions with a DB
func CreateBlockchain ¶
func CreateBlockchain(address, nodeID string) *Blockchain
CreateBlockchain creates a new blockchain DB
func NewBlockchain ¶
func NewBlockchain(nodeID string) *Blockchain
NewBlockchain creates a new Blockchain with genesis Block
func (*Blockchain) AddBlock ¶
func (bc *Blockchain) AddBlock(block *Block)
AddBlock saves the block into the blockchain
func (*Blockchain) CloseConnection ¶
func (bc *Blockchain) CloseConnection()
CloseConnection close db connection
func (*Blockchain) FindTransaction ¶
func (bc *Blockchain) FindTransaction(ID []byte) (Transaction, error)
FindTransaction finds a transaction by its ID
func (*Blockchain) FindUTXO ¶
func (bc *Blockchain) FindUTXO() map[string]TXOutputs
FindUTXO finds all unspent transaction outputs and returns transactions with spent outputs removed
func (*Blockchain) GetBestHeight ¶
func (bc *Blockchain) GetBestHeight() int
GetBestHeight returns the height of the latest block
func (*Blockchain) GetBlock ¶
func (bc *Blockchain) GetBlock(blockHash []byte) (Block, error)
GetBlock finds a block by its hash and returns it
func (*Blockchain) GetBlockHashes ¶
func (bc *Blockchain) GetBlockHashes() [][]byte
GetBlockHashes returns a list of hashes of all the blocks in the chain
func (*Blockchain) Iterator ¶
func (bc *Blockchain) Iterator() *BlockchainIterator
Iterator returns a BlockchainIterat
func (*Blockchain) MineBlock ¶
func (bc *Blockchain) MineBlock(transactions []*Transaction) *Block
MineBlock mines a new block with the provided transactions
func (*Blockchain) SignTransaction ¶
func (bc *Blockchain) SignTransaction(tx *Transaction, privKey ecdsa.PrivateKey)
SignTransaction signs inputs of a Transaction
func (*Blockchain) VerifyTransaction ¶
func (bc *Blockchain) VerifyTransaction(tx *Transaction) bool
VerifyTransaction verifies transaction input signatures
type BlockchainIterator ¶
type BlockchainIterator struct {
// contains filtered or unexported fields
}
BlockchainIterator is used to iterate over blockchain blocks
func (*BlockchainIterator) Next ¶
func (i *BlockchainIterator) Next() *Block
Next returns next block starting from the tip
type MerkleNode ¶
type MerkleNode struct { Left *MerkleNode Right *MerkleNode Data []byte }
MerkleNode represent a Merkle tree node
func NewMerkleNode ¶
func NewMerkleNode(left, right *MerkleNode, data []byte) *MerkleNode
NewMerkleNode creates a new Merkle tree node
type MerkleTree ¶
type MerkleTree struct {
RootNode *MerkleNode
}
MerkleTree represent a Merkle tree
func NewMerkleTree ¶
func NewMerkleTree(data [][]byte) *MerkleTree
NewMerkleTree creates a new Merkle tree from a sequence of data
type ProofOfWork ¶
type ProofOfWork struct {
// contains filtered or unexported fields
}
ProofOfWork represents a proof-of-work
func NewProofOfWork ¶
func NewProofOfWork(b *Block) *ProofOfWork
NewProofOfWork builds and returns a ProofOfWork
func (*ProofOfWork) Validate ¶
func (pow *ProofOfWork) Validate() bool
Validate validates block's PoW
type TXOutput ¶
TXOutput represents a transaction output
func NewTXOutput ¶
NewTXOutput create a new TXOutput
func (*TXOutput) IsLockedWithKey ¶
IsLockedWithKey checks if the output can be used by the owner of the pubkey
type TXOutputs ¶
type TXOutputs struct {
Outputs []TXOutput
}
TXOutputs collects TXOutput
func DeserializeOutputs ¶
DeserializeOutputs deserializes TXOutputs
type Transaction ¶
Transaction represents a Bitcoin transaction
func DeserializeTransaction ¶
func DeserializeTransaction(data []byte) Transaction
DeserializeTransaction deserializes a transaction
func NewCoinbaseTX ¶
func NewCoinbaseTX(to, data string) *Transaction
NewCoinbaseTX creates a new coinbase transaction
func NewUTXOTransaction ¶
func NewUTXOTransaction(wallet *Wallet, to string, amount int, UTXOSet *UTXOSet) *Transaction
NewUTXOTransaction creates a new transaction
func (*Transaction) Hash ¶
func (tx *Transaction) Hash() []byte
Hash returns the hash of the Transaction
func (Transaction) IsCoinbase ¶
func (tx Transaction) IsCoinbase() bool
IsCoinbase checks whether the transaction is coinbase
func (Transaction) Serialize ¶
func (tx Transaction) Serialize() []byte
Serialize returns a serialized Transaction
func (*Transaction) Sign ¶
func (tx *Transaction) Sign(privKey ecdsa.PrivateKey, prevTXs map[string]Transaction)
Sign signs each input of a Transaction
func (Transaction) String ¶
func (tx Transaction) String() string
String returns a human-readable representation of a transaction
func (*Transaction) TrimmedCopy ¶
func (tx *Transaction) TrimmedCopy() Transaction
TrimmedCopy creates a trimmed copy of Transaction to be used in signing
func (*Transaction) Verify ¶
func (tx *Transaction) Verify(prevTXs map[string]Transaction) bool
Verify verifies signatures of Transaction inputs
type UTXOSet ¶
type UTXOSet struct {
Blockchain *Blockchain
}
UTXOSet represents UTXO set
func (UTXOSet) CountTransactions ¶
CountTransactions returns the number of transactions in the UTXO set
func (UTXOSet) FindSpendableOutputs ¶
FindSpendableOutputs finds and returns unspent outputs to reference in inputs
type Wallet ¶
type Wallet struct { PrivateKey ecdsa.PrivateKey PublicKey []byte }
Wallet stores private and public keys
type Wallets ¶
Wallets stores a collection of wallets
func NewWallets ¶
NewWallets creates Wallets and fills it from a file if it exists
func (*Wallets) CreateWallet ¶
CreateWallet adds a Wallet to Wallets
func (*Wallets) GetAddresses ¶
GetAddresses returns an array of addresses stored in the wallet file
func (*Wallets) LoadFromFile ¶
LoadFromFile loads wallets from the file
func (Wallets) SaveToFile ¶
SaveToFile saves wallets to a file