Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func VerifySize ¶
func VerifySize(chainType consensus.ChainType, prePoW []uint8, bh *BlockHeader) error
VerifySize validates the proof of work of a given header, and that the proof of work satisfies the requirements of the header.
Types ¶
type BlockHeader ¶
type BlockHeader struct {
// Version of the block
Version uint16
// Height of this block since the genesis block (height 0)
Height uint64
// Hash of the block previous to this in the chain.
PrevHash string
// Root hash of the header MMR at the previous header.
PrevRoot string
// Timestamp at which the block was built.
Timestamp string
// Merklish root of all the commitments in the TxHashSet
OutputRoot string
// Merklish root of all range proofs in the TxHashSet
RangeProofRoot string
// Merklish root of all transaction kernels in the TxHashSet
KernelRoot string
// Total accumulated sum of kernel offsets since genesis block.
// We can derive the kernel offset sum for *this* block from
// the total kernel offset of the previous block header.
TotalKernelOffset string
// Total size of the output MMR after applying this block
OutputMmrSize uint64
// Total size of the kernel MMR after applying this block
KernelMmrSize uint64
// Proof of work and related
PoW pow.ProofOfWork
}
BlockHeader is a block header, fairly standard compared to other blockchains.
type Input ¶
type Input struct {
// The features of the output being spent.
// We will check maturity for coinbase output.
Features OutputFeatures `json:"features"`
// The commit referencing the output being spent.
Commit string `json:"commit"`
}
Input is a transaction input.
Primarily a reference to an output being spent by the transaction.
type KernelFeatures ¶
type KernelFeatures int
KernelFeatures is an enum of various supported kernels "features".
const ( // PlainKernel kernel (the default for Grin txs). PlainKernel KernelFeatures = iota // CoinbaseKernel is a coinbase kernel. CoinbaseKernel // HeightLockedKernel is a kernel with an explicit lock height. HeightLockedKernel )
func (KernelFeatures) MarshalJSON ¶
func (s KernelFeatures) MarshalJSON() ([]byte, error)
MarshalJSON marshals the enum as a quoted json string
func (KernelFeatures) String ¶
func (s KernelFeatures) String() string
func (*KernelFeatures) UnmarshalJSON ¶
func (s *KernelFeatures) UnmarshalJSON(b []byte) error
UnmarshalJSON unmarshals a quoted json string to the enum value
type Output ¶
type Output struct {
// Options for an output's structure or use
Features OutputFeatures `json:"features"`
// The homomorphic commitment representing the output amount
Commit string `json:"commit"`
// A proof that the commitment is in the right range
Proof string `json:"proof"`
}
Output for a transaction, defining the new ownership of coins that are being transferred. The commitment is a blinded value for the output while the range proof guarantees the commitment includes a positive value without overflow and the ownership of the private key. The switch commitment hash provides future-proofing against quantum-based attacks, as well as providing wallet implementations with a way to identify their outputs for wallet reconstruction.
type OutputFeatures ¶
type OutputFeatures int
OutputFeatures is an enum of various supported outputs "features".
const ( // PlainOutput output (the default for Grin txs). PlainOutput OutputFeatures = iota // CoinbaseOutput is a coinbase output. CoinbaseOutput )
func (OutputFeatures) MarshalJSON ¶
func (s OutputFeatures) MarshalJSON() ([]byte, error)
MarshalJSON marshals the enum as a quoted json string
func (OutputFeatures) String ¶
func (s OutputFeatures) String() string
func (*OutputFeatures) UnmarshalJSON ¶
func (s *OutputFeatures) UnmarshalJSON(b []byte) error
UnmarshalJSON unmarshals a quoted json string to the enum value
type OutputIdentifier ¶
type OutputIdentifier struct {
// Output features (coinbase vs. regular transaction output)
// We need to include this when hashing to ensure coinbase maturity can be
// enforced.
Features OutputFeatures `json:"features"`
// Output commitment
Commit string `json:"commit"`
}
An OutputIdentifier can be build from either an input _or_ an output and contains everything we need to uniquely identify an output being spent. Needed because it is not sufficient to pass a commitment around.
type Transaction ¶
type Transaction struct {
// The kernel "offset" k2
// excess is k1G after splitting the key k = k1 + k2
Offset string `json:"offset"`
// The transaction body - inputs/outputs/kernels
Body TransactionBody `json:"body"`
}
Transaction represents a transaction
type TransactionBody ¶
type TransactionBody struct {
// List of inputs spent by the transaction.
Inputs []Input `json:"inputs"`
// List of outputs the transaction produces.
Outputs []Output `json:"outputs"`
// List of kernels that make up this transaction (usually a single kernel).
Kernels []TxKernel `json:"kernels"`
}
TransactionBody is a common abstraction for transaction and block
type TxKernel ¶
type TxKernel struct {
// Options for a kernel's structure or use
Features KernelFeatures `json:"features"`
// Fee originally included in the transaction this proof is for.
Fee Uint64 `json:"fee"`
// This kernel is not valid earlier than lock_height blocks
// The max lock_height of all *inputs* to this transaction
LockHeight Uint64 `json:"lock_height"`
// Remainder of the sum of all transaction commitments. If the transaction
// is well formed, amounts components should sum to zero and the excess
// is hence a valid public key.
Excess string `json:"excess"`
// The signature proving the excess is a valid public key, which signs
// the transaction fee.
ExcessSig string `json:"excess_sig"`
}
TxKernel is a proof that a transaction sums to zero. Includes both the transaction's Pedersen commitment and the signature, that guarantees that the commitments amount to zero. The signature signs the fee and the lock_height, which are retained for signature validation.
type Uint64 ¶
type Uint64 uint64
Uint64 is an uint64 that can be unmarshal from a string or uint64 is marshal to a string
func (Uint64) MarshalJSON ¶
MarshalJSON marshals the Uint64 as a quoted uint64 string
func (*Uint64) UnmarshalJSON ¶
UnmarshalJSON unmarshals a quoted an uint64 or a string to an uint64 value