This project delivers a prototype for AI-driven compliance and secure data sharing in cross-border media collaboration. It integrates Hyperledger Fabric for permissioned blockchain and Apache Kafka for scalable event streaming.
- Hyperledger Fabric 2.x
- Node.js chaincode
- Apache Kafka (via Docker)
- Python Kafka clients (kafka-python)
- Kafka CLI (producer/consumer)
- Docker Compose
- Fabric CA & Orderer
- CouchDB (optional)
.
βββ chaincode/
β βββ compliance/
β βββ index.js
β βββ compliance.js
β βββ package.json
βββ kafka/
β βββ docker-compose-kafka.yaml
β βββ producer.py
β βββ ai_compliance_checker.py
β βββ fabric_submitter.py
βββ test-network/
βββ (Fabric network configs)
cd kafka
docker-compose -f docker-compose-kafka.yaml up -dYou should see:
zookeeperkafka-brokerkafka-ui(optional dashboard)
# Create topic
docker exec -it kafka-broker kafka-topics.sh --create --topic compliance-events --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1
# Create media-events topic
docker exec -it kafka-broker kafka-topics.sh --create --topic media-events --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1
# Create ai-decisions topic
docker exec -it kafka-broker kafka-topics.sh --create --topic ai-decisions --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1
# Produce a message
docker exec -it kafka-broker kafka-console-producer.sh --broker-list localhost:9092 --topic compliance-events
# Consume message
docker exec -it kafka-broker kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic compliance-events --from-beginningpeer lifecycle chaincode package compliance.tar.gz \
--path ../chaincode/compliance \
--lang node \
--label compliance_1.0# Org1
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_ADDRESS=localhost:7051
export CORE_PEER_MSPCONFIGPATH=$PWD/organizations/peerOrganizations/org1.example.com/users/[email protected]/msp
export CORE_PEER_TLS_ROOTCERT_FILE=$PWD/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
peer lifecycle chaincode install compliance.tar.gz
# Org2
export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_ADDRESS=localhost:9051
export CORE_PEER_MSPCONFIGPATH=$PWD/organizations/peerOrganizations/org2.example.com/users/[email protected]/msp
export CORE_PEER_TLS_ROOTCERT_FILE=$PWD/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
peer lifecycle chaincode install compliance.tar.gzUse correct PACKAGE_ID from queryinstalled:
peer lifecycle chaincode approveformyorg \
--channelID mychannel \
--name compliance \
--version 1.0 \
--package-id compliance_1.0:<your_package_id> \
--sequence 2 \
--init-required \
--tls \
--cafile $PWD/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem \
-o localhost:7050 \
--ordererTLSHostnameOverride orderer.example.comRepeat for both orgs.
peer lifecycle chaincode commit \
-o localhost:7050 \
--ordererTLSHostnameOverride orderer.example.com \
--channelID mychannel \
--name compliance \
--version 1.0 \
--sequence 2 \
--init-required \
--tls \
--cafile $PWD/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem \
--peerAddresses localhost:7051 \
--tlsRootCertFiles $PWD/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt \
--peerAddresses localhost:9051 \
--tlsRootCertFiles $PWD/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crtpeer chaincode invoke \
-o localhost:7050 \
--ordererTLSHostnameOverride orderer.example.com \
--tls \
--cafile $PWD/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem \
-C mychannel \
-n compliance \
--isInit \
--peerAddresses localhost:7051 \
--tlsRootCertFiles $PWD/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt \
--peerAddresses localhost:9051 \
--tlsRootCertFiles $PWD/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt \
-c '{"function":"initLedger","Args":[]}'peer chaincode invoke \
-C mychannel \
-n compliance \
-c '{"function":"recordDecision","Args":["event123", "approved", "meets all conditions"]}'peer chaincode query \
-C mychannel \
-n compliance \
-c '{"function":"queryDecision","Args":["event123"]}'peer chaincode query \
-C mychannel \
-n compliance \
-c '{"function":"getAllDecisions","Args":[]}'This project includes a complete AI-driven compliance pipeline using Kafka event streaming:
- producer.py - Simulates media events with compliance metadata
- ai_compliance_checker.py - AI service that processes events and makes compliance decisions
- fabric_submitter.py - Submits AI decisions to Hyperledger Fabric blockchain
# Terminal 1: Start the AI compliance checker
cd kafka
python ai_compliance_checker.py
# Terminal 2: Start the Fabric submitter
python fabric_submitter.py
# Terminal 3: Send test events
python producer.py[Media Event] β Kafka β [AI Checker] β [Compliance Decision] β Kafka β [Fabric Submitter] β Blockchain
Input (media-events topic):
{
"event_id": "001",
"data_type": "personal",
"sender": "Ireland",
"receiver": "Germany",
"consent": true
}AI Decision (compliance-decisions topic):
{
"event_id": "001",
"decision": "approved",
"reason": "Consent granted",
"original_event": {...}
}The AI checker implements:
- Consent verification - Requires explicit consent for data transfer
- Jurisdiction checks - GDPR-style cross-border restrictions
- Extensible rule engine - Easy to add new compliance logic
Each compliance decision stores:
{
"eventId": "event123",
"decision": "approved",
"reason": "meets all conditions",
"timestamp": "2025-08-02T12:42:58.000Z",
"docType": "decision"
}