Whitepaper L2 TON
PoLT sobre L2 ligada à TON — Mini-Whitepaper (resumo técnico)
1 — Visão & objetivos
Criar uma Layer-2 (rollup / payment chain) que execute o protocolo Proof of Local Trust (PoLT) — validação permissionless via mesh BLE, validação local por quorum (k, ex.:5), geração de Local Blocks (LB) com assinaturas agregadas (BLS threshold) e settlement (registro de merkle_root / agg_sig) na TON L1 para finalidade e interoperabilidade.
Objetivos principais:
-
Pagamentos offline seguros e rápidos (micropagamentos).
-
Validação permissionless, sem autoridade central.
-
Finalidade econômica via ancoragem em TON (batching para reduzir custos).
(Referências TON: Blueprint / Tact / Jettons).
2 — Camadas da arquitetura (alto nível)
[Mobile PoLT Mesh (BLE/libp2p)] <-- gossip --> [Validator Nodes (Rust/Go) local]
| |
v v
Create LB (merkle_root + agg_sig BLS) -----> [L2 Rollup Engine / Sequencer]
|
v
Batch merkle_roots
|
v
TON L1 (settlement)
-
L3 (App / Mesh): wallet mobile (React Native), BLE/libp2p para gossip e sign requests.
-
L2 (tuas regras PoLT): rollup/sidechain que mantém contabilidade, disputa, staking & slashing, tokenomics.
-
L1 (TON): registra batches (merkle_roots + metadata) como prova de existência/finalidade — usa Tact/Blueprint e jettons para integração.
3 — Principais formatos de dados
Transação offline (TO) — JSON (exemplo):
{
"tx_id": "H(sender||nonce||amount||ts||meta)",
"sender_pub": "0x..",
"receiver_pub": "0x..",
"amount": 1000000,
"local_nonce": 42,
"ts_local": 1690000000,
"metadata": {"purpose":"purchase","merchant":"id"},
"sig_sender": "ED25519(...)"
}
sig_meta (assinatura BLE de validador):
{
"device_hash": "H(device_pubkey)",
"rssi": -67,
"ts": 1690000001,
"ephemeral_pub": "0x..",
"sig": "ED25519(ephemeral_priv, tx_id || nonce || ts || rssi)"
}
Local Block (LB) — armazenamento local / merkle_root:
{
"lb_id": "H(prev_lb_hash||merkle_root||ts||validators_commitment)",
"txs": [...],
"merkle_root": "0x...",
"validators_meta": [ {device_hash, ephemeral_pub, sig_meta}, ... ],
"agg_sig": "BLS_agg(...)",
"submitted": false
}
Payload de ancoragem para TON (batch):
{
"batch_id": "H(timestamp||chain_id||merkle_root_batch)",
"merkle_root_batch": "0x...",
"agg_sigs_commitment": "0x...",
"meta": { "num_LBs": 12, "total_value": 1234500000 }
}
4 — Fluxo de uma transação (detalhado)
-
Criação: Sender cria TO e envia via BLE ao Receiver.
-
Broadcast de pedido de assinatura: Receiver gossipa
SIGN_REQUESTcomtx_id. -
Assinaturas locais: Qualquer nó da mesh que passar checagens automáticas (nonce, saldo provisório, rate-limit, prova proximidade) assina com chave efêmera e envia
sig_meta. -
Quorum (k): Quando Receiver coleta ≥k sig_meta válidas (device_hash distintos e heurísticas ok), LB inclui a TX e calcula merkle_root.
-
Agg_sig: as k participações formam um
agg_sigBLS (threshold) para compressão/verificação on-chain. Bibliotecas BLS/WASM permitem isso em mobile/nodes. -
Temporary lock: gera-se lock local (prova compacta) para reduzir double-spend até sync.
-
Gossip LB: LB é gossipado pela mesh (replicação local).
-
Sync/Submit: qualquer node com internet submete batch(s) de merkle_roots/agg_sigs para L2/Sequencer; L2 valida e publica merkle_root_batch na TON (mensagem contract).
-
Challenge window: após publicação na TON, abre-se janela (ex.: 48h) para disputas; provas aceitas = logs BLE assinados, receipts, testemunhas. Em caso de fraude, slashing é aplicado no L2.
5 — Consenso & seleção de validadores locais
-
Validation policy (permissionless):
-
Auto-sign via BLE para qualquer app com regras locais.
-
Assinaturas só têm peso se device TS ≥ threshold or ephemeral checks pass.
-
-
Quorum k (configurável): default urbano k=5; rural k=3 com restrições de valor.
-
Selection / fairness: para tarefas como criação sequencer LB, usa VRF shuffle + TS-weight to choose aggregator / submitter (evita monopolização).
-
Assinatura agregada: BLS threshold para reduzir footprint on-chain e simplificar verificação. Use implementações maduras (herumi/bls, noble-bls12-381, celo threshold libraries).
6 — Anti-Sybil, segurança e disputas
Camadas combinadas (defesa em profundidade)
-
Rate limits & heuristics: cap signatures por device / periodo; detecção de padrões de emulação.
-
Trust Score (TS): dispositivo inicia com TS baixo; aumenta com comportamento honesto (LBs confirmados sem disputa). Recompensas ponderadas por TS.
-
Stake opcional para validadores de alto peso: um stake mínimo S_min para quem quer maior recompensa/privilege; slashing se fraude comprovada.
-
PoW leve (opcional) para bootstrapping: puzzle barato para cada new device/day, caro em escala massiva.
-
Temporary locks & nonces combinados para reduzir janela prática de double-spend.
-
Challenge window + evidências: verificação automática de logs BLE assinados e provas baseadas em merkle proofs; slashing automático se provas válidas.
Essas camadas juntas tornam ataques Sybil/colusão economicamente caros e detectáveis. (Trade-off: introduz fricção inicial.)
7 — Tokenomics (modelo simples inicial)
Token nativo L2: POLT (exemplo) — funções: taxas, staking, slashing, recompensas.
-
Supply & distribution (exemplo):
-
Total 1,000,000,000 POLT
-
40% ecosystem / rewards (long vesting)
-
20% team/advisors (vesting)
-
20% community / pilots
-
20% treasury / partnerships
-
-
Tax split (por LB / tx):
-
40% → validadores (pro rata por TS)
-
30% → submitter / sequencer
-
20% → dispute fund (insurance)
-
10% → governance pool / local community
-
-
Staking & slashing: validadores que suportam maior peso podem fazer stake; prova de fraude leva a slashing parcial.
-
Micropayment economics: tiny fees para cada tx (rateable), locks reduzem necessidade de altas taxas — batching em TON reduz custo global.
8 — Integração com TON (prática)
-
Registro/anchor: L2 sequencer envia transações a um contract na TON que registra
merkle_root_batche metadata (batch_id, agg_sig_commitment). Use Blueprint / Tact para escrever e deploy do contrato. -
Jettons: para token nativo ou integrações com TON wallets, adotar padrão Jetton (TEP) para compatibilidade com wallets TON (Tonkeeper, Tonhub etc.).
-
Frequência de anchoring: configurar batching (ex.: a cada 5–15 min para rotina; daily para “ultimate” anchoring). Batch para Bitcoin é opcional para ultimate finality.
9 — Ferramentas & libs recomendadas
-
TON dev stack: Blueprint (npm create ton), Tact docs/SDK.
-
BLS / threshold libs: herumi/bls, celo threshold bls, noble-bls12-381, threshold-bls crates (Rust). Use wasm bindings para mobile JS.
-
Mesh: libp2p (BLE + mesh), ou soluções orientadas para mobile + bluetooth stacks.
-
Mobile: React Native + libsodium / tweetnacl para ED25519; wasm wrapper para BLS/threshold.
-
L2 engine: pode ser um sequencer simples (Rust/Go) que valida agg_sig e mantém estado; rollup design (optimistic or zk approach) opcional dependendo de recursos.
-
Testing / infra: Chainstack / local TON testnet for contract deploy & testing.
10 — MVP Roadmap (prático)
-
Semana 0–2: especificação de mensagens BLE, estrutura do LB, e wireframes wallet.
-
Semana 2–8: protótipo mobile: criar TO, broadcast SIGN_REQUEST, coletar k sigs (simulador local). Implementação de chaves efêmeras.
-
Semana 8–14: validator node (Rust/Go) que cria LB, gera agg_sig (use library BLS), gossip mesh e persistência local.
-
Semana 14–20: sequencer L2 básico (testnet) que aceita merkle_root, aplica regras de disputa e guarda estado; contrato Tact/Blueprint na TON testnet que registra batches.
-
Semana 20–30: piloto controlado (1 bairro) — medir latência, false positives/negatives, atacar com simulações Sybil, ajustar parâmetros (k, TTL, limits).
-
Semana 30+: auditoria, auditoria de crypto (BLS), integração wallets TON, scale-up.
11 — Segurança: checklist para auditoria
-
Verificar implementação BLS/threshold (DKG seguro se necessário).
-
Testes adversariais: Sybil, colusão local, replay, rush submit.
-
Revisão do contract Tact (registro batches) e manejo de disputas.
-
Proteções de privacidade (evitar gravação de geo exato em L1).
12 — Pseudocódigo crítico (BLE → agg_sig → submit)
// Receiver side
on_receive(TX_OFFER from sender):
if wallet.provisional_balance >= amount and nonce_ok:
broadcast_mesh({type:"SIGN_REQUEST", tx_id, local_nonce})
sigs = []
while sigs.count < k and timeout not passed:
resp = wait(SIGN_RESPONSE)
if valid_sig_meta(resp): sigs.append(resp)
if sigs.count >= k:
agg_sig = BLS_aggregate(sigs.ephemeral_sigs)
LB = create_local_block([tx], merkle_root([txs]), agg_sig, validators_meta)
store(LB)
create_temporary_lock(tx.sender, amount, TTL)
gossip_mesh({type:"NEW_LB", LB})
// Sequencer / any node with internet
periodic():
batches = collect_unsubmitted_LBs(max_batch_size)
merkle_root_batch = merkle_root(batches.merkle_roots)
payload = {batch_id, merkle_root_batch, commitments}
send_to_ton_contract(payload)
mark_submitted(batches)
13 — Métricas & KPIs para piloto
-
% txs confirmadas localmente (k sigs) vs % finalizadas on-chain.
-
Latência média para k sigs (segundos).
-
% de disputas por 1000 LBs (indicador de fraude).
-
Custo on-chain / tx (TON fees / batch).
-
Eficácia anti-Sybil (número médio de devices honestos vs detectados).
14 — Conclusão curta
Implementar PoLT como L2 sobre TON é viável e pragmático: dá-te controle total sobre regras locais, aproveita ferramentas (Tact/Blueprint, Jettons, TON Connect) e mantém ancoragem segura na TON. A parte crítica é implementar corretamente BLS/threshold, regras anti-Sybil (TS, rate limits, PoW leve opcional) e um mecanismo de disputas robusto.