首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果在解锁时不需要创建者的私钥,是否存在这样的智能契约?

如果在解锁时不需要创建者的私钥,是否存在这样的智能契约?
EN

Ethereum用户
提问于 2020-06-25 20:14:17
回答 2查看 75关注 0票数 0

以下类型的智能契约是可能的吗?如果是的话,它被称为什么?

  1. 甲方用可用资金为第二方订立一份明智的合同,并签署交易协议
  2. 乙方输入正确的参数以“解锁”资金(与甲方私钥无关的参数)并签署交易
EN

回答 2

Ethereum用户

回答已采纳

发布于 2020-06-26 03:52:48

如果我明白目标的话,诀窍就是找出一个秘密的交换方法。它必须脱离链,否则其他人都会看到它。

当一个人带着这个秘密到来时,他们可以获得一些东西。这里有一个简单的解决方案,处理许多秘密和奖励在飞行中。它可能会给你一些想法。

代码语言:javascript
复制
pragma solidity 0.6.6;

contract Secrets {
    
    mapping(bytes32 => uint) public secrets;
    
    function remit(bytes32 secret) public payable {
        secrets[secret] += msg.value;
    }
    
    function claim(bytes32 magic) public {
        bytes32 secret = keyGen(msg.sender, magic);
        uint amount = secrets[secret];
        require(amount > 0, "There is no money for you.");
        secrets[secret] = 0;
        msg.sender.transfer(amount);
    }
    
    function keyGen(address a, bytes32 magic) public pure returns(bytes32 secret) {
        secret = keccak256(abi.encodePacked(a, magic));
    }
    
}
  1. 发送方使用keyGen (离链,因为它是pure)创建密钥。
  2. 发送者使用密钥将钱发送到合同(链上)。
  3. 发送者将秘密透露给接收者,(不知怎么的,离链的,例如短信)
  4. 接受者用钥匙来获得钱(在链上)。

非常简单的代码来说明这一点。还没准备好生产。;-)

希望能帮上忙。

票数 2
EN

Ethereum用户

发布于 2020-06-25 21:15:40

是:

代码语言:javascript
复制
pragma solidity 0.4.26;

contract MyContract {
    address public partyB;

    constructor(address _partyB) public payable {
        partyB = _partyB;
    }

    function withdraw() public {
        require(msg.sender == partyB);
        msg.sender.transfer(address(this).balance);
    }
}

不过,我不太明白您的目标,因为PartyA可以直接将这些资金转移到PartyB。换句话说,为什么PartyA要为部署合同而烦恼,而PartyB为什么要为调用该契约上的函数而烦恼呢?

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

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

复制
相关文章

相似问题

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