Ethereum 隐藏输入变量,使其不被记录在事务中

Ethereum 隐藏输入变量,使其不被记录在事务中,ethereum,solidity,Ethereum,Solidity,我正在做一件事,只是一个概念的证明,人们分享关于他们IP位置的元数据会得到奖励。在这种情况下(请暂时忽略代码错误),有人会提交他们的ip,我会将其发送给oracle,由oracle解决并返回有关ip的元数据,然后将地址和元数据发送给另一个合同 这是我对伪代码(至少是非编译代码)的天真尝试: pragma solidity ^0.4.0; import "github.com/oraclize/ethereum-api/oraclizeAPI.sol"; contract IpMeta is

我正在做一件事,只是一个概念的证明,人们分享关于他们IP位置的元数据会得到奖励。在这种情况下(请暂时忽略代码错误),有人会提交他们的ip,我会将其发送给oracle,由oracle解决并返回有关ip的元数据,然后将地址和元数据发送给另一个合同

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

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地址与钱包地址一起存储在交易中或其他任何地方。有没有办法隐藏输入数据?我对研究一无所知,如果可能的话,这似乎是一个非常有用的函数。除了如何保持输入数据的隐藏或不可访问之外,任何其他的im/实用性都不重要

谢谢


Mark

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

因此,根据我的理解,实现这一点的难度取决于以太坊节点的实现。实际上以太坊的协议通过以下方式处理一定程度的安全性。然而,在您的上下文中,使所有这些都过时的原因是,输入数据由诸如etherscan()之类的服务提供和显示。我认为实现你们想要的目标仍然是可能的,但这只是一个解决办法,而且会很困难


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

谢谢你的回复!是的,我们也得出了这个结论。我们研究了一些提交/揭示模式,但它们也有不足之处。karl.tech/learning-solidity-part-2-voting。第三方解决方案是我们能想到的最好的解决方案,但这样我们就失去了与用户的真正“不可信任”的关系。我们这里的主要目标是尝试和开发一些只有在区块链上才能实现的东西,而不仅仅是在区块链上重新调整好ol数据库的用途。非常感谢您的想法和回复@马克:是的,如果你还想实现这一点,我建议你研究一下硬件认证。有一个名为oraclize的服务,它提供来自非区块链上下文的数据。他们使用所谓的“分类账证明”解决方案实现了该功能,该解决方案有“分类账”的助手,该助手提供了一个硬件来保证某些代码的执行。所以这是可能的,但很麻烦。你可能想直面这个问题。祝你好运!谢谢,维兹!我会调查的!如果我们发现什么,我们会向线程报告。