Uang muka jamaah hanya bisa dipakai untuk perjalanannya sendiri.A pilgrim's prepayment can only be spent on her own trip.
Mabrur mengunci rupiah setiap jamaah per pos (tiket pesawat, hotel, visa, ujrah agen) di dalam token yang tidak bisa dipindahtangankan di Arbitrum One. Agen hanya bisa membayar faktur bertanda tangan dari vendor yang klaimnya terverifikasi, penerima uangnya selalu si penanda tangan, ujrah baru terbuka setelah keberangkatan, dan siapa pun bisa mengembalikan sisa dana begitu batas tiket lewat tanpa tiket dibeli.Mabrur earmarks each pilgrim's rupiah per line (flight, hotel, visa, agency fee) inside a non-transferable token on Arbitrum One. The agency can pay only a claim-verified vendor's signed invoice, the payee is always that signer, the fee unlocks only after departure, and anyone can refund the rest once the ticket-by date passes with no ticket bought.
Jalur 30 detik (tanpa dompet, tanpa instal)The 30-second path (no wallet, no install)
- Buka booking Pak Ahmad:Open Pak Ahmad's booking: /app/jamaah — tiket, hotel, dan visa dibayar ke penanda tangannya masing-masing; ujrah dibuka setelah ia menandatangani keberangkatan.flight, hotel and visa paid to their signers, fee released after his departure signature.
- Buka booking Ibu Siti:Open Ibu Siti's booking: /app/jamaah — tiketnya tidak dibeli sampai batas tiket, jadi pihak ketiga mengembalikan setiap rupiah yang belum terpakai.no ticket bought by her ticket-by date, so a third party refunded every unspent rupiah.
- Buka empat percobaan yang ditolak di bawah ini di Arbiscan: masing-masing adalah transaksi gagal yang tertambang, lengkap dengan nama error-nya.Open the four rejected attempts below on Arbiscan: each is a mined, failed transaction with a named error.
- Minta keputusan kontrak atas faktur Anda sendiri: tanda tangani satu di halaman vendor, tempel JSON-nya di konsol agen (Tempel faktur → Baca faktur), lalu tekan Simulasi saja di sana. Konsol yang sama menampilkan panel regulator secara langsung.Get the contract's verdict on your own invoice: sign one on the vendor page, paste its JSON into the agency console (Paste invoice → Read invoice), then press Simulate only there. The same console shows the live regulator panel.
Bukti on-chainReceipts
| Percobaan yang ditolakRejected attempt | Yang dicoba agenWhat the agency tried | Tx tertambangMined tx |
|---|---|---|
| DitolakEarmarkMismatch | Faktur hotel Ibu Siti dipakai untuk booking jamaah lainSiti's hotel invoice used on another pilgrim's booking | Transaksi EarmarkMismatch di Arbiscan:EarmarkMismatch transaction on Arbiscan: 0x9ed30e38…bbc316 |
| DitolakVendorClaimMissing | Faktur ditandatangani direktur agen (tanpa klaim vendor)Invoice signed by the agency director (no vendor claim) | Transaksi VendorClaimMissing di Arbiscan:VendorClaimMissing transaction on Arbiscan: 0x887d6b86…effa61 |
| DitolakInvoiceReplayed | Faktur yang sudah dibayar dikirim ulangAn already-paid invoice submitted again | Transaksi InvoiceReplayed di Arbiscan:InvoiceReplayed transaction on Arbiscan: 0x952f30ad…b9619a |
| DitolakNotDeparted | Agen menandatangani “keberangkatan” sendiri demi mengambil ujrahnyaAgency signs its own 'departure' to take its fee | Transaksi NotDeparted di Arbiscan:NotDeparted transaction on Arbiscan: 0xe4855ebd…f5291b |
- 87 pengujian dengan cakupan baris, cabang, dan fungsi 100% pada kontrak, termasuk suite invarian: 7 invarian × 256 run × kedalaman 100 (Σ pos == suplai token; rupiah yang ditahan ≥ suplai; tidak ada pembayaran yang pernah sampai ke alamat tanpa klaim).87 tests with 100% line, branch and function coverage of the contracts, including an invariant suite of 7 invariants × 256 runs × depth 100 (Σ earmarks == token supply; rupiah held ≥ supply; no payment ever reaches an unclaimed address).
- Biaya dari tanda terima nyata: satu siklus jamaah yang berangkat 907.185 gas ≈ Rp 809; yang dikembalikan 582.938 gas ≈ Rp 520 (ETH/IDR 44.563.294, CoinGecko, 9 Okt 2026).Cost from the real receipts: a departed pilgrim's lifecycle is 907,185 gas ≈ Rp 809; a refunded one is 582,938 gas ≈ Rp 520 (ETH/IDR 44,563,294, CoinGecko, 9 Oct 2026).
- Kontrak terverifikasi di Arbiscan:Contracts verified on Arbiscan: MabrurPBM, ClaimRegistry, TIDR.
ReproduksiReproduce
Perintah reproduksi: clone, jalankan tes Foundry, putar ulang transaksiReproduce commands: clone, run the Foundry tests, replay a transactiongit clone --recursive https://github.com/edycutjong/mabrur.git cd mabrur/packages/foundry && forge test cast run <tx mana pun di atas> --rpc-url https://arb1.arbitrum.io/rpc --quickcast run <any tx above> --rpc-url https://arb1.arbitrum.io/rpc --quick
Setiap skrip demo mengirim transaksi ke Arbitrum One; tidak ada mode mock, offline, atau dry-run.Every demo script broadcasts to Arbitrum One; there is no mock, offline or dry-run mode.
Batasan yang jujurHonest limits
- tIDR adalah token uji tanpa nilai: belum ada token rupiah berizin yang bisa dipakai di Arbitrum One. Pembungkusnya menerima ERC-20 biasa apa pun.tIDR is a test token with no value: no licensed rupiah token is usable on Arbitrum One. The wrapper takes any plain ERC-20.
- Penerbit klaim adalah kunci demo yang menggantikan Kemenag / IATA. Penerbit yang dibobol bisa mensertifikasi vendor palsu; kerugiannya terbatas pada pos tiket, hotel, dan visa yang belum kedaluwarsa, dan itu sudah diuji.The claim issuer is a demo key standing in for Kemenag / IATA. A captured issuer could certify a fake vendor; the damage is bounded to unexpired flight, hotel and visa lines and tested.
- Mabrur tidak bisa menjamin kursi: yang dijamin adalah tiket yang sudah dibayar, atau setiap rupiah yang belum terpakai kembali.Mabrur cannot guarantee a seat: it guarantees a paid ticket, or every unspent rupiah back.