A computer implemented method comprising: receiving, from at least one node in a blockchain network, at least a first smart contract that governs access rights to data sets provided by a first set of one or more members of the blockchain network and at least a second smart contract that executes blockchain transactions based on usage of the data sets; receiving, from a member of a second set of one or more members of the blockchain network, a request to perform a transaction to access, from the data sets, data that satisfies a set of criteria; determining that a plurality of nodes in the blockchain network have approved the transaction based, at least in part, on the first smart contract; responsive to detecting approval of the transaction by the plurality of nodes in the blockchain network, executing a first blockchain transaction that updates at least a first block in a set of one or more ledgers that is distributed to the first set of one or more members and the second set of one or more members of the blockchain network to indicate that the member of the second set of one or more members of the blockchain network has access to the data that satisfies the set of criteria; detecting usage of the data set that satisfies the set of criteria; and the method characterised in that it further comprises: responsive to detecting the usage of the data set that satisfies the set of criteria, executing, by the second smart contract, a second blockchain transaction that updates at least a second block in the set of one or more ledgers that is distributed to the first set of one or more members and the second set of one or more members of the blockchain network, wherein updating the second block comprises committing a record that includes a first set of one or more identifiers identifying which data sets matched the set of criteria and a second set of identifiers identifying which members of the first set of one or more members of the blockchain network contributed data to the data sets matching the set of criteria. receiving, from at least one node in a blockchain network, at least a first smart contract that governs access rights to data sets provided by a first set of one or more members of the blockchain network and at least a second smart contract that executes blockchain transactions based on usage of the data sets; receiving, from a member of a second set of one or more members of the blockchain network, a request to perform a transaction to access, from the data sets, data that satisfies a set of criteria; determining that a plurality of nodes in the blockchain network have approved the transaction based, at least in part, on the first smart contract; responsive to detecting approval of the transaction by the plurality of nodes in the blockchain network, executing a first blockchain transaction that updates at least a first block in a set of one or more ledgers that is distributed to the first set of one or more members and the second set of one or more members of the blockchain network to indicate that the member of the second set of one or more members of the blockchain network has access to the data that satisfies the set of criteria; detecting usage of the data set that satisfies the set of criteria; and the method characterised in that it further comprises: responsive to detecting the usage of the data set that satisfies the set of criteria, executing, by the second smart contract, a second blockchain transaction that updates at least a second block in the set of one or more ledgers that is distributed to the first set of one or more members and the second set of one or more members of the blockchain network, wherein updating the second block comprises committing a record that includes a first set of one or more identifiers identifying which data sets matched the set of criteria and a second set of identifiers identifying which members of the first set of one or more members of the blockchain network contributed data to the data sets matching the set of criteria.