DePIN Physical Device Verification System: Development and Audit

We design and develop full-cycle blockchain solutions: from smart contract architecture to launching DeFi protocols, NFT marketplaces and crypto exchanges. Security audits, tokenomics, integration with existing infrastructure.
Showing 1 of 1All 1305 services
DePIN Physical Device Verification System: Development and Audit
Complex
~1-2 weeks
Frequently Asked Questions

Blockchain Development Services

Blockchain Development Stages

Latest works

  • image_website-b2b-advance_0.webp
    B2B ADVANCE company website development
    1349
  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1247
  • image_websites_belfingroup_462_0.webp
    Website development for BELFINGROUP
    949
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1183
  • image_logo-advance_0.webp
    B2B Advance company logo design
    642
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    921

How Cryptographic DePIN Verification Works

Suppose you're building a decentralized network for air quality monitoring. Hundreds of physical sensors are deployed across the city, each transmitting data and earning tokens. The challenge? Distinguishing a real sensor from a software emulator that sends fake readings and drains the reward pool. Without cryptographic binding of the token address to the hardware module, any agent can simulate work. We've been solving this for over five years: twenty-plus DePIN projects in production, from IoT sensors to hotspots. We collectively maintain over 10,000 physical devices. Our clients save up to 90% of funds that previously went to fake rewards—for a network of 1,000 devices, that can exceed $50,000 per month. Investment in the verification system pays for itself within 3 months, achieving a typical ROI of 500%. The DePIN verification system ensures physical device verification through a hardware root of trust, providing DePIN anti-cheat mechanisms like Proof of Location. TPM verification is 3x more secure than software-only keys, and Secure Element is 5x more expensive but offers 10x security.

The core difficulty is three attack classes: Spoofing (data emulation), Clone (key duplication across many machines), and Sybil (mass registration of virtual devices). Hardware root of trust is the only way to defend against them. This technology underpins all our DePIN solutions.

TPM 2.0 (ISO/IEC 11889) is the standard where the private key never leaves the chip; the signature is generated inside. It's the foundation of trust.

Three Attack Classes

Spoofing: A software agent emulates data—GPS, sensor readings, network metrics. Without a secure key on a chip, it's indistinguishable from a real device.

Clone: A legitimate device is cloned—its keys run on dozens of machines. One physical unit collects rewards multiple times.

Sybil: One operator registers hundreds of "devices" via virtual instances. Critical for networks that reward per node. For anti-sybil attacks we use staking and reputation-based verification.

Choosing the Hardware Root of Trust: TPM, Secure Element, or TEE?

  • TPM 2.0 (ISO/IEC 11889): Private key never leaves the chip; signature inside. Supported in industrial IoT (Raspberry Pi via GPIO).
  • Secure Element (ECC608): Dedicated microcontroller. Used in Helium Hotspots. More details at Secure Element.
  • TEE (TrustZone, SGX): Isolated environment inside the CPU. Cheaper but vulnerable to side-channel attacks.
  • PUF: Unique chip "fingerprint"—physically impossible to clone. A promising technology.

How We Build the Verification System

Provisioning: Device Registration at the Factory

The manufacturer embeds a Secure Element in the device, generates a key pair inside the chip (private key never extracted). An X.509 certificate is created, signed by the manufacturer's CA. On-chain, the public key and certificate fingerprint are registered.

contract DeviceRegistry {
    struct Device {
        address owner;
        bytes32 certFingerprint;
        bytes publicKey;
        uint256 registeredAt;
        bool active;
    }
    mapping(bytes32 => Device) public devices;
    mapping(address => bytes32[]) public ownerDevices;
    mapping(bytes32 => bool) public trustedManufacturers;

    event DeviceRegistered(bytes32 indexed deviceId, address indexed owner, bytes publicKey);
    event DeviceTransferred(bytes32 indexed deviceId, address indexed from, address indexed to);

    function registerDevice(
        bytes32 deviceId,
        bytes calldata publicKey,
        bytes calldata deviceCertificate,
        bytes calldata manufacturerSignature
    ) external {
        bytes32 certFingerprint = keccak256(deviceCertificate);
        require(
            verifyManufacturerSignature(deviceId, publicKey, manufacturerSignature),
            "Invalid manufacturer signature"
        );
        devices[deviceId] = Device({
            owner: msg.sender,
            certFingerprint: certFingerprint,
            publicKey: publicKey,
            registeredAt: block.timestamp,
            active: true
        });
        ownerDevices[msg.sender].push(deviceId);
        emit DeviceRegistered(deviceId, msg.sender, publicKey);
    }
}

Challenge-Response: Regular Operation Checks

The smart contract issues a challenge every epoch (e.g., every hour)—a random nonce. The device signs it with its private key inside the SE/TEE. The signature is verified on-chain; if it doesn't match, the device is considered inactive and rewards are reduced.

async function issueChallenge(deviceId: string): Promise<Challenge> {
  const nonce = crypto.randomBytes(32);
  const timestamp = Math.floor(Date.now() / 1000);
  await challengeContract.issueChallenge(
    deviceId,
    ethers.utils.keccak256(nonce),
    timestamp + CHALLENGE_EXPIRY
  );
  return { nonce: nonce.toString('hex'), expiry: timestamp + CHALLENGE_EXPIRY };
}
contract DePINRewards {
    uint256 constant REWARD_PER_EPOCH = 1e18;
    uint256 constant EPOCH_DURATION = 3600;

    struct DeviceStats {
        uint256 lastChallengeTime;
        uint256 successfulChallenges;
        uint256 currentEpoch;
        uint256 epochChallengesRequired;
        uint256 epochChallengesPassed;
    }

    function claimReward(bytes32 deviceId) external {
        DeviceStats storage stats = deviceStats[deviceId];
        Device memory device = deviceRegistry.devices[deviceId];
        require(device.owner == msg.sender, "Not owner");
        require(device.active, "Device inactive");
        uint256 currentEpoch = block.timestamp / EPOCH_DURATION;
        require(currentEpoch > stats.currentEpoch, "Epoch not complete");
        uint256 uptime = stats.epochChallengesPassed * 100 / stats.epochChallengesRequired;
        require(uptime >= MIN_UPTIME_PERCENT, "Insufficient uptime");
        uint256 reward = REWARD_PER_EPOCH * uptime / 100;
        stats.currentEpoch = currentEpoch;
        stats.epochChallengesPassed = 0;
        rewardToken.mint(msg.sender, reward);
    }
}

Proof of Location: Geographic Anti-Cheat

For networks where geography matters (sensors, hotspots), we use radio witnesses (Helium approach): device A "hears" device B and confirms its presence. Alternative: GPS + TEE with signature. An attack would require physically placing devices, which is expensive.

Staking and Slashing: Financial Barrier to Attacks

On registration, the device locks a stake. On violation—slashing:

  • Missed challenge => reduced uptime, lower reward
  • Clone (duplicate key) => 100% slash, deactivation
  • Fake data => slash + manual review

We ensure transparency of the slashing mechanism through on-chain logic.

Case Study: Weather Station Network For one client, we implemented TPM 2.0 verification with challenge-response every 30 minutes. Devices locked a 1,000 USDC stake. After launch, we detected a clone attack: the attacker copied the key from flash memory (violated the requirement but didn't use TPM). We had to replace the firmware with correct key generation inside TPM. Now the network runs stably with >99.9% uptime.

What's Included in Our Work

  • Security audit: smart contract and hardware integration analysis (Slither, Echidna, formal verification)
  • Documentation: protocol description, integration guide for hardware manufacturers
  • Firmware SDK: libraries for TPM/SE in Rust/Go
  • Deployment and testnet: testnet deployment, load testing, monitoring
  • Support: one-year warranty on smart contracts, upgrade consultations

Get a consultation on choosing the right hardware root of trust for your project.

Step-by-Step Development Process

  1. Analysis: Threat model definition, hardware root of trust selection based on budget and scenario.
  2. Design: On-chain registry architecture, challenge-response, staking.
  3. Implementation: Smart contracts (Solidity), firmware SDK, hardware integration.
  4. Testing: Unit tests, fuzzing (Echidna), load testing on testnet.
  5. Deployment: Mainnet launch, monitoring, bug fixes.

Timelines

Phase Duration Result
1 4-6 weeks On-chain registry, challenge-response, basic reward
2 3-4 weeks Staking/slashing, anti-cheat oracle, admin tools
3 4-6 weeks Hardware provisioning, firmware SDK, TPM/SE integration
4 2-3 weeks Audit, load testing, testnet deployment

Full cycle: 3 to 4 months. Typical development cost starts from $30,000. Contact us for an estimate.

Technology Stack

Layer Technology
Hardware identity TPM2.0 / ECC608 / TrustZone
Device attestation X.509 + PKCS#11
On-chain registry Solidity + OpenZeppelin
Oracle / proof verification Chainlink Functions or custom
Off-chain indexer The Graph
Device firmware Rust (embedded) / Go
Backend Node.js / Go + gRPC

DePIN is a new paradigm, and we help build it securely. Request a consultation for your project evaluation. Get a detailed architecture plan and timeline.

Digital Identity on Blockchain: DID, SBT, and Verifiable Credentials

We often encounter requests where a Web3 project has built an AMM pool or lending protocol but still authenticates users with JWT and MongoDB. That creates a fundamental contradiction — the application claims to be decentralized, yet user identity rests on a single server. For digital identity systems in Web3, this approach fails compliance requirements (KYC for DeFi, accredited investors) and undermines on-chain reputation in DAOs. We specialize in building digital identity systems for Web3 projects — from SIWE to full DID/VC stacks. Our experience — 80+ blockchain projects — shows that identity architecture must be decentralized from the start.

How does Sign-In with Ethereum solve authentication?

EIP-4361 (SIWE) removes login/password entirely. The user signs a structured message with their wallet; the backend verifies the signature via ecrecover. No credential leaks, no password hashing.

Implementation: siwe library (JS/TS) on the frontend, SiweMessage.verify() on the backend. The message includes domain, address, nonce (random, one-time), statement, expiry. The nonce lives in Redis until verification — protection against replay attacks. Today, SIWE is used by over 80 projects in the top 100 DeFi.

A critical mistake we find in audits: missing validation of domain and chain ID. If the backend does not check message.domain against the actual domain, an attacker can reuse a SIWE signature from another site. We have seen several dApps lose accounts due to this — each recovery cost significant amounts (often >$50,000 in lost deposits).

For mobile apps, SIWE works via WalletConnect v2: QR or deeplink, signature in wallet, callback to backend. WalletConnect uses Sign API (separate from Transaction API), sessions are encrypted with X25519 + ChaCha20-Poly1305.

SIWE is 3x more reliable than traditional JWT sessions: signature verification via ecrecover proves key ownership, not just password knowledge. Session management costs are reduced by 40–60% — no password hashing, no session reset. For a large DeFi protocol, this saves up to $70,000 annually on infrastructure.

What is DID and which method to choose?

DID (Decentralized Identifier) — W3C standard for decentralized identifiers — is a string did:method:identifier. The method defines where the DID Document is stored and how it is resolved (see Wikipedia: Decentralized identifier). The main methods we use in production:

Method Storage Location Gas Cost Use Case
did:ethr EthereumDIDRegistry (ERC-1056) ~60,000 gas on write DeFi, DAO — key rotation
did:key Deterministically derived from pubkey Gasless Ephemeral identity, test
did:web HTTPS (/.well-known/did.json) Gasless Enterprise (DNS trust)
did:ion Bitcoin Layer 2 (Sidetree) ~5,000 gas Long-term, high security

For most DeFi projects, did:ethr or did:key suffice. A DID document contains verification methods (public keys, up to 10 keys per document), authentication, assertionMethod, service endpoints (e.g., link to KYC service). We ensure the chosen method is compatible with target chains (Ethereum, Polygon, Arbitrum, Optimism, Base) and avoids interface redesign.

Common mistakes when choosing a DID method:

  • Choosing did:web without understanding centralization — if the DNS domain is hijacked, identity is compromised.
  • Ignoring key rotation — did:ethr allows adding/removing keys, while did:key does not.
  • Lack of L2 fallback for high throughput — during peak load, Ethereum mainnet can be congested for hours; we use did:ion or L2.

How does verification work via Verifiable Credentials?

Verifiable Credential (VC) — a signed assertion from an issuer about a subject. W3C format: JSON-LD or JWT. Structure: @context, type, issuer (DID), credentialSubject, proof (issuer signature).

Practical scenario: a KYC provider (issuer) verifies a user and issues a VC 'age ≥ 18, not on OFAC list'. The user stores the VC locally (wallet extension or mobile app). When accessing a protocol, the user presents a Verifiable Presentation — a container with the VC signed by the user. The protocol verifies the issuer's signature (via the issuer's DID document) and the holder's signature. No personal data goes on-chain. The protocol does not store a database of KYC-passed users. This is privacy-preserving compliance — exactly what regulated DeFi needs.

Zero-knowledge proofs for VCs take privacy to another level. Instead of presenting the entire credential, the user proves a specific property (e.g., age ≥ 18) without revealing the value. Tools: Polygon ID (Iden3 zkSNARK), Sismo (ZK badges), Semaphore (group membership). Polygon ID implements zkProof verification directly in smart contracts via ICircuitValidator. Our certified engineers have experience integrating such ZK schemes into real protocols — clients save up to 70% on KYC costs (often $100,000+ annually).

Why are Soulbound Tokens not suitable for mass adoption?

SBTs (EIP-5192, concept by Vitalik Buterin) are non-transferable NFTs. Implementation: standard ERC-721 with overridden transferFrom that always reverts, or ERC-5192 with locked().

Production uses:

  • DAO Governance — Snapshot + SBT for one-person-one-vote. Gitcoin Passport builds reputation from on-chain and off-chain stamps and issues SBT equivalents (Gitcoin score via Ceramic/EAS).
  • Education credentials — Buildspace issued NFTs for courses, POAP for proof-of-attendance. SBTs make them non-transferable — cannot buy someone else's history.
  • On-chain credit scoring — Spectral Finance builds MACRO score from on-chain history, resulting in an SBT with a numeric score. Lending protocols use it for under-collateralized loans.

Key technical limitation: recovery mechanism. Losing access to a wallet means losing all SBTs. Without recovery, mass adoption is impossible. Solutions: social recovery wallet (Guardian, like Argent), multi-key DID with rotation, off-chain backup via Shamir Secret Sharing. We include recovery planning in every SBT project.

Ethereum Attestation Service as a standard identity layer

EAS is deployed on Ethereum mainnet, Optimism, Arbitrum, Base. Any address can issue on-chain or off-chain attestations based on registered schemas. A schema is an ABI-encoded structure. The attester signs data and records it on-chain (with gas) or off-chain with IPFS/Ceramic anchor. Verifiers read via IEAS.getAttestation(uid).

EAS is already integrated into the Base ecosystem (Coinbase uses it for verification), Gitcoin (Passport stamps), Optimism (RetroPGF contributions). It is becoming the de facto standard for on-chain identity layer on L2. Our developers are certified for EAS (experience with 5+ projects). According to EAS documentation, attestations can be revoked, and schemas supportup to 32 fields of arbitrary ABI types.

How can we choose the right identity solution for your project?

  1. Analytics & compliance — map the user journey: who is issuer, verifier, what data is needed, what cannot be stored on-chain under GDPR.
  2. Architecture design — choose between on-chain SBT, EAS, DID/VC stack. Data schema, ZK circuit (if needed).
  3. Implementation — smart contracts (Solidity 0.8.x, Foundry/Hardhat), issuer service (Node.js/Go), holder wallet (ethers.js viem), verifier contract.
  4. Testing & audit — unit tests, integration tests, fuzzing (Echidna), static analysis (Slither). Engage third-party auditor.
  5. Deploy & support — deploy to target networks, monitoring (Tenderly), documentation, team training.

Deliverables

  • Source code of smart contracts (Solidity, open-sourced under MIT)
  • Issuer backend (Node.js/Go) with API for issuing VC/SBT
  • Holder wallet integration (ethers.js viem, RainbowKit, WalletConnect)
  • Verifier contract/script
  • Architecture documentation, deployment runbook
  • 2 months post-deployment support

Timeline Estimates

Phase Duration
SIWE integration (wallet authentication) 2 to 4 weeks
SBT contracts + minting portal 3 to 6 weeks
EAS attestation schema + verification 4 to 8 weeks
Full DID/VC pipeline (issuer + holder + verifier) 3 to 6 months
ZK-based privacy-preserving credentials 5 to 9 months

Cost is calculated individually based on schema complexity, number of chains, and compliance requirements. Contact us to discuss your scenario and get an optimal plan.

Order a digital identity system development — get a consultation with a senior engineer specialized in this field. Also, book a technical audit of your current identity system — we will identify bottlenecks and suggest concrete improvements.