TrustChain is a tamper-resistant data structure that is used in Tribler to record community contributions. This blockchain-based distributed ledger can then be used to build a reputation mechanism that is able to identify free-riders. A basic implementation of TrustChain is available in our code base and available for other developers.
TrustChain is specifically designed to be transaction-agnostic which means that any transaction can be stored in TrustChain. In Tribler, this consists of the amount of uploaded and downloaded data.
Using TrustChain to store transaction is straightforward. Creating a new block is done by invoking the
sign_block method of the community. The required arguments are the destination candidate (the counterparty of the transaction), your public key and the transaction itself, in the Python dictionary format. Note that this dictionary can only contain Python primitive types and no custom objects due to the serialization of the transaction when sending it to the other party.
Assuming that the transaction counterparty is online and the block is valid, the counterparty signs the block and sends it back where the
received_half_block method is invoked, processing the received block.
Using TrustChain in your project
To use TrustChain in your own projects, one can create a subclass of
TrustChainCommunity or use the
TrustChainCommunity directly. This should be enough for basic usage. For more information about communities, we reference the reader to a Dispersy tutorial.
In order to implement custom transaction validation rules, a subclass of
TrustChainBlock should be made and the
BLOCK_CLASS variable in the
TrustChainCommunity should be updated accordingly. By overriding the
validate_transaction method, you can add your own custom validation rules.