diff --git a/TonSdk.Core/src/boc/BOC.cs b/TonSdk.Core/src/boc/BOC.cs index aba1d73..e97c55a 100644 --- a/TonSdk.Core/src/boc/BOC.cs +++ b/TonSdk.Core/src/boc/BOC.cs @@ -277,8 +277,9 @@ public static Bits SerializeBoc( } var dataBits = dataBuilder.Build(); - var offsetBytes = Math.Max((dataBits.Length.bitLength() + 7) / 8, 1); - + var dataBytesSize = Math.Max((dataBits.Length + 7) / 8, 1) ; + var offsetBytes = Math.Max((dataBytesSize.bitLength() + 7) / 8, 1); + /* serialized_boc#b5ee9c72 has_idx:(## 1) has_crc32c:(## 1) has_cache_bits:(## 1) flags:(## 2) { flags = 0 } diff --git a/TonSdk.Core/test/boc/Cell.test.cs b/TonSdk.Core/test/boc/Cell.test.cs index ce3143f..57659e6 100644 --- a/TonSdk.Core/test/boc/Cell.test.cs +++ b/TonSdk.Core/test/boc/Cell.test.cs @@ -1,8 +1,56 @@ using TonSdk.Core.Boc; -namespace TonSdk.Core.Tests; +namespace TonSdk.Core.Tests.Boc; +public class CellTest +{ + [Test] + public void SerializeTest() + { + // Arrange + const int sampleValue = 0x32fab9; + var builder = new CellBuilder(); -public class CellTest { + // Store the same 32-bit value 8 times (total: 256 bits) + for (var i = 0; i < 8; i++) + { + builder.StoreUInt(sampleValue, 32); + } -} + // Expected BoC produced by @ton/core (JavaScript): + // b.toBoc().toString("hex") + const string expectedBoc = + "b5ee9c724101010100220000400032fab90032fab90032fab90032fab90032fab90032fab90032fab90032fab979fc9ee0"; + + // Act + var cell = builder.Build(); + var boc = cell.ToString("hex").ToLowerInvariant(); + + // Assert + Assert.That(boc, Is.EqualTo(expectedBoc)); + } + + [Test] + public void DeserializeTest() + { + // Arrange + const string boc = + "b5ee9c724101010100220000400032fab90032fab90032fab90032fab90032fab90032fab90032fab90032fab979fc9ee0"; + + const int sampleValue = 0x32fab9; + + // Act + var cell = Cell.From(new Bits(Convert.FromHexString(boc))); + var slice = cell.Parse(); + + // Assert + // 8 values * 32 bits each = 256 bits remaining + Assert.That(slice.RemainderBits, Is.EqualTo(32 * 8)); + + for (var i = 0; i < 8; i++) + { + var value = (int)slice.LoadUInt(32); + Assert.That(value, Is.EqualTo(sampleValue)); + } + } +} \ No newline at end of file