隐藏输入变量以免记录在交易中

时间:2018-07-28 17:41:18

标签: ethereum solidity

我正在做一些事情,仅仅是一个概念证明,人们共享其IP位置的元数据而获得奖励。在这种情况下(请暂时忽略代码错误),有人将提交其ip,我将其发送到一个oracle,该oracle将对其进行解析并发送回有关该ip的元数据,然后将地址和元数据发送到另一个合同。 / p>

这是我天真的对伪代码(或至少是非编译的)的尝试:

pragma solidity ^0.4.0;

import "github.com/oraclize/ethereum-api/oraclizeAPI.sol";


contract IpMeta is usingOraclize {

    uint public metadata;

    function Metadata(bytes32 _ipAddress) public {
        update(_ipAddress);
    }

    function __callback(bytes32 myid, string result) public {
        if (msg.sender != oraclize_cbAddress()) revert();
        bytes32 ipMetadata = result;
        /* send address and result to another contract */
    }

    function update(bytes32 ipAddress) public payable {
        oraclize_query("URL", "xml(https://ipresolver.com?ipresolve=" . ipAddress . ")");
    }
}

此处的目标是允许人们证明其IP地址(国家/地区,提供者等)的某些信息,而无需将实际IP地址与钱包地址一起存储在交易中或其他任何地方。有没有办法隐藏输入数据?我对研究不知所措,并且如果可能的话,这似乎是一项非常有用的功能。除了如何使输入数据隐藏或不可访问之外,其他任何事情的实用性/实用性都不重要。

谢谢

标记

1 个答案:

答案 0 :(得分:0)

EVM本质上是由计算机节点组成的网络。任何人都可以运行自己的节点,并且如果您的智能合约代码具有可以接收交易的有效节点,它们将在这些计算机上运行。而且由于数据也将被传输到这些计算机,因此看到自己计算机中正在运行的代码的所有者最终将有权查看正在运行的进程(通过监视网络,检查内存等)。

因此,据我了解,执行此操作的难度取决于以太坊节点的实现。实际上,以太坊的协议通过encrypting the p2p connection处理了某种级别的安全性。但是,在您的上下文中所有这些过时的原因在于,输入数据由etherscan(random example)之类的服务提供服务和显示。我认为仍然可以实现想要的愿望,但这只是一种解决方法,而且很困难。

我认为以太坊及其EVM是一台透明的计算机,基本上它接收和发送的数据根本不安全。如果要实现安全性,那是在其他地方实现的事情,例如在其他安全的地方(受信任的第三方)处理与ip相关的作业,然后将没有ip的数据存储到区块链上。这是我能想到的最好的。