Open-Source · Multi-Language · Blockchain Secure

Store Data
On-Chain & Encrypted

0 Languages
AES-256 Encryption
EIP-191 Signing
100% On-Chain

Enterprise-Grade Security

Every record is encrypted with your private key before it ever touches the blockchain.

AES-256-GCM Encryption

Military-grade authenticated encryption with random IVs. Only your private key can unlock the data.

Immutable Blockchain

Records are stored on the UNP Chain — an EVM-compatible blockchain ensuring tamper-proof history.

Key-Based Derivation

EIP-191 personal_sign + PBKDF2-SHA256 derives a unique encryption key per wallet. Zero trust, full control.

Optional MongoDB

Add MongoDB for instant record lookup by ID. Works beautifully without it too — just TxHash + Payload.

6 Language SDKs

C#, Python, Node.js (TypeScript), Java, PHP, and Go. All produce identical encrypted payloads — cross-SDK compatible.

Audit Trail

Every insert, update, and delete is an on-chain transaction. Full history with previousHash chaining.

How It Works

From plain JSON to immutable, encrypted on-chain storage in three steps.

1

Encrypt

Your data is JSON-serialized and encrypted with AES-256-GCM. The key is derived from your private key via EIP-191 + PBKDF2.

Data → JSON → AES-256-GCM(key, iv) → Base64
2

Store On-Chain

The encrypted payload is embedded in a transaction and broadcast to the UNP Chain (EVM, chain ID 47382916).

0x + "UNPC" + typeCode + hex(base64)
3

Track & Retrieve

Optionally store metadata in MongoDB for fast lookup. Decrypt any time with your private key — locally, no network needed.

Base64 → AES-GCM-Decrypt(key) → JSON → Object
📄 Your Data
🔐 AES-256-GCM
⛓️ UNP Chain
🗄 MongoDB

Choose Your Language

All SDKs produce identical on-chain format — read data written by any SDK with any other.

C# (.NET 9)
Program.cs
using UNPChainDatabaseSDK;

var options = new ChainDatabaseOptions
{
    MongoConnectionString = "mongodb://localhost:27017",
    MongoDatabaseName     = "MyApp"
};

var db = new ChainDatabase<Product>("0xYOUR_PRIVATE_KEY", options);

// Insert
var result = await db.InsertAsync(new Product { Name = "Keyboard", Price = 149.99m });
Console.WriteLine($"TxHash: {result.TxHash}");

// Read
var product = await db.GetAsync(result.Payload);

// Update
var updated = await db.UpdateAsync(result.Payload, result.TxHash,
    new Product { Name = "Keyboard", Price = 129.99m });

// Delete
await db.DeleteAsync(updated.Payload, updated.TxHash);
Python 3.10+
main.py
from unpchain_database_sdk import ChainDatabase, ChainDatabaseOptions

options = ChainDatabaseOptions(
    mongo_connection_string="mongodb://localhost:27017",
    mongo_database_name="MyApp"
)

db = ChainDatabase("0xYOUR_PRIVATE_KEY", "Product", options)

# Insert
result = db.insert({"name": "Keyboard", "price": 149.99})
print(f"TxHash: {result.tx_hash}")

# Read
product = db.get(result.payload)

# Update
updated = db.update(result.payload, result.tx_hash,
    {"name": "Keyboard", "price": 129.99})

# Delete
db.delete(updated.payload, updated.tx_hash)
TypeScript / Node.js
index.ts
import { ChainDatabase } from 'unpchain-database-sdk';

const db = new ChainDatabase<Product>('0xYOUR_PRIVATE_KEY', {
  mongoConnectionString: 'mongodb://localhost:27017',
  mongoDatabaseName: 'MyApp',
});

// Insert
const result = await db.insert({ name: 'Keyboard', price: 149.99 });
console.log('TxHash:', result.txHash);

// Read
const product = await db.get(result.payload);

// Update
const updated = await db.update(
  result.payload, result.txHash,
  { name: 'Keyboard', price: 129.99 }
);

// Delete
await db.delete(updated.payload, updated.txHash);
Java 17+
App.java
import com.unpchain.sdk.*;

var options = ChainDatabaseOptions.builder()
    .mongoConnectionString("mongodb://localhost:27017")
    .mongoDatabaseName("MyApp")
    .build();

var db = new ChainDatabase<>("0xYOUR_PRIVATE_KEY", Product.class, options);

// Insert
ChainWriteResult result = db.insert(new Product("Keyboard", 149.99));
System.out.println("TxHash: " + result.getTxHash());

// Read
Product product = db.get(result.getPayload());

// Update
ChainWriteResult updated = db.update(
    result.getPayload(), result.getTxHash(),
    new Product("Keyboard", 129.99));

// Delete
db.delete(updated.getPayload(), updated.getTxHash());
PHP 8.1+
index.php
use UNPChain\DatabaseSDK\ChainDatabase;
use UNPChain\DatabaseSDK\ChainDatabaseOptions;

$options = new ChainDatabaseOptions(
    mongoConnectionString: 'mongodb://localhost:27017',
    mongoDatabaseName: 'MyApp'
);

$db = new ChainDatabase('0xYOUR_PRIVATE_KEY', 'Product', $options);

// Insert
$result = $db->insert(['name' => 'Keyboard', 'price' => 149.99]);
echo "TxHash: {$result->txHash}\n";

// Read
$product = $db->get($result->payload);

// Update
$updated = $db->update($result->payload, $result->txHash,
    ['name' => 'Keyboard', 'price' => 129.99]);

// Delete
$db->delete($updated->payload, $updated->txHash);
Go 1.21+
main.go
import chaindb "github.com/UNPChain/unpchain-database-sdk-go"

opts := chaindb.DefaultOptions()
opts.MongoConnectionString = "mongodb://localhost:27017"
opts.MongoDatabaseName = "MyApp"

db, _ := chaindb.NewChainDatabase("0xYOUR_KEY", "Product", opts)
ctx := context.Background()

// Insert
result, _ := db.Insert(ctx, map[string]any{
    "name": "Keyboard", "price": 149.99,
})
fmt.Println("TxHash:", result.TxHash)

// Read
product, _ := db.Get(result.Payload)

// Update
updated, _ := db.Update(ctx, result.Payload, result.TxHash,
    map[string]any{"name": "Keyboard", "price": 129.99})

// Delete
db.Delete(ctx, updated.Payload, updated.TxHash)

Install in Seconds

.NET / C#
dotnet add package UNPChainDatabaseSDK
NuGet →
Python
pip install unpchain-database-sdk
PyPI →
Node.js
npm install unpchain-database-sdk
npm →
Java
<dependency>
  <groupId>com.unpchain</groupId>
  <artifactId>database-sdk</artifactId>
  <version>1.0.0</version>
</dependency>
GitHub →
PHP
composer require unpchain/database-sdk
GitHub →
Go
go get github.com/UnipolyChain/unpchain-database-sdk-go
GitHub →

Clean & Consistent

The same operations work identically across all 6 languages.

MethodDescriptionRequires MongoDB
Insert(data)Encrypt + store on-chain. Returns { TxHash, Payload }No
Get(payload)Decrypt & return data. Returns null if deleted.No
GetRecord(payload)Decrypt with full metadata (RecordId, Operation, Timestamp…)No
Update(payload, txHash, newData)Write a new version on-chain with previousHash link.No
Delete(payload, txHash)Soft-delete — writes a delete marker on-chain.No
IsDeleted(payload)Local check — no network call required.No
GetAll(sortOrder)Return all records for the wallet, sorted.Yes
GetByRecordId(id)Lookup a record by its stable ID.Yes
UpdateByRecordId(id, data)Update without manual payload tracking.Yes
DeleteByRecordId(id)Delete without manual payload tracking.Yes