延迟用户使用Javascript的最佳方法

时间:2018-08-15 17:03:08

标签: javascript ethereum solidity

我正在创建一个应用,用户通过按钮提交请求,然后该应用(出于安全原因)要求他们在相当短的时间内(例如,十到二十秒)不能返回该页面)。该应用程序的目的不是使这样的等待成为一个主要问题(它旨在作为一种以太坊投票应用程序的前端,因此,一个人应该很少使用它。

该合同具有内置保护功能,可防止同一帐户多次投票,但是如果用户可以在挖掘其投票之前返回投票屏幕(大约需要10到15秒),则这些保护功能将无效。每次加载页面时都简单地稍加延迟似乎是可行的,但可能会激怒用户。

我想过在用户进行投票后将其详细信息本地存储,如果用户的详细信息已在已投票的人员列表中,则禁止任何人与投票页面进行互动(系统会对其进行更新,以便名称应在不久后从中删除)。但是,尽管这种可能起作用,但似乎很难进行扩展,因为整个数组需要不断地进行迭代。

有人能以更好的方式确保人们离开首页后10到20秒钟内无法返回(或至少与之互动)吗?谢谢。

1 个答案:

答案 0 :(得分:3)

不要从前端靠近它。即使您使用某种本地速率限制,也可能有人清除cookie /缓存,或者只是移至另一台计算机。最后,他们可以通过直接在以太坊网络上与合约进行交互而不是通过您的前端来消除限制。

您的合同应维护address->lastBlockVoted的映射。如果来自某个地址的新投​​票在最后一个区块的n个区块内到达,则交易应会失败。

这样,即使有人在开采第一个交易之前广播了20个交易,但后19个交易都会全部失败。