看到一个问题帖子,引发了我好久之前做项目遇到的一个奇怪的问题,来寻找下有没有人能告诉我。
先说触发这个问题的业务场景
在BSC链上的,有一份合同,接受投资,在12:00开始。 小明在11:59的时候,不断批量发送投资请求,每次投资1BNB,nonce++ 期间,代码不查交易是否成功 是否上链,小明账号里面有1.1个BNB,每次发送后,nonce++直接再发下一笔。
在区块高度123456的时候,恰好到了12:00,小明的交易发出去了,第nonce是16的时候交易确认,投资了1BNB。小明这时候继续发送的信息有nonce=17投资1BNB,18 19..一直发送到30。
理论上17以后,在18-30都是失效的,因为账上的钱不够,交易都无法上链。 这个事情本来就以为过了,
重点在这里
小明的钱包在之后都没有动过,直到第二天后,自己的钱包收到了1个BNB,在下一刻,小明没有任何操作的情况下,账号又给合同投资了1个BNB。
触发这个事情的分析,结合上面的帖子,我能不能理解为: 小明的钱包在链上的数据-->上一笔交易的nonce是17。(因为之前的18-30是没上链),但是矿工拿到了18-30的签名信息,虽然是失效的,没有给上链,但是他存下来了,等到发现小明账上有1个BNB的时候,就给确定了nonce是18的这一笔交易。<---- 是会出现这个情况吧?
基于这个情况,有什么可以让矿工存储下来的签名,是失效的呢?我想过一个,比如说在17确定了,账号再发送nonce数目18-30,的转账信息转账给其他的账户,让矿工拿到的签名失效,但是这样成本有点高,有别的方案吗?还是说我的推测是不存在的,因为这个事情是发生在客户的身上,是客户给我的反馈