Testnet state mismatch at 4368840 #1338

Closed
opened 2025-12-28 17:16:05 +00:00 by sami · 9 comments
Owner

Originally created by @roman-khimov on GitHub (Jul 25, 2024).

Originally assigned to: @roman-khimov on GitHub.

Current Behavior

State mismatch.

at 0: 62fd8ff9b0543aea352257db5b00bbb01d1bc0d2cc665e1f24cf5de0d16ebc7b vs 62fd8ff9b0543aea352257db5b00bbb01d1bc0d2cc665e1f24cf5de0d16ebc7b
at 4368887: 2ee5b61a18369fbde6a4d1d046f81f993edaa40ab90c8c3176a20aa80d940083 vs 43e7a72644ab96966c714f46f4237b9285b45b1cd11e3eec817f7213e7e56935
at 2184443: 1dfe45a89a0610483bc3d46590bdb35c395b82a908f8e5b83bc5c455db9b3635 vs 1dfe45a89a0610483bc3d46590bdb35c395b82a908f8e5b83bc5c455db9b3635
at 3276665: 4502e11d71d6e426242340d87f98a5019faf4b8f13601258f1e728a0947e46ac vs 4502e11d71d6e426242340d87f98a5019faf4b8f13601258f1e728a0947e46ac
at 3822776: d97ffacc9d4fc177b100671dfe757e76ebc3d07efbcaee9b3fc827cca7393c9a vs d97ffacc9d4fc177b100671dfe757e76ebc3d07efbcaee9b3fc827cca7393c9a
at 4095831: ec1cd852023cc2414af0f2bfa267332fa122d5845dbd912e0d32d2953c7208ae vs ec1cd852023cc2414af0f2bfa267332fa122d5845dbd912e0d32d2953c7208ae
at 4232359: a5b55d73d1c8d6499c6ed635b05836553563eb8dbc9e9c76e4ee75510f2de5b6 vs a5b55d73d1c8d6499c6ed635b05836553563eb8dbc9e9c76e4ee75510f2de5b6
at 4300623: dcdedf2d1bb2c10bbba53c48fb8cc5888fd9d2932e491d140719b50acbf20e79 vs dcdedf2d1bb2c10bbba53c48fb8cc5888fd9d2932e491d140719b50acbf20e79
at 4334755: 7fe48b452062396e3d75cde55492cecdb5f341b5fe174e70a1c5732d0105b93f vs 7fe48b452062396e3d75cde55492cecdb5f341b5fe174e70a1c5732d0105b93f
at 4351821: 20904b55a18074c46fabf2f14c6fc21c67f061d94cd888c58006f0d63b52471f vs 20904b55a18074c46fabf2f14c6fc21c67f061d94cd888c58006f0d63b52471f
at 4360354: 5146fa9f5a8ee7ccf3db1bb538ee8a0ddc04f185035f29694f1525278c272846 vs 5146fa9f5a8ee7ccf3db1bb538ee8a0ddc04f185035f29694f1525278c272846
at 4364620: d9652495d1f4a4836d3e2e89430296d58c5435678feed6215fb21eb9599aebd6 vs d9652495d1f4a4836d3e2e89430296d58c5435678feed6215fb21eb9599aebd6
at 4366753: 8977de326572b8c0ec2f79105c8a5062fe192a1fcbefae79f256377117835bd6 vs 8977de326572b8c0ec2f79105c8a5062fe192a1fcbefae79f256377117835bd6
at 4367820: f79bbf24acacdb297e52b391d1917e06abbdce0318a3ffedb37f06146ace86ad vs f79bbf24acacdb297e52b391d1917e06abbdce0318a3ffedb37f06146ace86ad
at 4368353: 9951b887ce50f6ee5ed5fa7f426362a6ea79c153df449e10a33796582550eced vs 9951b887ce50f6ee5ed5fa7f426362a6ea79c153df449e10a33796582550eced
at 4368620: 0f0fa439a922f76f956569c3642943f9f7432c828f3b14b9069db5704450c441 vs 0f0fa439a922f76f956569c3642943f9f7432c828f3b14b9069db5704450c441
at 4368753: 0e295fa0d65131cfb108e0923732d5708eb760dfc9a18f884b692ad6e03adc63 vs 0e295fa0d65131cfb108e0923732d5708eb760dfc9a18f884b692ad6e03adc63
at 4368820: e845a106d02f8ad83a06790c327cbb0e87445eb52c96c3de5a950ee6c13a8cff vs e845a106d02f8ad83a06790c327cbb0e87445eb52c96c3de5a950ee6c13a8cff
at 4368853: 826ab9037ed9d67b48b72c9a129ad2ca53ea38e5674da529cb848487082d1821 vs 30ed42e71c530efae6df0f8715acc1400d90853400999bd318d443856c49bba5
at 4368836: 571d00bb826c3bdd0bbfbe3f728122dd65620f05c0d032b89407cab16d0cbc5a vs 571d00bb826c3bdd0bbfbe3f728122dd65620f05c0d032b89407cab16d0cbc5a
at 4368844: 3677f1240087f0524e00c69ec5fbb1a003add1e75631b92593149cf56ee216b7 vs c0040043762e05c85020396aef6cd9f33ad2058b7a504fb2c4eb916e5b59a3ee
at 4368840: 245c8906e8b0e5d4360cc16a70e72e02df6ed1ca04755c5c9391aaf7a39fe6ca vs a7763089b954e4cb06161b593fcee1f719078ce39a1fdc934ec895d116161dc8
at 4368838: 828889ed0fa55aee8db1dd1f72873f173208c788484d3681a297db43bb23b10c vs 828889ed0fa55aee8db1dd1f72873f173208c788484d3681a297db43bb23b10c
at 4368839: a2172180fd1c6aa5f8534c389abce1a7ae339549dd003d1bff60e817ba95b9d5 vs a2172180fd1c6aa5f8534c389abce1a7ae339549dd003d1bff60e817ba95b9d5
state differs at 4368840, block 9dee58955691e110a7728d75fd80754bafa6ada20232c1f55a8087b4ff155793
block 9dee58955691e110a7728d75fd80754bafa6ada20232c1f55a8087b4ff155793:
--- https://rpc.t5.n3.nspcc.ru:20331
+++ http://seed4t5.neo.org:20332
@@ -1,2 +1,2 @@
-(*result.ApplicationLog)(0xc0002a1b40)({
+(*result.ApplicationLog)(0xc000169c40)({
  Container: (util.Uint256) (len=32 cap=32) 935715ffb487805af5c13202a2ada6af4b7580fd758d72a710e191569558ee9d,
@@ -14,3 +14,3 @@
      Name: (string) (len=8) "Transfer",
-     Item: (*stackitem.Array)(0xc000294c00)(Array)
+     Item: (*stackitem.Array)(0xc0001af5c0)(Array)
     },
@@ -19,3 +19,3 @@
      Name: (string) (len=8) "Transfer",
-     Item: (*stackitem.Array)(0xc000294f60)(Array)
+     Item: (*stackitem.Array)(0xc0001af800)(Array)
     }
@@ -34,3 +34,3 @@
      Name: (string) (len=8) "Transfer",
-     Item: (*stackitem.Array)(0xc000295200)(Array)
+     Item: (*stackitem.Array)(0xc0001afaa0)(Array)
     }

transaction 6463d87dc0a5c62716c109279c7ae9edbc40bfd0f2d63e17e6302e156cfce5a5:
--- https://rpc.t5.n3.nspcc.ru:20331
+++ http://seed4t5.neo.org:20332
@@ -1,2 +1,2 @@
-(*result.ApplicationLog)(0xc0002a1dc0)({
+(*result.ApplicationLog)(0xc000169dc0)({
  Container: (util.Uint256) (len=32 cap=32) a5e5fc6c152e30e6173ed6f2d0bf40bcede97a9c2709c11627c6a5c07dd86364,
@@ -6,15 +6,9 @@
    Trigger: (trigger.Type) Application,
-   VMState: (vmstate.State) HALT,
-   GasConsumed: (int64) 1000098004,
-   Stack: ([]stackitem.Item) (len=1 cap=1) {
-    (*stackitem.Array)(0xc00053a2d0)(Array)
+   VMState: (vmstate.State) FAULT,
+   GasConsumed: (int64) 1000035859,
+   Stack: ([]stackitem.Item) {
    },
-   Events: ([]state.NotificationEvent) (len=1 cap=1) {
-    (state.NotificationEvent) {
-     ScriptHash: (util.Uint160) (len=20 cap=20) fda3fa4346ea532a258fc497ddaddb6437c9fdff,
-     Name: (string) (len=6) "Deploy",
-     Item: (*stackitem.Array)(0xc0002956e0)(Array)
-    }
+   Events: ([]state.NotificationEvent) {
    },
-   FaultException: (string) ""
+   FaultException: (string) (len=42) "Value cannot be null. (Parameter 'source')"
   }

different state found
exit status 1

Expected Behavior

State match.

Possible Solution

Fix the damn thing.

Steps to Reproduce

Testnet.

Context

Testnet!

Regression

No.

Your Environment

  • Version of the product used: 0.106.2
  • Server setup and configuration files used:
  • Operating System and version (uname -a):
Originally created by @roman-khimov on GitHub (Jul 25, 2024). Originally assigned to: @roman-khimov on GitHub. ## Current Behavior State mismatch. ``` at 0: 62fd8ff9b0543aea352257db5b00bbb01d1bc0d2cc665e1f24cf5de0d16ebc7b vs 62fd8ff9b0543aea352257db5b00bbb01d1bc0d2cc665e1f24cf5de0d16ebc7b at 4368887: 2ee5b61a18369fbde6a4d1d046f81f993edaa40ab90c8c3176a20aa80d940083 vs 43e7a72644ab96966c714f46f4237b9285b45b1cd11e3eec817f7213e7e56935 at 2184443: 1dfe45a89a0610483bc3d46590bdb35c395b82a908f8e5b83bc5c455db9b3635 vs 1dfe45a89a0610483bc3d46590bdb35c395b82a908f8e5b83bc5c455db9b3635 at 3276665: 4502e11d71d6e426242340d87f98a5019faf4b8f13601258f1e728a0947e46ac vs 4502e11d71d6e426242340d87f98a5019faf4b8f13601258f1e728a0947e46ac at 3822776: d97ffacc9d4fc177b100671dfe757e76ebc3d07efbcaee9b3fc827cca7393c9a vs d97ffacc9d4fc177b100671dfe757e76ebc3d07efbcaee9b3fc827cca7393c9a at 4095831: ec1cd852023cc2414af0f2bfa267332fa122d5845dbd912e0d32d2953c7208ae vs ec1cd852023cc2414af0f2bfa267332fa122d5845dbd912e0d32d2953c7208ae at 4232359: a5b55d73d1c8d6499c6ed635b05836553563eb8dbc9e9c76e4ee75510f2de5b6 vs a5b55d73d1c8d6499c6ed635b05836553563eb8dbc9e9c76e4ee75510f2de5b6 at 4300623: dcdedf2d1bb2c10bbba53c48fb8cc5888fd9d2932e491d140719b50acbf20e79 vs dcdedf2d1bb2c10bbba53c48fb8cc5888fd9d2932e491d140719b50acbf20e79 at 4334755: 7fe48b452062396e3d75cde55492cecdb5f341b5fe174e70a1c5732d0105b93f vs 7fe48b452062396e3d75cde55492cecdb5f341b5fe174e70a1c5732d0105b93f at 4351821: 20904b55a18074c46fabf2f14c6fc21c67f061d94cd888c58006f0d63b52471f vs 20904b55a18074c46fabf2f14c6fc21c67f061d94cd888c58006f0d63b52471f at 4360354: 5146fa9f5a8ee7ccf3db1bb538ee8a0ddc04f185035f29694f1525278c272846 vs 5146fa9f5a8ee7ccf3db1bb538ee8a0ddc04f185035f29694f1525278c272846 at 4364620: d9652495d1f4a4836d3e2e89430296d58c5435678feed6215fb21eb9599aebd6 vs d9652495d1f4a4836d3e2e89430296d58c5435678feed6215fb21eb9599aebd6 at 4366753: 8977de326572b8c0ec2f79105c8a5062fe192a1fcbefae79f256377117835bd6 vs 8977de326572b8c0ec2f79105c8a5062fe192a1fcbefae79f256377117835bd6 at 4367820: f79bbf24acacdb297e52b391d1917e06abbdce0318a3ffedb37f06146ace86ad vs f79bbf24acacdb297e52b391d1917e06abbdce0318a3ffedb37f06146ace86ad at 4368353: 9951b887ce50f6ee5ed5fa7f426362a6ea79c153df449e10a33796582550eced vs 9951b887ce50f6ee5ed5fa7f426362a6ea79c153df449e10a33796582550eced at 4368620: 0f0fa439a922f76f956569c3642943f9f7432c828f3b14b9069db5704450c441 vs 0f0fa439a922f76f956569c3642943f9f7432c828f3b14b9069db5704450c441 at 4368753: 0e295fa0d65131cfb108e0923732d5708eb760dfc9a18f884b692ad6e03adc63 vs 0e295fa0d65131cfb108e0923732d5708eb760dfc9a18f884b692ad6e03adc63 at 4368820: e845a106d02f8ad83a06790c327cbb0e87445eb52c96c3de5a950ee6c13a8cff vs e845a106d02f8ad83a06790c327cbb0e87445eb52c96c3de5a950ee6c13a8cff at 4368853: 826ab9037ed9d67b48b72c9a129ad2ca53ea38e5674da529cb848487082d1821 vs 30ed42e71c530efae6df0f8715acc1400d90853400999bd318d443856c49bba5 at 4368836: 571d00bb826c3bdd0bbfbe3f728122dd65620f05c0d032b89407cab16d0cbc5a vs 571d00bb826c3bdd0bbfbe3f728122dd65620f05c0d032b89407cab16d0cbc5a at 4368844: 3677f1240087f0524e00c69ec5fbb1a003add1e75631b92593149cf56ee216b7 vs c0040043762e05c85020396aef6cd9f33ad2058b7a504fb2c4eb916e5b59a3ee at 4368840: 245c8906e8b0e5d4360cc16a70e72e02df6ed1ca04755c5c9391aaf7a39fe6ca vs a7763089b954e4cb06161b593fcee1f719078ce39a1fdc934ec895d116161dc8 at 4368838: 828889ed0fa55aee8db1dd1f72873f173208c788484d3681a297db43bb23b10c vs 828889ed0fa55aee8db1dd1f72873f173208c788484d3681a297db43bb23b10c at 4368839: a2172180fd1c6aa5f8534c389abce1a7ae339549dd003d1bff60e817ba95b9d5 vs a2172180fd1c6aa5f8534c389abce1a7ae339549dd003d1bff60e817ba95b9d5 state differs at 4368840, block 9dee58955691e110a7728d75fd80754bafa6ada20232c1f55a8087b4ff155793 block 9dee58955691e110a7728d75fd80754bafa6ada20232c1f55a8087b4ff155793: --- https://rpc.t5.n3.nspcc.ru:20331 +++ http://seed4t5.neo.org:20332 @@ -1,2 +1,2 @@ -(*result.ApplicationLog)(0xc0002a1b40)({ +(*result.ApplicationLog)(0xc000169c40)({ Container: (util.Uint256) (len=32 cap=32) 935715ffb487805af5c13202a2ada6af4b7580fd758d72a710e191569558ee9d, @@ -14,3 +14,3 @@ Name: (string) (len=8) "Transfer", - Item: (*stackitem.Array)(0xc000294c00)(Array) + Item: (*stackitem.Array)(0xc0001af5c0)(Array) }, @@ -19,3 +19,3 @@ Name: (string) (len=8) "Transfer", - Item: (*stackitem.Array)(0xc000294f60)(Array) + Item: (*stackitem.Array)(0xc0001af800)(Array) } @@ -34,3 +34,3 @@ Name: (string) (len=8) "Transfer", - Item: (*stackitem.Array)(0xc000295200)(Array) + Item: (*stackitem.Array)(0xc0001afaa0)(Array) } transaction 6463d87dc0a5c62716c109279c7ae9edbc40bfd0f2d63e17e6302e156cfce5a5: --- https://rpc.t5.n3.nspcc.ru:20331 +++ http://seed4t5.neo.org:20332 @@ -1,2 +1,2 @@ -(*result.ApplicationLog)(0xc0002a1dc0)({ +(*result.ApplicationLog)(0xc000169dc0)({ Container: (util.Uint256) (len=32 cap=32) a5e5fc6c152e30e6173ed6f2d0bf40bcede97a9c2709c11627c6a5c07dd86364, @@ -6,15 +6,9 @@ Trigger: (trigger.Type) Application, - VMState: (vmstate.State) HALT, - GasConsumed: (int64) 1000098004, - Stack: ([]stackitem.Item) (len=1 cap=1) { - (*stackitem.Array)(0xc00053a2d0)(Array) + VMState: (vmstate.State) FAULT, + GasConsumed: (int64) 1000035859, + Stack: ([]stackitem.Item) { }, - Events: ([]state.NotificationEvent) (len=1 cap=1) { - (state.NotificationEvent) { - ScriptHash: (util.Uint160) (len=20 cap=20) fda3fa4346ea532a258fc497ddaddb6437c9fdff, - Name: (string) (len=6) "Deploy", - Item: (*stackitem.Array)(0xc0002956e0)(Array) - } + Events: ([]state.NotificationEvent) { }, - FaultException: (string) "" + FaultException: (string) (len=42) "Value cannot be null. (Parameter 'source')" } different state found exit status 1 ``` ## Expected Behavior State match. ## Possible Solution Fix the damn thing. ## Steps to Reproduce Testnet. ## Context Testnet! ## Regression No. ## Your Environment * Version of the product used: 0.106.2 * Server setup and configuration files used: * Operating System and version (`uname -a`):
sami 2025-12-28 17:16:05 +00:00
  • closed this issue
  • added the
    bug
    S4
    I4
    U0
    labels
Author
Owner

@roman-khimov commented on GitHub (Jul 25, 2024):

Tx:

{
   "result" : {
      "confirmations" : 61,
      "attributes" : [],
      "blockhash" : "0x9dee58955691e110a7728d75fd80754bafa6ada20232c1f55a8087b4ff155793",
      "sender" : "NRaKbRA5JAEJtfUgJJZzmeDnKvP3pJwKp1",
      "netfee" : "62104",
      "size" : 1466,
      "hash" : "0x6463d87dc0a5c62716c109279c7ae9edbc40bfd0f2d63e17e6302e156cfce5a5",
      "blocktime" : 1721940581287,
      "script" : "DcYDeyJuYW1lIjoiU3BvbnNvciIsImV4dHJhIjpudWxsLCJzdXBwb3J0ZWRzdGFuZGFyZHMiOltdLCJhYmkiOnsibWV0aG9kcyI6W3sibmFtZSI6Il9kZXBsb3kiLCJwYXJhbWV0ZXJzIjpbeyJuYW1lIjoiZGF0YSIsInR5cGUiOiJBbnkifSx7Im5hbWUiOiJpc1VwZGF0ZSIsInR5cGUiOiJCb29sZWFuIn1dLCJyZXR1cm50eXBlIjoiVm9pZCIsIm9mZnNldCI6MCwic2FmZSI6ZmFsc2V9LHsibmFtZSI6ImdldE93bmVyIiwicGFyYW1ldGVycyI6W10sInJldHVybnR5cGUiOiJIYXNoMTYwIiwib2Zmc2V0Ijo0Miwic2FmZSI6dHJ1ZX0seyJuYW1lIjoib25ORVAxN1BheW1lbnQiLCJwYXJhbWV0ZXJzIjpbeyJuYW1lIjoiZnJvbSIsInR5cGUiOiJIYXNoMTYwIn0seyJuYW1lIjoiYW1vdW50IiwidHlwZSI6IkludGVnZXIifSx7Im5hbWUiOiJkYXRhIiwidHlwZSI6IkFueSJ9XSwicmV0dXJudHlwZSI6IlZvaWQiLCJvZmZzZXQiOjEwMSwic2FmZSI6ZmFsc2V9LHsibmFtZSI6InVwZGF0ZSIsInBhcmFtZXRlcnMiOlt7Im5hbWUiOiJuZWZGaWxlIiwidHlwZSI6IkJ5dGVBcnJheSJ9LHsibmFtZSI6Im1hbmlmZXN0IiwidHlwZSI6IlN0cmluZyJ9LHsibmFtZSI6ImRhdGEiLCJ0eXBlIjoiQW55In1dLCJyZXR1cm50eXBlIjoiVm9pZCIsIm9mZnNldCI6MTA1LCJzYWZlIjpmYWxzZX0seyJuYW1lIjoidmVyaWZ5IiwicGFyYW1ldGVycyI6W10sInJldHVybnR5cGUiOiJCb29sZWFuIiwib2Zmc2V0Ijo4OCwic2FmZSI6ZmFsc2V9XSwiZXZlbnRzIjpbeyJuYW1lIjoiRGVidWciLCJwYXJhbWV0ZXJzIjpbeyJuYW1lIjoidXNlcm5hbWUiLCJ0eXBlIjoiU3RyaW5nIn0seyJuYW1lIjoibWVzc2FnZSIsInR5cGUiOiJBbnkifV19XX0sInBlcm1pc3Npb25zIjpbeyJjb250cmFjdCI6IjB4ZmZmZGM5Mzc2NGRiYWRkZDk3YzQ4ZjI1MmE1M2VhNDY0M2ZhYTNmZCIsIm1ldGhvZHMiOlsidXBkYXRlIiwiZGVzdHJveSJdfV19DSgBTkVGM25lby1nby0wLjEwNi4zLXByZS0xNi1nZGE0MGYyZGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfaHR0cHM6Ly9naXRodWIuY29tL25lby1lbmNsYXZlLwAB/aP6Q0bqUyolj8SX3a3bZDfJ/f8GdXBkYXRlAgAADwAAnFcDAnkmA0BBm/ZnznBBLVEIMHEMAW9K2TAkBNswcmhqaRPOU0HmPxiEQFcEAEH2tGvicAtxDAFvStkwJATbMHNoa1BBkl3oMXJq2CQLakrZMCQE2zBxaUBXAQA0z3BoQfgn7IxAVwADQFcDA0H2tGvicGgMAW9QQZJd6DFK2TAkBNswcWlB+CfsjCYReUrZMCQE2zByeGpQNwAAQMcLogASwB8MBmRlcGxveQwU/aP6Q0bqUyolj8SX3a3bZDfJ/f9BYn1bUg==",
      "witnesses" : [
         {
            "invocation" : "DEBgUY5N3wyYVPNBhxhaBKTO1hehg/LeRHjRKXL7twHaycagdxN8bTSE3j4W/9cDggeY4V+1jbxYpNZuPzUom4Jn",
            "verification" : "DCEDr1H+QCdp8SqvgHmvt24BcaGnPfjDpxOftJPSwIb7GfZBVuezJw=="
         }
      ],
      "sysfee" : "1000098004",
      "version" : 0,
      "validuntilblock" : 4368939,
      "vmstate" : "HALT",
      "nonce" : 247359,
      "signers" : [
         {
            "scopes" : "CalledByEntry",
            "account" : "0x18f13748e08d53c9a164227e1a3e8d8d9e78193e"
         }
      ]
   },
   "jsonrpc" : "2.0",
   "id" : 1
}

Script (deployment):

INDEX    OPCODE       PARAMETER
0        PUSHDATA2    7b226e616d65223a2253706f6e736f72222c226578747261223a6e756c6c2c22737570706f727465647374616e6461726473223a5b5d2c22616269223a7b226d6574686f6473223a5b7b226e616d65223a225f6465706c6f79222c22706172616d6574657273223a5b7b226e616d65223a2264617461222c2274797065223a22416e79227d2c7b226e616d65223a226973557064617465222c2274797065223a22426f6f6c65616e227d5d2c2272657475726e74797065223a22566f6964222c226f6666736574223a302c2273616665223a66616c73657d2c7b226e616d65223a226765744f776e6572222c22706172616d6574657273223a5b5d2c2272657475726e74797065223a2248617368313630222c226f6666736574223a34322c2273616665223a747275657d2c7b226e616d65223a226f6e4e455031375061796d656e74222c22706172616d6574657273223a5b7b226e616d65223a2266726f6d222c2274797065223a2248617368313630227d2c7b226e616d65223a22616d6f756e74222c2274797065223a22496e7465676572227d2c7b226e616d65223a2264617461222c2274797065223a22416e79227d5d2c2272657475726e74797065223a22566f6964222c226f6666736574223a3130312c2273616665223a66616c73657d2c7b226e616d65223a22757064617465222c22706172616d6574657273223a5b7b226e616d65223a226e656646696c65222c2274797065223a22427974654172726179227d2c7b226e616d65223a226d616e6966657374222c2274797065223a22537472696e67227d2c7b226e616d65223a2264617461222c2274797065223a22416e79227d5d2c2272657475726e74797065223a22566f6964222c226f6666736574223a3130352c2273616665223a66616c73657d2c7b226e616d65223a22766572696679222c22706172616d6574657273223a5b5d2c2272657475726e74797065223a22426f6f6c65616e222c226f6666736574223a38382c2273616665223a66616c73657d5d2c226576656e7473223a5b7b226e616d65223a224465627567222c22706172616d6574657273223a5b7b226e616d65223a22757365726e616d65222c2274797065223a22537472696e67227d2c7b226e616d65223a226d657373616765222c2274797065223a22416e79227d5d7d5d7d2c227065726d697373696f6e73223a5b7b22636f6e7472616374223a22307866666664633933373634646261646464393763343866323532613533656134363433666161336664222c226d6574686f6473223a5b22757064617465222c2264657374726f79225d7d5d7d ("{\"name\":\"Sponsor\",\"extra\":null,\"supportedstandards\":[],\"abi\":{\"methods\":[{\"name\":\"_deploy\",\"parameters\":[{\"name\":\"data\",\"type\":\"Any\"},{\"name\":\"isUpdate\",\"type\":\"Boolean\"}],\"returntype\":\"Void\",\"offset\":0,\"safe\":false},{\"name\":\"getOwner\",\"parameters\":[],\"returntype\":\"Hash160\",\"offset\":42,\"safe\":true},{\"name\":\"onNEP17Payment\",\"parameters\":[{\"name\":\"from\",\"type\":\"Hash160\"},{\"name\":\"amount\",\"type\":\"Integer\"},{\"name\":\"data\",\"type\":\"Any\"}],\"returntype\":\"Void\",\"offset\":101,\"safe\":false},{\"name\":\"update\",\"parameters\":[{\"name\":\"nefFile\",\"type\":\"ByteArray\"},{\"name\":\"manifest\",\"type\":\"String\"},{\"name\":\"data\",\"type\":\"Any\"}],\"returntype\":\"Void\",\"offset\":105,\"safe\":false},{\"name\":\"verify\",\"parameters\":[],\"returntype\":\"Boolean\",\"offset\":88,\"safe\":false}],\"events\":[{\"name\":\"Debug\",\"parameters\":[{\"name\":\"username\",\"type\":\"String\"},{\"name\":\"message\",\"type\":\"Any\"}]}]},\"permissions\":[{\"contract\":\"0xfffdc93764dbaddd97c48f252a53ea4643faa3fd\",\"methods\":[\"update\",\"destroy\"]}]}")    <<
969      PUSHDATA2    4e4546336e656f2d676f2d302e3130362e332d7072652d31362d6764613430663264650000000000000000000000000000000000000000000000000000000000000000001f68747470733a2f2f6769746875622e636f6d2f6e656f2d656e636c6176652f0001fda3fa4346ea532a258fc497ddaddb6437c9fdff067570646174650200000f00009c57030279260340419bf667ce70412d510830710c016f4ad9302404db3072686a6913ce5341e63f18844057040041f6b46be2700b710c016f4ad9302404db3073686b5041925de831726ad8240b6a4ad9302404db3071694057010034cf706841f827ec8c405700034057030341f6b46be270680c016f5041925de8314ad9302404db30716941f827ec8c2611794ad9302404db3072786a5037000040c70ba200
1268     PUSH2        
1269     PACK         
1270     PUSH15       
1271     PUSHDATA1    6465706c6f79 ("deploy")
1279     PUSHDATA1    fda3fa4346ea532a258fc497ddaddb6437c9fdff ("Nj36aekV3CLybZQJ5NfjYoFgRXEzhV9GtS", "0xfffdc93764dbaddd97c48f252a53ea4643faa3fd")
1301     SYSCALL      System.Contract.Call (627d5b52)
@roman-khimov commented on GitHub (Jul 25, 2024): Tx: ``` { "result" : { "confirmations" : 61, "attributes" : [], "blockhash" : "0x9dee58955691e110a7728d75fd80754bafa6ada20232c1f55a8087b4ff155793", "sender" : "NRaKbRA5JAEJtfUgJJZzmeDnKvP3pJwKp1", "netfee" : "62104", "size" : 1466, "hash" : "0x6463d87dc0a5c62716c109279c7ae9edbc40bfd0f2d63e17e6302e156cfce5a5", "blocktime" : 1721940581287, "script" : "DcYDeyJuYW1lIjoiU3BvbnNvciIsImV4dHJhIjpudWxsLCJzdXBwb3J0ZWRzdGFuZGFyZHMiOltdLCJhYmkiOnsibWV0aG9kcyI6W3sibmFtZSI6Il9kZXBsb3kiLCJwYXJhbWV0ZXJzIjpbeyJuYW1lIjoiZGF0YSIsInR5cGUiOiJBbnkifSx7Im5hbWUiOiJpc1VwZGF0ZSIsInR5cGUiOiJCb29sZWFuIn1dLCJyZXR1cm50eXBlIjoiVm9pZCIsIm9mZnNldCI6MCwic2FmZSI6ZmFsc2V9LHsibmFtZSI6ImdldE93bmVyIiwicGFyYW1ldGVycyI6W10sInJldHVybnR5cGUiOiJIYXNoMTYwIiwib2Zmc2V0Ijo0Miwic2FmZSI6dHJ1ZX0seyJuYW1lIjoib25ORVAxN1BheW1lbnQiLCJwYXJhbWV0ZXJzIjpbeyJuYW1lIjoiZnJvbSIsInR5cGUiOiJIYXNoMTYwIn0seyJuYW1lIjoiYW1vdW50IiwidHlwZSI6IkludGVnZXIifSx7Im5hbWUiOiJkYXRhIiwidHlwZSI6IkFueSJ9XSwicmV0dXJudHlwZSI6IlZvaWQiLCJvZmZzZXQiOjEwMSwic2FmZSI6ZmFsc2V9LHsibmFtZSI6InVwZGF0ZSIsInBhcmFtZXRlcnMiOlt7Im5hbWUiOiJuZWZGaWxlIiwidHlwZSI6IkJ5dGVBcnJheSJ9LHsibmFtZSI6Im1hbmlmZXN0IiwidHlwZSI6IlN0cmluZyJ9LHsibmFtZSI6ImRhdGEiLCJ0eXBlIjoiQW55In1dLCJyZXR1cm50eXBlIjoiVm9pZCIsIm9mZnNldCI6MTA1LCJzYWZlIjpmYWxzZX0seyJuYW1lIjoidmVyaWZ5IiwicGFyYW1ldGVycyI6W10sInJldHVybnR5cGUiOiJCb29sZWFuIiwib2Zmc2V0Ijo4OCwic2FmZSI6ZmFsc2V9XSwiZXZlbnRzIjpbeyJuYW1lIjoiRGVidWciLCJwYXJhbWV0ZXJzIjpbeyJuYW1lIjoidXNlcm5hbWUiLCJ0eXBlIjoiU3RyaW5nIn0seyJuYW1lIjoibWVzc2FnZSIsInR5cGUiOiJBbnkifV19XX0sInBlcm1pc3Npb25zIjpbeyJjb250cmFjdCI6IjB4ZmZmZGM5Mzc2NGRiYWRkZDk3YzQ4ZjI1MmE1M2VhNDY0M2ZhYTNmZCIsIm1ldGhvZHMiOlsidXBkYXRlIiwiZGVzdHJveSJdfV19DSgBTkVGM25lby1nby0wLjEwNi4zLXByZS0xNi1nZGE0MGYyZGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfaHR0cHM6Ly9naXRodWIuY29tL25lby1lbmNsYXZlLwAB/aP6Q0bqUyolj8SX3a3bZDfJ/f8GdXBkYXRlAgAADwAAnFcDAnkmA0BBm/ZnznBBLVEIMHEMAW9K2TAkBNswcmhqaRPOU0HmPxiEQFcEAEH2tGvicAtxDAFvStkwJATbMHNoa1BBkl3oMXJq2CQLakrZMCQE2zBxaUBXAQA0z3BoQfgn7IxAVwADQFcDA0H2tGvicGgMAW9QQZJd6DFK2TAkBNswcWlB+CfsjCYReUrZMCQE2zByeGpQNwAAQMcLogASwB8MBmRlcGxveQwU/aP6Q0bqUyolj8SX3a3bZDfJ/f9BYn1bUg==", "witnesses" : [ { "invocation" : "DEBgUY5N3wyYVPNBhxhaBKTO1hehg/LeRHjRKXL7twHaycagdxN8bTSE3j4W/9cDggeY4V+1jbxYpNZuPzUom4Jn", "verification" : "DCEDr1H+QCdp8SqvgHmvt24BcaGnPfjDpxOftJPSwIb7GfZBVuezJw==" } ], "sysfee" : "1000098004", "version" : 0, "validuntilblock" : 4368939, "vmstate" : "HALT", "nonce" : 247359, "signers" : [ { "scopes" : "CalledByEntry", "account" : "0x18f13748e08d53c9a164227e1a3e8d8d9e78193e" } ] }, "jsonrpc" : "2.0", "id" : 1 } ``` Script (deployment): ``` INDEX OPCODE PARAMETER 0 PUSHDATA2 7b226e616d65223a2253706f6e736f72222c226578747261223a6e756c6c2c22737570706f727465647374616e6461726473223a5b5d2c22616269223a7b226d6574686f6473223a5b7b226e616d65223a225f6465706c6f79222c22706172616d6574657273223a5b7b226e616d65223a2264617461222c2274797065223a22416e79227d2c7b226e616d65223a226973557064617465222c2274797065223a22426f6f6c65616e227d5d2c2272657475726e74797065223a22566f6964222c226f6666736574223a302c2273616665223a66616c73657d2c7b226e616d65223a226765744f776e6572222c22706172616d6574657273223a5b5d2c2272657475726e74797065223a2248617368313630222c226f6666736574223a34322c2273616665223a747275657d2c7b226e616d65223a226f6e4e455031375061796d656e74222c22706172616d6574657273223a5b7b226e616d65223a2266726f6d222c2274797065223a2248617368313630227d2c7b226e616d65223a22616d6f756e74222c2274797065223a22496e7465676572227d2c7b226e616d65223a2264617461222c2274797065223a22416e79227d5d2c2272657475726e74797065223a22566f6964222c226f6666736574223a3130312c2273616665223a66616c73657d2c7b226e616d65223a22757064617465222c22706172616d6574657273223a5b7b226e616d65223a226e656646696c65222c2274797065223a22427974654172726179227d2c7b226e616d65223a226d616e6966657374222c2274797065223a22537472696e67227d2c7b226e616d65223a2264617461222c2274797065223a22416e79227d5d2c2272657475726e74797065223a22566f6964222c226f6666736574223a3130352c2273616665223a66616c73657d2c7b226e616d65223a22766572696679222c22706172616d6574657273223a5b5d2c2272657475726e74797065223a22426f6f6c65616e222c226f6666736574223a38382c2273616665223a66616c73657d5d2c226576656e7473223a5b7b226e616d65223a224465627567222c22706172616d6574657273223a5b7b226e616d65223a22757365726e616d65222c2274797065223a22537472696e67227d2c7b226e616d65223a226d657373616765222c2274797065223a22416e79227d5d7d5d7d2c227065726d697373696f6e73223a5b7b22636f6e7472616374223a22307866666664633933373634646261646464393763343866323532613533656134363433666161336664222c226d6574686f6473223a5b22757064617465222c2264657374726f79225d7d5d7d ("{\"name\":\"Sponsor\",\"extra\":null,\"supportedstandards\":[],\"abi\":{\"methods\":[{\"name\":\"_deploy\",\"parameters\":[{\"name\":\"data\",\"type\":\"Any\"},{\"name\":\"isUpdate\",\"type\":\"Boolean\"}],\"returntype\":\"Void\",\"offset\":0,\"safe\":false},{\"name\":\"getOwner\",\"parameters\":[],\"returntype\":\"Hash160\",\"offset\":42,\"safe\":true},{\"name\":\"onNEP17Payment\",\"parameters\":[{\"name\":\"from\",\"type\":\"Hash160\"},{\"name\":\"amount\",\"type\":\"Integer\"},{\"name\":\"data\",\"type\":\"Any\"}],\"returntype\":\"Void\",\"offset\":101,\"safe\":false},{\"name\":\"update\",\"parameters\":[{\"name\":\"nefFile\",\"type\":\"ByteArray\"},{\"name\":\"manifest\",\"type\":\"String\"},{\"name\":\"data\",\"type\":\"Any\"}],\"returntype\":\"Void\",\"offset\":105,\"safe\":false},{\"name\":\"verify\",\"parameters\":[],\"returntype\":\"Boolean\",\"offset\":88,\"safe\":false}],\"events\":[{\"name\":\"Debug\",\"parameters\":[{\"name\":\"username\",\"type\":\"String\"},{\"name\":\"message\",\"type\":\"Any\"}]}]},\"permissions\":[{\"contract\":\"0xfffdc93764dbaddd97c48f252a53ea4643faa3fd\",\"methods\":[\"update\",\"destroy\"]}]}") << 969 PUSHDATA2 4e4546336e656f2d676f2d302e3130362e332d7072652d31362d6764613430663264650000000000000000000000000000000000000000000000000000000000000000001f68747470733a2f2f6769746875622e636f6d2f6e656f2d656e636c6176652f0001fda3fa4346ea532a258fc497ddaddb6437c9fdff067570646174650200000f00009c57030279260340419bf667ce70412d510830710c016f4ad9302404db3072686a6913ce5341e63f18844057040041f6b46be2700b710c016f4ad9302404db3073686b5041925de831726ad8240b6a4ad9302404db3071694057010034cf706841f827ec8c405700034057030341f6b46be270680c016f5041925de8314ad9302404db30716941f827ec8c2611794ad9302404db3072786a5037000040c70ba200 1268 PUSH2 1269 PACK 1270 PUSH15 1271 PUSHDATA1 6465706c6f79 ("deploy") 1279 PUSHDATA1 fda3fa4346ea532a258fc497ddaddb6437c9fdff ("Nj36aekV3CLybZQJ5NfjYoFgRXEzhV9GtS", "0xfffdc93764dbaddd97c48f252a53ea4643faa3fd") 1301 SYSCALL System.Contract.Call (627d5b52) ```
Author
Owner

@roman-khimov commented on GitHub (Jul 25, 2024):

Manifest:

{
   "name" : "Sponsor",
   "supportedstandards" : [],
   "extra" : null,
   "permissions" : [
      {
         "methods" : [
            "update",
            "destroy"
         ],
         "contract" : "0xfffdc93764dbaddd97c48f252a53ea4643faa3fd"
      }
   ],
   "abi" : {
      "methods" : [
         {
            "safe" : false,
            "name" : "_deploy",
            "offset" : 0,
            "returntype" : "Void",
            "parameters" : [
               {
                  "name" : "data",
                  "type" : "Any"
               },
               {
                  "name" : "isUpdate",
                  "type" : "Boolean"
               }
            ]
         },
         {
            "parameters" : [],
            "offset" : 42,
            "returntype" : "Hash160",
            "safe" : true,
            "name" : "getOwner"
         },
         {
            "safe" : false,
            "name" : "onNEP17Payment",
            "parameters" : [
               {
                  "name" : "from",
                  "type" : "Hash160"
               },
               {
                  "type" : "Integer",
                  "name" : "amount"
               },
               {
                  "name" : "data",
                  "type" : "Any"
               }
            ],
            "offset" : 101,
            "returntype" : "Void"
         },
         {
            "returntype" : "Void",
            "offset" : 105,
            "parameters" : [
               {
                  "name" : "nefFile",
                  "type" : "ByteArray"
               },
               {
                  "name" : "manifest",
                  "type" : "String"
               },
               {
                  "name" : "data",
                  "type" : "Any"
               }
            ],
            "name" : "update",
            "safe" : false
         },
         {
            "returntype" : "Boolean",
            "offset" : 88,
            "parameters" : [],
            "safe" : false,
            "name" : "verify"
         }
      ],
      "events" : [
         {
            "name" : "Debug",
            "parameters" : [
               {
                  "name" : "username",
                  "type" : "String"
               },
               {
                  "type" : "Any",
                  "name" : "message"
               }
            ]
         }
      ]
   }
}
@roman-khimov commented on GitHub (Jul 25, 2024): Manifest: ``` { "name" : "Sponsor", "supportedstandards" : [], "extra" : null, "permissions" : [ { "methods" : [ "update", "destroy" ], "contract" : "0xfffdc93764dbaddd97c48f252a53ea4643faa3fd" } ], "abi" : { "methods" : [ { "safe" : false, "name" : "_deploy", "offset" : 0, "returntype" : "Void", "parameters" : [ { "name" : "data", "type" : "Any" }, { "name" : "isUpdate", "type" : "Boolean" } ] }, { "parameters" : [], "offset" : 42, "returntype" : "Hash160", "safe" : true, "name" : "getOwner" }, { "safe" : false, "name" : "onNEP17Payment", "parameters" : [ { "name" : "from", "type" : "Hash160" }, { "type" : "Integer", "name" : "amount" }, { "name" : "data", "type" : "Any" } ], "offset" : 101, "returntype" : "Void" }, { "returntype" : "Void", "offset" : 105, "parameters" : [ { "name" : "nefFile", "type" : "ByteArray" }, { "name" : "manifest", "type" : "String" }, { "name" : "data", "type" : "Any" } ], "name" : "update", "safe" : false }, { "returntype" : "Boolean", "offset" : 88, "parameters" : [], "safe" : false, "name" : "verify" } ], "events" : [ { "name" : "Debug", "parameters" : [ { "name" : "username", "type" : "String" }, { "type" : "Any", "name" : "message" } ] } ] } } ```
Author
Owner

@roman-khimov commented on GitHub (Jul 25, 2024):

INDEX    OPCODE       PARAMETER
0        INITSLOT     3 local, 2 arg    <<
3        LDARG1       
4        JMPIFNOT     7 (3/03)
6        RET          
7        SYSCALL      System.Storage.GetContext (9bf667ce)
12       STLOC0       
13       SYSCALL      System.Runtime.GetScriptContainer (2d510830)
18       STLOC1       
19       PUSHDATA1    6f ("o")
22       DUP          
23       ISTYPE       Buffer (30)
25       JMPIF        29 (4/04)
27       CONVERT      Buffer (30)
29       STLOC2       
30       LDLOC0       
31       LDLOC2       
32       LDLOC1       
33       PUSH3        
34       PICKITEM     
35       REVERSE3     
36       SYSCALL      System.Storage.Put (e63f1884)
41       RET          
42       INITSLOT     4 local, 0 arg
45       SYSCALL      System.Storage.GetReadOnlyContext (f6b46be2)
50       STLOC0       
51       PUSHNULL     
52       STLOC1       
53       PUSHDATA1    6f ("o")
56       DUP          
57       ISTYPE       Buffer (30)
59       JMPIF        63 (4/04)
61       CONVERT      Buffer (30)
63       STLOC3       
64       LDLOC0       
65       LDLOC3       
66       SWAP         
67       SYSCALL      System.Storage.Get (925de831)
72       STLOC2       
73       LDLOC2       
74       ISNULL       
75       JMPIF        86 (11/0b)
77       LDLOC2       
78       DUP          
79       ISTYPE       Buffer (30)
81       JMPIF        85 (4/04)
83       CONVERT      Buffer (30)
85       STLOC1       
86       LDLOC1       
87       RET          
88       INITSLOT     1 local, 0 arg
91       CALL         42 (-49/cf)
93       STLOC0       
94       LDLOC0       
95       SYSCALL      System.Runtime.CheckWitness (f827ec8c)
100      RET          
101      INITSLOT     0 local, 3 arg
104      RET          
105      INITSLOT     3 local, 3 arg
108      SYSCALL      System.Storage.GetReadOnlyContext (f6b46be2)
113      STLOC0       
114      LDLOC0       
115      PUSHDATA1    6f ("o")
118      SWAP         
119      SYSCALL      System.Storage.Get (925de831)
124      DUP          
125      ISTYPE       Buffer (30)
127      JMPIF        131 (4/04)
129      CONVERT      Buffer (30)
131      STLOC1       
132      LDLOC1       
133      SYSCALL      System.Runtime.CheckWitness (f827ec8c)
138      JMPIFNOT     155 (17/11)
140      LDARG1       
141      DUP          
142      ISTYPE       Buffer (30)
144      JMPIF        148 (4/04)
146      CONVERT      Buffer (30)
148      STLOC2       
149      LDARG0       
150      LDLOC2       
151      SWAP         
152      CALLT        0000 ("\x00\x00")
155      RET          
@roman-khimov commented on GitHub (Jul 25, 2024): ``` INDEX OPCODE PARAMETER 0 INITSLOT 3 local, 2 arg << 3 LDARG1 4 JMPIFNOT 7 (3/03) 6 RET 7 SYSCALL System.Storage.GetContext (9bf667ce) 12 STLOC0 13 SYSCALL System.Runtime.GetScriptContainer (2d510830) 18 STLOC1 19 PUSHDATA1 6f ("o") 22 DUP 23 ISTYPE Buffer (30) 25 JMPIF 29 (4/04) 27 CONVERT Buffer (30) 29 STLOC2 30 LDLOC0 31 LDLOC2 32 LDLOC1 33 PUSH3 34 PICKITEM 35 REVERSE3 36 SYSCALL System.Storage.Put (e63f1884) 41 RET 42 INITSLOT 4 local, 0 arg 45 SYSCALL System.Storage.GetReadOnlyContext (f6b46be2) 50 STLOC0 51 PUSHNULL 52 STLOC1 53 PUSHDATA1 6f ("o") 56 DUP 57 ISTYPE Buffer (30) 59 JMPIF 63 (4/04) 61 CONVERT Buffer (30) 63 STLOC3 64 LDLOC0 65 LDLOC3 66 SWAP 67 SYSCALL System.Storage.Get (925de831) 72 STLOC2 73 LDLOC2 74 ISNULL 75 JMPIF 86 (11/0b) 77 LDLOC2 78 DUP 79 ISTYPE Buffer (30) 81 JMPIF 85 (4/04) 83 CONVERT Buffer (30) 85 STLOC1 86 LDLOC1 87 RET 88 INITSLOT 1 local, 0 arg 91 CALL 42 (-49/cf) 93 STLOC0 94 LDLOC0 95 SYSCALL System.Runtime.CheckWitness (f827ec8c) 100 RET 101 INITSLOT 0 local, 3 arg 104 RET 105 INITSLOT 3 local, 3 arg 108 SYSCALL System.Storage.GetReadOnlyContext (f6b46be2) 113 STLOC0 114 LDLOC0 115 PUSHDATA1 6f ("o") 118 SWAP 119 SYSCALL System.Storage.Get (925de831) 124 DUP 125 ISTYPE Buffer (30) 127 JMPIF 131 (4/04) 129 CONVERT Buffer (30) 131 STLOC1 132 LDLOC1 133 SYSCALL System.Runtime.CheckWitness (f827ec8c) 138 JMPIFNOT 155 (17/11) 140 LDARG1 141 DUP 142 ISTYPE Buffer (30) 144 JMPIF 148 (4/04) 146 CONVERT Buffer (30) 148 STLOC2 149 LDARG0 150 LDLOC2 151 SWAP 152 CALLT 0000 ("\x00\x00") 155 RET ```
Author
Owner

@roman-khimov commented on GitHub (Jul 26, 2024):

@lock9, can this transaction be one of yours? I'm interested in how this manifest was produced, fixing the node side is rather trivial, but I don't see how this can happen in a regular compiler use flow.

@roman-khimov commented on GitHub (Jul 26, 2024): @lock9, can this transaction be one of yours? I'm interested in how this manifest was produced, fixing the node side is rather trivial, but I don't see how this can happen in a regular compiler use flow.
Author
Owner

@lock9 commented on GitHub (Jul 26, 2024):

Hello @roman-khimov,

Yes, that's mine. Maybe it's my serialization / deserialization code that has caused this?

Note: Maybe it's unrelated (probably is), but I saw this error https://github.com/neo-project/neo/issues/3439 when I tried to send a transaction using an incorrect network magic.
image

Nef serialization code:

export class ContractNef {
  magic: number
  compiler: string
  script: Buffer
  source: string
  checksum: bigint
  tokens: ContractMethodToken[]

  constructor() {
    this.magic = 0
    this.compiler = ''
    this.script = Buffer.alloc(0)
    this.checksum = BigInt(0)
    this.tokens = []
  }

  static fromBytes(nefBytes: Buffer): ContractNef {
    const nef = new ContractNef()
    let offset = 0
    nef.magic = nefBytes.readUInt32LE(offset)
    offset += 4
    if (nef.magic !== 0x3346454e) {
      throw new Error('NEF deserialization failure - invalid magic')
    }

    nef.compiler = nefBytes
      .subarray(offset, offset + 64)
      .toString('utf8')
      .replace(/\0/g, '')
    offset += 64

    const sourceSizeBytes = nefBytes.readUInt8(offset)
    offset += 1

    if (sourceSizeBytes > 256) {
      throw new Error(
        'NEF deserialization failure - source field size exceeds maximum length of 256',
      )
    }

    if (sourceSizeBytes !== 0) {
      nef.source = nefBytes
        .subarray(offset, offset + sourceSizeBytes)
        .toString('utf8')
      offset += sourceSizeBytes
    }

    const reserved = nefBytes.readUInt8(offset)
    offset += 1

    if (reserved !== 0) {
      throw new Error('NEF deserialization failure - invalid reserved byte')
    }

    const tokenLength = nefBytes.readUInt8(offset)
    offset += 1
    for (let i = 0; i < tokenLength; i++) {
      const tokenHash = nefBytes.subarray(offset, offset + 20)
      offset += 20
      const methodNameSize = nefBytes.readUInt8(offset)
      offset += 1
      const methodName = nefBytes
        .subarray(offset, offset + methodNameSize)
        .toString('utf8')
      offset += methodNameSize
      const parametersCount = nefBytes.readUInt16LE(offset)
      offset += 2
      const hasReturnValue = nefBytes.readUInt8(offset) === 1
      offset += 1
      const callFlags = nefBytes.readUInt8(offset)
      offset += 1
      const methodToken = new ContractMethodToken(
        tokenHash.toString('hex'),
        methodName,
        parametersCount,
        hasReturnValue,
        callFlags,
      )
      nef.tokens.push(methodToken)
    }

    const reserved2 = nefBytes.readUInt16LE(offset)
    offset += 2
    if (reserved2 !== 0) {
      throw new Error('NEF deserialization failure - invalid reserved byte')
    }

    const { value: scriptLength, size: varIntSize } = readVarInt(
      nefBytes,
      offset,
    )
    offset += varIntSize

    nef.script = nefBytes.subarray(offset, offset + Number(scriptLength))
    offset += Number(scriptLength)

    nef.checksum = BigInt(nefBytes.readUInt32LE(offset))

    return nef
  }

  toBytes(): Buffer {
    const buffers: Buffer[] = []

    const magicBuffer = Buffer.alloc(4)
    magicBuffer.writeUInt32LE(this.magic)
    buffers.push(magicBuffer)

    const compilerBuffer = Buffer.alloc(64)
    compilerBuffer.write(this.compiler, 'utf8')
    buffers.push(compilerBuffer)

    const sourceSizeBuffer = Buffer.alloc(1)
    sourceSizeBuffer.writeUInt8(this.source.length)
    buffers.push(sourceSizeBuffer)

    if (this.source.length > 0) {
      const sourceBuffer = Buffer.from(this.source, 'utf8')
      buffers.push(sourceBuffer)
    }

    const reservedBuffer = Buffer.alloc(1, 0)
    buffers.push(reservedBuffer)

    const tokenLengthBuffer = Buffer.alloc(1)
    tokenLengthBuffer.writeUInt8(this.tokens.length)
    buffers.push(tokenLengthBuffer)

    this.tokens.forEach((method) => {
      const tokenHashBuffer = Buffer.from(method.hash, 'hex')
      buffers.push(tokenHashBuffer)

      const methodNameBuffer = Buffer.alloc(1)
      methodNameBuffer.writeUInt8(method.name.length)
      buffers.push(methodNameBuffer)

      const methodNameBytes = Buffer.from(method.name, 'utf8')
      buffers.push(methodNameBytes)

      const parametersCountBuffer = Buffer.alloc(2)
      parametersCountBuffer.writeUInt16LE(method.parametersCount)
      buffers.push(parametersCountBuffer)

      const hasReturnValueBuffer = Buffer.alloc(1)
      hasReturnValueBuffer.writeUInt8(method.hasReturnValue ? 1 : 0)
      buffers.push(hasReturnValueBuffer)

      const callFlagsBuffer = Buffer.alloc(1)
      callFlagsBuffer.writeUInt8(method.callFlags)
      buffers.push(callFlagsBuffer)
    })

    const reserved2Buffer = Buffer.alloc(2, 0)
    buffers.push(reserved2Buffer)

    serializeScript(this.script, buffers)

    const checksumBuffer = Buffer.alloc(4)
    checksumBuffer.writeUInt32LE(Number(this.checksum))
    buffers.push(checksumBuffer)

    return Buffer.concat(buffers)
  }
}
@lock9 commented on GitHub (Jul 26, 2024): Hello @roman-khimov, Yes, that's mine. Maybe it's my serialization / deserialization code that has caused this? Note: Maybe it's unrelated (probably is), but I saw this error https://github.com/neo-project/neo/issues/3439 when I tried to send a transaction using an incorrect network magic. ![image](https://github.com/user-attachments/assets/a11f62e7-3495-44ff-82fd-f3e70f663f23) Nef serialization code: ```typescript export class ContractNef { magic: number compiler: string script: Buffer source: string checksum: bigint tokens: ContractMethodToken[] constructor() { this.magic = 0 this.compiler = '' this.script = Buffer.alloc(0) this.checksum = BigInt(0) this.tokens = [] } static fromBytes(nefBytes: Buffer): ContractNef { const nef = new ContractNef() let offset = 0 nef.magic = nefBytes.readUInt32LE(offset) offset += 4 if (nef.magic !== 0x3346454e) { throw new Error('NEF deserialization failure - invalid magic') } nef.compiler = nefBytes .subarray(offset, offset + 64) .toString('utf8') .replace(/\0/g, '') offset += 64 const sourceSizeBytes = nefBytes.readUInt8(offset) offset += 1 if (sourceSizeBytes > 256) { throw new Error( 'NEF deserialization failure - source field size exceeds maximum length of 256', ) } if (sourceSizeBytes !== 0) { nef.source = nefBytes .subarray(offset, offset + sourceSizeBytes) .toString('utf8') offset += sourceSizeBytes } const reserved = nefBytes.readUInt8(offset) offset += 1 if (reserved !== 0) { throw new Error('NEF deserialization failure - invalid reserved byte') } const tokenLength = nefBytes.readUInt8(offset) offset += 1 for (let i = 0; i < tokenLength; i++) { const tokenHash = nefBytes.subarray(offset, offset + 20) offset += 20 const methodNameSize = nefBytes.readUInt8(offset) offset += 1 const methodName = nefBytes .subarray(offset, offset + methodNameSize) .toString('utf8') offset += methodNameSize const parametersCount = nefBytes.readUInt16LE(offset) offset += 2 const hasReturnValue = nefBytes.readUInt8(offset) === 1 offset += 1 const callFlags = nefBytes.readUInt8(offset) offset += 1 const methodToken = new ContractMethodToken( tokenHash.toString('hex'), methodName, parametersCount, hasReturnValue, callFlags, ) nef.tokens.push(methodToken) } const reserved2 = nefBytes.readUInt16LE(offset) offset += 2 if (reserved2 !== 0) { throw new Error('NEF deserialization failure - invalid reserved byte') } const { value: scriptLength, size: varIntSize } = readVarInt( nefBytes, offset, ) offset += varIntSize nef.script = nefBytes.subarray(offset, offset + Number(scriptLength)) offset += Number(scriptLength) nef.checksum = BigInt(nefBytes.readUInt32LE(offset)) return nef } toBytes(): Buffer { const buffers: Buffer[] = [] const magicBuffer = Buffer.alloc(4) magicBuffer.writeUInt32LE(this.magic) buffers.push(magicBuffer) const compilerBuffer = Buffer.alloc(64) compilerBuffer.write(this.compiler, 'utf8') buffers.push(compilerBuffer) const sourceSizeBuffer = Buffer.alloc(1) sourceSizeBuffer.writeUInt8(this.source.length) buffers.push(sourceSizeBuffer) if (this.source.length > 0) { const sourceBuffer = Buffer.from(this.source, 'utf8') buffers.push(sourceBuffer) } const reservedBuffer = Buffer.alloc(1, 0) buffers.push(reservedBuffer) const tokenLengthBuffer = Buffer.alloc(1) tokenLengthBuffer.writeUInt8(this.tokens.length) buffers.push(tokenLengthBuffer) this.tokens.forEach((method) => { const tokenHashBuffer = Buffer.from(method.hash, 'hex') buffers.push(tokenHashBuffer) const methodNameBuffer = Buffer.alloc(1) methodNameBuffer.writeUInt8(method.name.length) buffers.push(methodNameBuffer) const methodNameBytes = Buffer.from(method.name, 'utf8') buffers.push(methodNameBytes) const parametersCountBuffer = Buffer.alloc(2) parametersCountBuffer.writeUInt16LE(method.parametersCount) buffers.push(parametersCountBuffer) const hasReturnValueBuffer = Buffer.alloc(1) hasReturnValueBuffer.writeUInt8(method.hasReturnValue ? 1 : 0) buffers.push(hasReturnValueBuffer) const callFlagsBuffer = Buffer.alloc(1) callFlagsBuffer.writeUInt8(method.callFlags) buffers.push(callFlagsBuffer) }) const reserved2Buffer = Buffer.alloc(2, 0) buffers.push(reserved2Buffer) serializeScript(this.script, buffers) const checksumBuffer = Buffer.alloc(4) checksumBuffer.writeUInt32LE(Number(this.checksum)) buffers.push(checksumBuffer) return Buffer.concat(buffers) } } ```
Author
Owner

@roman-khimov commented on GitHub (Jul 26, 2024):

It's all about the manifest. Compiler outputs valid manifest on its own (with all fields), but if you do some additional processing then empty values can get mangled.

@roman-khimov commented on GitHub (Jul 26, 2024): It's all about the manifest. Compiler outputs valid manifest on its own (with all fields), but if you do some additional processing then empty values can get mangled.
Author
Owner

@lock9 commented on GitHub (Jul 26, 2024):

Hm. Could that be caused by mismatching NEF/manifest? Is the manifest generated when there are compilation errors? I saw some weird behavior when I tried to recompile and redeploy a contract with syntax errors.

Could concurrency cause that? I also recompile my files frequently (automatically)

Maybe I formated the manifest json (added indentation) before deploying it (I can't recall it)

@lock9 commented on GitHub (Jul 26, 2024): Hm. Could that be caused by mismatching NEF/manifest? Is the manifest generated when there are compilation errors? I saw some weird behavior when I tried to recompile and redeploy a contract with syntax errors. Could concurrency cause that? I also recompile my files frequently (automatically) Maybe I formated the manifest json (added indentation) before deploying it (I can't recall it)
Author
Owner

@roman-khimov commented on GitHub (Jul 26, 2024):

Maybe I formated the manifest json (added indentation) before deploying it (I can't recall it)

It's not indented, but it looks like it was edited somehow. Compiler always emits groups/trusts/features fields, but they're missing from the manifest.

@roman-khimov commented on GitHub (Jul 26, 2024): > Maybe I formated the manifest json (added indentation) before deploying it (I can't recall it) It's not indented, but it looks like it was edited somehow. Compiler always emits groups/trusts/features fields, but they're missing from the manifest.
Author
Owner

@lock9 commented on GitHub (Jul 26, 2024):

I didn't make those changes manually. I remember being confused about the permissions, but I'm sure I didn't change the manifest.

@lock9 commented on GitHub (Jul 26, 2024): I didn't make those changes manually. I remember being confused about the permissions, but I'm sure I didn't change the manifest.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
nspcc-dev/neo-go#1338
No description provided.