Every record is encrypted with your private key before it ever touches the blockchain.
Military-grade authenticated encryption with random IVs. Only your private key can unlock the data.
Records are stored on the UNP Chain — an EVM-compatible blockchain ensuring tamper-proof history.
EIP-191 personal_sign + PBKDF2-SHA256 derives a unique encryption key per wallet. Zero trust, full control.
Add MongoDB for instant record lookup by ID. Works beautifully without it too — just TxHash + Payload.
C#, Python, Node.js (TypeScript), Java, PHP, and Go. All produce identical encrypted payloads — cross-SDK compatible.
Every insert, update, and delete is an on-chain transaction. Full history with previousHash chaining.
From plain JSON to immutable, encrypted on-chain storage in three steps.
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
The encrypted payload is embedded in a transaction and broadcast to the UNP Chain (EVM, chain ID 47382916).
0x + "UNPC" + typeCode + hex(base64)
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
All SDKs produce identical on-chain format — read data written by any SDK with any other.
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);
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)
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);
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());
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);
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)
<dependency>
<groupId>com.unpchain</groupId>
<artifactId>database-sdk</artifactId>
<version>1.0.0</version>
</dependency>
GitHub →
The same operations work identically across all 6 languages.
| Method | Description | Requires 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 |