Documentation ¶
Overview ¶
ZooBC Copyright (C) 2020 Quasisoft Limited - Hong Kong This file is part of ZooBC <https://github.com/zoobc/zoobc-core>
ZooBC is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
ZooBC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with ZooBC. If not, see <http://www.gnu.org/licenses/>.
Additional Permission Under GNU GPL Version 3 section 7. As the special exception permitted under Section 7b, c and e, in respect with the Author’s copyright, please refer to this section:
- You are free to convey this Program according to GNU GPL Version 3, as long as you respect and comply with the Author’s copyright by showing in its user interface an Appropriate Notice that the derivate program and its source code are “powered by ZooBC”. This is an acknowledgement for the copyright holder, ZooBC, as the implementation of appreciation of the exclusive right of the creator and to avoid any circumvention on the rights under trademark law for use of some trade names, trademarks, or service marks.
- Complying to the GNU GPL Version 3, you may distribute the program without any permission from the Author. However a prior notification to the authors will be appreciated.
ZooBC is architected by Roberto Capodieci & Barton Johnston
contact us at roberto.capodieci[at]blockchainzoo.com and barton.johnston[at]blockchainzoo.com
Core developers that contributed to the current implementation of the software are:
Ahmad Ali Abdilah ahmad.abdilah[at]blockchainzoo.com Allan Bintoro allan.bintoro[at]blockchainzoo.com Andy Herman Gede Sukra Ketut Ariasa Nawi Kartini nawi.kartini[at]blockchainzoo.com Stefano Galassi stefano.galassi[at]blockchainzoo.com
IMPORTANT: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. util package contain basic utilities commonly used across the core package
ZooBC Copyright (C) 2020 Quasisoft Limited - Hong Kong This file is part of ZooBC <https://github.com/zoobc/zoobc-core>
ZooBC is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
ZooBC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with ZooBC. If not, see <http://www.gnu.org/licenses/>.
Additional Permission Under GNU GPL Version 3 section 7. As the special exception permitted under Section 7b, c and e, in respect with the Author’s copyright, please refer to this section:
- You are free to convey this Program according to GNU GPL Version 3, as long as you respect and comply with the Author’s copyright by showing in its user interface an Appropriate Notice that the derivate program and its source code are “powered by ZooBC”. This is an acknowledgement for the copyright holder, ZooBC, as the implementation of appreciation of the exclusive right of the creator and to avoid any circumvention on the rights under trademark law for use of some trade names, trademarks, or service marks.
- Complying to the GNU GPL Version 3, you may distribute the program without any permission from the Author. However a prior notification to the authors will be appreciated.
ZooBC is architected by Roberto Capodieci & Barton Johnston
contact us at roberto.capodieci[at]blockchainzoo.com and barton.johnston[at]blockchainzoo.com
Core developers that contributed to the current implementation of the software are:
Ahmad Ali Abdilah ahmad.abdilah[at]blockchainzoo.com Allan Bintoro allan.bintoro[at]blockchainzoo.com Andy Herman Gede Sukra Ketut Ariasa Nawi Kartini nawi.kartini[at]blockchainzoo.com Stefano Galassi stefano.galassi[at]blockchainzoo.com
IMPORTANT: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. Package util (core/util) handle block and transaction common used utility. Transaction Bytes is represented as: {TransactionType(2), Timestamp(8), SenderAccountID(32), RecipientAccountID(32), Fee(8), TransactionBodyLength(8), TransactionBodyBytes(tbl), Signature(64)} tbl: transaction body length Block Bytes is represented as: {Version(4), Timestamp(8), NumberOfTransaction(txNumber), TotalAmount(8), TotalFee(8), TotalCoinbase(8), PayloadLength(8), PayloadHash(custom), BlocksmithPublicKey(32), BlockSeed(custom), PreviousBlockHash(custom), Signature(64)}
ZooBC Copyright (C) 2020 Quasisoft Limited - Hong Kong This file is part of ZooBC <https://github.com/zoobc/zoobc-core>
ZooBC is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
ZooBC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with ZooBC. If not, see <http://www.gnu.org/licenses/>.
Additional Permission Under GNU GPL Version 3 section 7. As the special exception permitted under Section 7b, c and e, in respect with the Author’s copyright, please refer to this section:
- You are free to convey this Program according to GNU GPL Version 3, as long as you respect and comply with the Author’s copyright by showing in its user interface an Appropriate Notice that the derivate program and its source code are “powered by ZooBC”. This is an acknowledgement for the copyright holder, ZooBC, as the implementation of appreciation of the exclusive right of the creator and to avoid any circumvention on the rights under trademark law for use of some trade names, trademarks, or service marks.
- Complying to the GNU GPL Version 3, you may distribute the program without any permission from the Author. However a prior notification to the authors will be appreciated.
ZooBC is architected by Roberto Capodieci & Barton Johnston
contact us at roberto.capodieci[at]blockchainzoo.com and barton.johnston[at]blockchainzoo.com
Core developers that contributed to the current implementation of the software are:
Ahmad Ali Abdilah ahmad.abdilah[at]blockchainzoo.com Allan Bintoro allan.bintoro[at]blockchainzoo.com Andy Herman Gede Sukra Ketut Ariasa Nawi Kartini nawi.kartini[at]blockchainzoo.com Stefano Galassi stefano.galassi[at]blockchainzoo.com
IMPORTANT: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
ZooBC Copyright (C) 2020 Quasisoft Limited - Hong Kong This file is part of ZooBC <https://github.com/zoobc/zoobc-core>
ZooBC is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
ZooBC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with ZooBC. If not, see <http://www.gnu.org/licenses/>.
Additional Permission Under GNU GPL Version 3 section 7. As the special exception permitted under Section 7b, c and e, in respect with the Author’s copyright, please refer to this section:
- You are free to convey this Program according to GNU GPL Version 3, as long as you respect and comply with the Author’s copyright by showing in its user interface an Appropriate Notice that the derivate program and its source code are “powered by ZooBC”. This is an acknowledgement for the copyright holder, ZooBC, as the implementation of appreciation of the exclusive right of the creator and to avoid any circumvention on the rights under trademark law for use of some trade names, trademarks, or service marks.
- Complying to the GNU GPL Version 3, you may distribute the program without any permission from the Author. However a prior notification to the authors will be appreciated.
ZooBC is architected by Roberto Capodieci & Barton Johnston
contact us at roberto.capodieci[at]blockchainzoo.com and barton.johnston[at]blockchainzoo.com
Core developers that contributed to the current implementation of the software are:
Ahmad Ali Abdilah ahmad.abdilah[at]blockchainzoo.com Allan Bintoro allan.bintoro[at]blockchainzoo.com Andy Herman Gede Sukra Ketut Ariasa Nawi Kartini nawi.kartini[at]blockchainzoo.com Stefano Galassi stefano.galassi[at]blockchainzoo.com
IMPORTANT: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
Index ¶
- func CalculateCumulativeDifficulty(previousBlock *model.Block, blocksmithIndex int64) (string, error)
- func CalculateNodeOrder(score *big.Int, blockSeed, nodeID int64) *big.Int
- func GetAddRemoveSpineKeyAction(nodeRegistrationStatus uint32) (publicKeyAction model.SpinePublicKeyAction)
- func GetBlockID(block *model.Block, ct chaintype.ChainType) int64
- func GetBlockIDFromHash(blockHash []byte) int64
- func GetBlockSeed(nodeID int64, block *model.Block) (int64, error)
- func IsBlockIDExist(blockIds []int64, expectedBlockID int64) bool
- func IsGenesis(previousBlockID int64, block *model.Block) bool
- type PublishedReceiptUtil
- func (psu *PublishedReceiptUtil) GetPublishedReceiptByLinkedRMR(root []byte) (*model.PublishedReceipt, error)
- func (psu *PublishedReceiptUtil) GetPublishedReceiptsByBlockHeight(blockHeight uint32) ([]*model.PublishedReceipt, error)
- func (psu *PublishedReceiptUtil) GetPublishedReceiptsByBlockHeightRange(fromBlockHeight, toBlockHeight uint32) ([]*model.PublishedReceipt, error)
- func (psu *PublishedReceiptUtil) InsertPublishedReceipt(publishedReceipt *model.PublishedReceipt, tx bool) error
- type PublishedReceiptUtilInterface
- type ReceiptUtil
- func (ru *ReceiptUtil) BuildBlockDatumHashes(block *model.Block, executor query.ExecutorInterface, ...) ([][]byte, error)
- func (ru *ReceiptUtil) GeneratePublishedReceipt(receipt *model.Receipt, PublishedIndex uint32, RMRLinked []byte, ...) (*model.PublishedReceipt, error)
- func (ru *ReceiptUtil) GenerateReceipt(ct chaintype.ChainType, referenceBlock *storage.BlockCacheObject, ...) (*model.Receipt, error)
- func (ru *ReceiptUtil) GetMaxLookBackHeight(firstLookBackBlockHeight uint32) (uint32, error)
- func (ru *ReceiptUtil) GetNumberOfMaxReceipts(numberOfSortedBlocksmiths int) uint32
- func (ru *ReceiptUtil) GetPriorityPeersAtHeight(nodePubKey []byte, scrambleNodes *model.ScrambledNodes) (map[string]*model.Peer, error)
- func (ru *ReceiptUtil) GetRandomDatumHash(hashList [][]byte, blockSeed []byte) (rndDatumHash []byte, rndDatumType uint32, err error)
- func (ru *ReceiptUtil) GetReceiptKey(dataHash, senderPublicKey []byte) ([]byte, error)
- func (ru *ReceiptUtil) GetSignedReceiptBytes(receipt *model.Receipt) []byte
- func (ru *ReceiptUtil) GetUnsignedReceiptBytes(receipt *model.Receipt) []byte
- func (ru *ReceiptUtil) IsPublishedReceiptEqual(a, b *model.PublishedReceipt) error
- func (ru *ReceiptUtil) ValidateReceiptHelper(receipt *model.Receipt, validateRefBlock bool, ...) error
- func (ru *ReceiptUtil) ValidateReceiptSenderRecipient(receipt *model.Receipt, scrambledNode *model.ScrambledNodes) error
- type ReceiptUtilInterface
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func CalculateCumulativeDifficulty ¶
func CalculateCumulativeDifficulty( previousBlock *model.Block, blocksmithIndex int64, ) (string, error)
CalculateCumulativeDifficulty get the cumulative difficulty of the incoming block based on its blocksmith index
func CalculateNodeOrder ¶
CalculateNodeOrder calculate the Node order parameter, used to sort/select the group of blocksmith rewarded for a given block
func GetAddRemoveSpineKeyAction ¶
func GetAddRemoveSpineKeyAction(nodeRegistrationStatus uint32) (publicKeyAction model.SpinePublicKeyAction)
GetAddRemoveSpineKeyAction transcode nodeRegistrationStatus into relative spinekeypublickey acion eg. if node is deleted, the action for this spine public key is "RemoveKey", if registered "AddKey"
func GetBlockID ¶
GetBlockID generate block ID value if haven't return the assigned ID if assigned
func GetBlockIDFromHash ¶
GetBlockIdFromHash returns blockID from given hash
func GetBlockSeed ¶
GetBlockSeed calculate seed value, the first 8 byte of the digest(previousBlockSeed, nodeID)
func IsBlockIDExist ¶
Types ¶
type PublishedReceiptUtil ¶
type PublishedReceiptUtil struct { PublishedReceiptQuery query.PublishedReceiptQueryInterface QueryExecutor query.ExecutorInterface }
func NewPublishedReceiptUtil ¶
func NewPublishedReceiptUtil( publishedReceiptQuery query.PublishedReceiptQueryInterface, queryExecutor query.ExecutorInterface, ) *PublishedReceiptUtil
func (*PublishedReceiptUtil) GetPublishedReceiptByLinkedRMR ¶
func (psu *PublishedReceiptUtil) GetPublishedReceiptByLinkedRMR(root []byte) (*model.PublishedReceipt, error)
func (*PublishedReceiptUtil) GetPublishedReceiptsByBlockHeight ¶
func (psu *PublishedReceiptUtil) GetPublishedReceiptsByBlockHeight(blockHeight uint32) ([]*model.PublishedReceipt, error)
GetPublishedReceiptByBlockHeight get data from published_receipt table by the block height they were published / broadcasted
func (*PublishedReceiptUtil) GetPublishedReceiptsByBlockHeightRange ¶
func (psu *PublishedReceiptUtil) GetPublishedReceiptsByBlockHeightRange(fromBlockHeight, toBlockHeight uint32) ([]*model.PublishedReceipt, error)
GetPublishedReceiptByBlockHeightRange get data from published_receipt table by the block height they were published / broadcasted
func (*PublishedReceiptUtil) InsertPublishedReceipt ¶
func (psu *PublishedReceiptUtil) InsertPublishedReceipt(publishedReceipt *model.PublishedReceipt, tx bool) error
type PublishedReceiptUtilInterface ¶
type PublishedReceiptUtilInterface interface { GetPublishedReceiptsByBlockHeight(blockHeight uint32) ([]*model.PublishedReceipt, error) GetPublishedReceiptsByBlockHeightRange(fromBlockHeight, toBlockHeight uint32) ([]*model.PublishedReceipt, error) GetPublishedReceiptByLinkedRMR(root []byte) (*model.PublishedReceipt, error) InsertPublishedReceipt(publishedReceipt *model.PublishedReceipt, tx bool) error }
PublishedReceiptUtilInterface act as interface for data getter on published_receipt entity
type ReceiptUtil ¶
type ReceiptUtil struct {
NodeAddressInfoStorage storage.CacheStorageInterface
}
func NewReceiptUtil ¶
func NewReceiptUtil( nodeAddressInfoStorage storage.CacheStorageInterface, ) *ReceiptUtil
func (*ReceiptUtil) BuildBlockDatumHashes ¶
func (ru *ReceiptUtil) BuildBlockDatumHashes( block *model.Block, executor query.ExecutorInterface, transactionQuery query.TransactionQueryInterface, ) ([][]byte, error)
buildBlockDatumHashes build an array containing all hashes of data secured by the block (transactions and previous block)
func (*ReceiptUtil) GeneratePublishedReceipt ¶
func (ru *ReceiptUtil) GeneratePublishedReceipt( receipt *model.Receipt, PublishedIndex uint32, RMRLinked []byte, RMRLinkedIndex uint32, executor query.ExecutorInterface, merkleTreeQuery query.MerkleTreeQueryInterface, ) (*model.PublishedReceipt, error)
func (*ReceiptUtil) GenerateReceipt ¶
func (ru *ReceiptUtil) GenerateReceipt( ct chaintype.ChainType, referenceBlock *storage.BlockCacheObject, senderPublicKey, recipientPublicKey, datumHash, rmr []byte, datumType uint32, ) (*model.Receipt, error)
GenerateReceipt generate receipt object that act as proof of receipt on data. Data received can be block, transaction, etc. generated receipt will not be signed yet (RecipientSignature = nil), will need to be signed using SignReceipt method.
func (*ReceiptUtil) GetMaxLookBackHeight ¶
func (ru *ReceiptUtil) GetMaxLookBackHeight(firstLookBackBlockHeight uint32) (uint32, error)
func (*ReceiptUtil) GetNumberOfMaxReceipts ¶
func (ru *ReceiptUtil) GetNumberOfMaxReceipts(numberOfSortedBlocksmiths int) uint32
func (*ReceiptUtil) GetPriorityPeersAtHeight ¶
func (ru *ReceiptUtil) GetPriorityPeersAtHeight( nodePubKey []byte, scrambleNodes *model.ScrambledNodes, ) (map[string]*model.Peer, error)
GetPriorityPeersAtHeight get priority peers map with peer public key (hex) as map key
func (*ReceiptUtil) GetRandomDatumHash ¶
func (*ReceiptUtil) GetReceiptKey ¶
func (ru *ReceiptUtil) GetReceiptKey( dataHash, senderPublicKey []byte, ) ([]byte, error)
func (*ReceiptUtil) GetSignedReceiptBytes ¶
func (ru *ReceiptUtil) GetSignedReceiptBytes(receipt *model.Receipt) []byte
GetSignedReceiptBytes Client task before store into database batch_receipt
func (*ReceiptUtil) GetUnsignedReceiptBytes ¶
func (ru *ReceiptUtil) GetUnsignedReceiptBytes(receipt *model.Receipt) []byte
GetUnsignedReceiptBytes Client task while doing validation signature
func (*ReceiptUtil) IsPublishedReceiptEqual ¶
func (ru *ReceiptUtil) IsPublishedReceiptEqual(a, b *model.PublishedReceipt) error
func (*ReceiptUtil) ValidateReceiptHelper ¶
func (ru *ReceiptUtil) ValidateReceiptHelper( receipt *model.Receipt, validateRefBlock bool, executor query.ExecutorInterface, blockQuery query.BlockQueryInterface, mainBlockStorage storage.CacheStackStorageInterface, signature crypto.SignatureInterface, scrambleNodesAtHeight *model.ScrambledNodes, ) error
ValidateReceiptHelper helper function for better code testability
func (*ReceiptUtil) ValidateReceiptSenderRecipient ¶
func (ru *ReceiptUtil) ValidateReceiptSenderRecipient( receipt *model.Receipt, scrambledNode *model.ScrambledNodes, ) error
type ReceiptUtilInterface ¶
type ReceiptUtilInterface interface { GetNumberOfMaxReceipts(numberOfSortedBlocksmiths int) uint32 GenerateReceipt( ct chaintype.ChainType, referenceBlock *storage.BlockCacheObject, senderPublicKey, recipientPublicKey, datumHash, rmrLinked []byte, datumType uint32, ) (*model.Receipt, error) GetUnsignedReceiptBytes(receipt *model.Receipt) []byte GetSignedReceiptBytes(receipt *model.Receipt) []byte GetReceiptKey( dataHash, senderPublicKey []byte, ) ([]byte, error) ValidateReceiptHelper( receipt *model.Receipt, validateRefBlock bool, executor query.ExecutorInterface, blockQuery query.BlockQueryInterface, mainBlockStorage storage.CacheStackStorageInterface, signature crypto.SignatureInterface, scrambleNodesAtHeight *model.ScrambledNodes, ) error ValidateReceiptSenderRecipient( receipt *model.Receipt, scrambledNode *model.ScrambledNodes, ) error GetPriorityPeersAtHeight( nodePubKey []byte, scrambleNodes *model.ScrambledNodes, ) (map[string]*model.Peer, error) GeneratePublishedReceipt( batchReceipt *model.Receipt, PublishedIndex uint32, RMRLinked []byte, RMRLinkedIndex uint32, executor query.ExecutorInterface, merkleTreeQuery query.MerkleTreeQueryInterface, ) (*model.PublishedReceipt, error) IsPublishedReceiptEqual(a, b *model.PublishedReceipt) error BuildBlockDatumHashes( block *model.Block, executor query.ExecutorInterface, transactionQuery query.TransactionQueryInterface, ) ([][]byte, error) GetRandomDatumHash(hashList [][]byte, blockSeed []byte) (rndDatumHash []byte, rndDatumType uint32, err error) GetMaxLookBackHeight(firstLookBackBlockHeight uint32) (uint32, error) }