From 025a1533c497d2618324efde44eb7fe651de0ef1 Mon Sep 17 00:00:00 2001 From: Jason Elie Bou Kheir <5115126+jasonboukheir@users.noreply.github.com> Date: Wed, 22 Feb 2023 08:07:50 -0800 Subject: [PATCH] fix(unity-collections): support unity collections version > 2.x.x update APIs in `NativeText` and `NativeList` extensions to allow unity collections version 2.x.x to compile fix #192 --- .../FixedStringParseExtensions.cs | 24 ++++---- .../NativeTextExtensions.cs | 56 ++++++++++++++++++ .../Algorand.Unity.Encoding/Base64Encoding.cs | 23 +++++++- .../Utf8StringExtensions.cs | 59 ++++++++++++++----- .../JsonReader/JsonReader.String.cs | 37 +++++++++++- .../JsonReader/JsonReader.cs | 17 +++++- Runtime/Algorand.Unity.Json/JsonWriter.cs | 28 ++++++++- .../NativeOrderedSet.cs | 21 ++++--- .../MessagePackReader.String.cs | 37 +++++++++++- .../Experimental/Abi/Contract.cs | 2 +- .../Experimental/Abi/Values/Array.cs | 4 +- .../Experimental/Abi/Values/Tuple.cs | 4 +- .../Formatters/AlgoApiSerializer.cs | 2 +- .../Formatters/StateDeltaFormatter.cs | 2 +- .../NodeServices/Algod/AlgodClient.cs | 2 +- .../NodeServices/Algod/IAlgodClient.cs | 2 +- .../NodeServices/Networking/AlgoApiObject.cs | 2 +- .../SmartContracts/CompiledTeal.cs | 4 +- .../Atomic/AtomicTxn.AsyncSigning.cs | 2 +- .../Transactions/Atomic/AtomicTxn.Signing.cs | 2 +- 20 files changed, 270 insertions(+), 60 deletions(-) diff --git a/Runtime/Algorand.Unity.Collections/FixedStringParseExtensions.cs b/Runtime/Algorand.Unity.Collections/FixedStringParseExtensions.cs index 41a37efb8..2f278da9a 100644 --- a/Runtime/Algorand.Unity.Collections/FixedStringParseExtensions.cs +++ b/Runtime/Algorand.Unity.Collections/FixedStringParseExtensions.cs @@ -5,24 +5,23 @@ namespace Algorand.Unity.Collections public static class FixedStringParseExtensions { internal static bool ParseUlongInternal(ref T fs, ref int offset, out ulong value) - where T : struct, INativeList, IUTF8Bytes + where T : unmanaged, INativeList, IUTF8Bytes { - int digitOffset = offset; + var digitOffset = offset; value = 0; var rune = fs.Peek(offset); - var c = (char)rune.value; while (offset < fs.Length && Unicode.Rune.IsDigit(rune)) { value *= 10; value += (ulong)(fs.Read(ref offset).value - '0'); rune = fs.Peek(offset); } + return digitOffset != offset; } - public static ParseError Parse(ref this T fs, ref int offset, ref long output) - where T : struct, INativeList, IUTF8Bytes + where T : unmanaged, INativeList, IUTF8Bytes { if (!FixedStringMethods.ParseLongInternal(ref fs, ref offset, out long value)) return ParseError.Syntax; @@ -30,9 +29,8 @@ public static ParseError Parse(ref this T fs, ref int offset, ref long output return ParseError.None; } - public static ParseError Parse(ref this T fs, ref int offset, ref ulong output) - where T : struct, INativeList, IUTF8Bytes + where T : unmanaged, INativeList, IUTF8Bytes { if (!ParseUlongInternal(ref fs, ref offset, out ulong value)) return ParseError.Syntax; @@ -40,11 +38,10 @@ public static ParseError Parse(ref this T fs, ref int offset, ref ulong outpu return ParseError.None; } - public static bool Found(ref this T fs, ref int offset, char a, char b, char c, char d) - where T : struct, INativeList, IUTF8Bytes + where T : unmanaged, INativeList, IUTF8Bytes { - int old = offset; + var old = offset; if ((fs.Read(ref offset).value | 32) == a && (fs.Read(ref offset).value | 32) == b && (fs.Read(ref offset).value | 32) == c @@ -54,11 +51,10 @@ public static bool Found(ref this T fs, ref int offset, char a, char b, char return false; } - public static bool Found(ref this T fs, ref int offset, char a, char b, char c, char d, char e) - where T : struct, INativeList, IUTF8Bytes + where T : unmanaged, INativeList, IUTF8Bytes { - int old = offset; + var old = offset; if ((fs.Read(ref offset).value | 32) == a && (fs.Read(ref offset).value | 32) == b && (fs.Read(ref offset).value | 32) == c @@ -69,4 +65,4 @@ public static bool Found(ref this T fs, ref int offset, char a, char b, char return false; } } -} +} \ No newline at end of file diff --git a/Runtime/Algorand.Unity.Collections/NativeTextExtensions.cs b/Runtime/Algorand.Unity.Collections/NativeTextExtensions.cs index c4dd9de73..e11351aa7 100644 --- a/Runtime/Algorand.Unity.Collections/NativeTextExtensions.cs +++ b/Runtime/Algorand.Unity.Collections/NativeTextExtensions.cs @@ -19,5 +19,61 @@ public unsafe static NativeArray AsArray(this NativeText text) #endif return array; } + + internal static bool ParseUlongInternal(ref NativeText fs, ref int offset, out ulong value) + { + var digitOffset = offset; + value = 0; + var rune = fs.Peek(offset); + while (offset < fs.Length && Unicode.Rune.IsDigit(rune)) + { + value *= 10; + value += (ulong)(fs.Read(ref offset).value - '0'); + rune = fs.Peek(offset); + } + + return digitOffset != offset; + } + + public static ParseError Parse(ref this NativeText fs, ref int offset, ref long output) + { + if (!FixedStringMethods.ParseLongInternal(ref fs, ref offset, out long value)) + return ParseError.Syntax; + output = value; + return ParseError.None; + } + + public static ParseError Parse(ref this NativeText fs, ref int offset, ref ulong output) + { + if (!ParseUlongInternal(ref fs, ref offset, out ulong value)) + return ParseError.Syntax; + output = value; + return ParseError.None; + } + + public static bool Found(ref this NativeText fs, ref int offset, char a, char b, char c, char d) + { + var old = offset; + if ((fs.Read(ref offset).value | 32) == a + && (fs.Read(ref offset).value | 32) == b + && (fs.Read(ref offset).value | 32) == c + && (fs.Read(ref offset).value | 32) == d) + return true; + offset = old; + return false; + } + + public static bool Found(ref this NativeText fs, ref int offset, char a, char b, char c, char d, char e) + { + var old = offset; + if ((fs.Read(ref offset).value | 32) == a + && (fs.Read(ref offset).value | 32) == b + && (fs.Read(ref offset).value | 32) == c + && (fs.Read(ref offset).value | 32) == d + && (fs.Read(ref offset).value | 32) == e) + return true; + offset = old; + return false; + } } } diff --git a/Runtime/Algorand.Unity.Encoding/Base64Encoding.cs b/Runtime/Algorand.Unity.Encoding/Base64Encoding.cs index 328aa239c..d512c1607 100644 --- a/Runtime/Algorand.Unity.Encoding/Base64Encoding.cs +++ b/Runtime/Algorand.Unity.Encoding/Base64Encoding.cs @@ -8,14 +8,31 @@ public static class Base64Encoding { public static void CopyToBase64(this TBytes bytes, ref T s) where TBytes : struct, IArray - where T : struct, IUTF8Bytes, INativeList + where T : unmanaged, IUTF8Bytes, INativeList { s.CopyFrom(System.Convert.ToBase64String(bytes.ToArray())); } public static void CopyFromBase64(ref this TByteArray bytes, T s, int maxLength = int.MaxValue) where TByteArray : struct, IArray - where T : struct, IUTF8Bytes, INativeList + where T : unmanaged, IUTF8Bytes, INativeList + { + var managedString = s.ToString(); + var byteArr = System.Convert.FromBase64String(managedString); + var length = math.min(maxLength, byteArr.Length); + for (var i = 0; i < length; i++) + bytes[i] = byteArr[i]; + } + + public static void CopyToBase64(this TBytes bytes, ref NativeText s) + where TBytes : struct, IArray + { + s.CopyFrom(System.Convert.ToBase64String(bytes.ToArray())); + } + + public static void CopyFromBase64(ref this TByteArray bytes, NativeText s, + int maxLength = int.MaxValue) + where TByteArray : struct, IArray { var managedString = s.ToString(); var byteArr = System.Convert.FromBase64String(managedString); @@ -51,4 +68,4 @@ public static int BytesRequiredForBase64Encoding(int currentBytes) return (currentBytes + 2) / 3 * 4; } } -} +} \ No newline at end of file diff --git a/Runtime/Algorand.Unity.Encoding/Utf8StringExtensions.cs b/Runtime/Algorand.Unity.Encoding/Utf8StringExtensions.cs index 3c3c0d828..9702fcc01 100644 --- a/Runtime/Algorand.Unity.Encoding/Utf8StringExtensions.cs +++ b/Runtime/Algorand.Unity.Encoding/Utf8StringExtensions.cs @@ -3,10 +3,10 @@ namespace Algorand.Unity { - public unsafe static class Utf8StringExtensions + public static unsafe class Utf8StringExtensions { public static FormatError Append(ref this T fs, ulong input) - where T : struct, INativeList, IUTF8Bytes + where T : unmanaged, INativeList, IUTF8Bytes { const int maximumDigits = 20; var temp = stackalloc byte[maximumDigits]; @@ -16,33 +16,64 @@ public static FormatError Append(ref this T fs, ulong input) var digit = (byte)(input % 10); temp[--offset] = (byte)('0' + digit); input /= 10; - } - while (input != 0); + } while (input != 0); return fs.Append(temp + offset, maximumDigits - offset); } public static FormatError Append(ref this T fs, bool input) - where T : struct, INativeList, IUTF8Bytes + where T : unmanaged, INativeList, IUTF8Bytes { return input - ? fs.Append("true") - : fs.Append("false") + ? fs.Append("true") + : fs.Append("false") ; } public static byte[] ToByteArray(this T text) - where T : struct, IUTF8Bytes, INativeList + where T : unmanaged, IUTF8Bytes, INativeList + { + var bytes = new byte[text.Length]; + fixed (byte* b = &bytes[0]) + { + UnsafeUtility.MemCpy(b, text.GetUnsafePtr(), text.Length); + } + + return bytes; + } + + public static FormatError Append(ref this NativeText fs, ulong input) + { + const int maximumDigits = 20; + var temp = stackalloc byte[maximumDigits]; + int offset = maximumDigits; + do + { + var digit = (byte)(input % 10); + temp[--offset] = (byte)('0' + digit); + input /= 10; + } while (input != 0); + + return fs.Append(temp + offset, maximumDigits - offset); + } + + public static FormatError Append(ref this NativeText fs, bool input) + { + return input + ? fs.Append("true") + : fs.Append("false") + ; + } + + public static byte[] ToByteArray(this NativeText text) { var bytes = new byte[text.Length]; - unsafe + fixed (byte* b = &bytes[0]) { - fixed (byte* b = &bytes[0]) - { - UnsafeUtility.MemCpy(b, text.GetUnsafePtr(), text.Length); - } + UnsafeUtility.MemCpy(b, text.GetUnsafePtr(), text.Length); } + return bytes; } } -} +} \ No newline at end of file diff --git a/Runtime/Algorand.Unity.Json/JsonReader/JsonReader.String.cs b/Runtime/Algorand.Unity.Json/JsonReader/JsonReader.String.cs index 7a134d61f..710695435 100644 --- a/Runtime/Algorand.Unity.Json/JsonReader/JsonReader.String.cs +++ b/Runtime/Algorand.Unity.Json/JsonReader/JsonReader.String.cs @@ -19,8 +19,43 @@ public JsonReadError ReadString(out string value) } } + public JsonReadError ReadString(ref NativeText value) + { + value.Clear(); + var resetOffset = offset; + var t = Read(); + if (t != JsonToken.String) + { + offset = resetOffset; + return JsonReadError.IncorrectType; + } + while (offset < text.Length) + { + var r = text.Read(ref offset); + t = r.ToJsonToken(); + if (t == JsonToken.String) + break; + if (t == JsonToken.EscapeChar) + { + if (offset >= text.Length) + { + offset = resetOffset; + return JsonReadError.IncorrectFormat; + } + r = text.Read(ref offset); + } + value.Append(r); + } + if (t != JsonToken.String) + { + offset = resetOffset; + return JsonReadError.Overflow; + } + return JsonReadError.None; + } + public JsonReadError ReadString(ref T value) - where T : struct, INativeList, IUTF8Bytes + where T : unmanaged, INativeList, IUTF8Bytes { value.Clear(); var resetOffset = offset; diff --git a/Runtime/Algorand.Unity.Json/JsonReader/JsonReader.cs b/Runtime/Algorand.Unity.Json/JsonReader/JsonReader.cs index 3472ad971..f9ba87386 100644 --- a/Runtime/Algorand.Unity.Json/JsonReader/JsonReader.cs +++ b/Runtime/Algorand.Unity.Json/JsonReader/JsonReader.cs @@ -63,7 +63,22 @@ public JsonReadError Skip() } public JsonReadError ReadRaw(ref T value) - where T : struct, INativeList, IUTF8Bytes + where T : unmanaged, INativeList, IUTF8Bytes + { + value.Clear(); + var startOffset = offset; + var skipErr = Skip(); + if (skipErr != JsonReadError.None) + { + offset = startOffset; + return skipErr; + } + while (startOffset < offset) + value.Append(text.Read(ref startOffset)); + return JsonReadError.None; + } + + public JsonReadError ReadRaw(ref NativeText value) { value.Clear(); var startOffset = offset; diff --git a/Runtime/Algorand.Unity.Json/JsonWriter.cs b/Runtime/Algorand.Unity.Json/JsonWriter.cs index f19666aa3..297504ecd 100644 --- a/Runtime/Algorand.Unity.Json/JsonWriter.cs +++ b/Runtime/Algorand.Unity.Json/JsonWriter.cs @@ -53,7 +53,24 @@ public JsonWriter WriteString(string s) } public JsonWriter WriteString(T fs) - where T : struct, INativeList, IUTF8Bytes + where T : unmanaged, INativeList, IUTF8Bytes + { + WriteChar('"'); + int index = 0; + var rune = fs.Read(ref index); + while (!rune.Equals(Unicode.BadRune)) + { + var c = rune.ToChar(); + if (c == '"') + text.Append('\\'.ToRune()); + text.Append(rune); + rune = fs.Read(ref index); + } + WriteChar('"'); + return this; + } + + public JsonWriter WriteString(NativeText fs) { WriteChar('"'); int index = 0; @@ -101,7 +118,14 @@ public JsonWriter WriteNull() } public JsonWriter WriteObjectKey(T fs) - where T : struct, INativeList, IUTF8Bytes + where T : unmanaged, INativeList, IUTF8Bytes + { + WriteString(fs); + WriteChar(':'); + return this; + } + + public JsonWriter WriteObjectKey(NativeText fs) { WriteString(fs); WriteChar(':'); diff --git a/Runtime/Algorand.Unity.LowLevel/NativeOrderedSet.cs b/Runtime/Algorand.Unity.LowLevel/NativeOrderedSet.cs index 3ea87118b..746ee3821 100644 --- a/Runtime/Algorand.Unity.LowLevel/NativeOrderedSet.cs +++ b/Runtime/Algorand.Unity.LowLevel/NativeOrderedSet.cs @@ -2,6 +2,7 @@ using System.Collections; using System.Collections.Generic; using Unity.Collections; +using Unity.Collections.LowLevel.Unsafe; using Unity.Jobs; namespace Algorand.Unity.LowLevel @@ -16,17 +17,19 @@ public struct NativeOrderedSet public NativeOrderedSet(int initialCapacity, Allocator allocator) { - this.set = new NativeParallelHashSet(initialCapacity, allocator); - this.list = new NativeList(initialCapacity, allocator); + set = new NativeParallelHashSet(initialCapacity, allocator); + list = new NativeList(initialCapacity, allocator); } - public T this[int index] { get => list[index]; } + public ref T this[int index] => ref list.ElementAt(index); + + T IReadOnlyList.this[int index] => this[index]; public int Capacity { get => list.Capacity; set => list.Capacity = value; } public bool IsEmpty => list.IsEmpty; - public int Length { get => list.Length; } + public int Length => list.Length; public int Count => Length; @@ -77,7 +80,7 @@ public int AddIndexOf(T element) if (this[i].Equals(element)) return i; - throw new System.InvalidOperationException("NativeOrderedSet is in invalid state. Set contains an element that does not exist in the list."); + throw new InvalidOperationException("NativeOrderedSet is in invalid state. Set contains an element that does not exist in the list."); } public int IndexOf(T element) @@ -89,7 +92,7 @@ public int IndexOf(T element) if (this[i].Equals(element)) return i; - throw new System.InvalidOperationException("NativeOrderedSet is in invalid state. Set contains an element that does not exist in the list."); + throw new InvalidOperationException("NativeOrderedSet is in invalid state. Set contains an element that does not exist in the list."); } public void Clear() @@ -101,9 +104,9 @@ public void Clear() public ReadOnlySlice> Slice(int start, int count) { if (start > Count) - throw new System.ArgumentOutOfRangeException(nameof(start)); + throw new ArgumentOutOfRangeException(nameof(start)); if (start + count > Count) - throw new System.ArgumentOutOfRangeException(nameof(count)); + throw new ArgumentOutOfRangeException(nameof(count)); return new ReadOnlySlice>(this, start, count); } @@ -111,7 +114,7 @@ public void Clear() public T[] ToArray() { - return list.ToArray(); + return list.AsArray().ToArray(); } public JobHandle Dispose(JobHandle inputDeps) diff --git a/Runtime/Algorand.Unity.MessagePack/MessagePackReader/MessagePackReader.String.cs b/Runtime/Algorand.Unity.MessagePack/MessagePackReader/MessagePackReader.String.cs index 2500eda4e..0f2f84438 100644 --- a/Runtime/Algorand.Unity.MessagePack/MessagePackReader/MessagePackReader.String.cs +++ b/Runtime/Algorand.Unity.MessagePack/MessagePackReader/MessagePackReader.String.cs @@ -19,14 +19,47 @@ public void ReadString(out string s) } public void ReadString(ref T fs) - where T : struct, INativeList, IUTF8Bytes + where T : unmanaged, INativeList, IUTF8Bytes { if (!TryReadString(ref fs)) throw InsufficientBuffer(); } public bool TryReadString(ref T fs) - where T : struct, INativeList, IUTF8Bytes + where T : unmanaged, INativeList, IUTF8Bytes + { + fs.Length = 0; + if (TryReadNil()) + return true; + + var resetOffset = offset; + if (!TryGetStringLengthInBytes(out var length)) + return false; + + for (var i = 0; i < length; i++) + { + if (!TryRead(out byte b)) + { + offset = resetOffset; + return false; + } + var error = fs.AppendRawByte(b); + if (error != FormatError.None) + { + offset = resetOffset; + return false; + } + } + return true; + } + + public void ReadString(ref NativeText fs) + { + if (!TryReadString(ref fs)) + throw InsufficientBuffer(); + } + + public bool TryReadString(ref NativeText fs) { fs.Length = 0; if (TryReadNil()) diff --git a/Runtime/Algorand.Unity/Experimental/Abi/Contract.cs b/Runtime/Algorand.Unity/Experimental/Abi/Contract.cs index 72087b987..eaea1660a 100644 --- a/Runtime/Algorand.Unity/Experimental/Abi/Contract.cs +++ b/Runtime/Algorand.Unity/Experimental/Abi/Contract.cs @@ -152,7 +152,7 @@ public Deployments Deserialize(ref JsonReader reader) } if (!reader.TryRead(JsonToken.ObjectEnd)) JsonReadError.IncorrectFormat.ThrowIfError(reader); - return new Deployments { deployments = deployments.ToArray() }; + return new Deployments { deployments = deployments.AsArray().ToArray() }; } public Deployments Deserialize(ref MessagePackReader reader) diff --git a/Runtime/Algorand.Unity/Experimental/Abi/Values/Array.cs b/Runtime/Algorand.Unity/Experimental/Abi/Values/Array.cs index dc9e57583..221d845fa 100644 --- a/Runtime/Algorand.Unity/Experimental/Abi/Values/Array.cs +++ b/Runtime/Algorand.Unity/Experimental/Abi/Values/Array.cs @@ -46,8 +46,8 @@ public EncodedAbiArg Encode(IAbiType type, AbiReferences references, Allocator a var result = new EncodedAbiArg(allocator); using var k = new UInt16((ushort)value.Length) .Encode(AbiType.UIntN(16), references, Allocator.Persistent); - result.Bytes.AddRange(k.Bytes); - result.Bytes.AddRange(tupleEncoding.Bytes); + result.Bytes.AddRange(k.Bytes.AsArray()); + result.Bytes.AddRange(tupleEncoding.Bytes.AsArray()); return result; } finally diff --git a/Runtime/Algorand.Unity/Experimental/Abi/Values/Tuple.cs b/Runtime/Algorand.Unity/Experimental/Abi/Values/Tuple.cs index 3edb36424..2d185b557 100644 --- a/Runtime/Algorand.Unity/Experimental/Abi/Values/Tuple.cs +++ b/Runtime/Algorand.Unity/Experimental/Abi/Values/Tuple.cs @@ -180,7 +180,7 @@ private void EncodeStaticHead(int t) { boolShift = 0; using var bytes = args.EncodeCurrent(types[t], references, Allocator.Persistent); - headBytes.AddRange(bytes.Bytes); + headBytes.AddRange(bytes.Bytes.AsArray()); } } @@ -221,7 +221,7 @@ private void EncodeStaticTail(int t) private void EncodeDynamicTail(int t) { using var bytes = args.EncodeCurrent(types[t], references, Allocator.Persistent); - tailBytes.AddRange(bytes.Bytes); + tailBytes.AddRange(bytes.Bytes.AsArray()); } private int CountHeadBytesLength(int t) diff --git a/Runtime/Algorand.Unity/Formatters/AlgoApiSerializer.cs b/Runtime/Algorand.Unity/Formatters/AlgoApiSerializer.cs index 25689d9f7..eac8610f1 100644 --- a/Runtime/Algorand.Unity/Formatters/AlgoApiSerializer.cs +++ b/Runtime/Algorand.Unity/Formatters/AlgoApiSerializer.cs @@ -152,7 +152,7 @@ public static NativeList SerializeMessagePack(T obj, Allocator allocato public static byte[] SerializeMessagePack(T obj) { using var listBytes = SerializeMessagePack(obj, Allocator.Persistent); - return listBytes.ToArray(); + return listBytes.AsArray().ToArray(); } /// diff --git a/Runtime/Algorand.Unity/Formatters/StateDeltaFormatter.cs b/Runtime/Algorand.Unity/Formatters/StateDeltaFormatter.cs index 2d6a10d80..a490106d5 100644 --- a/Runtime/Algorand.Unity/Formatters/StateDeltaFormatter.cs +++ b/Runtime/Algorand.Unity/Formatters/StateDeltaFormatter.cs @@ -23,7 +23,7 @@ public StateDelta Deserialize(ref JsonReader reader) } if (!reader.TryRead(JsonToken.ObjectEnd)) JsonReadError.IncorrectFormat.ThrowIfError(reader); - return map.ToArray(); + return map.AsArray().ToArray(); } public StateDelta Deserialize(ref MessagePackReader reader) diff --git a/Runtime/Algorand.Unity/NodeServices/Algod/AlgodClient.cs b/Runtime/Algorand.Unity/NodeServices/Algod/AlgodClient.cs index 4deadadca..4ce328f3e 100644 --- a/Runtime/Algorand.Unity/NodeServices/Algod/AlgodClient.cs +++ b/Runtime/Algorand.Unity/NodeServices/Algod/AlgodClient.cs @@ -67,7 +67,7 @@ public AlgoApiRequest.Sent SendTransaction(SignedTx where T : struct, ITransaction, IEquatable { using var data = AlgoApiSerializer.SerializeMessagePack(txn, Allocator.Persistent); - return RawTransaction(data.ToArray()); + return RawTransaction(data.AsArray().ToArray()); } /// diff --git a/Runtime/Algorand.Unity/NodeServices/Algod/IAlgodClient.cs b/Runtime/Algorand.Unity/NodeServices/Algod/IAlgodClient.cs index 3b8b8b60f..42ad68397 100644 --- a/Runtime/Algorand.Unity/NodeServices/Algod/IAlgodClient.cs +++ b/Runtime/Algorand.Unity/NodeServices/Algod/IAlgodClient.cs @@ -23,7 +23,7 @@ SignedTxn txn where TTxn : struct, ITransaction, System.IEquatable { using var data = AlgoApiSerializer.SerializeMessagePack(txn, Allocator.Persistent); - return client.RawTransaction(data.ToArray()); + return client.RawTransaction(data.AsArray().ToArray()); } /// diff --git a/Runtime/Algorand.Unity/NodeServices/Networking/AlgoApiObject.cs b/Runtime/Algorand.Unity/NodeServices/Networking/AlgoApiObject.cs index 49b0227fd..ab9fc00a3 100644 --- a/Runtime/Algorand.Unity/NodeServices/Networking/AlgoApiObject.cs +++ b/Runtime/Algorand.Unity/NodeServices/Networking/AlgoApiObject.cs @@ -71,7 +71,7 @@ public bool Equals(AlgoApiObject other) public static implicit operator AlgoApiObject(NativeList msgpack) { - return new AlgoApiObject(msgpack.ToArray(), ContentType.MessagePack); + return new AlgoApiObject(msgpack.AsArray().ToArray(), ContentType.MessagePack); } } } diff --git a/Runtime/Algorand.Unity/SmartContracts/CompiledTeal.cs b/Runtime/Algorand.Unity/SmartContracts/CompiledTeal.cs index 8e53ad619..43b6e7a70 100644 --- a/Runtime/Algorand.Unity/SmartContracts/CompiledTeal.cs +++ b/Runtime/Algorand.Unity/SmartContracts/CompiledTeal.cs @@ -64,7 +64,7 @@ public bool Equals(byte[] other) public static implicit operator CompiledTeal(string x) { - using var text = new NativeText(x, Allocator.Persistent); + using var text = new NativeText(x, Allocator.Temp); return text.ToByteArray(); } @@ -72,6 +72,6 @@ public bool Equals(byte[] other) public static implicit operator CompiledTeal(NativeArray.ReadOnly x) => x.ToArray(); - public static implicit operator CompiledTeal(NativeList x) => x.ToArray(); + public static implicit operator CompiledTeal(NativeList x) => x.AsArray().ToArray(); } } diff --git a/Runtime/Algorand.Unity/Transactions/Atomic/AtomicTxn.AsyncSigning.cs b/Runtime/Algorand.Unity/Transactions/Atomic/AtomicTxn.AsyncSigning.cs index 75d541713..ea70d7555 100644 --- a/Runtime/Algorand.Unity/Transactions/Atomic/AtomicTxn.AsyncSigning.cs +++ b/Runtime/Algorand.Unity/Transactions/Atomic/AtomicTxn.AsyncSigning.cs @@ -98,7 +98,7 @@ public AsyncSigning SignWithAsync(T signer, TxnIndices txnsToSign, Cancellati public async UniTask FinishSigningAsync() { using var nativeBytes = await FinishSigningAsync(Allocator.Persistent); - return nativeBytes.ToArray(); + return nativeBytes.AsArray().ToArray(); } /// diff --git a/Runtime/Algorand.Unity/Transactions/Atomic/AtomicTxn.Signing.cs b/Runtime/Algorand.Unity/Transactions/Atomic/AtomicTxn.Signing.cs index 0ebea2dcd..7d5030727 100644 --- a/Runtime/Algorand.Unity/Transactions/Atomic/AtomicTxn.Signing.cs +++ b/Runtime/Algorand.Unity/Transactions/Atomic/AtomicTxn.Signing.cs @@ -55,7 +55,7 @@ public Signing(Transaction[] txns, (int, Method)[] methodIndices) public byte[] FinishSigning() { using var signed = FinishSigning(Allocator.Persistent); - return signed.ToArray(); + return signed.AsArray().ToArray(); } ///