Skip to content

Commit 945c7d2

Browse files
committed
Merge branch 'master' into feature/listAccountsIntent
2 parents 131e58a + 0418be7 commit 945c7d2

25 files changed

Lines changed: 1540 additions & 530 deletions
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
version https://git-lfs.github.com/spec/v1
2-
oid sha256:50bb71756e9653a7e53d27382c9cbbb8840158b71dc4fc644726b891dde7cc1b
3-
size 1756023
2+
oid sha256:10573b8cbd7d0227e1b076717a6f3ad32df4d95bb13ba798d3d581713ed13b23
3+
size 1779559
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
version https://git-lfs.github.com/spec/v1
2-
oid sha256:302ed79846bfceb18d24b4b894fadadaab5b197ee231c9d86e5cd0bf9af424f1
3-
size 2371483
2+
oid sha256:c9e98f46668233166316278e81da225edcc5b5dec838547eff17f2473d3fb020
3+
size 2374223

Plugins/SequencePlugin/Source/SequencePlugin/Private/ABI/ABI.cpp

Lines changed: 60 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,31 @@
11
// Copyright 2024 Horizon Blockchain Games Inc. All rights reserved.
22

33
#include "ABI/ABI.h"
4-
#include "ABI/ABIEncodeable.h"
4+
#include "ABI/ABIElement.h"
55
#include "Eth/Crypto.h"
66
#include "Types/BinaryData.h"
77

88
TFixedABIData ABI::UInt32(uint32 Input)
99
{
1010
TArray<uint8> Arr;
11-
ABIEncodeable::PushEmptyBlock(Arr);
12-
ABIEncodeable::CopyInUInt32(Arr, Input, 0);
11+
ABIElement::PushEmptyBlock(Arr);
12+
ABIElement::CopyInUInt32(Arr, Input, 0);
1313
return TFixedABIData(Arr);
1414
}
1515

1616
TFixedABIData ABI::Int32(int32 Input)
1717
{
1818
TArray<uint8> Arr;
19-
ABIEncodeable::PushEmptyBlock(Arr);
20-
ABIEncodeable::CopyInInt32(Arr, Input, 0);
19+
ABIElement::PushEmptyBlock(Arr);
20+
ABIElement::CopyInInt32(Arr, Input, 0);
2121
return TFixedABIData(Arr);
2222
}
2323

2424
TFixedABIData ABI::Bool(bool Input)
2525
{
2626
TArray<uint8> Arr;
27-
ABIEncodeable::PushEmptyBlock(Arr);
28-
if(Input)
29-
{
30-
Arr[GBlockByteLength - 1] = 0x00;
31-
}
27+
ABIElement::PushEmptyBlock(Arr);
28+
Arr[GBlockByteLength - 1] = Input ? 0x01 : 0x00;
3229
return TFixedABIData(Arr);
3330
}
3431

@@ -51,22 +48,70 @@ TDynamicABIData ABI::String(FString Input)
5148
return TDynamicABIData(Arr);
5249
}
5350

54-
FUnsizedData ABI::Encode(FString Signature, TArray<ABIEncodeable*> Arr)
51+
52+
// DEPRECATED
53+
FUnsizedData ABI::Encode(FString Signature, TArray<ABIElement*> Args)
54+
{
55+
TArray<TSharedPtr<ABIElement>> NewArgs;
56+
for(auto i = 0; i < Args.Num(); i++)
57+
{
58+
NewArgs.Push(Args[i]->Clone());
59+
}
60+
61+
TOptional<FUnsizedData> Encoded = Encode(Signature, NewArgs);
62+
63+
if(Encoded.IsSet())
64+
{
65+
return Encoded.GetValue();
66+
}
67+
else
68+
{
69+
return FUnsizedData { TArray<uint8>() };
70+
}
71+
}
72+
73+
TOptional<FUnsizedData> ABI::Encode(FString Signature, TArray<TSharedPtr<ABIElement>> Args)
5574
{
56-
TFixedABIArray FixedArr(Arr);
75+
if(!IsValidSignature(Signature))
76+
{
77+
UE_LOG(LogTemp, Display, TEXT("Invalid signature! Remember that ABI signatures should only contain argument types without spaces and NOT names."));
78+
return TOptional<FUnsizedData>();
79+
}
80+
81+
TFixedABIArray FixedArr(Args);
5782
FUnsizedData Data {
5883
FixedArr.Encode()
5984
};
6085
FUnsizedData SignatureData = StringToUTF8(Signature);
6186
FHash256 Hash = GetKeccakHash(SignatureData);
62-
Data.Arr->Insert(Hash.Ptr(), 4, 0);
87+
Data.Arr->Insert(Hash.Ptr(), GSignatureLength, 0);
6388
return Data;
6489
}
6590

66-
FString ABI::Display(FString Signature, TArray<ABIEncodeable*> Arr)
91+
void ABI::Decode(TArray<uint8> Data, TArray<TSharedPtr<ABIElement>> Args)
92+
{
93+
TFixedABIArray FixedArr(Args);
94+
FixedArr.Decode(Data, GSignatureLength, GSignatureLength);
95+
}
96+
97+
bool ABI::IsValidSignature(FString Signature)
98+
{
99+
const FRegexPattern FunctionABIRegex(TEXT("^[A-Z|a-z|,-|0-9]+(([A-Z|a-z|0-9]+(, [A-Z|a-z|0-9]+))?)$"));
100+
FRegexMatcher MyMatcher(FunctionABIRegex, Signature);
101+
return MyMatcher.FindNext();
102+
}
103+
104+
FString ABI::Display(FString Signature, TArray<TSharedPtr<ABIElement>> Args)
67105
{
68106
FString Str = "";
69-
FString Reference = Encode(Signature, Arr).ToHex();
107+
TOptional<FUnsizedData> Encoded = Encode(Signature, Args);
108+
109+
if(!Encoded.IsSet())
110+
{
111+
return "Signature not valid!";
112+
}
113+
114+
FString Reference = Encoded.GetValue().ToHex();
70115

71116
for(int i = 0; i < Reference.Len(); i++)
72117
{

0 commit comments

Comments
 (0)