Dự án Solana Anchor để nhận dữ liệu từ EMQX, ký dữ liệu và lưu chữ ký lên blockchain Solana.
- EMQX Consumer: Nhận dữ liệu từ EMQX broker qua MQTT
- Data Signing: Ký dữ liệu bằng Ed25519 signature
- On-chain Storage: Lưu trữ chữ ký và hash dữ liệu trên Solana blockchain
- Docker Support: Triển khai đầy đủ với Docker Compose
- Testnet: Sử dụng Solana Devnet
┌─────────────┐ MQTT ┌──────────────────┐
│ EMQX │ ──────────────────────> │ Consumer │
│ Broker │ │ Service │
└─────────────┘ └────────┬─────────┘
│
│ Sign & Store
│
▼
┌─────────────────┐
│ Solana │
│ Devnet │
└─────────────────┘
- Docker và Docker Compose
- Node.js 20+ (nếu chạy local)
- Rust và Anchor CLI (nếu phát triển smart contract)
- Solana CLI (để quản lý wallet)
git clone <repository-url>
cd solana-data-sign# Cài đặt Solana CLI (nếu chưa có)
sh -c "$(curl -sSfL https://release.solana.com/stable/install)"
# Tạo keypair mới
solana-keygen new --outfile keypair.json
# Hoặc sử dụng Makefile
make keypair
# Xem public key
solana-keygen pubkey keypair.json
# Lấy SOL từ faucet (devnet)
solana airdrop 2 <YOUR_PUBLIC_KEY> --url devnet
# Hoặc sử dụng Makefile
make airdrop# Cài đặt dependencies
npm install
# Build Anchor program
anchor build
# Hoặc sử dụng Makefile
make build
# Deploy lên devnet
anchor deploy --provider.cluster devnet
# Hoặc sử dụng Makefile
make deployLưu ý: Sau khi deploy, cập nhật PROGRAM_ID trong các file:
Anchor.tomlprograms/solana-data-sign/src/lib.rs(declare_id!).env.example
# Copy environment file
cp .env.example .env
# Build và chạy tất cả services
docker-compose up --build
# Chạy ở background
docker-compose up -d
# Hoặc sử dụng Makefile
make up- URL: http://localhost:18083
- Username:
admin - Password:
public
Dự án đã bao gồm một MQTT publisher tự động gửi dữ liệu test mỗi 10 giây. Hoặc bạn có thể gửi thủ công:
# Sử dụng mosquitto_pub
docker exec -it emqx mosquitto_pub \
-h localhost \
-t 'data/sensor/temperature' \
-m '{"data":"Temperature: 28.5C","timestamp":1234567890,"source":"sensor-01"}'
# Hoặc sử dụng Makefile
make publish-test# Xem logs của consumer
docker-compose logs -f solana-consumer
# Xem logs của EMQX
docker-compose logs -f emqx
# Hoặc sử dụng Makefile
make logs-consumer
make logs-emqx
make logs # All servicesKhi consumer nhận và xử lý dữ liệu, nó sẽ in ra transaction signature. Bạn có thể xem trên Solana Explorer:
https://explorer.solana.com/tx/<TRANSACTION_SIGNATURE>?cluster=devnet
solana-data-sign/
├── programs/
│ └── solana-data-sign/
│ └── src/
│ └── lib.rs # Anchor smart contract
├── consumer/
│ └── src/
│ └── index.ts # EMQX consumer service
├── Anchor.toml # Anchor configuration
├── Cargo.toml # Rust workspace
├── docker-compose.yml # Docker Compose config
├── Dockerfile # Consumer Dockerfile
├── Makefile # Build automation
└── README.md # Documentation
- initialize: Khởi tạo account để lưu trữ signatures
- store_signature: Lưu data hash và signature lên chain
- verify_signature: Xác minh signature đã lưu
-
DataSignature: Account chính quản lý signatures
authority: Public key của người có quyềnsignature_count: Số lượng signatures đã lưu
-
SignatureRecord: Record cho mỗi signature
data_hash: SHA-256 hash của dữ liệusignature: Ed25519 signaturetimestamp: Thời gian kýsigner: Public key của người kýindex: Số thứ tự
Consumer service thực hiện:
- Kết nối đến EMQX broker
- Subscribe topic
data/sensor/# - Nhận dữ liệu từ MQTT
- Tạo SHA-256 hash của dữ liệu
- Ký hash bằng Ed25519
- Gọi smart contract để lưu signature lên chain
Các biến môi trường (.env):
# EMQX
EMQX_BROKER=mqtt://emqx:1883
EMQX_TOPIC=data/sensor/#
EMQX_USERNAME=
EMQX_PASSWORD=
# Solana
SOLANA_RPC_URL=https://api.devnet.solana.com
PROGRAM_ID=<YOUR_PROGRAM_ID>
KEYPAIR_PATH=/app/keypair.json# Cài đặt dependencies
cd consumer
npm install
# Chạy development mode
npm run dev# Chạy tests
anchor test
# Hoặc
make test# Build smart contract
anchor build
# Build consumer
cd consumer && npm run build
# Hoặc
make buildmake help # Show all available commands
make install # Install dependencies
make build # Build program and consumer
make deploy # Deploy to devnet
make up # Start docker services
make down # Stop docker services
make logs # Show all logs
make clean # Clean build artifacts
make test # Run tests
make keypair # Generate new keypair
make airdrop # Request SOL airdrop
make balance # Check wallet balance
make publish-test # Publish test message- Kiểm tra EMQX đã chạy:
docker-compose ps - Xem logs:
docker-compose logs emqx - Kiểm tra network:
docker network ls
- Kiểm tra wallet có đủ SOL:
solana balance <PUBLIC_KEY> --url devnet - Lấy thêm SOL:
solana airdrop 2 <PUBLIC_KEY> --url devnet - Kiểm tra program ID đã đúng chưa
- Build program trước:
anchor build - Kiểm tra file tồn tại:
target/idl/solana_data_sign.json
ISC
Developed with Solana Anchor Framework