Pivot
Minimal, domain-bound, non-custodial application ledger
Whitepaper · v0.3

Abstract

Pivot is a compact application ledger that replaces smart-contract bloat with a tiny set of deterministic system calls (verbs). Users onboard with OAuth/Passkeys; wallets are non-custodial by default. Token identity is bound to DNS - every token pairs a domain with a tokenId—so clones can’t masquerade as the original. Apps deploy as small declarative manifests and call audited verbs like bank.transfer or token.create. A simple PoA consensus achieves sub-second finality; DPoS is a clean upgrade path.

Introduction

General-purpose smart-contract platforms created power and complexity at once. Builders wrestle with VMs, toolchains, fees, and audits; users wrestle with seed phrases and opaque approvals. Pivot’s thesis: most consumer apps need a ledger, balances, and a few safe verbs — not a Turing-complete VM. Constrain the surface → ship faster, safer apps.

Design Principles

Identity & Non-Custodial Wallets

Goal: users own their assets without seed-phrase pain.

OAuth + Passkeys

Recovery

Ownership statement: Pivot is non-custodial by default. Private keys are user-generated and user-held. OAuth is an access and recovery layer—not custody.

Domain-Verified Tokens

To defeat copycat tickers, Pivot ties token identity to domain ownership.

Binding Flow

  1. Challenge: POST /v1/domain/request_challenge {domain}{nonce}.
  2. Prove: author sets TXT _pivot-verify.<domain> = <nonce>.
  3. Verify: POST /v1/domain/verify {domain} → on success, write domain/<domain> = { owner: <address> }.
  4. Create: POST /v1/token/create { tokenId, domain, ... } allowed only to the verified owner.

UX rule: wallets/explorers display TICKER @ domain with a ✅ badge if a binding exists. Clones lack the badge.

State & Transactions

{
  "from": "ADDR",
  "nonce": 42,
  "ttl": 60,
  "calls": [ { "module": "bank", "fn": "transfer", "args": {"to":"ADDR2","amount":"1000"} } ],
  "signature": "ed25519..."
}

System Modules (v0.1)

Security Model

Consensus & Decentralization

Phase 1 — PoA

Phase 2 — DPoS (upgrade)

Fees & Native Token

Reference App — Bonding-Curve DEX

One audited module provides a “pump-simple” experience without custom contracts.

Bridge & Ownership Proofs

Pivot keeps bridging simple and auditable while staying non-custodial for users. The core idea is: (1) prove a deposit happened on the origin chain by a specific 0x key, and (2) prove the mint on Pivot goes to a Pivot address the user controls (they sign the claim tx with their Pivot key; OAuth only unlocks that key).

Design Stages

Ownership Confirmation (Two Clean Options)

Option A — Lockbox Contract (origin chain)

The deposit event embeds the pivotAddr (the recipient on Pivot). Attesters mirror that to Pivot — no extra account linking.

/** Minimal lockbox for ERC-20 deposits */
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

interface IERC20 { function transferFrom(address,address,uint256) external returns (bool); }

contract PivotLockbox {
  event Deposit(
    address indexed token,
    address indexed from,      // 0x owner who authorized
    bytes   pivotAddr,         // Pivot address bytes (ed25519/bech32)
    uint256 amount,
    bytes32 depositId          // unique (txHash|logIndex or a caller nonce)
  );

  function deposit(address token, uint256 amount, bytes calldata pivotAddr, bytes32 depositId) external {
    require(IERC20(token).transferFrom(msg.sender, address(this), amount), "transferFrom fail");
    emit Deposit(token, msg.sender, pivotAddr, amount, depositId);
  }
}

Attested message → Pivot:

type:     "deposit"
chain:    "eth-mainnet"
token:    "0xA0b8…"       // origin token or lockbox
from:     "0xUser…"       // depositor
pivotAddr:"pivot1q…"      // bytes/bech32 of Pivot address
amount:   "1000000"
depositId:"eth:0xTX:logIndex"

Option B — SAFE + EIP-712 Bind Signature

No contract required on origin. User deposits into a Gnosis SAFE; then signs an EIP‑712 message binding that deposit to their pivotAddr. Attesters check both the deposit and the signature.

// EIP-712 schema (example)
domain = { name: "PivotBridge", version: "1", chainId: 1, verifyingContract: SAFE_ADDR }
types  = {
  BindDeposit: [
    { name: "token",     type: "address" },
    { name: "from",      type: "address" },
    { name: "amount",    type: "uint256" },
    { name: "depositId", type: "bytes32" },
    { name: "pivotAddr", type: "bytes" }
  ]
}
message = { token, from, amount, depositId, pivotAddr }
signature = signTypedData(domain, types, message) // with the 0x wallet

Pivot Bridge Module (tiny, deterministic)

State

Verbs

API (Gateway)

Security Levers

UX Flow

Developer Experience

Roadmap

  1. POC: single-node devnet, domain binding, DEX module, OAuth prototype.
  2. MVP: 3 PoA validators, hosted gateway, indexer + events, daily free-ops.
  3. Beta: DPoS staking, fee switch to PVT, parameter governance.

Conclusion

Pivots trims blockchain to essentials: non-custodial web-native wallets, domain-verified identity, and a handful of safe verbs. It’s enough to unlock real apps for real user- without the VM baggage.

© 2025 Pivot — pivot.money