如果在以太坊中要为用户提交一笔交易或事物,服务器代理广播到网络中:
1.广播成功,服务器返回交易成功结果给前端,如果因为网络问题返回交易成功的信息无法送达客户端呢?
不恰当的处理可能会让用户误以为交易失败(实际上交易成功只是确认成功的消息在网络中丢了),再次发起交易造成损失。
这就是在支付案例中的幂等性。
幂等性指可以使用相同参数重复执行,并能获得相同结果的函数,这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。
也就是相同参数一次请求和多次请求具有相同的状态结果。这个风险需要应用前端和后端协同处理。
后端在处理交易时可以在用户交易之前先生成一个唯一的交易id,这样提交不同的交易时id保证不同,即在后端处理上实现了幂等交易操作,避免用户刷新页面造成的重复交易。
前端也需要正确处理信息,当一笔交易的结果在网络中没有ack时,应当区别于交易失败,给用户一个异常信息,让用户注意确认这笔交易是否成功,并再次询问后端此id是否成功交易。
2.以太坊的交易在交易池中是根据给的gas来进行优先度排序,所以如果给的gas不够多,很可能会一直阻塞在交易池中陷入饥饿状态。
这时需要重新修改这笔交易的gas,修改方法是提交一笔nounce值相同的交易进行覆盖,并且给上更高的gas。
如果需要取消那么设置一笔nounce值相同但无内容(转账金额为0,gas要更高)的交易提交即可。