【问题标题】:Prove that you executed view function in Solidity证明你在 Solidity 中执行了视图功能
【发布时间】:2021-04-23 08:04:48
【问题描述】:

我正在研究在我们的赌场中使用 智能合约 的可能性。因为我们不想让玩家为他们玩的每一手牌支付费用,我们希望使用不修改状态的 "view" 交易,因此 不需要任何气体。然而,这带来了以下问题:“由于交易没有保存在区块链上,很难(或不可能?)向某人证明你确实调用了智能合约函数(并且你只调用了一次) .

我想到的一个选项是让 client(browser) 调用智能合约上的函数。但是,由于我们的后端也需要“知道”结果,玩家当然可以在自己的一端更改结果,并发送错误的结果。

另一方面,如果我们让我们的后端调用智能合约上的函数,那么应该有一种方法可以向玩家证明我们确实调用了智能合约,我们只调用了一次。我觉得很难做到。

一个想法是从客户端调用智能合约,使用公钥加密数据并将其发送到后端以便它可以解密它们并查看结果。但是,玩家不知道服务器是否真的使用了这些数据,我什至不确定用公钥加密是否有任何意义,因为智能合约功能的执行是公开的,所以我想每个人都会知道输入。

所以,我的问题是,有没有办法让玩家相信我们真的调用了智能合约并且只调用了一次?

编辑: 我想到的另一个想法是每个游戏会话使用一对私钥/公钥,以便在会话结束时玩家找到私钥,如果我们将所有投注结果的历史存储在客户端上,玩家可以使用他得到的私钥检查这些是否是真实的结果。

仍然存在一个问题,玩家是否会在智能合约上加密之前看到下注结果

【问题讨论】:

    标签: cryptography rsa blockchain ethereum solidity


    【解决方案1】:
    1. 在您在区块链上实施 Casino 之前检查交易成本。有时费用可能是每笔交易 30 美元,您会用这些费用玩游戏吗?目前,这些交易成本只能由进行货币套利的交易机器人支付。
    2. 调用合约函数是免费的。您可以在不发出交易的情况下从合约中读取任何数据。不需要气体。这仅适用于不修改状态的函数。您可以自己将数据提供给区块链,用户可以免费阅读。
    3. 如果没有存储,你想做的事情是不可行的,你需要 以某种方式标记 READ 操作至少发生了一次,并且 为此,您需要发出 WRITE 操作(这是有代价的)。
    4. 数据未使用公钥加密。数据使用私钥加密,公钥用于确定签名者的身份。但是您在这里谈论的是对称加密,其中两个实体都必须持有用于加密数据的密钥。
    5. 要在区块链上存储任何内容,您需要发送交易。想象一下以太坊是一个 SSD 磁盘,每次你想要存储一个文件,你都需要发送一个交易,由你的私钥签名。这就是它的工作原理。阅读是免费的,但要存储一些东西,没有交易是不可能的。你可以创建一个带有只读硬盘的应用程序吗?不!
    6. 你确定你需要以太坊吗?如果您只需要存储一些数据,那么某种对存储纯数据友好的区块链可能会起作用。
    7. 可能,您可以将用户的会话存储在 0x Mesh 网络中,作为某物的 Maker Order。不是这个意思,但它是点对点网络,它很安静,发送订单是免费的,但取消订单需要付款。所以,这个方案可能对你有用。用户会话的到期方式与 0x Mesh 订单到期的方式相同。免费。所有订单均已签名,因此适合您的需求。但它不适用于游戏。

    【讨论】:

    • 感谢您的回复。我不同意 4 顺便说一句。公钥用于公钥密码学中的数据加密,因此只有拥有私钥的人才能读取数据。使用私钥加密用于数据的数字签名,因此任何拥有公钥的人都可以验证签名。就我而言,我需要非对称密钥,而不是对称密钥,因为任何人都可以看到嵌入智能合约中的对称密钥并阅读它
    【解决方案2】:

    有没有办法让玩家相信我们真的调用了智能合约并且只调用了一次?

    玩家可以在他们的钱包中签署一条消息,然后你的服务器使用这条消息调用智能合约。智能合约解密消息并根据它采取行动。交易由您的服务器推送到网络,服务器有一个热钱包,可以支付 ETH 费用。

    或者,您可以使用像 Optimism 这样的第 2 层网络,其中交易成本更低。您还可以将Gas Station Network 与中继器一起使用,让用户使用代币而不是以太币进行支付。

    【讨论】:

    • 如果我想完全避免支付费用?
    • 你可以使用 MySQL。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-04
    • 2011-09-08
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2018-10-28
    • 2016-04-15
    相关资源
    最近更新 更多