Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

分支名字唯一功能,可能存在同名分支在不同节点中存在的问题 #162

Open
cchanm opened this issue Oct 16, 2019 · 2 comments

Comments

@cchanm
Copy link
Contributor

cchanm commented Oct 16, 2019

分支名字唯一功能,只是在添加起源块时,判断本地是否有该名字的分支,判断是否成功,没有影响区块及交易的有效性,当以下情况发生时,会在不同节点存在同名分支的情况。
1)当两个节点(A节点、B节点)在同一时间(不完全一个时间点,只要在一个区块时间内就可以),分别创建名字相同的分支,将产生两条创建分支的交易,这两条交易分别在两个节点上打包,并且产生分叉,两个块中,两条交易的顺序相反,即A节点的块是AB顺序,B节点的块是BA顺序;
2)其它节点接收到A节点的块时,会生成A分支,而排斥B分支,接收到B节点的块时,会生成B分支,而排斥A分支;
3)当分叉回滚时,也不能将改变这个情况,分支创建后,没有删除功能,并且也不能删除,由于分支上产生的价值,无法删除。

@sunhantao
Copy link
Collaborator

可以考虑这个办法:

  1. 在一个分叉上块的打包与验证过程中,保证fork不重名,要么有A、要么有B
  2. 在长短链切换时,可以切换A、B订阅关系

@sunhantao
Copy link
Collaborator

sunhantao commented Sep 14, 2020

测试链存在两个重名分支:

"fork" : "00003841577cb3b48afe04eceb328bad1a697cf86619b87b7df8f74fcb942a1f",
"name" : "BigBangCoreCamera"

"fork" : "00001195d2d0771094ec8459f0b375bab1e0dd75f179cf6f93e678ac86e8bd32",
"name" : "BigBangCoreCamera",

forkdb将两个分支都存起来了,导致forkmanager有两个分支。但AddNewOrigin判断了重名分支,所以blockbase实际存在的分支只有一个。

在RPC listfork的时候,有-a参数从forkmanager获取数据,没有-a参数从blockbase获取数据导致了不一致的情况。

临时修复办法是都从forkmanager获取数据,在返回RPC结果时去重。

彻底修复应在fork抵押赎回PR #572 中考虑db中不存重名分支

@sunhantao sunhantao linked a pull request Sep 14, 2020 that will close this issue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants