Demo, Testing & Limitations
This page walks through end-to-end validation of the USSD-RSK bridge using the Africa's Talking sandbox simulator, raw curl commands, and on-chain verification via the Roostock Testnet Explorer. It also documents the current known limitations of the proof-of-concept and recommended improvements required before any production deployment.
Live Demo Overview
The following demo shows the complete USSD flow running against the deployed InclusiveDeFi contract on Roostock Testnet. A user on a feature phone dials a shortcode, navigates the text menu, and triggers real blockchain transactions without a smartphone or internet connection.
Main Menu
When a user dials the shortcode (e.g., *384#), the relay server responds with the main menu. The phone number is echoed back to confirm the active session.
Balance Check
Selecting option 1 triggers a read call to getBalance(wallet.address) on the Roostock node. No transaction is broadcast and no gas is consumed. The result is returned immediately and the session ends.
P2P Transfer Flow
Selecting option 2 opens a three-round collection flow. The user enters the recipient address in round 2 and the amount in round 3. The relay server signs and broadcasts the transaction on round 4.
Micro-Loan
Selecting option 3 immediately calls applyForLoan(). If the address has no existing active loan, the contract credits 0.01 tRBTC to its internal balance and emits a LoanIssued event.
On-Chain Transaction Confirmation
Every write operation (transfer, loan) produces a transaction that can be verified on the Rootstock Testnet Explorer. The screenshot below shows a confirmed applyForLoan transaction.
Testing Without a Phone Using curl
You can simulate the full USSD session lifecycle against your local relay server using curl. This allows you to test all branches of the state machine without the Africa's Talking gateway or a physical device.
Ensure your relay server is running (npm run start-bridge) before executing these commands.
Main Menu
curl -X POST http://localhost:3000/ussd \
-d "text=&phoneNumber=%2B2348012345678&sessionId=test001"
Expected response:
CON Rootstock DeFi (+2348012345678)
1. My Balance
2. Send Money (P2P)
3. Request Micro-Loan
Balance Check
curl -X POST http://localhost:3000/ussd \
-d "text=1&phoneNumber=%2B2348012345678&sessionId=test001"
Expected response:
END Your Balance: 0.01 tRBTC
Transfer Recipient Prompt
curl -X POST http://localhost:3000/ussd \
-d "text=2&phoneNumber=%2B2348012345678&sessionId=test002"
Expected response:
CON Enter Recipient Address:_________
Transfer Amount Prompt
curl -X POST http://localhost:3000/ussd \
-d "text=2*0xSomeRecipientAddress&phoneNumber=%2B2348012345678&sessionId=test002"
Expected response:
CON Enter Amount:_____
Transfer Execute
Replace 0xSomeRecipientAddress with a valid Roostock address and 0.005 with your desired amount.
curl -X POST http://localhost:3000/ussd \
-d "text=2*0xSomeRecipientAddress*0.005&phoneNumber=%2B2348012345678&sessionId=test002"
Expected response (address and hash will differ):
END Transfer Submitted
To: 0xSomeRecip...
Tx: 0xa924c40ed1...
Funds will arrive shortly.
The transaction enters the Rootstock mempool immediately and the session ends. The server terminal will log Transfer confirmed: 0x... once the block is mined. The full transaction hash is available in your server logs if you need to look it up on the explorer.
Micro Loan
curl -X POST http://localhost:3000/ussd \
-d "text=3&phoneNumber=%2B2348012345678&sessionId=test003"
Expected response (hash will differ):
END Loan Requested
Tx: 0xa924c40ed1...
0.01 tRBTC credited shortly.
Like the transfer, the loan transaction is submitted to the mempool and the USSD session ends immediately. Watch your server terminal for the background confirmation log Loan confirmed: 0x.... If the contract reverts on chain (e.g., because a loan is already active), it will appear as Loan failed on-chain: Existing loan active in the server logs. The user will not see this message since the session is already closed.
Verifying Transactions On-Chain
After any write operation through the relay server, verify the transaction on the Roostock Testnet Explorer by searching for your deployed contract address.
https://explorer.testnet.rootstock.io/address/0xYourDeployedContractAddress
You can also search by transaction hash. The truncated hash is returned in the END response string from the relay server (e.g., Tx: 0xa924c40ed1...). Copy the full hash from your server terminal logs. A successful transaction will show the following fields.
- Status: Success
- To: Your deployed contract address
- Input Data: The encoded function call (
applyForLoan,transfer, etc.) - Block: The block number it was included in
You can also inspect ignition/deployments/chain-31/journal.jsonl to review all deployment transactions, including their block hashes and receipt status.
Africa's Talking Simulator
For end-to-end testing with the real USSD protocol (including session ID management and proper CON/END handling), use the built-in USSD Simulator in the Africa's Talking sandbox dashboard.
- Open your sandbox dashboard at account.africastalking.com/apps/sandbox.
- Navigate to USSD > Simulator.
- Enter a test phone number and dial your shortcode.
- Navigate the menu and observe the responses.
The ngrok inspector at http://localhost:4040 will show you every raw HTTP POST from Africa's Talking and every response your server returns. This is essential for debugging unexpected session terminations or malformed responses.