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 // 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"` 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(interface{}) []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 GetEntryDBHeightComplete() 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