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

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.