首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rinkeby智能契约

Rinkeby智能契约
EN

Stack Overflow用户
提问于 2021-07-18 15:25:26
回答 1查看 80关注 0票数 0

希望为CTF创造一个挑战,在这里,我给用户一个智能的合同,一件艺术品,要求最低成本为20醚。一旦付款被接受,他就会得到旗。下面的代码工作,并检查余额与帐户的混合,但我如何让它返回标志,如果付款是正确的?任何帮助和指示都将不胜感激。

代码语言:javascript
复制
// 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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-18 16:30:13

您可以创建一个bool属性,该属性标记是否已完成支付。

代码语言:javascript
复制
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修饰符,任何其他契约或离链应用程序都可以读取它的值(但不能重写它)。如果不希望从契约外部访问该值,则可以删除该修饰符。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68430512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档