首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有一种为可靠智能契约检索数据的方法?

是否有一种为可靠智能契约检索数据的方法?
EN

Ethereum用户
提问于 2021-03-19 02:09:04
回答 1查看 536关注 0票数 1

TL;DR:我从区块链,ethereum,web3环境开始,我对此非常兴奋,所以我想知道一些不清楚的事情。

我已经构建了我的第一个实体契约(一些商店合同),但是使用了硬编码的数据,所以我想知道,我应该从哪里获得数据,这样它就不是硬编码的了。例如:

如果我想为赢得X奖而创建一个稳固的合同,那么这个奖项将总是硬编码在合同中吗?

或者,如果我想签一份聪明的合同,去做一些像kickstarter (基金上涨)这样的事情,那么这些骆驼都住在哪里呢?

谢谢。

EN

回答 1

Ethereum用户

发布于 2021-03-19 18:38:52

这是一个非常抽象的问题,所以这是一个抽象的答案。

这份合同没有准备好生产.有些关注点被放在一边,专注于你可变的奖品关注点,帮助你开始工作。这场比赛本身并没有经过仔细的考虑。创作者用任意的奖金制作猜谜游戏。选手们试图猜出这个秘密词。

代码语言:javascript
复制
// SPDX-License-Identifier: UNLICENSED

pragma solidity 0.7.6;

contract XPrize {
    
    struct Contest {
        uint prizeMoney;
        bool claimed;
    }
    
    mapping(bytes32 => Contest) public contests;
    
    event NewContest(address sender, bytes32 contestId, uint prizeMoney);
    event PrizeClaimed(address winner,bytes32 secret, bytes32 contestId, uint prizeMoney);
    
    // STEP 2 - contest creator creates a contest with an arbitrary anount of funding. 
    function newContest(bytes32 contestId) public payable { // anyone can create a contest and fund it
        Contest storage c = contests[contestId];
        require(c.prizeMoney == 0, "contest is already defined.");
        require(msg.value > 0, "send money");
        c.prizeMoney = msg.value;
        emit NewContest(msg.sender, contestId, msg.value);
    }
    
    // STEP 3 - guess the secret, claim the money
    function claimPrize(bytes32 secret) public {
        bytes32 key = hashHelper(secret);
        Contest storage c = contests[key];
        require(c.prizeMoney > 0, "there is no prize money there");
        require(!c.claimed, "already paid out");
        c.claimed = true;
        emit PrizeClaimed(msg.sender,secret, key, c.prizeMoney);
        msg.sender.transfer(c.prizeMoney);
    }
    
    // STEP 1 - contest creator generates a key with a secret that is hard to guess
    function hashHelper(bytes32 secret) public view returns(bytes32) {
        return keccak256(abi.encodePacked(secret, address(this)));
    }
    
}

这份合同是一台自动售货机,因为它既持有钱,也有释放它的机制。注意,它将奖金负债记录在数据结构中。有一堆现金“在盒子里”--这是一种协议级的会计,由Ethereum来处理--它知道有多少钱停在地址里。内部会计要求,例如,每个用户或每个游戏拖欠多少,是内部会计关注的问题。

希望能帮上忙。

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

https://ethereum.stackexchange.com/questions/94867

复制
相关文章

相似问题

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