Documentation
¶
Index ¶
- type BinaryMarshallable
- type BinaryMarshallableAndCopyable
- type DBOverlay
- type DBOverlaySimple
- type DBStateSent
- type DatabaseBatchable
- type DatabaseBlockWithEntries
- type IABEntry
- type IABlockHeader
- type IAddress
- type IAdminBlock
- type IAnchor
- type IAnchorRecord
- type IAuthority
- type IConfirmation
- type IDBEntry
- type IDBState
- type IDatabase
- type IDirBlockInfo
- type IDirectoryBlock
- type IDirectoryBlockHeader
- type IEBEntry
- type IEBlockBody
- type IECBlockBody
- type IECBlockEntry
- type IECBlockHeader
- type IElectionAdapter
- type IElectionMsg
- type IElections
- type IElectionsFactory
- type IEntry
- type IEntryBlock
- type IEntryBlockHeader
- type IEntryCreditBlock
- type IFBlock
- type IFEREntry
- type IFactoidState
- type IFactomConfig
- type IFedVoteMsg
- type IFullSignature
- type IGeneralMsg
- type IHash
- type IIdentityABEntry
- type IIdentityABEntrySort
- type IMLog
- type IManagerController
- type IMsg
- type IMsgAck
- type IMsgFactory
- type IMsgInternal
- type INetwork
- type IPeer
- type IPendingEntry
- type IPendingTransaction
- type IProcessList
- type IQueue
- type IRCD
- type IRCD_1
- type IRequest
- type ISCDatabaseOverlay
- type ISCWallet
- type IServer
- type ISignable
- type ISignableElectionMsg
- type ISignature
- type ISignatureBlock
- type IState
- type ISystem
- type ITransAddress
- type ITransaction
- type IWalletEntry
- type IndividualObj
- type JSONable
- type Printable
- type Record
- type ShortInterpretable
- type Signable
- type Signer
- type StructToReturnValues
- type Timestamp
- type Verifier
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type BinaryMarshallable ¶
type BinaryMarshallable interface {
encoding.BinaryMarshaler
encoding.BinaryUnmarshaler
UnmarshalBinaryData([]byte) ([]byte, error)
}
type BinaryMarshallableAndCopyable ¶
type BinaryMarshallableAndCopyable interface {
BinaryMarshallable
New() BinaryMarshallableAndCopyable
}
type DBOverlay ¶
type DBOverlay interface {
// We let Database method calls flow through.
IDatabase
FetchHeadIndexByChainID(chainID IHash) (IHash, error)
SetExportData(path string)
StartMultiBatch()
PutInMultiBatch(records []Record)
ExecuteMultiBatch() error
GetEntryType(hash IHash) (IHash, error)
// InsertEntry inserts an entry
InsertEntry(entry IEBEntry) (err error)
InsertEntryMultiBatch(entry IEBEntry) error
// FetchEntry gets an entry by hash from the database.
FetchEntry(IHash) (IEBEntry, error)
FetchAllEntriesByChainID(chainID IHash) ([]IEBEntry, error)
FetchAllEntryIDsByChainID(chainID IHash) ([]IHash, error)
FetchAllEntryIDs() ([]IHash, error)
// ProcessEBlockBatche inserts the EBlock and update all it's ebentries in DB
ProcessEBlockBatch(eblock DatabaseBlockWithEntries, checkForDuplicateEntries bool) error
ProcessEBlockBatchWithoutHead(eblock DatabaseBlockWithEntries, checkForDuplicateEntries bool) error
ProcessEBlockMultiBatchWithoutHead(eblock DatabaseBlockWithEntries, checkForDuplicateEntries bool) error
ProcessEBlockMultiBatch(eblock DatabaseBlockWithEntries, checkForDuplicateEntries bool) error
FetchEBlock(IHash) (IEntryBlock, error)
// FetchEBlockByHash gets an entry by hash from the database.
FetchEBlockByPrimary(IHash) (IEntryBlock, error)
// FetchEBlockByKeyMR gets an entry by hash from the database.
FetchEBlockBySecondary(hash IHash) (IEntryBlock, error)
// FetchEBKeyMRByHash gets an entry by hash from the database.
FetchEBKeyMRByHash(hash IHash) (IHash, error)
// FetchAllEBlocksByChain gets all of the blocks by chain id
FetchAllEBlocksByChain(IHash) ([]IEntryBlock, error)
SaveEBlockHead(block DatabaseBlockWithEntries, checkForDuplicateEntries bool) error
FetchEBlockHead(chainID IHash) (IEntryBlock, error)
FetchAllEBlockChainIDs() ([]IHash, error)
// ProcessDBlockBatche inserts the EBlock and update all it's ebentries in DB
ProcessDBlockBatch(block DatabaseBlockWithEntries) error
ProcessDBlockBatchWithoutHead(block DatabaseBlockWithEntries) error
ProcessDBlockMultiBatch(block DatabaseBlockWithEntries) error
// FetchHeightRange looks up a range of blocks by the start and ending
// heights. Fetch is inclusive of the start height and exclusive of the
// ending height. To fetch all hashes from the start height until no
// more are present, use -1 as endHeight.
FetchDBlockHeightRange(startHeight, endHeight int64) ([]IHash, error)
// FetchBlockHeightByKeyMR returns the block height for the given hash. This is
// part of the database.Db interface implementation.
FetchDBlockHeightByKeyMR(IHash) (int64, error)
FetchDBlock(IHash) (IDirectoryBlock, error)
// FetchDBlock gets an entry by hash from the database.
FetchDBlockByPrimary(IHash) (IDirectoryBlock, error)
// FetchDBlock gets an entry by hash from the database.
FetchDBlockBySecondary(IHash) (IDirectoryBlock, error)
// FetchDBlockByHeight gets an directory block by height from the database.
FetchDBlockByHeight(uint32) (IDirectoryBlock, error)
FetchDBlockHead() (IDirectoryBlock, error)
// FetchDBKeyMRByHeight gets a dBlock KeyMR from the database.
FetchDBKeyMRByHeight(dBlockHeight uint32) (dBlockKeyMR IHash, err error)
// FetchDBKeyMRByHash gets a DBlock KeyMR by hash.
FetchDBKeyMRByHash(hash IHash) (dBlockHash IHash, err error)
// FetchAllFBInfo gets all of the fbInfo
FetchAllDBlocks() ([]IDirectoryBlock, error)
FetchAllDBlockKeys() ([]IHash, error)
SaveDirectoryBlockHead(DatabaseBlockWithEntries) error
FetchDirectoryBlockHead() (IDirectoryBlock, error)
// ProcessECBlockBatch inserts the ECBlock and update all it's ecbentries in DB
ProcessECBlockBatch(IEntryCreditBlock, bool) (err error)
ProcessECBlockBatchWithoutHead(IEntryCreditBlock, bool) (err error)
ProcessECBlockMultiBatch(IEntryCreditBlock, bool) (err error)
FetchECBlock(IHash) (IEntryCreditBlock, error)
// FetchECBlockByHash gets an Entry Credit block by hash from the database.
FetchECBlockByPrimary(IHash) (IEntryCreditBlock, error)
// FetchECBlockByKeyMR gets an Entry Credit block by hash from the database.
FetchECBlockBySecondary(hash IHash) (IEntryCreditBlock, error)
FetchECBlockByHeight(blockHeight uint32) (IEntryCreditBlock, error)
// FetchAllECBlocks gets all of the entry credit blocks
FetchAllECBlocks() ([]IEntryCreditBlock, error)
FetchAllECBlockKeys() ([]IHash, error)
SaveECBlockHead(IEntryCreditBlock, bool) error
FetchECBlockHead() (IEntryCreditBlock, error)
// ProcessABlockBatch inserts the AdminBlock
ProcessABlockBatch(block DatabaseBatchable) error
ProcessABlockBatchWithoutHead(block DatabaseBatchable) error
ProcessABlockMultiBatch(block DatabaseBatchable) error
FetchABlock(IHash) (IAdminBlock, error)
// FetchABlockByHash gets an admin block by hash from the database.
FetchABlockByPrimary(hash IHash) (IAdminBlock, error)
// FetchABlockByKeyMR gets an admin block by keyMR from the database.
FetchABlockBySecondary(hash IHash) (IAdminBlock, error)
FetchABlockByHeight(blockHeight uint32) (IAdminBlock, error)
// FetchAllABlocks gets all of the admin blocks
FetchAllABlocks() ([]IAdminBlock, error)
FetchAllABlockKeys() ([]IHash, error)
SaveABlockHead(DatabaseBatchable) error
FetchABlockHead() (IAdminBlock, error)
// ProcessFBlockBatch inserts the Factoid
ProcessFBlockBatch(DatabaseBlockWithEntries) error
ProcessFBlockBatchWithoutHead(DatabaseBlockWithEntries) error
ProcessFBlockMultiBatch(DatabaseBlockWithEntries) error
FetchFBlock(IHash) (IFBlock, error)
// FetchFBlockByHash gets a factoid block by hash from the database.
FetchFBlockByPrimary(IHash) (IFBlock, error)
FetchFBlockBySecondary(IHash) (IFBlock, error)
FetchFBlockByHeight(blockHeight uint32) (IFBlock, error)
// FetchAllFBlocks gets all of the factoid blocks
FetchAllFBlocks() ([]IFBlock, error)
FetchAllFBlockKeys() ([]IHash, error)
SaveFactoidBlockHead(fblock DatabaseBlockWithEntries) error
FetchFactoidBlockHead() (IFBlock, error)
FetchFBlockHead() (IFBlock, error)
// ProcessDirBlockInfoBatch inserts the dirblock info block
ProcessDirBlockInfoBatch(block IDirBlockInfo) error
// FetchDirBlockInfoByHash gets a dirblock info block by hash from the database.
FetchDirBlockInfoByHash(hash IHash) (IDirBlockInfo, error)
// FetchDirBlockInfoByKeyMR gets a dirblock info block by keyMR from the database.
FetchDirBlockInfoByKeyMR(hash IHash) (IDirBlockInfo, error)
// FetchAllConfirmedDirBlockInfos gets all of the confirmed dirblock info blocks
FetchAllConfirmedDirBlockInfos() ([]IDirBlockInfo, error)
// FetchAllUnconfirmedDirBlockInfos gets all of the unconfirmed dirblock info blocks
FetchAllUnconfirmedDirBlockInfos() ([]IDirBlockInfo, error)
// FetchAllDirBlockInfos gets all of the dirblock info blocks
FetchAllDirBlockInfos() ([]IDirBlockInfo, error)
SaveDirBlockInfo(block IDirBlockInfo) error
SaveIncludedIn(entry, block IHash) error
SaveIncludedInMultiFromBlock(block DatabaseBlockWithEntries, checkForDuplicateEntries bool) error
SaveIncludedInMulti(entries []IHash, block IHash, checkForDuplicateEntries bool) error
FetchIncludedIn(hash IHash) (IHash, error)
ReparseAnchorChains() error
SetBitcoinAnchorRecordPublicKeysFromHex([]string) error
SetEthereumAnchorRecordPublicKeysFromHex([]string) error
FetchPaidFor(hash IHash) (IHash, error)
FetchFactoidTransaction(hash IHash) (ITransaction, error)
FetchECTransaction(hash IHash) (IECBlockEntry, error)
//******************************KeyValueStore**********************************//
SaveKeyValueStore(kvs BinaryMarshallable, key []byte) error
FetchKeyValueStore(key []byte, dst BinaryMarshallable) (BinaryMarshallable, error)
SaveDatabaseEntryHeight(height uint32) error
FetchDatabaseEntryHeight() (uint32, error)
}
Db defines a generic interface that is used to request and insert data into db
type DBOverlaySimple ¶
type DBOverlaySimple interface {
Close() error
DoesKeyExist(bucket, key []byte) (bool, error)
ExecuteMultiBatch() error
FetchABlock(IHash) (IAdminBlock, error)
FetchABlockByHeight(blockHeight uint32) (IAdminBlock, error)
FetchDBKeyMRByHeight(dBlockHeight uint32) (dBlockKeyMR IHash, err error)
FetchDBlock(IHash) (IDirectoryBlock, error)
FetchDBlockByHeight(uint32) (IDirectoryBlock, error)
FetchDBlockHead() (IDirectoryBlock, error)
FetchEBlock(IHash) (IEntryBlock, error)
FetchEBlockHead(chainID IHash) (IEntryBlock, error)
FetchECBlock(IHash) (IEntryCreditBlock, error)
FetchECBlockByHeight(blockHeight uint32) (IEntryCreditBlock, error)
FetchECTransaction(hash IHash) (IECBlockEntry, error)
FetchEntry(IHash) (IEBEntry, error)
FetchFBlock(IHash) (IFBlock, error)
FetchFBlockByHeight(blockHeight uint32) (IFBlock, error)
FetchFactoidTransaction(hash IHash) (ITransaction, error)
FetchHeadIndexByChainID(chainID IHash) (IHash, error)
FetchIncludedIn(hash IHash) (IHash, error)
FetchPaidFor(hash IHash) (IHash, error)
FetchAllEBlocksByChain(IHash) ([]IEntryBlock, error)
InsertEntryMultiBatch(entry IEBEntry) error
InsertEntry(entry IEBEntry) error
ProcessABlockMultiBatch(block DatabaseBatchable) error
ProcessDBlockMultiBatch(block DatabaseBlockWithEntries) error
ProcessEBlockBatch(eblock DatabaseBlockWithEntries, checkForDuplicateEntries bool) error
ProcessEBlockMultiBatch(eblock DatabaseBlockWithEntries, checkForDuplicateEntries bool) error
ProcessEBlockMultiBatchWithoutHead(eblock DatabaseBlockWithEntries, checkForDuplicateEntries bool) error
ProcessECBlockMultiBatch(IEntryCreditBlock, bool) (err error)
ProcessFBlockMultiBatch(DatabaseBlockWithEntries) error
FetchDirBlockInfoByKeyMR(hash IHash) (IDirBlockInfo, error)
SetExportData(path string)
StartMultiBatch()
Trim()
FetchAllEntriesByChainID(chainID IHash) ([]IEBEntry, error)
SaveKeyValueStore(kvs BinaryMarshallable, key []byte) error
FetchKeyValueStore(key []byte, dst BinaryMarshallable) (BinaryMarshallable, error)
SaveDatabaseEntryHeight(height uint32) error
FetchDatabaseEntryHeight() (uint32, error)
}
A simplified DBOverlay to make sure we are not calling functions that could cause problems
type DBStateSent ¶
type DatabaseBatchable ¶
type DatabaseBatchable interface {
BinaryMarshallableAndCopyable
GetDatabaseHeight() uint32
DatabasePrimaryIndex() IHash //block.KeyMR()
DatabaseSecondaryIndex() IHash //block.GetHash()
GetChainID() IHash
}
type DatabaseBlockWithEntries ¶
type DatabaseBlockWithEntries interface {
DatabaseBatchable
GetEntryHashes() []IHash
GetEntrySigHashes() []IHash
}
type IABEntry ¶
type IABEntry interface {
Printable
BinaryMarshallable
ShortInterpretable
UpdateState(IState) error // When loading Admin Blocks,
Type() byte
Hash() IHash
}
type IABlockHeader ¶
type IABlockHeader interface {
Printable
BinaryMarshallable
IsSameAs(IABlockHeader) bool
GetAdminChainID() IHash
GetDBHeight() uint32
GetPrevBackRefHash() IHash
SetDBHeight(uint32)
SetPrevBackRefHash(IHash)
GetHeaderExpansionArea() []byte
SetHeaderExpansionArea([]byte)
GetHeaderExpansionSize() uint64
GetBodySize() uint32
GetMessageCount() uint32
SetBodySize(uint32)
SetMessageCount(uint32)
}
Admin Block Header
type IAdminBlock ¶
type IAdminBlock interface {
Printable
DatabaseBatchable
IsSameAs(IAdminBlock) bool
BackReferenceHash() (IHash, error)
GetABEntries() []IABEntry
GetDBHeight() uint32
GetDBSignature() IABEntry
GetHash() IHash
GetHeader() IABlockHeader
GetKeyMR() (IHash, error)
LookupHash() (IHash, error)
RemoveFederatedServer(IHash) error
SetABEntries([]IABEntry)
SetHeader(IABlockHeader)
AddEntry(IABEntry) error
FetchCoinbaseDescriptor() IABEntry
InsertIdentityABEntries() error
AddABEntry(e IABEntry) error
AddAuditServer(IHash) error
AddDBSig(serverIdentity IHash, sig IFullSignature) error
AddFedServer(IHash) error
AddFederatedServerBitcoinAnchorKey(IHash, byte, byte, [20]byte) error
AddFederatedServerSigningKey(IHash, [32]byte) error
AddFirstABEntry(e IABEntry) error
AddMatryoshkaHash(IHash, IHash) error
AddServerFault(IABEntry) error
AddCoinbaseDescriptor(outputs []ITransAddress) error
AddEfficiency(chain IHash, efficiency uint16) error
AddCoinbaseAddress(chain IHash, add IAddress) error
AddCancelCoinbaseDescriptor(descriptorHeight, index uint32) error
UpdateState(IState) error
}
Administrative Block This is a special block which accompanies this Directory Block. It contains the signatures and organizational data needed to validate previous and future Directory Blocks. This block is included in the DB body. It appears there with a pair of the Admin AdminChainID:SHA256 of the block. For more details, please go to: https://github.com/FactomProject/FactomDocs/blob/master/factomDataStructureDetails.md#administrative-block
type IAnchor ¶
type IAnchor interface {
InitRPCClient() error
UpdateDirBlockInfoMap(dirBlockInfo IDirBlockInfo)
}
type IAnchorRecord ¶
type IAuthority ¶
type IAuthority interface {
Type() int
VerifySignature([]byte, *[constants.SIGNATURE_LENGTH]byte) (bool, error)
GetAuthorityChainID() IHash
GetSigningKey() []byte
BinaryMarshallable
}
type IConfirmation ¶
type IDBState ¶
type IDBState interface {
GetDirectoryBlock() IDirectoryBlock
GetAdminBlock() IAdminBlock
GetFactoidBlock() IFBlock
GetEntryCreditBlock() IEntryCreditBlock
GetEntryBlocks() []IEntryBlock
GetEntries() []IEBEntry
}
type IDatabase ¶
type IDatabase interface {
Close() error
Put(bucket, key []byte, data BinaryMarshallable) error
Get(bucket, key []byte, destination BinaryMarshallable) (BinaryMarshallable, error)
Delete(bucket, key []byte) error
ListAllKeys(bucket []byte) ([][]byte, error)
GetAll(bucket []byte, sample BinaryMarshallableAndCopyable) ([]BinaryMarshallableAndCopyable, [][]byte, error)
Clear(bucket []byte) error
PutInBatch(records []Record) error
ListAllBuckets() ([][]byte, error)
Trim()
DoesKeyExist(bucket, key []byte) (bool, error)
}
type IDirBlockInfo ¶
type IDirBlockInfo interface {
Printable
DatabaseBatchable
GetDBHeight() uint32
GetBTCConfirmed() bool
GetDBMerkleRoot() IHash
GetBTCTxHash() IHash
GetBTCTxOffset() int32
GetTimestamp() Timestamp
GetBTCBlockHeight() int32
GetBTCBlockHash() IHash
GetEthereumAnchorRecordEntryHash() IHash
GetEthereumConfirmed() bool
}
type IDirectoryBlock ¶
type IDirectoryBlock interface {
Printable
DatabaseBlockWithEntries
GetHeader() IDirectoryBlockHeader
SetHeader(IDirectoryBlockHeader)
GetDBEntries() []IDBEntry
GetEBlockDBEntries() []IDBEntry
SetDBEntries([]IDBEntry) error
AddEntry(chainID IHash, keyMR IHash) error
BuildKeyMerkleRoot() (IHash, error)
BuildBodyMR() (IHash, error)
GetKeyMR() IHash
GetHash() IHash
GetFullHash() IHash
GetHeaderHash() (IHash, error)
GetTimestamp() Timestamp
BodyKeyMR() IHash
GetEntryHashesForBranch() []IHash
SetEntryHash(hash, chainID IHash, index int)
SetABlockHash(aBlock IAdminBlock) error
SetECBlockHash(ecBlock IEntryCreditBlock) error
SetFBlockHash(fBlock IFBlock) error
IsSameAs(IDirectoryBlock) bool
}
type IDirectoryBlockHeader ¶
type IDirectoryBlockHeader interface {
Printable
BinaryMarshallable
GetVersion() byte
SetVersion(byte)
GetPrevFullHash() IHash
SetPrevFullHash(IHash)
GetBodyMR() IHash
SetBodyMR(IHash)
GetPrevKeyMR() IHash
SetPrevKeyMR(IHash)
GetHeaderHash() (IHash, error)
GetDBHeight() uint32
SetDBHeight(uint32)
GetBlockCount() uint32
SetBlockCount(uint32)
GetNetworkID() uint32
SetNetworkID(uint32)
GetTimestamp() Timestamp
SetTimestamp(Timestamp)
IsSameAs(IDirectoryBlockHeader) bool
}
type IEBlockBody ¶
type IECBlockBody ¶
type IECBlockBody interface {
String() string
GetEntries() []IECBlockEntry
SetEntries([]IECBlockEntry)
AddEntry(IECBlockEntry)
IsSameAs(IECBlockBody) bool
}
type IECBlockEntry ¶
type IECBlockEntry interface {
Printable
ShortInterpretable
ECID() byte
MarshalBinary() ([]byte, error)
UnmarshalBinary(data []byte) error
UnmarshalBinaryData(data []byte) ([]byte, error)
Hash() IHash
GetHash() IHash
GetEntryHash() IHash
GetSigHash() IHash
GetTimestamp() Timestamp
IsSameAs(IECBlockEntry) bool
}
type IECBlockHeader ¶
type IECBlockHeader interface {
BinaryMarshallable
String() string
GetBodyHash() IHash
SetBodyHash(IHash)
GetPrevHeaderHash() IHash
SetPrevHeaderHash(IHash)
GetPrevFullHash() IHash
SetPrevFullHash(IHash)
GetDBHeight() uint32
SetDBHeight(uint32)
GetECChainID() IHash
SetHeaderExpansionArea([]byte)
GetHeaderExpansionArea() []byte
GetObjectCount() uint64
SetObjectCount(uint64)
GetBodySize() uint64
SetBodySize(uint64)
IsSameAs(IECBlockHeader) bool
}
type IElectionAdapter ¶
type IElectionAdapter interface {
Execute(IMsg) IMsg
GetDBHeight() int
GetMinute() int
GetElecting() int
GetVMIndex() int
MessageLists() string
Status() string
VolunteerControlsStatus() string
// An observer does not participate in election voting
IsObserver() bool
SetObserver(o bool)
// Processed indicates the election swap happened
IsElectionProcessed() bool
SetElectionProcessed(swapped bool)
IsStateProcessed() bool
SetStateProcessed(swapped bool)
GetAudits() []IHash
}
type IElectionMsg ¶
type IElectionMsg interface {
IMsg
ElectionProcess(IState, IElections)
ElectionValidate(IElections) int
}
type IElections ¶
type IElectionsFactory ¶
type IElectionsFactory interface {
// Messages
NewAddLeaderInternal(Name string, dbheight uint32, serverID IHash) IMsg
NewAddAuditInternal(name string, dbheight uint32, serverID IHash) IMsg
NewRemoveLeaderInternal(name string, dbheight uint32, serverID IHash) IMsg
NewRemoveAuditInternal(name string, dbheight uint32, serverID IHash) IMsg
NewEomSigInternal(name string, dbheight uint32, minute uint32, vmIndex int, height uint32, serverID IHash) IMsg
NewDBSigSigInternal(name string, dbheight uint32, minute uint32, vmIndex int, height uint32, serverID IHash) IMsg
NewAuthorityListInternal(feds []IServer, auds []IServer, height uint32) IMsg
}
type IEntryBlock ¶
type IEntryBlock interface {
Printable
DatabaseBatchable
GetHeader() IEntryBlockHeader
// AddEBEntry creates a new Entry Block Entry from the provided Factom Entry
// and adds it to the Entry Block Body.
AddEBEntry(entry IEBEntry) error
// AddEndOfMinuteMarker adds the End of Minute to the Entry Block. The End of
// Minut byte becomes the last byte in a 32 byte slice that is added to the
// Entry Block Body as an Entry Block Entry.
AddEndOfMinuteMarker(m byte) error
// BuildHeader updates the Entry Block Header to include information about the
// Entry Block Body. BuildHeader should be run after the Entry Block Body has
// included all of its EntryEntries.
BuildHeader() error
// Hash returns the simple Sha256 hash of the serialized Entry Block. Hash is
// used to provide the PrevFullHash to the next Entry Block in a Chain.
Hash() (IHash, error)
// KeyMR returns the hash of the hash of the Entry Block Header concatenated
// with the Merkle Root of the Entry Block Body. The Body Merkle Root is
// calculated by the func (e *EBlockBody) MR() which is called by the func
// (e *EBlock) BuildHeader().
KeyMR() (IHash, error)
GetBody() IEBlockBody
BodyKeyMR() IHash
GetEntryHashes() []IHash
GetEntrySigHashes() []IHash
GetHash() IHash
HeaderHash() (IHash, error)
IsSameAs(IEntryBlock) bool
}
type IEntryBlockHeader ¶
type IEntryBlockHeader interface {
Printable
BinaryMarshallable
GetBodyMR() IHash
GetChainID() IHash
GetPrevFullHash() IHash
GetPrevKeyMR() IHash
SetBodyMR(bodyMR IHash)
SetChainID(IHash)
SetPrevFullHash(IHash)
SetPrevKeyMR(IHash)
GetDBHeight() uint32
GetEBSequence() uint32
GetEntryCount() uint32
SetDBHeight(uint32)
SetEBSequence(uint32)
SetEntryCount(uint32)
IsSameAs(IEntryBlockHeader) bool
}
type IEntryCreditBlock ¶
type IEntryCreditBlock interface {
Printable
DatabaseBatchable
GetHeader() IECBlockHeader
GetBody() IECBlockBody
GetHash() IHash
HeaderHash() (IHash, error)
GetFullHash() (IHash, error)
GetEntryHashes() []IHash
GetEntrySigHashes() []IHash
GetEntries() []IECBlockEntry
GetEntryByHash(hash IHash) IECBlockEntry
UpdateState(IState) error
IsSameAs(IEntryCreditBlock) bool
BuildHeader() error
}
type IFBlock ¶
type IFBlock interface {
BinaryMarshallable
Printable
GetHash() IHash // Returns the hash of the object
//DatabaseBlockWithEntries
GetDatabaseHeight() uint32
DatabasePrimaryIndex() IHash //block.KeyMR()
DatabaseSecondaryIndex() IHash //block.GetHash()
New() BinaryMarshallableAndCopyable
GetEntryHashes() []IHash
GetEntrySigHashes() []IHash
GetTransactionByHash(hash IHash) ITransaction
// Get the ChainID. This is a constant for all Factoids.
GetChainID() IHash
// Validation functions
Validate() error
ValidateTransaction(int, ITransaction) error
// Marshal just the header for the block. This is to include the header
// in the FullHash
MarshalHeader() ([]byte, error)
// Marshal just the transactions. This is because we need the length
MarshalTrans() ([]byte, error)
// Add a coinbase transaction. This transaction has no inputs
AddCoinbase(ITransaction) error
// PatchCoinbase updates the coinbase transaction with the leader's real timestamp.
// This timestamp is not known at the time of creation.
PatchCoinbase(Timestamp)
// IsCoinbasePatched returns true when the coinbase has been patched with the real timestamp
IsCoinbasePatched() bool
// Add a proper transaction. Transactions are validated before
// being added to the block.
AddTransaction(ITransaction) error
// Calculate all the MR and serial hashes for this block. Done just
// prior to being persisted.
CalculateHashes()
// Hash accessors
// Get Key MR() hashes the header with the GetBodyMR() of the transactions
GetKeyMR() IHash
// Get the MR for the list of transactions
GetBodyMR() IHash
// Get the KeyMR of the previous block.
GetPrevKeyMR() IHash
SetPrevKeyMR(IHash)
GetLedgerKeyMR() IHash
GetPrevLedgerKeyMR() IHash
SetPrevLedgerKeyMR(IHash)
// Accessors for the Directory Block Height
SetDBHeight(uint32)
GetDBHeight() uint32
// Accessors for the Exchange rate
SetExchRate(uint64)
GetExchRate() uint64
// Accessors for the transactions
GetTransactions() []ITransaction
// Mark an end of Minute. If there are multiple calls with the same minute value
// the later one simply overwrites the previous one. Since this is an informational
// data point, we do not enforce much, other than order (the end of period one can't
// come before period 2. We just adjust the periods accordingly.
EndOfPeriod(min int)
GetEndOfPeriod() [10]int
// Returns the milliTimestamp of the coinbase transaction. This is used to validate
// the timestamps of transactions included in the block. Transactions prior to the
// TRANSACTION_PRIOR_LIMIT or after the TRANSACTION_POST_LIMIT are considered invalid
// for this block. -1 is returned if no coinbase transaction is found.
GetCoinbaseTimestamp() Timestamp
GetNewInstance() IFBlock // Get a new instance of this object
IsSameAs(IFBlock) bool
}
type IFEREntry ¶
type IFEREntry interface {
GetVersion() string
SetVersion(passedVersion string) IFEREntry
GetExpirationHeight() uint32
SetExpirationHeight(passedExpirationHeight uint32) IFEREntry
GetResidentHeight() uint32
SetResidentHeight(passedGetResidentHeight uint32) IFEREntry
GetTargetActivationHeight() uint32
SetTargetActivationHeight(passedTargetActivationHeight uint32) IFEREntry
GetPriority() uint32
SetPriority(passedPriority uint32) IFEREntry
GetTargetPrice() uint64
SetTargetPrice(passedTargetPrice uint64) IFEREntry
}
type IFactoidState ¶
type IFactoidState interface {
// Get the current transaction block
GetCurrentBlock() IFBlock
// Get the current balance for a transaction
GetFactoidBalance(address [32]byte) int64
GetECBalance(address [32]byte) int64
// Add a transaction Useful for catching up with the network.
AddTransactionBlock(IFBlock) error
AddECBlock(IEntryCreditBlock) error
// Get a hash of all the balances at this height
GetBalanceHash(bool) IHash
// Validate transaction
// Return zero len string if the balance of an address covers each input
Validate(int, ITransaction) (err error, holdAddr [32]byte)
// Check the transaction timestamp for to ensure it can be included
// in the current Transactions that are too old, or dated to
// far in the future cannot be included in the current block
ValidateTransactionAge(trans ITransaction) error
// Update Transaction just updates the balance sheet with the
// addition of a transaction. bool must be true if this is a realtime update,
// and false if processing a block. This provides real time balances, without
// double counting transactions when we process blocks.
UpdateTransaction(bool, ITransaction) error
UpdateECTransaction(bool, IECBlockEntry) error
// Add a Transaction to the current The transaction is
// validated against the address balances, which must cover The
// inputs. Returns true if the transaction is added.
AddTransaction(int, ITransaction) error
// Process End of Block
ProcessEndOfBlock(IState)
// Set the End of Period. Currently, each block in Factom is broken
// into ten, one minute periods.
EndOfPeriod(period int)
//GetMultipleFactoidBalances([][32]byte) (uint32, [][]string)
GetMultipleFactoidBalances([32]byte) (uint32, uint32, int64, int64, string)
GetMultipleECBalances([32]byte) (uint32, uint32, int64, int64, string)
}
type IFactomConfig ¶
type IFactomConfig interface {
}
Holds the state information for factomd. This does imply that we will be using accessors to access state information in the consensus algorithm. This is a bit tedious, but does provide single choke points where information can be logged about the execution of Factom. Also ensures that we do not accidentally
type IFedVoteMsg ¶
type IFedVoteMsg interface {
ComparisonMinute() int
}
type IFullSignature ¶
type IFullSignature interface {
BinaryMarshallable
SetSignature(sig []byte) error // Set or update the signature
GetSignature() *[64]byte
CustomMarshalText() ([]byte, error)
Bytes() []byte
SetPub(publicKey []byte)
// Get the public key
GetKey() []byte
// Validate data against this signature
Verify(data []byte) bool
IsSameAs(IFullSignature) bool
}
type IGeneralMsg ¶
type IHash ¶
type IHash interface {
BinaryMarshallableAndCopyable
Printable
Copy() IHash
Fixed() [32]byte // Returns the fixed array for use in maps
PFixed() *[32]byte // Return a pointer to a Fixed array
Bytes() []byte // Return the byte slice for this Hash
SetBytes([]byte) error // Set the bytes
IsSameAs(IHash) bool // Compare two Hashes
IsMinuteMarker() bool
UnmarshalText(b []byte) error
IsZero() bool
ToMinute() byte
IsHashNil() bool
}
type IIdentityABEntry ¶
type IIdentityABEntrySort ¶
type IIdentityABEntrySort []IIdentityABEntry
func (IIdentityABEntrySort) Len ¶
func (p IIdentityABEntrySort) Len() int
func (IIdentityABEntrySort) Less ¶
func (p IIdentityABEntrySort) Less(i, j int) bool
func (IIdentityABEntrySort) Swap ¶
func (p IIdentityABEntrySort) Swap(i, j int)
type IManagerController ¶
type IManagerController interface {
// Manager functions extended
RetrieveDBStateByHeight(height uint32) error
UploadDBStateBytes(data []byte, sign bool) error
UploadIfOnDisk(height uint32) bool
CompletedHeightTo(height uint32) error
// Control function
IsBufferEmpty() bool
FetchFromBuffer() []byte
SetSigningKey(sec []byte) error
// Plugin Control
Alive() error
}
IManagerController is the interface we are exposing as a plugin. It is not directly a manager interface, as we have to handle goroutines in the plugin
type IMsg ¶
type IMsg interface {
Printable
BinaryMarshallable
// Returns a byte indicating the type of message.
Type() byte
// A local message is never broadcast to the greater network.
IsLocal() bool
SetLocal(bool)
// A local message is never broadcast to the greater network.
IsNetwork() bool
SetNetwork(bool)
// FullBroadcast means send to every node
IsFullBroadcast() bool
SetFullBroadcast(bool)
// Returns the origin of this message; used to track
// where a message came from. If int == -1, then this
// FactomNode generated the message.
GetOrigin() int
SetOrigin(int)
GetNetworkOrigin() string
SetNetworkOrigin(string)
// Returns the timestamp for a message
GetTimestamp() Timestamp
// Timestamps of when we received the message locally
GetReceivedTime() time.Time
SetReceivedTime(time time.Time)
// This is the hash used to check for repeated messages. Almost always this
// is the MsgHash, however for Chain Commits, Entry Commits, and Factoid Transactions,
// this is the GetHash().
GetRepeatHash() IHash
// Hash for this message as used by Consensus (i.e. what we match). Does not include
// signatures to avoid Signature Maliation attacks.
GetHash() IHash
// Hash of this message. Each message must be unique includes signatures
GetMsgHash() IHash
// Returns the full message hash of a message (includes signatures)
GetFullMsgHash() IHash
// If this message should only reply to a peer, this is true. If to
// be broadcast, this should be false. If the Origin is 0, then the
// network can pick a peer to try. If Origin is > 0, then the message
// must go back to that peer (this message is a reply).
IsPeer2Peer() bool
SetPeer2Peer(bool)
// Validate the message, given the state. Three possible results:
// < 0 -- Message is invalid. Discard
// 0 -- Cannot tell if message is Valid
// 1 -- Message is valid
Validate(IState) int
//Set the VMIndex for a message
ComputeVMIndex(IState)
// Call here if the server is a leader
LeaderExecute(IState)
// Debugging thing to track the leader responsible for a message ack.
GetLeaderChainID() IHash
SetLeaderChainID(IHash)
// Call here if the server is a follower
FollowerExecute(IState)
// Send this message out over the NetworkOutQueue. This is done with a method
// to allow easier debugging and simulation.
SendOut(IState, IMsg)
// Some messages (DBState messages, missing data messages) must be explicitly sent.
// We won't resend them or pass them on.
GetNoResend() bool
SetNoResend(bool)
GetResendCnt() int
// Process. When we get a sequence of acknowledgements that we trust, we process.
// A message will only be processed once, and in order, guaranteed.
// Returns true if able to process, false if process is waiting on something.
Process(dbheight uint32, state IState) bool
// Some Messages need to be processed on certain VMs. We set this and query
// the indexes of these machines here.
GetVMIndex() int
SetVMIndex(int)
GetVMHash() []byte
SetVMHash([]byte)
GetMinute() byte
SetMinute(byte)
// Stall handling
MarkSentInvalid(bool)
SentInvalid() bool
IsStalled() bool
SetStall(bool)
Expire(IState) bool
// Equivalent to String() for logging
LogFields() log.Fields
}
type IMsgFactory ¶
type IMsgInternal ¶
type IMsgInternal interface {
IMsg
ProcessElections(IState, IElectionMsg)
}
Internal Messaging supporting Elections
type IPeer ¶
type IPeer interface {
Init(nameTo, nameFrom string) IPeer // Name of peer
GetNameTo() string // Return the name of the peer
GetNameFrom() string // Return the name of the peer
Send(IMsg) error // Send a message to this peer
Receive() (IMsg, error) // Receive a message from this peer; nil if no message is ready.
Len() int // Returns the number of messages waiting to be read
Equals(IPeer) bool // Is this connection equal to parm connection
Weight() int // How many nodes does this peer represent?
BytesOut() int // Bytes sent out per second from this peer
BytesIn() int // Bytes received per second from this peer
}
The Peer interface allows Factom to connect to any implementation of a p2p network. The simulator uses an implementation of IPeer to simulate various networks
type IPendingEntry ¶
type IPendingTransaction ¶
type IPendingTransaction struct {
TransactionID IHash `json:"transactionid"`
DBHeight uint32 `json:"dbheight"`
Status string `json:"status"`
Inputs []ITransAddress `json:"inputs"`
Outputs []ITransAddress `json:"outputs"`
ECOutputs []ITransAddress `json:"ecoutputs"`
Fees uint64 `json:"fees"`
}
type IProcessList ¶
type IProcessList interface {
//Clear()
GetKeysNewEntries() (keys [][32]byte)
GetNewEntry(key [32]byte) IEntry
LenNewEntries() int
Complete() bool
VMIndexFor(hash []byte) int
GetVMStatsForFedServer(index int) (vmIndex int, listHeight int, listLength int, nextNil int)
SortFedServers()
SortAuditServers()
SortDBSigs()
FedServerFor(minute int, hash []byte) IServer
GetVirtualServers(minute int, identityChainID IHash) (found bool, index int)
GetFedServerIndexHash(identityChainID IHash) (bool, int)
GetAuditServerIndexHash(identityChainID IHash) (bool, int)
MakeMap()
PrintMap() string
AddFedServer(identityChainID IHash) int
AddAuditServer(identityChainID IHash) int
RemoveFedServerHash(identityChainID IHash)
RemoveAuditServerHash(identityChainID IHash)
String() string
GetDBHeight() uint32
}
type IQueue ¶
type IQueue interface {
Length() int
Cap() int
Enqueue(msg IMsg)
Dequeue() IMsg
BlockingDequeue() IMsg
}
IQueue is the interface returned by returning queue functions
type IRCD ¶
type IRCD interface {
BinaryMarshallable
Printable
CheckSig(trans ITransaction, sigblk ISignatureBlock) bool
Clone() IRCD
CustomMarshalText() ([]byte, error)
GetAddress() (IAddress, error)
NumberOfSignatures() int
IsSameAs(IRCD) bool
}
type ISCDatabaseOverlay ¶
type ISCDatabaseOverlay interface {
DBOverlay
FetchWalletEntryByName(addr []byte) (IWalletEntry, error)
FetchWalletEntryByPublicKey(addr []byte) (IWalletEntry, error)
FetchAllWalletEntriesByName() ([]IWalletEntry, error)
FetchAllWalletEntriesByPublicKey() ([]IWalletEntry, error)
FetchAllAddressNameKeys() ([][]byte, error)
FetchAllAddressPublicKeys() ([][]byte, error)
FetchTransaction(key []byte) (ITransaction, error)
SaveTransaction(key []byte, tx ITransaction) error
DeleteTransaction(key []byte) error
FetchAllTransactionKeys() ([][]byte, error)
FetchAllTransactions() ([]ITransaction, error)
SaveRCDAddress(key []byte, we IWalletEntry) error
SaveAddressByPublicKey(key []byte, we IWalletEntry) error
SaveAddressByName(key []byte, we IWalletEntry) error
}
type ISCWallet ¶
type ISCWallet interface {
//initialize the object. call before using other functions
Init(string, string)
// A New Seed is generated for the wallet.
NewSeed(data []byte)
// Set the seed for a wallet
SetSeed(seed []byte)
// Get the seed for a wallet
GetSeed() []byte
// Set the current deterministic root (Initialization function)
SetRoot([]byte)
// Returns the backing database for the wallet
GetDB() ISCDatabaseOverlay
// Import a key pair. If the private key is null, this is treated as an
// external address, useful only as a destination
AddKeyPair(addrtype string, name []byte, public []byte, private []byte, generateRandomIfAddressPresent bool) (IAddress, error)
// Generate a Factoid Address
GenerateFctAddress(name []byte, m int, n int) (IAddress, error)
// Generate an Entry Credit Address
GenerateECAddress(name []byte) (IAddress, error)
// Generate a Factoid Address from a private key
GenerateFctAddressFromPrivateKey(name []byte, privateKey []byte, m int, n int) (IAddress, error)
// Generate an Entry Credit Address from a privatekey
GenerateECAddressFromPrivateKey(name []byte, privateKey []byte) (IAddress, error)
// Generate a Factoid Address from a human readable private key
GenerateFctAddressFromHumanReadablePrivateKey(name []byte, privateKey string, m int, n int) (IAddress, error)
// Generate an Entry Credit Address from a human readable private key
GenerateECAddressFromHumanReadablePrivateKey(name []byte, privateKey string) (IAddress, error)
// Generate a Factoid Address from a set of 12 words from the token sale
GenerateFctAddressFromMnemonic(name []byte, mnemonic string, m int, n int) (IAddress, error)
// Get details for an address
GetAddressDetailsAddr(addr []byte) (IWalletEntry, error)
// Returns the Address hash (what we use for inputs) given the public key
GetAddressHash(IAddress) (IAddress, error)
/** Transaction calls **/
// Create a transaction. This is just the bones, to which the
// user must add inputs, outputs, and sign before submission.
// Must pass in the time for the transaction! UTC nanoseconds
CreateTransaction(time uint64) ITransaction
// Modify an input. Used to back fill the transaction fee.
UpdateInput(ITransaction, int, IAddress, uint64) error
// Add an input to a transaction
AddInput(ITransaction, IAddress, uint64) error
// Add an output to a transaction
AddOutput(ITransaction, IAddress, uint64) error
// Add an Entry Credit output to a transaction. Note that these are
// denominated in Factoids. So you need the exchange rate to do this
// properly.
AddECOutput(ITransaction, IAddress, uint64) error
// Validate a transaction. Just checks that the inputs and outputs are
// there and properly constructed.
Validate(int, ITransaction) error
// Checks that the signatures all validate.
ValidateSignatures(ITransaction) error
// Sign the inputs that have public keys to which we have the private
// keys. In the future, we will allow transactions with particular signatures
// to be sent to other people to complete the signing process. This will
// be particularly useful with multisig.
SignInputs(ITransaction) (bool, error) // True if all inputs are signed
// Sign a CommitEntry or a CommitChain with the eckey
SignCommit(we IWalletEntry, data []byte) []byte
}
The wallet interface uses bytes. This is because we want to handle fixed length values in our maps and the If we try to use strings, then the lengths vary based on encoding and that complicates the implementation without really making the interface more usable by developers.
type IServer ¶
type IServer interface {
BinaryMarshallable
Printable
GetChainID() IHash
GetName() string
IsOnline() bool
SetOnline(bool)
LeaderToReplace() IHash
SetReplace(IHash)
IsSameAs(b IServer) bool
}
This object will hold the public keys for servers that are not us, and maybe other information about servers.
type ISignableElectionMsg ¶
type ISignableElectionMsg interface {
IElectionMsg
Signable
GetVolunteerMessage() ISignableElectionMsg
}
type ISignature ¶
type ISignature interface {
BinaryMarshallable
SetSignature(sig []byte) error // Set or update the signature
GetSignature() *[64]byte
CustomMarshalText() ([]byte, error)
Bytes() []byte
IsSameAs(ISignature) bool
}
type ISignatureBlock ¶
type ISignatureBlock interface {
BinaryMarshallable
Printable
AddSignature(sig ISignature)
CustomMarshalText() ([]byte, error)
GetSignature(int) ISignature
GetSignatures() []ISignature
IsSameAs(ISignatureBlock) bool
}
*************************************
- ISign *
- Interface for RCB Signatures *
- The signature block holds the signatures that validate one of the RCBs.
- Each signature has an index, so if the RCD is a multisig, you can know
- how to apply the signatures to the addresses in the RCD. *************************************
type IState ¶
type IState interface {
GetRunState() runstate.RunState
// Server
GetFactomNodeName() string
GetSalt(Timestamp) uint32 // A secret number computed from a TS that tests if a message was issued from this server or not
Clone(number int) IState
GetCfg() IFactomConfig
GetConfigPath() string
LoadConfig(filename string, networkFlag string)
Init()
String() string
GetIdentityChainID() IHash
SetIdentityChainID(IHash)
Sign([]byte) IFullSignature
Log(level string, message string)
Logf(level string, format string, args ...interface{})
GetServerPublicKeyString() string
GetDBStatesSent() []*DBStateSent
SetDBStatesSent([]*DBStateSent)
GetDirectoryBlockInSeconds() int
SetDirectoryBlockInSeconds(int)
GetFactomdVersion() string
GetDBHeightComplete() uint32
GetDBHeightAtBoot() uint32
DatabaseContains(hash IHash) bool
SetOut(bool) // Output is turned on if set to true
GetOut() bool // Return true if Print or Println write output
LoadDataByHash(requestedHash IHash) (BinaryMarshallable, int, error)
LoadDBState(dbheight uint32) (IMsg, error)
LoadSpecificMsg(dbheight uint32, vm int, plistheight uint32) (IMsg, error)
LoadSpecificMsgAndAck(dbheight uint32, vm int, plistheight uint32) (IMsg, IMsg, error)
SetString()
ShortString() string
GetStatus() []string
AddStatus(status string)
AddDBSig(dbheight uint32, chainID IHash, sig IFullSignature)
AddPrefix(string)
AddFedServer(uint32, IHash) int
GetFedServers(uint32) []IServer
RemoveFedServer(uint32, IHash)
AddAuditServer(uint32, IHash) int
GetAuditServers(uint32) []IServer
GetOnlineAuditServers(uint32) []IServer
//RPC
GetRpcUser() string
GetRpcPass() string
SetRpcAuthHash(authHash []byte)
GetRpcAuthHash() []byte
GetTlsInfo() (bool, string, string)
GetFactomdLocations() string
GetCorsDomains() []string
// Routine for handling the syncroniztion of the leader and follower processes
// and how they process messages.
Process() (progress bool)
// This is the highest block completed. It may or may not be saved in the Database. This
// is a follower's state, but it is also critical to validation; we cannot
// validate transactions where the HighestRecordedBlock+1 != block holding said
// transaction.
GetHighestSavedBlk() uint32
// This is the highest block saved in the Database. A block is completed, then validated
// then saved.
GetHighestCompletedBlk() uint32
// This is the Leader's view of the Height. It must be == HighestRecordedBlock+1. Since
// Recording a block can take time, messages must be queued until the previous block is
// recorded (either by processing messages, or timing out and Leaders signing off the block)
GetLeaderHeight() uint32
// The highest block for which we have received a message. This is a
// Follower's understanding of the Height, and reflects what block
// is receiving messages.
GetHighestKnownBlock() uint32
// Find a Directory Block by height
GetDirectoryBlockByHeight(dbheight uint32) IDirectoryBlock
// Network Processor
TickerQueue() chan int
TimerMsgQueue() chan IMsg
NetworkOutMsgQueue() IQueue
NetworkInvalidMsgQueue() chan IMsg
// Journaling
JournalMessage(IMsg)
GetJournalMessages() [][]byte
// Consensus
APIQueue() IQueue // Input Queue from the API
InMsgQueue() IQueue // Read by Validate
AckQueue() chan IMsg // Ack Message Queue
MsgQueue() chan IMsg // Other Messages Queue
ElectionsQueue() IQueue
// Lists and Maps
// =====
GetAuditHeartBeats() []IMsg // The checklist of HeartBeats for this period
GetNewEBlocks(dbheight uint32, hash IHash) IEntryBlock
PutNewEBlocks(dbheight uint32, hash IHash, eb IEntryBlock)
PutNewEntries(dbheight uint32, hash IHash, eb IEntry)
GetPendingEntries(interface{}) []IPendingEntry
NextCommit(hash IHash) IMsg
PutCommit(hash IHash, msg IMsg)
IncEntryChains()
IncEntries()
IncECCommits()
IncECommits()
IncFCTSubmits()
//Network MAIN = 0, TEST = 1, LOCAL = 2, CUSTOM = 3
GetNetworkNumber() int // Encoded into Directory Blocks
GetNetworkName() string // Some networks have defined names
GetNetworkID() uint32
// Bootstrap Identity Information is dependent on Network
GetNetworkBootStrapKey() IHash
GetNetworkBootStrapIdentity() IHash
// Skeleton Identity Information.
GetNetworkSkeletonIdentity() IHash
GetNetworkSkeletonKey() IHash
IntiateNetworkSkeletonIdentity() error
// Getting info about an identity
GetSigningKey(id IHash) (IHash, int)
GetMatryoshka(dbheight uint32) IHash // Reverse Hash
// These are methods run by the consensus algorithm to track what servers are the leaders
// and what lists they are responsible for.
ComputeVMIndex(hash []byte) int // Returns the VMIndex determined by some hash (usually) for the current processlist
IsLeader() bool // Returns true if this is the leader in the current minute
IsRunLeader() bool // Returns true if the node is finished syncing up it's database
GetLeaderVM() int // Get the Leader VM (only good within a minute)
// Returns the list of VirtualServers at a given directory block height and minute
GetVirtualServers(dbheight uint32, minute int, identityChainID IHash) (found bool, index int)
// Get the message for the given vm index, dbheight, and height. Returns nil if I
// have no such message.
GetMsg(vmIndex int, dbheight int, height int) (IMsg, error)
GetEBlockKeyMRFromEntryHash(entryHash IHash) IHash
GetAnchor() IAnchor
// Database
GetDB() DBOverlaySimple
// Web Services
// ============
SetPort(int)
GetPort() int
// Factoid State
// =============
UpdateState() bool
GetSystemHeight(dbheight uint32) int
GetFactoidState() IFactoidState
SetFactoidState(dbheight uint32, fs IFactoidState)
GetFactoshisPerEC() uint64
SetFactoshisPerEC(factoshisPerEC uint64)
IncFactoidTrans()
IncDBStateAnswerCnt()
GetPendingTransactions(string) []IPendingTransaction
Reset() // Trim back the state to the last saved block
GetSystemMsg(dbheight, height uint32) IMsg // Return the system message at the given height.
SendDBSig(dbheight uint32, vmIndex int) // If a Leader, we have to send a DBSig out for the previous block
FollowerExecuteMsg(IMsg) // Messages that go into the process list
FollowerExecuteEOM(IMsg) // Messages that go into the process list
FollowerExecuteAck(IMsg) // Ack Msg calls this function.
FollowerExecuteDBState(IMsg) // Add the given DBState to this server
FollowerExecuteSFault(IMsg) // Handling of Server Fault Messages
FollowerExecuteFullFault(IMsg) // Handle Server Full-Fault Messages
FollowerExecuteMMR(IMsg) // Handle Missing Message Responses
FollowerExecuteDataResponse(IMsg) // Handle Data Response
FollowerExecuteMissingMsg(IMsg) // Handle requests for missing messages
FollowerExecuteCommitChain(IMsg) // CommitChain needs to look for a Reveal Entry
FollowerExecuteCommitEntry(IMsg) // CommitEntry needs to look for a Reveal Entry
FollowerExecuteRevealEntry(IMsg)
ProcessAddServer(dbheight uint32, addServerMsg IMsg) bool
ProcessRemoveServer(dbheight uint32, removeServerMsg IMsg) bool
ProcessChangeServerKey(dbheight uint32, changeServerKeyMsg IMsg) bool
ProcessCommitChain(dbheight uint32, commitChain IMsg) bool
ProcessCommitEntry(dbheight uint32, commitChain IMsg) bool
ProcessDBSig(dbheight uint32, commitChain IMsg) bool
ProcessEOM(dbheight uint32, eom IMsg) bool
ProcessRevealEntry(dbheight uint32, m IMsg) bool
// For messages that go into the Process List
LeaderExecute(IMsg)
LeaderExecuteEOM(IMsg)
LeaderExecuteDBSig(IMsg)
LeaderExecuteRevealEntry(IMsg)
LeaderExecuteCommitChain(IMsg)
LeaderExecuteCommitEntry(IMsg)
GetNetStateOff() bool // If true, all network communications are disabled
SetNetStateOff(bool)
GetTimestamp() Timestamp
GetTimeOffset() Timestamp
GetTrueLeaderHeight() uint32
Print(a ...interface{}) (n int, err error)
Println(a ...interface{}) (n int, err error)
ValidatorLoop()
UpdateECs(IEntryCreditBlock)
SetIsReplaying()
SetIsDoneReplaying()
CrossReplayAddSalt(height uint32, salt [8]byte) error
// No Entry Yet returns true if no Entry Hash is found in the Replay structs.
// Returns false if we have seen an Entry Replay in the current period.
NoEntryYet(IHash, Timestamp) bool
// Calculates the transaction rate this node is seeing.
// totalTPS : Total transactions / total time node running
// instantTPS : Weighted transactions per second to get a better value for
// current transaction rate.
CalculateTransactionRate() (totalTPS float64, instantTPS float64)
//For ACK
GetACKStatus(hash IHash) (int, IHash, Timestamp, Timestamp, error)
GetSpecificACKStatus(hash IHash) (int, IHash, Timestamp, Timestamp, error)
// Acks with ChainIDs so you can select which hash type
GetEntryCommitAckByEntryHash(hash IHash) (status int, commit IMsg)
GetEntryRevealAckByEntryHash(hash IHash) (status int, blktime Timestamp, commit IMsg)
GetEntryCommitAckByTXID(hash IHash) (status int, blktime Timestamp, commit IMsg, entryhash IHash)
IsNewOrPendingEBlocks(dbheight uint32, hash IHash) bool
// Used in API to reject commits properly and inform user
IsHighestCommit(hash IHash, msg IMsg) bool
FetchPaidFor(hash IHash) (IHash, error)
FetchFactoidTransactionByHash(hash IHash) (ITransaction, error)
FetchECTransactionByHash(hash IHash) (IECBlockEntry, error)
FetchEntryByHash(IHash) (IEBEntry, error)
FetchEntryHashFromProcessListsByTxID(string) (IHash, error)
// FER section
ProcessRecentFERChainEntries()
ExchangeRateAuthorityIsValid(IEBEntry) bool
FerEntryIsValid(passedFEREntry IFEREntry) bool
GetPredictiveFER() uint64
// Identity Section
VerifyIsAuthority(cid IHash) bool // True if is authority
UpdateAuthorityFromABEntry(entry IABEntry) error
VerifyAuthoritySignature(Message []byte, signature *[64]byte, dbheight uint32) (int, error)
FastVerifyAuthoritySignature(Message []byte, signature IFullSignature, dbheight uint32) (int, error)
UpdateAuthSigningKeys(height uint32)
AddIdentityFromChainID(cid IHash) error
AddAuthorityDelta(changeString string)
GetElections() IElections
GetAuthorities() []IAuthority
GetAuthorityInterface(chainid IHash) IAuthority
GetLeaderPL() IProcessList
GetLLeaderHeight() uint32
GetMissingEntryCount() uint32
GetEntryBlockDBHeightProcessing() uint32
GetEntryBlockDBHeightComplete() uint32
GetCurrentBlockStartTime() int64
GetCurrentMinute() int
GetCurrentMinuteStartTime() int64
GetPreviousMinuteStartTime() int64
GetCurrentTime() int64
IsStalled() bool
GetDelay() int64
SetDelay(int64)
GetDropRate() int
SetDropRate(int)
GetBootTime() int64
IsSyncing() bool
IsSyncingEOMs() bool
IsSyncingDBSigs() bool
DidCreateLastBlockFromDBState() bool
GetUnsyncedServers() (ids []IHash, vms []int)
Validate(msg IMsg) (validToSend int, validToExecute int)
GetIgnoreDone() bool
// Emit DBState events to the livefeed api from a specified height
EmitDirectoryBlockEventsFromHeight(height uint32, end uint32)
// Access to Holding Queue
LoadHoldingMap() map[[32]byte]IMsg
LoadAcksMap() map[[32]byte]IMsg
// Plugins
UsingTorrent() bool
GetMissingDBState(height uint32) error
LogMessage(logName string, comment string, msg IMsg)
LogPrintf(logName string, format string, more ...interface{})
GetHighestAck() uint32
SetHighestAck(uint32)
DebugExec() bool
CheckFileName(string) bool
// Filters
AddToReplayFilter(mask int, hash [32]byte, timestamp Timestamp, systemtime Timestamp) bool
// Activations -------------------------------------------------------
IsActive(id activations.ActivationType) bool
// Holding of dependent messages -------------------------------------
// Add a message to a dependent holding list
Add(h [32]byte, msg IMsg) int
// expire any dependent messages that are in holding but are older than limit
// Execute messages when a dependency is met
ExecuteFromHolding(h [32]byte)
// create a hash to hold messages that depend on height
HoldForHeight(ht uint32, minute int, msg IMsg) int
// test/debug filters
PassOutputRegEx(*regexp.Regexp, string)
GetOutputRegEx() (*regexp.Regexp, string)
PassInputRegEx(*regexp.Regexp, string)
GetInputRegEx() (*regexp.Regexp, string)
GotHeartbeat(heartbeatTS Timestamp, dbheight uint32)
GetDBFinished() bool
FactomSecond() time.Duration
}
Holds the state information for factomd. This does imply that we will be using accessors to access state information in the consensus algorithm. This is a bit tedious, but does provide single choke points where information can be logged about the execution of Factom. Also ensures that we do not accidentally
type ISystem ¶
type ISystem interface {
Printable
BinaryMarshallable
// Returns the timestamp for a message
GetTimestamp() Timestamp
// Send this message out over the NetworkOutQueue. This is done with a method
// to allow easier debugging and simulation.
SendOut(IState, IMsg)
Process(dbheight uint32, state IState) bool
}
type ITransAddress ¶
type ITransAddress interface {
BinaryMarshallable
GetAmount() uint64
SetAmount(uint64)
GetAddress() IAddress
SetAddress(IAddress)
IsSameAs(ITransAddress) bool
CustomMarshalTextInput() ([]byte, error)
CustomMarshalTextOutput() ([]byte, error)
CustomMarshalTextECOutput() ([]byte, error)
StringInput() string
StringOutput() string
StringECOutput() string
GetUserAddress() string
SetUserAddress(string)
}
type ITransaction ¶
type ITransaction interface {
BinaryMarshallable
Printable
CustomMarshalText() ([]byte, error)
// Marshals the parts of the transaction that are signed to
// validate the transaction. This includes the transaction header,
// the locktime, the inputs, outputs, and outputs to EntryCredits. It
// does not include the signatures and RCDs. The inputs are the hashes
// of the RCDs, so they are included indirectly. The signatures
// sign this hash, so they are included indirectly.
MarshalBinarySig() ([]byte, error)
// Add an input to the transaction. No validation.
AddInput(input IAddress, amount uint64)
// Add an output to the transaction. No validation.
AddOutput(output IAddress, amount uint64)
// Add an Entry Credit output to the transaction. Denominated in
// Factoids, and interpreted by the exchange rate in the server at
// the time the transaction is added to Factom.
AddECOutput(ecoutput IAddress, amount uint64)
// Add an RCD. Must match the input in the same order. Inputs and
// RCDs are generally added at the same time.
AddRCD(rcd IRCD)
// Get the hash of the signed portion (not including signatures)
// This is the TxID of a factoid transaction
GetSigHash() IHash
GetHash() IHash
// Get the full hash of the transaction (including signatures)
GetFullHash() IHash
// Accessors the inputs, outputs, and Entry Credit outputs (ecoutputs)
// to this transaction.
GetInput(int) (ITransAddress, error)
GetOutput(int) (ITransAddress, error)
GetECOutput(int) (ITransAddress, error)
GetRCD(int) (IRCD, error)
GetInputs() []ITransAddress
GetOutputs() []ITransAddress
GetECOutputs() []ITransAddress
GetRCDs() []IRCD
GetVersion() uint64
// Locktime serves as a nonce to make every transaction unique. Transactions
// that are more than 24 hours old are not included nor propagated through
// the network.
GetTimestamp() Timestamp
SetTimestamp(Timestamp)
// Get a signature
GetSignatureBlock(i int) ISignatureBlock
SetSignatureBlock(i int, signatureblk ISignatureBlock)
GetSignatureBlocks() []ISignatureBlock
// Helper functions for validation.
TotalInputs() (uint64, error)
TotalOutputs() (uint64, error)
TotalECs() (uint64, error)
// Validate does everything but check the signatures.
Validate(int) error
ValidateSignatures() error
// Calculate the fee for a transaction, given the specified exchange rate.
CalculateFee(factoshisPerEC uint64) (uint64, error)
// Wallet Support (Not sure why we need some of these)
GetBlockHeight() uint32
SetBlockHeight(uint32)
// Helper Function. This simply adds an Authorization to a
// transaction. DOES NO VALIDATION. Not the job of construction.
// That's why we have a validation call.
AddAuthorization(auth IRCD)
// is this user address associated with the inputs and outputs of this transaction
HasUserAddress(userAddr string) bool
IsSameAs(ITransaction) bool
}
type IWalletEntry ¶
type IWalletEntry interface {
BinaryMarshallable
Printable
// Set the RCD for this entry. USE WITH CAUTION! You change
// the hash and thus the address returned by the wallet entry!
SetRCD(IRCD)
// Get the RCD used to validate an input
GetRCD() IRCD
// Add a public and private key. USE WITH CAUTION! You change
// the hash and thus the address returned by the wallet entry!
AddKey(public, private []byte)
// Get the name for this address
GetName() []byte
// Get the Public Key by its index
GetKey(i int) []byte
// Get the Private Key by its index
GetPrivKey(i int) []byte
// Set the name for this address
SetName([]byte)
// Get the address defined by the RCD for this wallet entry.
GetAddress() (IAddress, error)
// Return "ec" for Entry Credit address, and "fct" for a Factoid address
GetType() string
SetType(string)
}
type IndividualObj ¶
type IndividualObj struct {
ERROR string `json:"err"`
}
type Record ¶
type Record struct {
Bucket []byte
Key []byte
Data BinaryMarshallable
}
type ShortInterpretable ¶
type ShortInterpretable interface {
IsInterpretable() bool //Whether the structure can interpret itself
Interpret() string //Turns the data encoded in the structure into human-friendly string
}
Interface for short, reoccuring data structures to interpret themselves into human-friendly form
type StructToReturnValues ¶
type Timestamp ¶
type Timestamp interface {
SetTimestamp(b Timestamp)
SetTimeNow()
SetTime(miliseconds uint64)
SetTimeSeconds(seconds int64)
GetTime() time.Time
UnmarshalBinaryData(data []byte) (newData []byte, err error)
UnmarshalBinary(data []byte) error
GetTimeSeconds() int64
GetTimeMinutesUInt32() uint32
GetTimeMilli() int64
GetTimeMilliUInt64() uint64
GetTimeSecondsUInt32() uint32
MarshalBinary() ([]byte, error)
String() string
UTCString() string
IsSameAs(Timestamp) bool
Clone() Timestamp
}
A structure for handling timestamps for messages
Source Files
¶
- IFactomConfig.go
- RCD.go
- addresses.go
- adminBlocks.go
- anchor.go
- authority.go
- binary.go
- blankInterface.go
- block.go
- confirmation.go
- database.go
- databaseOverlay.go
- dbState.go
- dirBlockInfo.go
- directoryblock.go
- elections.go
- entries.go
- entryBlock.go
- entryCreditBlock.go
- factoidstate.go
- ferEntry.go
- general.go
- hash.go
- mlog.go
- msg.go
- msgFactory.go
- network.go
- peer.go
- plugins.go
- processList.go
- scwallet.go
- server.go
- signature.go
- state.go
- stringInterfaces.go
- system.go
- timestamp.go
- transaction.go