From 4b45523cd8193258042897bcc2ae0beac355f9f7 Mon Sep 17 00:00:00 2001 From: bufrr Date: Tue, 31 Jan 2023 10:38:32 +0800 Subject: [PATCH] add block pkg unittest --- Makefile | 2 +- block/block_test.go | 87 ++++++++++++++++++++++++++++++++++++++++++++ block/header_test.go | 56 ++++++++++++++++++++++++++++ 3 files changed, 144 insertions(+), 1 deletion(-) create mode 100644 block/block_test.go create mode 100644 block/header_test.go diff --git a/Makefile b/Makefile index 12051b23f..fcdcd8b41 100644 --- a/Makefile +++ b/Makefile @@ -97,7 +97,7 @@ pb: .PHONY: test test: - go test -v ./chain/store + go test -v ./... .PHONY: docker docker: diff --git a/block/block_test.go b/block/block_test.go new file mode 100644 index 000000000..8ef3e166b --- /dev/null +++ b/block/block_test.go @@ -0,0 +1,87 @@ +package block + +import ( + "bytes" + "encoding/hex" + "fmt" + "github.com/nknorg/nkn/v2/common" + "reflect" + "testing" +) + +var rawBlock = "0aa3030ade0208011220da29b937682f9f84d0254d38002ee4a95abf587d4bec65d97db5a6612ad9328c1a20bb46b8e72e98a888d39c43bbc68fb79c2cc26bc83f6cf11ace1fe0e0380fc7cf2220e23f927c7258afc5619f2efbbfda1ba5571232f9c11008501d39c000bd1ec0b728dbb6dd9e0630b680b0023a8001e2a3f566880d7f8ab3a77248835f4fe04cff1f5471a61b585f199d949c790f390ba1923b4ad570232bec4f4ec866b86905738e6473137f1baf4ef21a4b7e1c02ff4a7376a497d786cf47a370523ba6bade4583bb9f45c5beec543a50f236cd09c0702c4419f8e4083f560205e06682d2b1052345e6b71ea56eb7bc6e1ac2e56b42201499620fadd18125056760f5498a481fffae45c2431857f8a127a685954edb144801522088811c3a1ebf787355a08d2ebcba6fd86ef2a19233350bc2fb9c13ac39fddbf85a20e14812772c280e2c4f4b17505aa13a3724c170f976e530a77f5e99d0d1de54a01240af62957879d75a765b96f495fdb7dcb74f4c8d13104ba58c34339ff25f1a8ac2297a5ba9d272f3c6c20ffd1a08eeef7d6265f8a8ff15f636bb5df3fab82d8f01125f0a5d0a3412320a14fd53fc1110ecbb94217ae51528912b0dfd9d995512141d55fed285236efb8d0bf78d237ed4a324f6df8218c99db69e0410b680b00222205df7d9c0990dd6b663a7911ab6b3e49f34bc22243514c2cd463ee5f98893075b12bb210acf200aaa20080212a5200a8c2008c39a89970f10511a2017a3dd86f8da746a9c61c7584a79a5ddc8e3c0e44f9ad9a3b6b53bf6d1e8ccce222098404a5f57fd85e0207209d919dfbaab333e75711840cdc6d9a71fe8f7a513212a2049f72e2f659b7dff001459763ddb987955fc8ae74ecf7c197b9633d1aba90c883220581966f494cd8d704e653413a0ac67dc3f138182a26ddd1ab6e1b22554b20b5c3a2049f72e2f659b7dff001459763ddb987955fc8ae74ecf7c197b9633d1aba90c884264122087df700191ae271f14eb1952766f2a58aef84f5c83eabae914afaa95ce1cc9232240a809b0737c148fae40095d95b734c90a00a97d1c0fd8efd6f3514b486fda10602420e9aa741e92eca1df00c5720c251bf9cfdcdcffa54bf24b778c8b36b8070f428c020a20984016992babe3bd8c88bbaacc35fe66a85e7f78acde0c9f0b0827141833d203122099716c667f98170d9a7da4f0c345af54d3644bfa6975a69b02143031e1bbbad318012240234ff88816c6f4187f1f4069839fb684f7cfbcccb8ca729df62fe715ab5d226d1121836ea32a0d7b145480d0b16f62a0cd71892cdc2c5d3c5d0e5ed3b250ea0e3220057f99df692bdbff37dc2673aef4a58b2e3097a4366afcc7b7bdd4297ca7ccbd3a60163144f999c37ba9547988b7294b6526cfa1fc4dc41b61622f6fdf4e6a2ada0f58142e564da2dfbaaacb48dd297295b4d47600947a2f2621bfb1fe7fc228c5088ac09a5a9839846f735fab631114649735904767661254624925aa8ee25bff73428c020a2018486e1acf93b07627ab3251096651061a2a3a2d47602bc1f22a17ad0989e7c212201c413e013fb542d8f2366a91a9404d905fa44b96efbc3a57b9b34eeb96a22c8518012240e10538c83885a60947219e439a44020ab251c35ca43cf6f44e56a42e7a194fddb7aab4b85fbda5ac299af2c14eb26e1a15f66983a2abb45398362fde7c6d0d05322046260c1caf455c5e18cd36e6d67a52956c706fe2836532dfc089287694de4b663a60fffbe04f363bdb0c521dceb09342ccf7eac5ac25be101782e91b80106641fe085fc61e2e0b17a68cc0e3d683b284d0958791df4d1156f47c2b06f1c00eb0a7053dd3a041e91161939db7c94a1b4903ccd784c767f3b0b82375812e9656448fc8428c020a20384ab756c72814f163eb6af4ac49730ab12afebf51423ec09a3ba28db3dce1491220af42ade1ad804f856187d0bc889dfdc2511bc5113e58a17270a63d8916eb8b1a18012240423d0b8ff3aaa12e3012b6a7a5bf94202f5b19bfaf26a3a758ac01307277488f101b65e12f2d041ae844d21d0069585f8f1000ef61271d58016c0aff0729e407322053704d6a39514526a3f602a1584d3377317ed2c9fa50a8cb4fa09bcfaef0e9eb3a60762eee07e08778c4fd7fbdd42cb37264eb4dc1e1aa44bd6705ba11cc223d880f82636cd54654233a9de0db65b898e520843aa9800de354bbb7055edf12f95507266211259438eb23962aec3365b6f3a16b87c43c3d2df6df4649d895524bc99b428c020a20484aeaa337538203fe4e89fa422a2fbbd7c4296e60869b8f6f9d4c8b8decbbdb1220f9e49481879098ec7b3a1808ceb0a50b1fc9a00d25fc8fc3b191e36c0c54d9cd18012240d3f3e57840421705cab05b9ea8ebd60aab2017bfdeed06cfa5b2b0de515741763b3aa78668e2809931ae2835f7094879a44c1f422a2044b55af9b1ab58e815093220e0aa4f0848d2681e2ea9d7b3597bf870f9324b00c26078cd5c2251bb60e2a4223a601495ef6f1d85cfde2d36dd721b72fc41fb6dd8398d5f17e0ea2e7350d0674b02b57448a759ce4565b5794a6c9715a7de37d5ef79822dfa1773247d966a323d0bc80fefc8497d94a611fcca1db8f55a5436afde86bfa2122d3628ceb89154ede7428c020a20504d2c1014a9253fdb0f08f922442933d48f56c9dbada9095f25827fd62f50141220e2aa18da918fbe0455993d0ea4fc046cb5f18566a4770104ed242378da5840bb18012240d59fb4ecad41fa4f7e20c60de2bdc86b755ca200910cefebb3c189fb68f5bde90d3722e0ce0b25829ddd544c103e8e8dcbb91dc5c11b3eabb7c22199928ee70232205d18986742ddcb720bb515cedf71dcdd9fed217c08ed90573187ac5f8f909c7d3a606699cfbfa1e5e0d9727234990b3d6cc29272dd8781fcf83dab6e52ed62e9c00037bcb5721e485a372ef63ba030afb74f2ddb03877f03f45c5ae01b9cc76984015da40ef124f60ec155a3039f6d72b56794dd8e13a6499872d796dd02fe3d18f1428c020a20545156c11a053d85bca71834a8aec4f26ca23c1a5dd3998ab129cb5a553973731220043240fe5885b7b8dce494322f2ada65b51344cc8f69a3ad9ed7ea5cbfa1ac121801224010383852796f7fa0c3be61af789ff847904e7ee6588b063f8d9a16157b909525d923e48a44957dcbdfc41da8b71185d51be9c658f598704913099cee40851b0032205ab566d7e025cd61465643e78eaef74bee650c7c0876b61202894605addcad4b3a60581b558cecf526cb00446dcc9c870e5913cc553d642d6ed7c865574821739f0edc49c03fd332733c32e2d3dd08e2a7cb8449c17b681a08de28c9125a5218170738e7c5fe8f7bad1acdf66694df63feda2525d287f320b94b288524a691b38a35428c020a205653cfc565b2ca76518767e2320c497fd366f29c5f957ee00b922278b0a4c02912208a3ad5f115bff4b3aac47347e723e00f946cb235ff990ebc25aa6c28da8b225e1801224033b46c12fe2989247affcdf8e4cf83d11ec25c9d44b1dc4d6cfc8124976115765bc11cfcd66f717729651930c4c789434bb3330e72c99b29f42a6b69c8359d06322094ed0b3ea05ce49959cc308e05015eb62b556186ef3dae1a8a9e05aa45955ab63a6066b91812a36c6c8d71725f482c24998c06984dcf7cb9f66c1ea7c18f97f6d90dc64993da275d01ba653e0fd25c6b16443dca6600092d3c08fca4f15c7ba7d606bf81f8cb048cfbad7feab903e9fd888f357121276367e725fb340eb05e1d2841428c020a205757033f51369e9128b9f1891a91200ae6e03eed97d5c9258304c3083a58ab08122047d1a868a6494be208f0be32ef8d4dd919dde7f62d6eb85e5bf39296076e2d7718012240316ea8cbc477281f90d9999eaa7bc1079694f3779e1f91fd35293e0d86096f7158164e3829265568f6da6f0cf0db2a72d9bfbe6ac2c34802eb0053f50ab5c40b3220b9aa8ad4eee22c2cc37c90b5c7eb9a53f9f6e45050ad5d09361b512b23aa931d3a60977f14b88a7d83da19e9cd797385a695490870c6fcd3540396f126fa371e3b087bbbe3f3483f0dbd607b033b627949de79b368b64032d53096bf3f1254799c04bf695c6e0e880841d1b68b875fae1bd61c0978b00d373b0c88c794e0c0ffa363428c020a2057db4211da41de4d8ea22e0979332e310ba36a05819bc547032a4df886ebb8b01220d28a10c73a4de5c51bddb088b7bba21c7787d54f59d15a67c85f790047ac9bc9180122401cdea7d8107c0e8ec6f643c9d1b908360cd222c1b73365fb353c8ead84f2e156eeb2aadb9431474bda81a10b78e43f236259146fcf8e76e8bdf32ac836994f0c32201d064bc946a8203c9dcb37bc4ce8de2ea397f76343d5e5d1dd9630e0df120ae83a606908c0aaebb03299b3b37cb8b4b23e38255e7d68450202b9d75454c413743d0cdba3bd3549b89b7ed4eda6b03491276f734c09f26a809dad001cd5755b50cd0f21b0dcbb4dedb44c5eed6cd05bf70f737a11c25358e5a2325d8f268e9820b731428c020a2057fd3ee0c832e0035429f7e8fbc5144bb3b3145d3548a2a2b587499cf2870df912204b9f1ce8a5a88cb0041e3b3899de43db970308e4a6c1b4e1def0de1b43a79992180122408143d5141d960a0a51ee5da2e96fbb93cd57e4e3732d6017975b44026a94aa9c4b6ebf183acda3acda15f9ad3d2649017cede9e909cb5deaf19ce70f68c79b0032201f6568abf709630cf2d0ce2d125fb508e3f56aee65158392bc59637411c204c43a60e9cb7f2ff1e2debd4ebfebb2c52daf79ac29ad0eed09c7fe205141ba275f12031ab6d0dfc42eec0a6e03112d50e786bfcf32d522641fe0e8628f5fb6e6bc810fd5ef0eb5cb97e3adefb834c3bc77d8570b86c9357d71bc825bc45a476fb54fed428c020a20580e1df3e36634b9729d59c43b7df674e55b00bc86b62fc516ba8b8f7721a5f9122092a10579ad5ca2d4a834781c30db12944fb15bcfba9e36a2b8a700e86bad2bc218012240b8ccba147c213ec9aa0e8fd5c1247fbff0ccc279200877c2aa3572c4b696480e4f5abdd4370e7ee548e7e1780675602c52d86925fb534c0a69d7d243202ea5053220d031a58047a2a7fef7b5e3e838d38cf3071f9a73100a10d6ae83429411a6bb253a605dd4d36e4a096fdeafee58569d4086f6812a21b678c521c1e13cfc017d240108b85dabc6420002f478c64b66a63b131a160a33b14de56c08dd814a9408bfcd08586d0c8811b2a703f511e96db0f5a880a2b3283987eb1ce4a8fd00b26809aade428c020a2058173824fbc40052071deca65a0b048cdbf188e04b89ae0a79b41df5ca9398191220eb0a098179ec764e40ca0505ef2b0ab92f38e5d0879dd0cf7b2acfa2e995ccdf180122403736a3ddc39dafb5013625e122e74a28ae11664d591b2e3525a581230636ca379e4ccdf60cf0e23454a00fe4fb0fd63b5537cb7225653ff97c410dbf522cbf013220b83259667a631659e18bc6bbb7b7d0570591cb8f2d01e009158669b1751e62de3a608efe316890353c3d9765ee4c6993bd318e3bc9fe09d1096fd13397fe029a0e035282caeb6432b3a1024ef39e412519198e5a3bc9367ae09350efbc669a2cdc0d35bc23946b25a25bb1feee1ce8b575c5069e28211d98612173dd79d1c978acf9428c020a2058187880027607455b4f1a544412976d9f6e85ec4b0a7497034e4a6c322bbd151220c90aa4ae797b41ec9f2fdb90a692781bf50ab0865a4504783cd2d88041e624d618012240133355e625ba29733bab1b0a0cc3434710cdb857c257e2c5576243cebbca9abd286c517b992ed81ce867fbaac49597c262dd397fe5a5d882911e7434103c36093220b49105b46027b4784a347bd1c64c94a5d0298e33d85ac72849b44c917b3cff443a60ba33db41843abdd474b6d2eadadaa6461c75b632768da0a13dd8e744b34b170d8636b4351e65337e34052005dd810a47570b0514726c28417232395fe365040a286838d9822b86371f4550fe95e1a2713a34813cfc28085620ed9adc027cc06d42ea010a2058187ebd8fd8b45a7bf441a1d38fa4a943ace7e286ec010a9150c28c7e312c0b1801224044ee3407a120591f2d0609ab5acd6ac6be8ad372580807a13606d5ddaca4cfb8b6cc7c207b4253ab0c5ef04a7fa630d712b1a48322ae3e0ff328586d2158980e3220e4ddf5075143fad9193ffadeba672ea058e1e468e7ba69a76d2e4cb183c312c83a6053afe5782e9494d11c9d01104e1c2228125a92148a155aacc4856285833ffd0d5290717d618e1ebb41bcabe8cf1661b6d31ae07118a18177d31453d252906a0dfef316af7440e72682d8adcd1ec96217a39fb7768bf2e96cf50540a2171840d7424222407623a5fbaafa55a8e7926c0cff68c6f52e742af89f235060d50a20338f4189572183a1043c25145aff0e348ec6831e1b731ac7efb68f8f7833a6f31bfb60a7021214bde67f454f174d2fd8681cbf1ccc512de4bc284522202dcf96cd142f5c2ff237e9395378e0964f765655c727537b7344e65ef5f9234312670a222087df700191ae271f14eb1952766f2a58aef84f5c83eabae914afaa95ce1cc923ac124140bd355daa9a5b18a10de11c9898d3b6fc3dd65a47d993b69c62c00cfabbc2492a13dc3a6b922a884de6c86881ebcebeaf8559acf38e7003219a6c44775225da0f" + +func TestBlockMsgEncoding(t *testing.T) { + check := func(f string, got, want interface{}) { + if !reflect.DeepEqual(got, want) { + t.Errorf("%s mismatch: got %v, want %v", f, got, want) + } + } + + blockBytes, err := hex.DecodeString(rawBlock) + if err != nil { + t.Fatal("decode error:", err) + } + + b := new(Block) + err = b.Unmarshal(blockBytes) + if err != nil { + t.Fatal("unmarshal err:", err) + } + + bb, _ := b.Header.Marshal() + fmt.Println(hex.EncodeToString(bb)) + + check("PrevBlockHash", hex.EncodeToString(b.Header.UnsignedHeader.PrevBlockHash), "da29b937682f9f84d0254d38002ee4a95abf587d4bec65d97db5a6612ad9328c") + check("TransactionsRoot", hex.EncodeToString(b.Header.UnsignedHeader.TransactionsRoot), "bb46b8e72e98a888d39c43bbc68fb79c2cc26bc83f6cf11ace1fe0e0380fc7cf") + check("StateRoot", hex.EncodeToString(b.Header.UnsignedHeader.StateRoot), "e23f927c7258afc5619f2efbbfda1ba5571232f9c11008501d39c000bd1ec0b7") + check("TimeStamp", b.Header.UnsignedHeader.Timestamp, int64(1675058011)) + check("Height", b.Header.UnsignedHeader.Height, uint32(4980790)) + check("RandomBeacon", hex.EncodeToString(b.Header.UnsignedHeader.RandomBeacon), "e2a3f566880d7f8ab3a77248835f4fe04cff1f5471a61b585f199d949c790f390ba1923b4ad570232bec4f4ec866b86905738e6473137f1baf4ef21a4b7e1c02ff4a7376a497d786cf47a370523ba6bade4583bb9f45c5beec543a50f236cd09c0702c4419f8e4083f560205e06682d2b1052345e6b71ea56eb7bc6e1ac2e56b") + check("WinnerHash", hex.EncodeToString(b.Header.UnsignedHeader.WinnerHash), "1499620fadd18125056760f5498a481fffae45c2431857f8a127a685954edb14") + check("SignerPk", hex.EncodeToString(b.Header.UnsignedHeader.SignerPk), "88811c3a1ebf787355a08d2ebcba6fd86ef2a19233350bc2fb9c13ac39fddbf8") + check("SignerId", hex.EncodeToString(b.Header.UnsignedHeader.SignerId), "e14812772c280e2c4f4b17505aa13a3724c170f976e530a77f5e99d0d1de54a0") + check("Signature", hex.EncodeToString(b.Header.Signature), "af62957879d75a765b96f495fdb7dcb74f4c8d13104ba58c34339ff25f1a8ac2297a5ba9d272f3c6c20ffd1a08eeef7d6265f8a8ff15f636bb5df3fab82d8f01") + + check("GetTxsSize", b.GetTxsSize(), 4378) + check("GetMessage", hex.EncodeToString(b.GetMessage()), "0100000020da29b937682f9f84d0254d38002ee4a95abf587d4bec65d97db5a6612ad9328c20bb46b8e72e98a888d39c43bbc68fb79c2cc26bc83f6cf11ace1fe0e0380fc7cf20e23f927c7258afc5619f2efbbfda1ba5571232f9c11008501d39c000bd1ec0b75b5bd7630000000036004c00010000002088811c3a1ebf787355a08d2ebcba6fd86ef2a19233350bc2fb9c13ac39fddbf820e14812772c280e2c4f4b17505aa13a3724c170f976e530a77f5e99d0d1de54a0") + info, err := b.GetInfo() + if err != nil { + t.Fatal("get block info error:", err) + } + check("GetInfo", hex.EncodeToString(info), "7b22686561646572223a7b2268617368223a2239386332363764393836326435306532646133663764363233666330626663356532366565373837643237616662643339373436653539363134373936656361222c22686569676874223a343938303739302c2270726576426c6f636b48617368223a2264613239623933373638326639663834643032353464333830303265653461393561626635383764346265633635643937646235613636313261643933323863222c2272616e646f6d426561636f6e223a2265326133663536363838306437663861623361373732343838333566346665303463666631663534373161363162353835663139396439343963373930663339306261313932336234616435373032333262656334663465633836366238363930353733386536343733313337663162616634656632316134623765316330326666346137333736613439376437383663663437613337303532336261366261646534353833626239663435633562656563353433613530663233366364303963303730326334343139663865343038336635363032303565303636383264326231303532333435653662373165613536656237626336653161633265353662222c227369676e6174757265223a226166363239353738373964373561373635623936663439356664623764636237346634633864313331303462613538633334333339666632356631613861633232393761356261396432373266336336633230666664316130386565656637643632363566386138666631356636333662623564663366616238326438663031222c227369676e65724964223a2265313438313237373263323830653263346634623137353035616131336133373234633137306639373665353330613737663565393964306431646535346130222c227369676e6572506b223a2238383831316333613165626637383733353561303864326562636261366664383665663261313932333333353062633266623963313361633339666464626638222c227374617465526f6f74223a2265323366393237633732353861666335363139663265666262666461316261353537313233326639633131303038353031643339633030306264316563306237222c2274696d657374616d70223a313637353035383031312c227472616e73616374696f6e73526f6f74223a2262623436623865373265393861383838643339633433626263363866623739633263633236626338336636636631316163653166653065303338306663376366222c2276657273696f6e223a312c2277696e6e657248617368223a2231343939363230666164643138313235303536373630663534393861343831666666616534356332343331383537663861313237613638353935346564623134222c2277696e6e657254797065223a2254584e5f5349474e4552227d2c227472616e73616374696f6e73223a5b7b2261747472696275746573223a2235646637643963303939306464366236363361373931316162366233653439663334626332323234333531346332636434363365653566393838393330373562222c22666565223a302c2268617368223a2233326338303635376639303839373931376666346165613633313564373334323636623766323364636135383661393939653230636330343064636630336134222c226e6f6e6365223a343938303739302c227061796c6f616444617461223a2230613134666435336663313131306563626239343231376165353135323839313262306466643964393935353132313431643535666564323835323336656662386430626637386432333765643461333234663664663832313863393964623639653034222c2270726f6772616d73223a5b5d2c2273697a65223a39352c22747854797065223a22434f494e424153455f54595045227d2c7b2261747472696275746573223a2232646366393663643134326635633266663233376539333935333738653039363466373635363535633732373533376237333434653635656635663932333433222c22666565223a302c2268617368223a2231343939363230666164643138313235303536373630663534393861343831666666616534356332343331383537663861313237613638353935346564623134222c226e6f6e6365223a302c227061796c6f616444617461223a2230613863323030386333396138393937306631303531316132303137613364643836663864613734366139633631633735383461373961356464633865336330653434663961643961336236623533626636643165386363636532323230393834303461356635376664383565303230373230396439313964666261616233333365373537313138343063646336643961373166653866376135313332313261323034396637326532663635396237646666303031343539373633646462393837393535666338616537346563663763313937623936333364316162613930633838333232303538313936366634393463643864373034653635333431336130616336376463336631333831383261323664646431616236653162323235353462323062356333613230343966373265326636353962376466663030313435393736336464623938373935356663386165373465636637633139376239363333643161626139306338383432363431323230383764663730303139316165323731663134656231393532373636663261353861656638346635633833656162616539313461666161393563653163633932333232343061383039623037333763313438666165343030393564393562373334633930613030613937643163306664386566643666333531346234383666646131303630323432306539616137343165393265636131646630306335373230633235316266396366646364636666613534626632346237373863386233366238303730663432386330323061323039383430313639393262616265336264386338386262616163633335666536366138356537663738616364653063396630623038323731343138333364323033313232303939373136633636376639383137306439613764613466306333343561663534643336343462666136393735613639623032313433303331653162626261643331383031323234303233346666383838313663366634313837663166343036393833396662363834663763666263636362386361373239646636326665373135616235643232366431313231383336656133326130643762313435343830643062313666363261306364373138393263646332633564336335643065356564336232353065613065333232303035376639396466363932626462666633376463323637336165663461353862326533303937613433363661666363376237626464343239376361376363626433613630313633313434663939396333376261393534373938386237323934623635323663666131666334646334316236313632326636666466346536613261646130663538313432653536346461326466626161616362343864643239373239356234643437363030393437613266323632316266623166653766633232386335303838616330396135613938333938343666373335666162363331313134363439373335393034373637363631323534363234393235616138656532356266663733343238633032306132303138343836653161636639336230373632376162333235313039363635313036316132613361326434373630326263316632326131376164303938396537633231323230316334313365303133666235343264386632333636613931613934303464393035666134346239366566626333613537623962333465656239366132326338353138303132323430653130353338633833383835613630393437323139653433396134343032306162323531633335636134336366366634346535366134326537613139346664646237616162346238356662646135616332393961663263313465623236653161313566363639383361326162623435333938333632666465376336643064303533323230343632363063316361663435356335653138636433366536643637613532393536633730366665323833363533326466633038393238373639346465346236363361363066666662653034663336336264623063353231646365623039333432636366376561633561633235626531303137383265393162383031303636343166653038356663363165326530623137613638636330653364363833623238346430393538373931646634643131353666343763326230366631633030656230613730353364643361303431653931313631393339646237633934613162343930336363643738346337363766336230623832333735383132653936353634343866633834323863303230613230333834616237353663373238313466313633656236616634616334393733306162313261666562663531343233656330396133626132386462336463653134393132323061663432616465316164383034663835363138376430626338383964666463323531316263353131336535386131373237306136336438393136656238623161313830313232343034323364306238666633616161313265333031326236613761356266393432303266356231396266616632366133613735386163303133303732373734383866313031623635653132663264303431616538343464323164303036393538356638663130303065663631323731643538303136633061666630373239653430373332323035333730346436613339353134353236613366363032613135383464333337373331376564326339666135306138636234666130396263666165663065396562336136303736326565653037653038373738633466643766626464343263623337323634656234646331653161613434626436373035626131316363323233643838306638323633366364353436353432333361396465306462363562383938653532303834336161393830306465333534626262373035356564663132663935353037323636323131323539343338656232333936326165633333363562366633613136623837633433633364326466366466343634396438393535323462633939623432386330323061323034383461656161333337353338323033666534653839666134323261326662626437633432393665363038363962386636663964346338623864656362626462313232306639653439343831383739303938656337623361313830386365623061353062316663396130306432356663386663336231393165333663306335346439636431383031323234306433663365353738343034323137303563616230356239656138656264363061616232303137626664656564303663666135623262306465353135373431373633623361613738363638653238303939333161653238333566373039343837396134346331663432326132303434623535616639623161623538653831353039333232306530616134663038343864323638316532656139643762333539376266383730663933323462303063323630373863643563323235316262363065326134323233613630313439356566366631643835636664653264333664643732316237326663343166623664643833393864356631376530656132653733353064303637346230326235373434386137353963653435363562353739346136633937313561376465333764356566373938323264666131373733323437643936366133323364306263383066656663383439376439346136313166636361316462386635356135343336616664653836626661323132326433363238636562383931353465646537343238633032306132303530346432633130313461393235336664623066303866393232343432393333643438663536633964626164613930393566323538323766643632663530313431323230653261613138646139313866626530343535393933643065613466633034366362356631383536366134373730313034656432343233373864613538343062623138303132323430643539666234656361643431666134663765323063363064653262646338366237353563613230303931306365666562623363313839666236386635626465393064333732326530636530623235383239646464353434633130336538653864636262393164633563313162336561626237633232313939393238656537303233323230356431383938363734326464636237323062623531356365646637316463646439666564323137633038656439303537333138376163356638663930396337643361363036363939636662666131653565306439373237323334393930623364366363323932373264643837383166636638336461623665353265643632653963303030333762636235373231653438356133373265663633626130333061666237346632646462303338373766303366343563356165303162396363373639383430313564613430656631323466363065633135356133303339663664373262353637393464643865313361363439393837326437393664643032666533643138663134323863303230613230353435313536633131613035336438356263613731383334613861656334663236636132336331613564643339393861623132396362356135353339373337333132323030343332343066653538383562376238646365343934333232663261646136356235313334346363386636396133616439656437656135636266613161633132313830313232343031303338333835323739366637666130633362653631616637383966663834373930346537656536353838623036336638643961313631353762393039353235643932336534386134343935376463626466633431646138623731313835643531626539633635386635393837303439313330393963656534303835316230303332323035616235363664376530323563643631343635363433653738656165663734626565363530633763303837366236313230323839343630356164646361643462336136303538316235353863656366353236636230303434366463633963383730653539313363633535336436343264366564376338363535373438323137333966306564633439633033666433333237333363333265326433646430386532613763623834343963313762363831613038646532386339313235613532313831373037333865376335666538663762616431616364663636363934646636336665646132353235643238376633323062393462323838353234613639316233386133353432386330323061323035363533636663353635623263613736353138373637653233323063343937666433363666323963356639353765653030623932323237386230613463303239313232303861336164356631313562666634623361616334373334376537323365303066393436636232333566663939306562633235616136633238646138623232356531383031323234303333623436633132666532393839323437616666636466386534636638336431316563323563396434346231646334643663666338313234393736313135373635626331316366636436366637313737323936353139333063346337383934333462623333333065373263393962323966343261366236396338333539643036333232303934656430623365613035636534393935396363333038653035303135656236326235353631383665663364616531613861396530356161343539353561623633613630363662393138313261333663366338643731373235663438326332343939386330363938346463663763623966363663316561376331386639376636643930646336343939336461323735643031626136353365306664323563366231363434336463613636303030393264336330386663613466313563376261376436303662663831663863623034386366626164376665616239303365396664383838663335373132313237363336376537323566623334306562303565316432383431343238633032306132303537353730333366353133363965393132386239663138393161393132303061653665303365656439376435633932353833303463333038336135386162303831323230343764316138363861363439346265323038663062653332656638643464643931396464653766363264366562383565356266333932393630373665326437373138303132323430333136656138636263343737323831663930643939393965616137626331303739363934663337373965316639316664333532393365306438363039366637313538313634653338323932363535363866366461366630636630646232613732643962666265366163326333343830326562303035336635306162356334306233323230623961613861643465656532326332636333376339306235633765623961353366396636653435303530616435643039333631623531326232336161393331643361363039373766313462383861376438336461313965396364373937333835613639353439303837306336666364333534303339366631323666613337316533623038376262626533663334383366306462643630376230333362363237393439646537396233363862363430333264353330393662663366313235343739396330346266363935633665306538383038343164316236386238373566616531626436316330393738623030643337336230633838633739346530633066666133363334323863303230613230353764623432313164613431646534643865613232653039373933333265333130626133366130353831396263353437303332613464663838366562623862303132323064323861313063373361346465356335316264646230383862376262613231633737383764353466353964313561363763383566373930303437616339626339313830313232343031636465613764383130376330653865633666363433633964316239303833363063643232326331623733333635666233353363386561643834663265313536656562326161646239343331343734626461383161313062373865343366323336323539313436666366386537366538626466333261633833363939346630633332323031643036346263393436613832303363396463623337626334636538646532656133393766373633343364356535643164643936333065306466313230616538336136303639303863306161656262303332393962336233376362386234623233653338323535653764363834353032303262396437353435346334313337343364306364626133626433353439623839623765643465646136623033343931323736663733346330396632366138303964616430303163643537353562353063643066323162306463626234646564623434633565656436636430356266373066373337613131633235333538653561323332356438663236386539383230623733313432386330323061323035376664336565306338333265303033353432396637653866626335313434626233623331343564333534386132613262353837343939636632383730646639313232303462396631636538613561383863623030343165336233383939646534336462393730333038653461366331623465316465663064653162343361373939393231383031323234303831343364353134316439363061306135316565356461326539366662623933636435376534653337333264363031373937356234343032366139346161396334623665626631383361636461336163646131356639616433643236343930313763656465396539303963623564656166313963653730663638633739623030333232303166363536386162663730393633306366326430636532643132356662353038653366353661656536353135383339326263353936333734313163323034633433613630653963623766326666316532646562643465626665626232633532646166373961633239616430656564303963376665323035313431626132373566313230333161623664306466633432656563306136653033313132643530653738366266636633326435323236343166653065383632386635666236653662633831306664356566306562356362393765336164656662383334633362633737643835373062383663393335376437316263383235626334356134373666623534666564343238633032306132303538306531646633653336363334623937323964353963343362376466363734653535623030626338366236326663353136626138623866373732316135663931323230393261313035373961643563613264346138333437383163333064623132393434666231356263666261396533366132623861373030653836626164326263323138303132323430623863636261313437633231336563396161306538666435633132343766626666306363633237393230303837376332616133353732633462363936343830653466356162646434333730653765653534386537653137383036373536303263353264383639323566623533346330613639643764323433323032656135303533323230643033316135383034376132613766656637623565336538333864333863663330373166396137333130306131306436616538333432393431316136626232353361363035646434643336653461303936666465616665653538353639643430383666363831326132316236373863353231633165313363666330313764323430313038623835646162633634323030303266343738633634623636613633623133316131363061333362313464653536633038646438313461393430386266636430383538366430633838313162326137303366353131653936646230663561383830613262333238333938376562316365346138666430306232363830396161646534323863303230613230353831373338323466626334303035323037316465636136356130623034386364626631383865303462383961653061373962343164663563613933393831393132323065623061303938313739656337363465343063613035303565663262306162393266333865356430383739646430636637623261636661326539393563636466313830313232343033373336613364646333396461666235303133363235653132326537346132386165313136363464353931623265333532356135383132333036333663613337396534636364663630636630653233343534613030666534666230666436336235353337636237323235363533666639376334313064626635323263626630313332323062383332353936363761363331363539653138626336626262376237643035373035393163623866326430316530303931353836363962313735316536326465336136303865666533313638393033353363336439373635656534633639393362643331386533626339666530396431303936666431333339376665303239613065303335323832636165623634333262336131303234656633396534313235313931393865356133626339333637616530393335306566626336363961326364633064333562633233393436623235613235626231666565653163653862353735633530363965323832313164393836313231373364643739643163393738616366393432386330323061323035383138373838303032373630373435356234663161353434343132393736643966366538356563346230613734393730333465346136633332326262643135313232306339306161346165373937623431656339663266646239306136393237383162663530616230383635613435303437383363643264383830343165363234643631383031323234303133333335356536323562613239373333626162316230613063633334333437313063646238353763323537653263353537363234336365626263613961626432383663353137623939326564383163653836376662616163343935393763323632646433393766653561356438383239313165373433343130336333363039333232306234393130356234363032376234373834613334376264316336346339346135643032393865333364383561633732383439623434633931376233636666343433613630626133336462343138343361626464343734623664326561646164616136343631633735623633323736386461306131336464386537343462333462313730643836333662343335316536353333376533343035323030356464383130613437353730623035313437323663323834313732333233393566653336353034306132383638333864393832326238363337316634353530666539356531613237313361333438313363666332383038353632306564396164633032376363303664343265613031306132303538313837656264386664386234356137626634343161316433386661346139343361636537653238366563303130613931353063323863376533313263306231383031323234303434656533343037613132303539316632643036303961623561636436616336626538616433373235383038303761313336303664356464616361346366623862366363376332303762343235336162306335656630346137666136333064373132623161343833323261653365306666333238353836643231353839383065333232306534646466353037353134336661643931393366666164656261363732656130353865316534363865376261363961373664326534636231383363333132633833613630353361666535373832653934393464313163396430313130346531633232323831323561393231343861313535616163633438353632383538333366666430643532393037313764363138653165626234316263616265386366313636316236643331616530373131386131383137376433313435336432353239303661306466656633313661663734343065373236383264386164636431656339363231376133396662373736386266326539366366353035343061323137313834306437343234323232343037363233613566626161666135356138653739323663306366663638633666353265373432616638396632333530363064353061323033333866343138393537323138336131303433633235313435616666306533343865633638333165316237333161633765666236386638663738333361366633316266623630613730323132313462646536376634353466313734643266643836383163626631636363353132646534626332383435222c2270726f6772616d73223a5b7b22636f6465223a223230383764663730303139316165323731663134656231393532373636663261353861656638346635633833656162616539313461666161393563653163633932336163222c22706172616d65746572223a2234306264333535646161396135623138613130646531316339383938643362366663336464363561343764393933623639633632633030636661626263323439326131336463336136623932326138383464653663383638383165626365626561663835353961636633386537303033323139613663343437373532323564613066227d5d2c2273697a65223a343238332c22747854797065223a225349475f434841494e5f54584e5f54595045227d5d2c2273697a65223a343830352c2268617368223a2239386332363764393836326435306532646133663764363233666330626663356532366565373837643237616662643339373436653539363134373936656361227d") + progHashes, err := b.GetProgramHashes() + if err != nil { + t.Fatal("get program hashes error:", err) + } + check("GetProgramHashes", progHashes, []common.Uint160{{241, 191, 91, 34, 190, 204, 94, 229, 157, 120, 219, 141, 174, 113, 123, 63, 114, 163, 224, 1}}) + check("Hash", b.Hash(), common.Uint256{152, 194, 103, 217, 134, 45, 80, 226, 218, 63, 125, 98, 63, 192, 191, 197, 226, 110, 231, 135, 210, 122, 251, 211, 151, 70, 229, 150, 20, 121, 110, 202}) + +} + +func TestBlockTrim(t *testing.T) { + check := func(f string, got, want interface{}) { + if !reflect.DeepEqual(got, want) { + t.Errorf("%s mismatch: got %v, want %v", f, got, want) + } + } + + blockBytes, err := hex.DecodeString(rawBlock) + if err != nil { + t.Fatal("decode error:", err) + } + + b := new(Block) + err = b.Unmarshal(blockBytes) + if err != nil { + t.Fatal("unmarshal err:", err) + } + + buf := bytes.NewBuffer(nil) + err = b.Trim(buf) + if err != nil { + t.Fatal("trim block error:", err) + } + + check("Trim", hex.EncodeToString(buf.Bytes()), "fda3010ade0208011220da29b937682f9f84d0254d38002ee4a95abf587d4bec65d97db5a6612ad9328c1a20bb46b8e72e98a888d39c43bbc68fb79c2cc26bc83f6cf11ace1fe0e0380fc7cf2220e23f927c7258afc5619f2efbbfda1ba5571232f9c11008501d39c000bd1ec0b728dbb6dd9e0630b680b0023a8001e2a3f566880d7f8ab3a77248835f4fe04cff1f5471a61b585f199d949c790f390ba1923b4ad570232bec4f4ec866b86905738e6473137f1baf4ef21a4b7e1c02ff4a7376a497d786cf47a370523ba6bade4583bb9f45c5beec543a50f236cd09c0702c4419f8e4083f560205e06682d2b1052345e6b71ea56eb7bc6e1ac2e56b42201499620fadd18125056760f5498a481fffae45c2431857f8a127a685954edb144801522088811c3a1ebf787355a08d2ebcba6fd86ef2a19233350bc2fb9c13ac39fddbf85a20e14812772c280e2c4f4b17505aa13a3724c170f976e530a77f5e99d0d1de54a01240af62957879d75a765b96f495fdb7dcb74f4c8d13104ba58c34339ff25f1a8ac2297a5ba9d272f3c6c20ffd1a08eeef7d6265f8a8ff15f636bb5df3fab82d8f010200000032c80657f90897917ff4aea6315d734266b7f23dca586a999e20cc040dcf03a41499620fadd18125056760f5498a481fffae45c2431857f8a127a685954edb14") +} diff --git a/block/header_test.go b/block/header_test.go new file mode 100644 index 000000000..b5ee1648e --- /dev/null +++ b/block/header_test.go @@ -0,0 +1,56 @@ +package block + +import ( + "bytes" + "encoding/hex" + "github.com/nknorg/nkn/v2/common" + "reflect" + "testing" +) + +var rawHeader = "0ade0208011220da29b937682f9f84d0254d38002ee4a95abf587d4bec65d97db5a6612ad9328c1a20bb46b8e72e98a888d39c43bbc68fb79c2cc26bc83f6cf11ace1fe0e0380fc7cf2220e23f927c7258afc5619f2efbbfda1ba5571232f9c11008501d39c000bd1ec0b728dbb6dd9e0630b680b0023a8001e2a3f566880d7f8ab3a77248835f4fe04cff1f5471a61b585f199d949c790f390ba1923b4ad570232bec4f4ec866b86905738e6473137f1baf4ef21a4b7e1c02ff4a7376a497d786cf47a370523ba6bade4583bb9f45c5beec543a50f236cd09c0702c4419f8e4083f560205e06682d2b1052345e6b71ea56eb7bc6e1ac2e56b42201499620fadd18125056760f5498a481fffae45c2431857f8a127a685954edb144801522088811c3a1ebf787355a08d2ebcba6fd86ef2a19233350bc2fb9c13ac39fddbf85a20e14812772c280e2c4f4b17505aa13a3724c170f976e530a77f5e99d0d1de54a01240af62957879d75a765b96f495fdb7dcb74f4c8d13104ba58c34339ff25f1a8ac2297a5ba9d272f3c6c20ffd1a08eeef7d6265f8a8ff15f636bb5df3fab82d8f01" + +func TestHeaderUnsignedSerialization(t *testing.T) { + check := func(f string, got, want interface{}) { + if !reflect.DeepEqual(got, want) { + t.Errorf("%s mismatch: got %v, want %v", f, got, want) + } + } + + headerBytes, err := hex.DecodeString(rawHeader) + if err != nil { + t.Fatal("decode header error:", err) + } + + h := new(Header) + err = h.Unmarshal(headerBytes) + if err != nil { + t.Fatal("unmarshal header error:", err) + } + + buf := bytes.NewBuffer(nil) + err = h.SerializeUnsigned(buf) + if err != nil { + return + } + + check("SerializeUnsigned", hex.EncodeToString(buf.Bytes()), "0100000020da29b937682f9f84d0254d38002ee4a95abf587d4bec65d97db5a6612ad9328c20bb46b8e72e98a888d39c43bbc68fb79c2cc26bc83f6cf11ace1fe0e0380fc7cf20e23f927c7258afc5619f2efbbfda1ba5571232f9c11008501d39c000bd1ec0b75b5bd7630000000036004c00010000002088811c3a1ebf787355a08d2ebcba6fd86ef2a19233350bc2fb9c13ac39fddbf820e14812772c280e2c4f4b17505aa13a3724c170f976e530a77f5e99d0d1de54a0") + pk, id, err := h.GetSigner() + if err != nil { + t.Fatal("get signer error:", err) + } + check("GetSigner", hex.EncodeToString(pk), "88811c3a1ebf787355a08d2ebcba6fd86ef2a19233350bc2fb9c13ac39fddbf8") + check("GetSigner", hex.EncodeToString(id), "e14812772c280e2c4f4b17505aa13a3724c170f976e530a77f5e99d0d1de54a0") + info, err := h.GetInfo() + if err != nil { + t.Fatal("get info error:", err) + } + check("GetInfo", hex.EncodeToString(info), "7b2276657273696f6e223a312c2270726576426c6f636b48617368223a2264613239623933373638326639663834643032353464333830303265653461393561626635383764346265633635643937646235613636313261643933323863222c227472616e73616374696f6e73526f6f74223a2262623436623865373265393861383838643339633433626263363866623739633263633236626338336636636631316163653166653065303338306663376366222c227374617465526f6f74223a2265323366393237633732353861666335363139663265666262666461316261353537313233326639633131303038353031643339633030306264316563306237222c2274696d657374616d70223a313637353035383031312c22686569676874223a343938303739302c2272616e646f6d426561636f6e223a2265326133663536363838306437663861623361373732343838333566346665303463666631663534373161363162353835663139396439343963373930663339306261313932336234616435373032333262656334663465633836366238363930353733386536343733313337663162616634656632316134623765316330326666346137333736613439376437383663663437613337303532336261366261646534353833626239663435633562656563353433613530663233366364303963303730326334343139663865343038336635363032303565303636383264326231303532333435653662373165613536656237626336653161633265353662222c2277696e6e657248617368223a2231343939363230666164643138313235303536373630663534393861343831666666616534356332343331383537663861313237613638353935346564623134222c2277696e6e657254797065223a2254584e5f5349474e4552222c227369676e6572506b223a2238383831316333613165626637383733353561303864326562636261366664383665663261313932333333353062633266623963313361633339666464626638222c227369676e65724964223a2265313438313237373263323830653263346634623137353035616131336133373234633137306639373665353330613737663565393964306431646535346130222c227369676e6174757265223a226166363239353738373964373561373635623936663439356664623764636237346634633864313331303462613538633334333339666632356631613861633232393761356261396432373266336336633230666664316130386565656637643632363566386138666631356636333662623564663366616238326438663031222c2268617368223a2239386332363764393836326435306532646133663764363233666330626663356532366565373837643237616662643339373436653539363134373936656361227d") + check("GetMessage", hex.EncodeToString(h.GetMessage()), "0100000020da29b937682f9f84d0254d38002ee4a95abf587d4bec65d97db5a6612ad9328c20bb46b8e72e98a888d39c43bbc68fb79c2cc26bc83f6cf11ace1fe0e0380fc7cf20e23f927c7258afc5619f2efbbfda1ba5571232f9c11008501d39c000bd1ec0b75b5bd7630000000036004c00010000002088811c3a1ebf787355a08d2ebcba6fd86ef2a19233350bc2fb9c13ac39fddbf820e14812772c280e2c4f4b17505aa13a3724c170f976e530a77f5e99d0d1de54a0") + check("GetSignature", hex.EncodeToString(h.GetSignature()), "af62957879d75a765b96f495fdb7dcb74f4c8d13104ba58c34339ff25f1a8ac2297a5ba9d272f3c6c20ffd1a08eeef7d6265f8a8ff15f636bb5df3fab82d8f01") + progHashes, err := h.GetProgramHashes() + if err != nil { + t.Fatal("get program hashes error:", err) + } + check("GetProgramHashes", progHashes, []common.Uint160{{241, 191, 91, 34, 190, 204, 94, 229, 157, 120, 219, 141, 174, 113, 123, 63, 114, 163, 224, 1}}) +}