Files
smom-dbis-138/test/compliance/CompliantMonetaryUnitTokenTest.t.sol
defiQUG 76aa419320 feat: bridges, PMM, flash workflow, token-aggregation, and deployment docs
- CCIP/trustless bridge contracts, GRU tokens, DEX/PMM tests, reserve vault.
- Token-aggregation service routes, planner, chain config, relay env templates.
- Config snapshots and multi-chain deployment markdown updates.
- gitignore services/btc-intake/dist/ (tsc output); do not track dist.

Run forge build && forge test before deploy (large solc graph).

Made-with: Cursor
2026-04-07 23:40:52 -07:00

55 lines
1.6 KiB
Solidity

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import {Test} from "forge-std/Test.sol";
import {CompliantBTC} from "../../contracts/tokens/CompliantBTC.sol";
contract CompliantMonetaryUnitTokenTest is Test {
CompliantBTC public token;
address public owner;
address public admin;
address public user1;
function setUp() public {
owner = address(this);
admin = address(this);
user1 = address(0xB0B);
token = new CompliantBTC(owner, admin, 21_000_000 * 10**8);
}
function testDecimals() public view {
assertEq(token.decimals(), 8);
}
function testUnitCode() public view {
assertEq(token.unitCode(), "BTC");
assertTrue(token.isMonetaryUnit());
}
function testInitialSupplyUsesSatoshiPrecision() public view {
assertEq(token.totalSupply(), 21_000_000 * 10**8);
assertEq(token.balanceOf(owner), 21_000_000 * 10**8);
}
function testTransferUsesEightDecimals() public {
uint256 amount = 12_500_000;
token.transfer(user1, amount);
assertEq(token.balanceOf(user1), amount);
assertEq(token.balanceOf(owner), 21_000_000 * 10**8 - amount);
}
function testPauseBlocksTransfers() public {
token.pause();
assertTrue(token.paused());
vm.expectRevert();
token.transfer(user1, 100_000_000);
}
function testMintAndBurnUseSatoshiPrecision() public {
token.mint(user1, 250_000_000);
assertEq(token.balanceOf(user1), 250_000_000);
token.burn(100_000_000);
assertEq(token.balanceOf(owner), 21_000_000 * 10**8 - 100_000_000);
}
}