๐ช Minting Logic
Overviewโ
The minting process of **rBTC-SYNTH**
is triggered only after a user successfully verifies their BTC holdings through ReserveBTCโs system.
This logic ensures that:
- Tokens are minted only in response to real BTC deposits.
- Users cannot mint tokens arbitrarily.
- The system is automatic, verifiable, and resistant to fraud.
๐งฎ Minting Conditionsโ
A synthetic token is minted only if all of the following are true:
- The user has submitted their BTC and ETH addresses to ReserveBTC.io.
- A unique verification BTC address and checksum amount were generated.
- The user sent exactly the assigned BTC amount to the verification address.
- The system detected the correct transaction.
- The ETH address is valid and stored.
- The BTC reserve has not already been minted.
โ
Once verified, the system triggers the mint()
function inside the smart contract.
โ๏ธ Smart Contract Minting Logicโ
function reportVerifiedBalance(address ethAddress, uint256 amountBtc) external onlyOracle {
require(!_alreadyMinted[ethAddress], "Already minted");
_mint(ethAddress, amountBtc);
_alreadyMinted[ethAddress] = true;
}
- The reportVerifiedBalance function can only be called by the Chainlink Oracle.
- The ETH address can only be minted once (soulbound model).
- If the BTC balance grows over time, additional minting is allowed (see below).
โ Dynamic Mintingโ
If the same BTC address is topped up later:
- The backend re-verifies the new total balance.
- Only the delta is minted.
- The new amount is added to the ETH holderโs existing
rBTC-SYNTH
balance.
โ Example:โ
If initially 0.25 BTC was verified, and later the address receives 0.10 more BTC:
0.25 BTC โ 0.25 rBTC-SYNTH
+0.10 BTC โ +0.10 rBTC-SYNTH
Final balance: 0.35 rBTC-SYNTH
๐ Anti-Fraud Protectionsโ
- Only the Oracle can trigger minting. Users cannot call the function directly.
- One-time mint lock per address (unless verified delta increases).
- Checksum enforcement: exact match required to prevent random sends.
- No manual input: All triggers are automated.
๐ View Functionsโ
DApps and DeFi protocols can read minted balances using:
function balanceOf(address ethUser) external view returns (uint256);
No approvals, no transfers, no delegated minting โ fully soulbound.
๐ ๏ธ Next:โ
Mint on proof. No keys. No permission. Just Bitcoin.