Qodoonect TRUST — Decentralized Identity System Documentation
Version: 1.0.0-draft
Date: 2026-04-11
Status: Initial Draft
Organization: Qodoonect Family Group (qodoonect.com)
Subsystem of: finance.qodoonect.com (Automated Accounting Platform)
Based on: did:btc Method Specification (MicroStrategy/Strategy, August 2024)
License: CC BY 4.0
1. Executive Summary
Qodoonect TRUST is a decentralized identity (DID) layer built on the Bitcoin blockchain, designed to provide tamper-proof, trustless, and long-lived digital identities for the Qodoonect ecosystem. The system adapts the did:btc method specification — originally developed by Daniel McNally at MicroStrategy (now Strategy) — to serve the identity and authentication needs of the Qodoonect automated accounting platform and its broader family of services.
TRUST stands for Trustless Registry of Universal Secure Tokens.
The system leverages Bitcoin's immutable ledger and Taproot-enabled inscription envelopes to store DID documents directly on-chain, eliminating external dependencies and ensuring data permanence, integrity, and provenance.
2. System Context
2.1 Qodoonect Family Group
The Qodoonect family group (qodoonect.com) operates a suite of interconnected services. The TRUST identity layer serves as the foundational authentication and identity infrastructure across all platforms:
- qodoonect.com — Parent organization and service hub
- finance.qodoonect.com — Automated accounting platform (primary integration target)
- Future services — Any Qodoonect ecosystem service requiring decentralized identity
2.2 Role of TRUST in the Ecosystem
TRUST provides:
- Entity Identity: Unique, verifiable, blockchain-anchored identifiers for users, organizations, and automated agents
- Authentication: Cryptographic proof of identity without centralized authorities
- Accounting Integrity: Tamper-proof identity chain for financial transactions and audit trails
- Cross-Service Identity: Single DID usable across all Qodoonect platforms
- Regulatory Compliance: Immutable identity records for KYC/AML audit trails
3. Technical Foundation — did:btc Method
3.1 Overview
The did:btc method uses the Bitcoin blockchain exclusively to store and retrieve DID information. UTXOs (Unspent Transaction Outputs) on-chain control DIDs. Data is inscribed in the witness of transactions using Taproot (SegWit v1) inscription envelopes, enabling greater extensibility while reducing fees and block space consumption.
3.2 Why Bitcoin?
- Most secure blockchain: Protected by the largest proof-of-work network
- Immutable ledger: Transactions cannot be modified or deleted after confirmation
- Decentralized: No governing body controls the network; thousands of nodes worldwide
- Longevity: Operational since 2009 with near 100% uptime
- SegWit discount: Witness data weighted at 25% rate, reducing costs for DID operations
3.3 Inscription Envelopes (Taproot)
Bitcoin's Taproot upgrade (SegWit v1, 2021) enabled inscription envelopes — a technique for storing arbitrary data in the witness of transactions. Key technical details:
- SegWit v0 (2017): Introduced witness data at 25% weight discount
- Taproot (2021): Removed 10,000-byte ScriptPubKey limit
- Envelope technique: Data stored in witness, deliberately ignored by script execution but extractable by inscription-aware software
- Cost efficiency: DID data benefits from the SegWit witness discount
3.4 DID Identifier Format
did:btc:<txref>
- Method name:
btc - Method-specific identifier: TxRef conforming to BIP-136
- TxRef encodes: Block height + transaction index (+ optional DID index for batches)
- Testnet prefix:
did:btc:test:<txref>
Example:
did:btc:xg4x-ay5y-q5zq-232
3.5 Comparison with Other DID Methods
| Method | Data Storage | External Dependencies | Key Flexibility | Cost |
|---|---|---|---|---|
| did:btc | On-chain (witness) | Bitcoin only | Any curve/key type | Medium-High |
| did:btcr | URL reference | Web servers | secp256k1 only | Low |
| did:ion | IPFS pointer | Bitcoin + IPFS | Flexible | Medium |
| did:btco | Full doc inscribed | Bitcoin only | Limited | High |
did:btc advantages over alternatives:
- No external dependencies (unlike did:btcr, did:ion)
- Supports any key curve/type (unlike did:btcr)
- Minimizes block space by dynamic DID document rendering (unlike did:btco)
- Separates wallet keys from subject keys for enhanced security
4. DID Method Operations
4.1 Create
A DID creation transaction contains an OP_RETURN in its first output with:
| Byte Position | Length | Content |
|---|---|---|
| 0-2 | 3 bytes | ASCII did (human-readable flag) |
| 3 | 1 byte | Verification Relationship flags (bitwise) |
| 4+ | Up to 76 bytes | Subject public key in Multikey format |
Verification Relationship Flags (bits, lowest to highest):
| Bit | Relationship |
|---|---|
| 0 | Authentication |
| 1 | Assertion |
| 2 | Key Agreement |
| 3 | Capability Invocation |
| 4 | Capability Delegation |
DID UTXO: Optional Pay-To-Taproot (p2tr) second output for future updates/deactivation. Without it, the DID is final (immutable).
Important: Creators MUST wait at least 6 block confirmations before publishing the identifier (protection against chain reorganization).
4.1.1 Batch Create
Multiple DIDs can be created in a single transaction to reduce overhead:
- Public keys are placed in the witness of a reveal transaction (commitment + reveal pattern)
- Fixed overhead regardless of batch size
- Cost per DID asymptotically approaches ~8 vBytes for ed25519 keys
| Batch Size | Total VBytes | VBytes/DID |
|---|---|---|
| 2 | 302 | 151 |
| 10 | 367 | 36.7 |
| 100 | 1,091 | 10.91 |
| 1,000 | 8,332 | 8.33 |
| 10,000 | 80,748 | 8.07 |
4.2 Read (Resolve)
Resolution process:
- Decode TxRef → block height + transaction index
- Fetch the block and extract the transaction
- Verify OP_RETURN starts with ASCII
did - Extract verification relationship flags (byte 4)
- Decode remaining bytes as Multikey (key type + public key)
- Extract controller key from DID UTXO ScriptPubKey (if present)
- Construct DID document
Follow update chain: After initial resolution, check if DID UTXO is spent → follow spending transactions to apply updates until reaching an unspent UTXO or a final state.
4.2.1 Example DID Document
{
"@context": [
"https://www.w3.org/ns/did/v1",
"https://w3id.org/security/multikey/v1"
],
"id": "did:btc:x20r-ayaz-qqtl-ljk",
"controller": "did:key:z6DtNrvHVvvKHB7m8LrCmt131TGH7DbzvcPo9mZRoCt5rqms",
"verificationMethod": [
{
"id": "did:btc:x20r-ayaz-qqtl-ljk#key-0",
"controller": "did:btc:x20r-ayaz-qqtl-ljk",
"type": "Multikey",
"publicKeyMultibase": "z6MkfNwZ7ncwr54BVWA9taEJLaHAWYEuqMNQfBzrwLEoaoVB"
}
],
"authentication": ["x20r-ayaz-qqtl-ljk#key-0"],
"assertion": ["x20r-ayaz-qqtl-ljk#key-0"]
}
4.3 Update
Updates are JSON documents inscribed in the witness of a transaction spending the DID UTXO. Four operation types:
| Key | Operation | Description |
|---|---|---|
vm |
Verification Methods | Add, update, or delete keys |
u |
Update | Modify existing DID document fields |
d |
Delete | Remove fields from DID document |
a |
Append | Add new fields to DID document |
Verification Method operations (vm array):
- Delete:
{"i": 0}— remove key at index 0 - Update key:
{"i": 1, "k": "<multikey>"}— replace key at index 1 - Update relationships:
{"i": 3, "vr": 7}— change verification relationships of key at index 3 - Append:
{"k": "<multikey>", "vr": 3}— add new key with specified relationships
New DID UTXO: Update transaction MAY create a new DID UTXO (first output) for future updates. Without it, the DID becomes final.
4.3.1 Batch Update
For batched DIDs, updates are a JSON array with index specifiers:
[
{
"i": 5,
"p": { /* update payload */ }
}
]
4.4 Deactivate (Revoke)
A DID is deactivated when its DID UTXO is spent with the first output being an OP_RETURN containing ASCII d. This is permanent and irreversible.
Batch deactivation: Use batch update format with index but no payload:
[{"i": 4}]
5. Key Concepts and Terminology
| Term | Definition |
|---|---|
| DID | Decentralized Identifier — a globally unique, self-sovereign identifier |
| DID Document | JSON document describing the DID subject's public keys and services |
| DID UTXO | Unspent Bitcoin transaction output that controls a DID (must be p2tr) |
| DID Index | Position of a public key within a batch creation transaction |
| Multikey | Data model combining key type prefix + public key bytes in Multibase format |
| TxRef | Human-readable encoding of a confirmed Bitcoin transaction reference (BIP-136) |
| Inscription Envelope | Arbitrary data stored in the witness of a Taproot transaction |
| Verification Relationship | The purpose for which a key can be used (auth, assertion, etc.) |
| ScriptPubKey | Bitcoin script defining spending conditions for an output |
| SegWit | Segregated Witness — protocol upgrade enabling witness data discount |
| Taproot | SegWit v1 upgrade enabling inscription envelopes |
6. Security Considerations
6.1 Inherited Bitcoin Security
The did:btc method inherits Bitcoin's security framework:
| Attack Vector | Protection |
|---|---|
| Eavesdropping | N/A — transactions are public by design |
| Replay | Each transaction consumes UTXOs permanently; replays are rejected |
| Message Insertion | Signature validation fails on tampered transactions |
| Man-in-the-Middle | Transaction tampering invalidates signatures |
| Deletion | Transactions broadcast to thousands of nodes; deletion after confirmation is energetically infeasible |
| Modification | Immutable after signing/confirmation |
| DoS/Amplification | Bitcoin protocol has battle-tested countermeasures (since 2009) |
6.2 Key Management
- Compromised wallet keys: Attacker can permanently control, update, or revoke DIDs
- Lost wallet keys: Permanent loss of ability to update or revoke DIDs
- Mitigations: Multi-signature wallets, backup seed phrases, pre-created (unbroadcast) deactivation transactions
6.3 Qodoonect TRUST-Specific Security
- Separation of concerns: Wallet keys (Bitcoin transaction signing) are distinct from subject keys (DID authentication/assertion)
- Third-party management: Controllers can manage DIDs on behalf of subjects
- Multi-sig requirements: DID control can require multiple signatures via Bitcoin's scripting capabilities
- Audit trail: All identity operations are permanently recorded on the Bitcoin blockchain
7. Privacy Considerations
7.1 General Privacy
- All DID data and operations are public on the blockchain
- Real-world identities are NOT tied to Bitcoin addresses
- DIDs can be pseudonymous
- Personal information MUST be kept off-chain (DID best practices)
7.2 Surveillance Risks
- On-chain activity is public and may reveal information about the DID controller
- Transaction inputs can reveal Bitcoin holdings of the DID creator
7.3 Correlation Risks
- DIDs with the same controller key or within the same batch can be linked
- UTXO history analysis can link fund ownership to DID controllers
- Change outputs from DID creation transactions can be traced
8. Qodoonect TRUST Integration Architecture
8.1 System Components
┌─────────────────────────────────────────────────────┐
│ Qodoonect Ecosystem │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌───────────┐ │
│ │ qodoonect.com│ │finance.qodo..│ │ Future │ │
│ │ (Hub) │ │ (Accounting) │ │ Services │ │
│ └──────┬───────┘ └──────┬───────┘ └─────┬─────┘ │
│ │ │ │ │
│ └────────┬────────┴────────────────┘ │
│ │ │
│ ┌────────▼────────┐ │
│ │ TRUST Layer │ │
│ │ (DID Manager) │ │
│ └────────┬────────┘ │
│ │ │
│ ┌────────▼────────┐ │
│ │ Bitcoin Node │ │
│ │ (Indexer) │ │
│ └────────┬────────┘ │
│ │ │
└──────────────────┼──────────────────────────────────┘
│
┌────────▼────────┐
│ Bitcoin Network │
│ (Mainnet) │
└─────────────────┘
8.2 Integration with finance.qodoonect.com
The automated accounting platform uses TRUST for:
- User Identity: Each user/organization gets a did:btc identifier
- Transaction Signing: Financial transactions can be cryptographically tied to DID-authenticated entities
- Audit Trails: Immutable identity chain for regulatory compliance
- Cross-Platform Auth: Single DID for authentication across all Qodoonect services
- Agent Identity: Automated accounting agents receive their own DIDs for accountability
8.3 Identity Lifecycle in Qodoonect TRUST
[Entity Registration] → [DID Creation on Bitcoin] → [6-block confirmation wait]
↓
[DID Published] → [Service Authentication via DID] → [Ongoing operations]
↓
[Key Rotation/Update] → [Update transaction on Bitcoin] → [DID Document updated]
↓
[Deactivation] → [Revocation transaction on Bitcoin] → [DID permanently deactivated]
9. Operational Considerations
9.1 Cost
- Bitcoin transaction fees fluctuate; DID operations are among the most expensive per byte
- Batch operations significantly reduce per-DID costs
- Cost provides inherent Sybil attack resistance
9.2 Speed
- DID operations are never instant (Bitcoin block time ~10 minutes)
- Minimum 6 confirmations required (~60 minutes)
- Urgent operations can be expedited with higher fees
- Operations may fail during high-fee periods
9.3 Infrastructure Requirements
- Bitcoin node: Required for trustless DID resolution
- TRUST indexer: Specialized software to index only DID-relevant transactions
- Alternatives: Public block explorers/Electrum servers (introduces some trust)
9.4 Key Custody
- Multiple Bitcoin keys (secp256k1) must be secured for non-final DIDs
- Associated UTXOs must be managed carefully
- Recommended: Multi-signature wallets, hardware security modules (HSM)
10. Standards Compliance
10.1 W3C DID Core
Qodoonect TRUST conforms to the W3C Decentralized Identifiers (DIDs) v1.0 specification (W3C Recommendation, 19 July 2022).
10.2 Bitcoin Standards
- BIP-136: TxRef encoding for transaction references
- BIP-341: Taproot (SegWit v1) for inscription envelopes
- Multicodec/Multibase: Key type encoding and representation
10.3 Referenced Specifications
| Standard | Purpose |
|---|---|
| W3C DID-CORE | Decentralized Identifier specification |
| BIP-136 | TxRef encoding |
| BIP-341 | Taproot / SegWit v1 |
| RFC 2119 / RFC 8174 | Requirement level keywords |
| Multibase | Key encoding format |
| VC Data Integrity | Multikey data model |
11. Roadmap and Future Development
11.1 Phase 1 — Foundation (Current)
- Specification documentation and review
- Bitcoin testnet implementation
- Core DID operations (create, read, update, deactivate)
- Integration design for finance.qodoonect.com
11.2 Phase 2 — Implementation
- TRUST indexer node development
- DID management SDK/API
- finance.qodoonect.com integration
- Batch DID operations for organizational onboarding
11.3 Phase 3 — Expansion
- Cross-service identity federation across Qodoonect ecosystem
- Verifiable Credentials (VC) support
- Automated agent identity management
- Advanced key management (multi-sig, HSM integration)
11.4 Phase 4 — Ecosystem
- Third-party service integration APIs
- DID resolver as a service
- Governance framework for Qodoonect TRUST network
- Compliance certification (KYC/AML integration patterns)
12. Source References
| Source | URL | Description |
|---|---|---|
| did:btc Specification | https://microstrategy.github.io/did-btc-spec/ | Full technical specification |
| Strategy Software | https://www.strategy.com/software | Strategy Mosaic platform |
| Strategy GitHub | https://github.com/MicroStrategy | Open source repositories |
| did-btc-spec Repo | https://github.com/MicroStrategy/did-btc-spec | Specification source (44 stars, 11 forks) |
| W3C DID Core | https://www.w3.org/TR/did-core/ | W3C DID specification |
| BIP-136 | https://github.com/bitcoin/bips/blob/master/bip-0136.mediawiki | TxRef encoding |
| BIP-341 | https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki | Taproot specification |
Appendix A: Glossary for LLM/Algorithm Processing
system_name: "Qodoonect TRUST"
full_name: "Trustless Registry of Universal Secure Tokens"
parent_org: "Qodoonect Family Group"
parent_url: "https://qodoonect.com"
primary_integration: "finance.qodoonect.com"
did_method: "did:btc"
blockchain: "Bitcoin (mainnet)"
specification_basis: "did:btc Method Specification v2024-08-22"
specification_author: "Daniel McNally (MicroStrategy/Strategy)"
key_types_supported: "Any (ed25519, secp256k1, etc.)"
encoding: "Multikey (Multicodec + Multibase)"
identifier_format: "did:btc:<txref>"
testnet_format: "did:btc:test:<txref>"
operations: ["create", "read", "update", "deactivate"]
batch_operations: true
min_confirmations: 6
consensus: "Proof of Work (Bitcoin)"
data_storage: "On-chain (witness inscription envelopes)"
external_dependencies: "None (Bitcoin only)"
w3c_compliance: "DID-CORE v1.0"
Appendix B: Machine-Readable Operation Codes
{
"create": {
"op_return_prefix": "646964",
"verification_flags": {
"authentication": 1,
"assertion": 2,
"key_agreement": 4,
"capability_invocation": 8,
"capability_delegation": 16
},
"key_format": "multikey",
"did_utxo_type": "p2tr",
"min_confirmations": 6
},
"update": {
"payload_location": "witness",
"json_keys": {
"vm": "verification_method_changes",
"u": "field_updates",
"d": "field_deletions",
"a": "field_additions"
},
"vm_operations": {
"delete": {"required": ["i"]},
"update_key": {"required": ["i", "k"]},
"update_vr": {"required": ["i", "vr"]},
"append": {"required": ["k", "vr"]}
}
},
"deactivate": {
"op_return_payload": "64",
"ascii_value": "d",
"reversible": false
},
"batch": {
"create_method": "inscription_envelope",
"update_format": [{"i": "did_index", "p": "update_payload"}],
"deactivate_format": [{"i": "did_index"}]
}
}
Document generated: 2026-04-11 | Qodoonect TRUST v1.0.0-draft
For human-readable version see: Qodoonect_TRUST_System_Documentation.pdf
For editable version see: Qodoonect_TRUST_System_Documentation.docx