Rinkeby 智能合约
Rinkeby Smart Contract
希望为 CTF 创造挑战,我为用户提供了一件艺术品的智能合约,最低成本为 20 以太币。一旦付款被接受,他就会得到 return 标志。下面的代码可以工作并检查 remix 中帐户的余额,但如果付款正确,我如何才能将其发送到 return 标志?
任何帮助和指点将不胜感激。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
contract payment_for_art {
function invest() external payable {
if(msg.value < 20 ether) {
revert();
}
}
function balance_of() external view returns(uint) {
return address(this).balance;
}
}
此致
K
您可以创建一个 bool
属性 来标记付款是否已完成。
contract payment_for_art {
// default value is `false`, don't need to explicitly state it
bool public isPaid;
function invest() external payable {
// to prevent multiple payments
// reverts if the condition is not met
require(isPaid == false);
if(msg.value < 20 ether) {
revert();
}
isPaid = true; // flag that the payment has been done
}
// ... rest of your code
}
因为它有 public
修饰符,任何其他合约或链下应用程序都可以读取它的值(但不能重写它)。如果您不想从合同外部访问该值,您可以删除修饰符。
希望为 CTF 创造挑战,我为用户提供了一件艺术品的智能合约,最低成本为 20 以太币。一旦付款被接受,他就会得到 return 标志。下面的代码可以工作并检查 remix 中帐户的余额,但如果付款正确,我如何才能将其发送到 return 标志? 任何帮助和指点将不胜感激。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
contract payment_for_art {
function invest() external payable {
if(msg.value < 20 ether) {
revert();
}
}
function balance_of() external view returns(uint) {
return address(this).balance;
}
}
此致
K
您可以创建一个 bool
属性 来标记付款是否已完成。
contract payment_for_art {
// default value is `false`, don't need to explicitly state it
bool public isPaid;
function invest() external payable {
// to prevent multiple payments
// reverts if the condition is not met
require(isPaid == false);
if(msg.value < 20 ether) {
revert();
}
isPaid = true; // flag that the payment has been done
}
// ... rest of your code
}
因为它有 public
修饰符,任何其他合约或链下应用程序都可以读取它的值(但不能重写它)。如果您不想从合同外部访问该值,您可以删除修饰符。