10 关于链上矿工打包逻辑,出现一些意料之外的问题

看到一个问题帖子,引发了我好久之前做项目遇到的一个奇怪的问题,来寻找下有没有人能告诉我。

先说触发这个问题的业务场景

在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,的转账信息转账给其他的账户,让矿工拿到的签名失效,但是这样成本有点高,有别的方案吗?还是说我的推测是不存在的,因为这个事情是发生在客户的身上,是客户给我的反馈

请先 登录 后评论

最佳答案 2022-06-06 23:15

首先感谢你的回答,但是关于 (如果像你说的不足1bnb,这个交易就失败了,但是会上链了) 你可以写个脚本跑下 A账号只有0.1个BNB 给B账号转0.2,这样是不上链的,不清楚我和你关于“上链”的定义是否一致。我指的不上链,是在区块浏览器是查询不到任何交易信息,其次nonce也不会增加。假设现在账户的nonce=10。操作我上方说的,在失败之后,再发起0.05个的转账,成功后,该笔交易的nonce为11

请先 登录 后评论

其它 3 个回答

zen
请先 登录 后评论
Tiny熊
  擅长:智能合约,以太坊
请先 登录 后评论
steel
请先 登录 后评论
  • 2 关注
  • 0 收藏,2634 浏览
  • steel 提出于 2022-05-16 15:24