Merge branch 'jangko-fix_260'

This commit is contained in:
Ștefan Talpalaru 2019-04-06 18:22:13 +02:00
commit 54267d6baf
No known key found for this signature in database
GPG Key ID: CBF7934204F1B6F9
4 changed files with 8570 additions and 5 deletions

View File

@ -79,8 +79,8 @@ proc getBlockHeader*(self: BaseChainDB; n: BlockNumber): BlockHeader =
## Raises BlockNotFound error if the block is not in the DB.
self.getBlockHeader(self.getBlockHash(n))
proc getScore*(self: BaseChainDB; blockHash: Hash256): uint64 =
rlp.decode(self.db.get(blockHashToScoreKey(blockHash).toOpenArray).toRange, uint64)
proc getScore*(self: BaseChainDB; blockHash: Hash256): Uint256 =
rlp.decode(self.db.get(blockHashToScoreKey(blockHash).toOpenArray).toRange, Uint256)
iterator findNewAncestors(self: BaseChainDB; header: BlockHeader): BlockHeader =
## Returns the chain leading up from the given header until the first ancestor it has in
@ -224,18 +224,18 @@ proc persistHeaderToDb*(self: BaseChainDB; header: BlockHeader): seq[BlockHeader
self.db.put(genericHashKey(headerHash).toOpenArray, rlp.encode(header))
let score = if isGenesis: header.difficulty
else: self.getScore(header.parentHash).u256 + header.difficulty
else: self.getScore(header.parentHash) + header.difficulty
self.db.put(blockHashToScoreKey(headerHash).toOpenArray, rlp.encode(score))
self.addBlockNumberToHashLookup(header)
var headScore: uint64
var headScore: Uint256
try:
headScore = self.getScore(self.getCanonicalHead().hash)
except CanonicalHeadNotFound:
return self.setAsCanonicalChainHead(headerHash)
if score > headScore.u256:
if score > headScore:
result = self.setAsCanonicalChainHead(headerHash)
proc addTransactionToCanonicalChain(self: BaseChainDB, txHash: Hash256,

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,25 @@
{
"blockNumber": "16b334",
"state": {
"F4E396375AC8DD79AE15C07D0630CFA1E8D73D8B1611542B3F026AAED7B2F52D": "F90211A0C6187C1E2FD460BF65E67C317BDB862AADBBBB4E93FBE07B3AA86666412EC097A0101E462D444C13AFCC21DF02B96970A0CC7DDCF899B4013F97C4A58E208AD997A0564F8F273F275E4497E3153D5ADB3F605F081851CB9D77FF1FF08E881C80CF6EA02ADFE490E1C0FC4656950894BE771D3945B27356D23EEAA2F7CF8708EC3E1B6CA003E2DFA698EFA3962C9B964B6F713956869312EA3E8961D171DF8056748BEE16A0657C4EA7DC88E758B4BA739B4A0D4463E036FCD3E37678AA90663C0BA7217EC4A0250C4271102720E39CA15FC57163C77AF7F664E286E8C870704C18C2CD8C78A3A044FFEA1443225F6D4F7936B2283F49391B9C388124F00E8EF1921DF79F82D73BA01CB93A74BEEEF7B78BBD63609EA4984DC83408431CB003375D78FA35B81D3B86A0FDD0EED8459638A532BA3DC997BAEEF84DE35870E295A21CFEA0CC16237E1722A075D12D37B0F34A1727BFE7FED59A2B8DFD1E714CD2C02A7167FF7761C617A224A0D9428BCF5F3B7CDE991A9384050E5276EABE10DBD65D523E0A2FA86F2EB4BECBA08D47C464EC36620EF6E4D4CFA7FFF1AE0E3C00C76FB8C65BA9B08630ED9BF317A0213D52A930A98DFEC0E9BF1146E52C2B7CF73B6A8CFD0B88FF3C01D200CE5FCBA051D40708A607A7A92B4F60587846B0A3B68DD33AE2FF36E679C0277B49B30B94A03FCABB0E3A78A9C96A0CF930CC8B646B3CA21ACC4B792D84B960C24CE51E03B780",
"0400": "A0B81830DB9C30581D43AE8FDEAF3FFB0ED3D6561ADFDCDCA95E023E5A728B7A7E",
"F33E4D2BB3635111E6980548F53D203700D073A02DB74B89824DB7E16A387F67": "F90211A0C6187C1E2FD460BF65E67C317BDB862AADBBBB4E93FBE07B3AA86666412EC097A0101E462D444C13AFCC21DF02B96970A0CC7DDCF899B4013F97C4A58E208AD997A0564F8F273F275E4497E3153D5ADB3F605F081851CB9D77FF1FF08E881C80CF6EA02ADFE490E1C0FC4656950894BE771D3945B27356D23EEAA2F7CF8708EC3E1B6CA003E2DFA698EFA3962C9B964B6F713956869312EA3E8961D171DF8056748BEE16A0657C4EA7DC88E758B4BA739B4A0D4463E036FCD3E37678AA90663C0BA7217EC4A0250C4271102720E39CA15FC57163C77AF7F664E286E8C870704C18C2CD8C78A3A044FFEA1443225F6D4F7936B2283F49391B9C388124F00E8EF1921DF79F82D73BA01CB93A74BEEEF7B78BBD63609EA4984DC83408431CB003375D78FA35B81D3B86A0FDD0EED8459638A532BA3DC997BAEEF84DE35870E295A21CFEA0CC16237E1722A0F083F0C01B828CBBEB69274599F052C7DE908BC061B20594DB902486182EB676A0D9428BCF5F3B7CDE991A9384050E5276EABE10DBD65D523E0A2FA86F2EB4BECBA08D47C464EC36620EF6E4D4CFA7FFF1AE0E3C00C76FB8C65BA9B08630ED9BF317A0213D52A930A98DFEC0E9BF1146E52C2B7CF73B6A8CFD0B88FF3C01D200CE5FCBA051D40708A607A7A92B4F60587846B0A3B68DD33AE2FF36E679C0277B49B30B94A03FCABB0E3A78A9C96A0CF930CC8B646B3CA21ACC4B792D84B960C24CE51E03B780",
"0050D5D6841D7D018C1592169E138CCE7A57493A854DBBD66EBD72600E5F93CAE1": "F90215A0C206FA57C2ECD146FE3DCF73E32889604CD7010894120E76A97B9EEE4E583480A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D49347942A65ACA4D5FC5B5C859090A6C34D164135398226A0718543464C29BF347B5509DED6B9CC838B4EBAD49EBC827DF963A54304364B87A056E81F171BCC55A6FF8345E692C0F86E5B48E01B996CADC001622FB5E363B421A056E81F171BCC55A6FF8345E692C0F86E5B48E01B996CADC001622FB5E363B421B9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000861F92213303858316B3338347E7C480845730F24698D783010305844765746887676F312E352E31856C696E7578A0A073B44572494D6B45218E1164B08A1964DBD3479920C75B6C1FC605157B33508874F7E01DFD7CCBC1",
"FC4720773A1FDB5269962A656E2DF46DF3BAC7DC46E5AB2D6E31F43A79338990": "F90211A033547245A1A26778DBD22AAC3926DB781CB2ADE12C7FE19E39F6DFDDFD01368FA049CF9038D44250337A2E3FB9DA3388C8B9811B2FE97DE6C46F7B9660018CFF17A032383D8E5E7606381D01206AAD48D1DC79707D4A92708EE7CF0F402CCADE7376A0AFA93AE3D07A9CB383905F9C949D61420C8DF20B021B8E5E52120D04FF030B09A0C203955FF48B9F6CE194B35A2BCFCE4624AA44C4E7D158C4F8140A5B4A1926C1A0A1689DBCC2F7AE4AB57806FBBCE1FBACADBC4AF0077A10265A75FA765DF3C08AA0E2539B556634D5B5733DBA07371770B8A2823BE410954DDB31B437393DC9A276A0E0AE0E18C2745B5D72EDCA636E1A3E4AF8DBA4152B9B003282F7992BB0DF3E75A07564D9A2FC696B1E3B97CE080AE7171067CAD3C79C1C338D92B13298C9A068E5A0D579A8058E3BC9DBEB5FF36EF669113A08DDF4CF7F8885AD12462802E2F82BCFA02A61F32D59A6542312CEF51F739966C9BB0BEB90402D51F543CA13735FB413DEA03AF1D2CD7F0A91DDDEC95257FB851A722711C65FC1792673EF3EC0D2505607E6A01207F3D5CC895290A23F88B1AF54062B7B4F4FF101B7A28B9973185F33EB1891A00A8F6428DC062DB618885D540FE2B5FC7E6C6CDE7F99B51BF791294E2315FC55A0691002CEDAD9C57C66983903F7ECDE9BE273B8163FD1086F3F832E934CC339EBA0CE560915F429ED40764F409C6D2642E329416D95FCFA4F66DAAD699CD58AC12A80",
"0134B3160000000000000000000000000000000000000000000000000000000000": "A0B81830DB9C30581D43AE8FDEAF3FFB0ED3D6561ADFDCDCA95E023E5A728B7A7E",
"F083F0C01B828CBBEB69274599F052C7DE908BC061B20594DB902486182EB676": "F90211A0EBC1EF46BFC9EE4E8ACE5869904646C831B45AD925721D156C0BC609635F73CDA075E3C6D78A0B4BF9B821913B01D97EECD54703A19FEF5BF2FD6FA3101A434EE2A05BF3A8023A69F8D8E0D0002B8EA622E0B8E2A9AA663AEDF30BF15400E7B40004A0586D24C234FA79374B723CB79AE8E42B74EB8C9A8773FB353F5F253FAB655605A0C67F2A79085DBF5288D723EE06DC17E260ABBBC405FC03242E059AB90915FD98A0FC4720773A1FDB5269962A656E2DF46DF3BAC7DC46E5AB2D6E31F43A79338990A074BE3CECDFCE9F8744B23D70AD09377F6CA3BCD2EA23D788287F1896343E7E37A09C95D31960F20376C0834DDF0F9F823CA22517DB3BCE6F9B74BA7AE97EFE1B05A03B85B745C3441DCBAAD284B2675D9304BFE08FCFAA3E6D0C3079479C986D9F13A0C54E9EF2F71F89A2111DCD19512F629FE24121279CCB3DCC043323A1395C15DCA03F3DE22333F41D2732F628A6D14E6A79209912DE09832060F28C8C474DD37AC4A09ED66069E8B38164252CFEBFFBE0EEA8BAE5F7A03F96BBA009BF8E40F724D6C6A046671059FC121BECFF050E7FF6FBCB8C7C2E83FD8F2FADA3F8C787DFD628AF10A05385B768E50CE8C52F91DEF43E544D322E9CFCB5ECAC3E119D390DCAC055E73FA083A132A6E88A8042AB80677F60888FA46D341DC64363BEB85CED39B858998EB0A0657D10A144B8FE887E4F23649C88F276423EA434413170286759525F3173328080",
"6F97031DCFFA68F7789C0CCE464ADEDFF38643F908E7527C03AF36850ACA6E62": "F8739E31E5EC60B778F0AB0882E02A40F1366589A279960ECD4D7E798D67768FE6B852F8508301043F89122DF62BDFE96CF793A056E81F171BCC55A6FF8345E692C0F86E5B48E01B996CADC001622FB5E363B421A0C5D2460186F7233C927E7DB2DCC703C0E500B653CA82273B7BFAD8045D85A470",
"B7883D790196A65E206684416446EEE6F2BB7A86BD2DFC26039163E72DCBCD8E": "F90211A033547245A1A26778DBD22AAC3926DB781CB2ADE12C7FE19E39F6DFDDFD01368FA049CF9038D44250337A2E3FB9DA3388C8B9811B2FE97DE6C46F7B9660018CFF17A032383D8E5E7606381D01206AAD48D1DC79707D4A92708EE7CF0F402CCADE7376A0AFA93AE3D07A9CB383905F9C949D61420C8DF20B021B8E5E52120D04FF030B09A0056EB4A3A8832F2915217820BA558D8BB09547F138AA6D8DED2364A044BB3FA9A0A1689DBCC2F7AE4AB57806FBBCE1FBACADBC4AF0077A10265A75FA765DF3C08AA0E2539B556634D5B5733DBA07371770B8A2823BE410954DDB31B437393DC9A276A0E0AE0E18C2745B5D72EDCA636E1A3E4AF8DBA4152B9B003282F7992BB0DF3E75A07564D9A2FC696B1E3B97CE080AE7171067CAD3C79C1C338D92B13298C9A068E5A0D579A8058E3BC9DBEB5FF36EF669113A08DDF4CF7F8885AD12462802E2F82BCFA02A61F32D59A6542312CEF51F739966C9BB0BEB90402D51F543CA13735FB413DEA03AF1D2CD7F0A91DDDEC95257FB851A722711C65FC1792673EF3EC0D2505607E6A01207F3D5CC895290A23F88B1AF54062B7B4F4FF101B7A28B9973185F33EB1891A00A8F6428DC062DB618885D540FE2B5FC7E6C6CDE7F99B51BF791294E2315FC55A0691002CEDAD9C57C66983903F7ECDE9BE273B8163FD1086F3F832E934CC339EBA0CE560915F429ED40764F409C6D2642E329416D95FCFA4F66DAAD699CD58AC12A80",
"0133B3160000000000000000000000000000000000000000000000000000000000": "A050D5D6841D7D018C1592169E138CCE7A57493A854DBBD66EBD72600E5F93CAE1",
"56E81F171BCC55A6FF8345E692C0F86E5B48E01B996CADC001622FB5E363B421": "80",
"0250D5D6841D7D018C1592169E138CCE7A57493A854DBBD66EBD72600E5F93CAE1": "890100000C2907C56AF9",
"C203955FF48B9F6CE194B35A2BCFCE4624AA44C4E7D158C4F8140A5B4A1926C1": "F8D1A0E21472ACA2E63035A88E813311C85014A39547B099DAB8E0F634BC4FFA08819C8080A01A4E1F946F4867885385FE7F7200BB5D41426B6E52AF4AC1E1299F0D65059F908080A0762320217942EF12BF2F87EC7B6E1496F4DB214C9DA110AF53BE11E8D9054A9380A0399A79CF8814B947282F10975DAE1C1F50A2CE884C64DFB2E8837F8C25F6F44780A06F97031DCFFA68F7789C0CCE464ADEDFF38643F908E7527C03AF36850ACA6E6280A0DA5BF319FA92423C0DA764078EC3AD8DD3617F4A28E2604B660E47B6F3F50F8F80808080",
"02B81830DB9C30581D43AE8FDEAF3FFB0ED3D6561ADFDCDCA95E023E5A728B7A7E": "890100002BBF1B3CA4DE",
"718543464C29BF347B5509DED6B9CC838B4EBAD49EBC827DF963A54304364B87": "F90211A0B8F8413DC8952D9007BD4EC08D62D18F81769EAE9969C1F50A4DD0ADCB805126A091CD59A9AA606606E77B064C5BBD7033877F5F6CF1BBD6087FC74245A7075E72A0FA4C743C56BD54E7E687EB2D59D70399B4BE9D9D0C0C3441CD51D8822D1A471DA0F33E4D2BB3635111E6980548F53D203700D073A02DB74B89824DB7E16A387F67A022B4D6E6ACD0991549E07F4FC18FA25A2698983AF559831E457048835184B14AA03815A74A394EF348E0DFD3549D38D6BCC79B2EBBFAF3FFB8A5B7F38D56AA008FA06B65123E27D57642AD7645BF4AB3454C13E5223A349F8A7D0B2E5E762B4716DAA0C7991D7E6CAE56EFB4DB86B01C1D7B8B381C6EBD0869D616EB4C958B6E94A6EBA05AFF232F0112252E48DD0A56A8AA5544E981DA114D72FD113750641AC15BF5C0A0FF15B8DE465084C443520083899B431123200F2BFDE505249C5D1D8D3C369CD3A0CAFCACF44CC10C06439D3B27A7B53A0244A51098C41967DCD0D01355BB9E5F93A0458A67A82CB1496EEF0C4B7AB84212F0067449DAA5858C140C740736763CC1CFA0ECC1D2FFDB070E6F4277D786465AEFC7712A783492B73281A10038235B183DC1A041AE4159B4DA326E0EEA6CCD0B81CA0A65A4699C0F73231076CB006E724E9779A048908DA12FF6D917E4B069C9C7631185AF37D73654A49B78F9064D12427B372EA0E0970865427C3166176CA81F3F1CEA52EE633BD49BB88249EE275EE5A72235C780",
"75D12D37B0F34A1727BFE7FED59A2B8DFD1E714CD2C02A7167FF7761C617A224": "F90211A0EBC1EF46BFC9EE4E8ACE5869904646C831B45AD925721D156C0BC609635F73CDA075E3C6D78A0B4BF9B821913B01D97EECD54703A19FEF5BF2FD6FA3101A434EE2A05BF3A8023A69F8D8E0D0002B8EA622E0B8E2A9AA663AEDF30BF15400E7B40004A0586D24C234FA79374B723CB79AE8E42B74EB8C9A8773FB353F5F253FAB655605A0C67F2A79085DBF5288D723EE06DC17E260ABBBC405FC03242E059AB90915FD98A0B7883D790196A65E206684416446EEE6F2BB7A86BD2DFC26039163E72DCBCD8EA074BE3CECDFCE9F8744B23D70AD09377F6CA3BCD2EA23D788287F1896343E7E37A09C95D31960F20376C0834DDF0F9F823CA22517DB3BCE6F9B74BA7AE97EFE1B05A03B85B745C3441DCBAAD284B2675D9304BFE08FCFAA3E6D0C3079479C986D9F13A0C54E9EF2F71F89A2111DCD19512F629FE24121279CCB3DCC043323A1395C15DCA03F3DE22333F41D2732F628A6D14E6A79209912DE09832060F28C8C474DD37AC4A09ED66069E8B38164252CFEBFFBE0EEA8BAE5F7A03F96BBA009BF8E40F724D6C6A046671059FC121BECFF050E7FF6FBCB8C7C2E83FD8F2FADA3F8C787DFD628AF10A05385B768E50CE8C52F91DEF43E544D322E9CFCB5ECAC3E119D390DCAC055E73FA083A132A6E88A8042AB80677F60888FA46D341DC64363BEB85CED39B858998EB0A0657D10A144B8FE887E4F23649C88F276423EA434413170286759525F3173328080",
"056EB4A3A8832F2915217820BA558D8BB09547F138AA6D8DED2364A044BB3FA9": "F8D1A0E21472ACA2E63035A88E813311C85014A39547B099DAB8E0F634BC4FFA08819C8080A01A4E1F946F4867885385FE7F7200BB5D41426B6E52AF4AC1E1299F0D65059F908080A0762320217942EF12BF2F87EC7B6E1496F4DB214C9DA110AF53BE11E8D9054A9380A0399A79CF8814B947282F10975DAE1C1F50A2CE884C64DFB2E8837F8C25F6F44780A00995B973E8DBA0EE691DE1FCFA07EABF1249655289F5A5127065D7B5F65DC04B80A0DA5BF319FA92423C0DA764078EC3AD8DD3617F4A28E2604B660E47B6F3F50F8F80808080",
"B25AC14211166ABDC6B425AE6E89859FC774B8F6688FD790347B18391673258B": "F90211A0B8F8413DC8952D9007BD4EC08D62D18F81769EAE9969C1F50A4DD0ADCB805126A091CD59A9AA606606E77B064C5BBD7033877F5F6CF1BBD6087FC74245A7075E72A0FA4C743C56BD54E7E687EB2D59D70399B4BE9D9D0C0C3441CD51D8822D1A471DA0F4E396375AC8DD79AE15C07D0630CFA1E8D73D8B1611542B3F026AAED7B2F52DA022B4D6E6ACD0991549E07F4FC18FA25A2698983AF559831E457048835184B14AA03815A74A394EF348E0DFD3549D38D6BCC79B2EBBFAF3FFB8A5B7F38D56AA008FA06B65123E27D57642AD7645BF4AB3454C13E5223A349F8A7D0B2E5E762B4716DAA0C7991D7E6CAE56EFB4DB86B01C1D7B8B381C6EBD0869D616EB4C958B6E94A6EBA05AFF232F0112252E48DD0A56A8AA5544E981DA114D72FD113750641AC15BF5C0A0FF15B8DE465084C443520083899B431123200F2BFDE505249C5D1D8D3C369CD3A0CAFCACF44CC10C06439D3B27A7B53A0244A51098C41967DCD0D01355BB9E5F93A0458A67A82CB1496EEF0C4B7AB84212F0067449DAA5858C140C740736763CC1CFA0ECC1D2FFDB070E6F4277D786465AEFC7712A783492B73281A10038235B183DC1A041AE4159B4DA326E0EEA6CCD0B81CA0A65A4699C0F73231076CB006E724E9779A048908DA12FF6D917E4B069C9C7631185AF37D73654A49B78F9064D12427B372EA0E0970865427C3166176CA81F3F1CEA52EE633BD49BB88249EE275EE5A72235C780",
"00B81830DB9C30581D43AE8FDEAF3FFB0ED3D6561ADFDCDCA95E023E5A728B7A7E": "F90215A050D5D6841D7D018C1592169E138CCE7A57493A854DBBD66EBD72600E5F93CAE1A01DCC4DE8DEC75D7AAB85B567B6CCD41AD312451B948A7413F0A142FD40D4934794151255DD9E38E44DB38EA06EC66D0D113D6CBE37A0B25AC14211166ABDC6B425AE6E89859FC774B8F6688FD790347B18391673258BA056E81F171BCC55A6FF8345E692C0F86E5B48E01B996CADC001622FB5E363B421A056E81F171BCC55A6FF8345E692C0F86E5B48E01B996CADC001622FB5E363B421B9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000861F96137739E58316B3348347E7C480845730F24898D783010306844765746887676F312E352E31856C696E7578A0C46606370F7E0DAAA40F1C117A6624EE58B6C6E8D1B087B6A3847703797C8F8E880A2FDCCF8919377C",
"0995B973E8DBA0EE691DE1FCFA07EABF1249655289F5A5127065D7B5F65DC04B": "F8739E31E5EC60B778F0AB0882E02A40F1366589A279960ECD4D7E798D67768FE6B852F8508301043F89127359BD622E60F793A056E81F171BCC55A6FF8345E692C0F86E5B48E01B996CADC001622FB5E363B421A0C5D2460186F7233C927E7DB2DCC703C0E500B653CA82273B7BFAD8045D85A470"
}
}

View File

@ -89,6 +89,8 @@ proc main() =
chainDB.dumpTest(1317742) # CREATE childmsg sender
chainDB.dumpTest(1368834) # writepadded regression padding len
chainDB.dumpTest(1417555) # writepadded regression zero len
chainDB.dumpTest(1_431_916) # deep recursion stack overflow problem
chainDB.dumpTest(1_487_668) # getScore uint64 vs uint256 overflow
when isMainModule:
var message: string