Inspiration
In 2021, Indonesia's Ministry of Social Affairs deactivated over 21 million duplicate social aid records. People registered twice. Deceased citizens still marked active. Recipients no longer eligible still drawing funds. Every reform since then, from DTKS to DTSEN, fixes this inside one central database. That database can still be edited by whoever controls it. No citizen, NGO, or Ombudsman investigator can check a single disbursement without asking permission first. The UN World Food Programme already solved a version of this problem for over a million refugees using blockchain. We wanted to see if the same approach could handle Indonesia's specific duplication problem.
What it does
RantaiAsa hashes each recipient's national ID and commits that hash to a smart contract. The same person can't get registered twice across programs without the system catching it. An AI model scores eligibility using multidimensional poverty indicators. Only recipients who are both unique and above the eligibility threshold trigger a second smart contract that logs the disbursement as a permanent, public event on-chain. Anyone can open the dashboard and check any disbursement directly against the blockchain. No login. No permission needed.
How we built it
We wrote the identity registry and disbursement contracts in Solidity and deployed them to the Polygon Amoy public testnet, using Hardhat for development and OpenZeppelin components for access control. A Node.js and Express backend calls the smart contracts through ethers.js and listens for their events. That backend sits between a Python scikit-learn scoring API and the contracts themselves, so the AI model never touches the chain directly. It only decides whether the backend gets to submit a transaction. The frontend runs on React and Vite. Officers authenticate with a wallet through MetaMask, and the public dashboard reads straight from the chain client-side, so what it shows matches the chain exactly instead of a cached copy someone could quietly desync.
Challenges we ran into
We had to decide what belongs on-chain and what doesn't. Storing raw national IDs on a public ledger would violate privacy, so we built duplicate detection around a one-way hash commitment instead. That meant redesigning how the check works without ever exposing the underlying identity. We also had to sequence the logic so the system checks for duplicates before running the AI scoring. Scoring first would waste computation on entries the system rejects anyway.
Accomplishments that we're proud of
Once a hash gets committed, nobody on our team can quietly alter or delete it. We built a system where the guarantee doesn't rest on trusting an administrator, including us. We also grounded every design choice in real numbers: BPS poverty statistics, the Ministry's own disclosure of 21 million duplicate records, DTSEN's stated rationale for existing.
What we learned
A hash commitment gives you tamper-proof duplicate detection without exposing anyone's identity. You don't have to choose between privacy and verifiability. We also studied the DTKS-to-DTSEN transition closely enough to design RantaiAsa as a layer that sits alongside it, not one that competes with it.
What's next for RantaiAsa
We'll pilot the contracts with a single PKH cohort in one kecamatan and collect feedback from field officers on the registration flow. From there we'll expand to cross-program duplicate checking across PKH, BPNT, and rice aid, then explore how the registry could plug into DTSEN as an independent verification layer.
Built With
- blockchain
- ethers.js
- express.js
- hardhat
- javascript
- machine-learning
- metamask
- node.js
- openzeppelin
- polygon
- polygon-amoy
- python
- react
- rest-api
- scikit-learn
- smart-contracts
- solidity
- vercel
- vite
- web3
Log in or sign up for Devpost to join the conversation.