Shielded Balances and Transfers
Implement transfer() and transferFrom() with suint256
Shielded balanceOf
mapping(address => suint256) balanceOf;transfer()
function transfer(address to, suint256 amount) public returns (bool) {
require(balanceOf[msg.sender] >= amount, "Insufficient balance");
balanceOf[msg.sender] -= amount;
balanceOf[to] += amount;
emit Transfer(msg.sender, to, uint256(amount));
return true;
}What happens at each stage
transferFrom()
approve()
The mint pattern
Constructor minting
Testing with sforge
Test: basic transfer
Test: transfer reverts on insufficient balance
Test: approve and transferFrom
Test: transferFrom reverts on insufficient allowance
Running the tests
Last updated

