Skip to content

Commit a67e0cb

Browse files
committed
fixed sale contracts encoding
1 parent 5b2a601 commit a67e0cb

3 files changed

Lines changed: 48 additions & 35 deletions

File tree

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ void ABI::Decode(TArray<uint8> Data, TArray<TSharedPtr<ABIElement>> Args)
9797

9898
bool ABI::IsValidSignature(FString Signature)
9999
{
100-
const FRegexPattern FunctionABIRegex(TEXT("^[A-Z|a-z|,-|0-9]+(([A-Z|a-z|0-9]+(, [A-Z|a-z|0-9]+))?)$"));
100+
const FRegexPattern FunctionABIRegex(TEXT("^[a-z]+\\(([a-z0-9\\[\\]]+(,[a-z0-9\\[\\]]+)*)\\)$"));
101101
FRegexMatcher MyMatcher(FunctionABIRegex, Signature);
102102
return MyMatcher.FindNext();
103103
}

Plugins/SequencePlugin/Source/SequencePlugin/Private/Types/ERC1155SaleContract.cpp

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include "Types/ERC1155SaleContract.h"
22
#include "ABI/ABI.h"
3+
#include "Util/Log.h"
34

45
UERC1155SaleContract::UERC1155SaleContract()
56
{
@@ -16,28 +17,28 @@ UERC1155SaleContract::UERC1155SaleContract(FString ContractAddress, FString Paym
1617
FRawTransaction UERC1155SaleContract::MakePurchaseTransaction(const FString& ToAddress, const TArray<int32>& TokenIds, const TArray<int32>& Amounts, const TArray<FString>& Proof)
1718
{
1819
FString FunctionSignature = "mint(address,uint256[],uint256[],bytes,address,uint256,bytes32[])";
19-
20+
2021
FString WalletAddress = ToAddress;
2122
FString WalletAddressNoPrefix = WalletAddress.Mid(2, WalletAddress.Len());
2223
FAddress WalletAddressBytes = FAddress::From(WalletAddressNoPrefix);
2324

24-
TFixedABIData ABIAccount = ABI::Address(WalletAddressBytes);
25+
TSharedPtr<TFixedABIData> ABIAccount = MakeShared<TFixedABIData>(ABI::Address(WalletAddressBytes));
2526

2627
TArray<TSharedPtr<ABIElement>> TokenIdsArray;
2728
for (uint32 TokenId : TokenIds)
2829
{
2930
const TFixedABIData* TokenIdData = new TFixedABIData(ABI::Int32(TokenId));
3031
TokenIdsArray.Add(MakeShared<TFixedABIData>(*TokenIdData));
3132
}
32-
TDynamicABIArray ABIArrayTokenIds(TokenIdsArray);
33+
TSharedPtr<TDynamicABIArray> ABIArrayTokenIds = MakeShared<TDynamicABIArray>(TokenIdsArray);
3334

3435
TArray<TSharedPtr<ABIElement>> AmountsArray;
3536
for (uint32 Amount : Amounts)
3637
{
3738
const TFixedABIData* AmountData = new TFixedABIData(ABI::Int32(Amount));
3839
AmountsArray.Add(MakeShared<TFixedABIData>(*AmountData));
3940
}
40-
TDynamicABIArray ABIArrayAmounts(AmountsArray);
41+
TSharedPtr<TDynamicABIArray> ABIArrayAmounts = MakeShared<TDynamicABIArray>(AmountsArray);
4142

4243
TArray<TSharedPtr<ABIElement>> ProofArray;
4344
for (const FString& ProofEntry : Proof)
@@ -49,28 +50,33 @@ FRawTransaction UERC1155SaleContract::MakePurchaseTransaction(const FString& ToA
4950
const TFixedABIData* ProofData = new TFixedABIData(ProofBytes);
5051
ProofArray.Add(MakeShared<TFixedABIData>(*ProofData));
5152
}
52-
TDynamicABIArray ABIArrayProof(ProofArray);
53-
54-
TDynamicABIData ABIData = ABI::String(Data);
55-
TFixedABIData ABIAddressPayment = ABI::Address(FAddress::From(PaymentToken.Mid(2, PaymentToken.Len())));
56-
TFixedABIData ABIAmount = ABI::UInt32(MaxTotal);
53+
TSharedPtr<TDynamicABIArray> ABIArrayProof = MakeShared<TDynamicABIArray>(ProofArray);
5754

55+
TSharedPtr<TDynamicABIData> ABIData = MakeShared<TDynamicABIData>(ABI::String(Data));
56+
TSharedPtr<TFixedABIData> ABIAddressPayment = MakeShared<TFixedABIData>(ABI::Address(FAddress::From(PaymentToken.Mid(2, PaymentToken.Len()))));
57+
TSharedPtr<TFixedABIData> ABIAmount = MakeShared<TFixedABIData>(ABI::UInt32(MaxTotal));
5858

59-
TArray<ABIElement*> Arr;
60-
Arr.Add(&ABIAccount);
61-
Arr.Add(&ABIArrayTokenIds);
62-
Arr.Add(&ABIArrayAmounts);
63-
Arr.Add(&ABIData);
64-
Arr.Add(&ABIAddressPayment);
65-
Arr.Add(&ABIAmount);
66-
Arr.Add(&ABIArrayProof);
6759

68-
FUnsizedData EncodedData = ABI::Encode(FunctionSignature, Arr);
60+
TArray<TSharedPtr<ABIElement>> Arr;
61+
Arr.Add(ABIAccount);
62+
Arr.Add(ABIArrayTokenIds);
63+
Arr.Add(ABIArrayAmounts);
64+
Arr.Add(ABIData);
65+
Arr.Add(ABIAddressPayment);
66+
Arr.Add(ABIAmount);
67+
Arr.Add(ABIArrayProof);
6968

69+
TOptional<FUnsizedData> EncodedData = ABI::Encode(FunctionSignature, Arr);
7070
FRawTransaction T;
71+
72+
if (!EncodedData.IsSet())
73+
{
74+
SEQ_LOG(Display, TEXT("Encoded data is invalid"));
75+
return T;
76+
}
7177

7278
T.to = ContractAddress;
73-
T.data = "0x" + EncodedData.ToHex();
79+
T.data = "0x" + EncodedData.GetValue().ToHex();
7480
T.value = "0";
7581
return T;
7682
}

Plugins/SequencePlugin/Source/SequencePlugin/Private/Types/ERC721SaleContract.cpp

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include "Types/ERC721SaleContract.h"
22
#include "ABI/ABI.h"
3+
#include "Util/Log.h"
34

45
UERC721SaleContract::UERC721SaleContract()
56
{
@@ -19,39 +20,45 @@ FRawTransaction UERC721SaleContract::MakePurchaseTransaction(const FString& ToAd
1920

2021
FString ToAddressNoPrefix = ToAddress.Mid(2, ToAddress.Len());
2122
FAddress ToAddressBytes = FAddress::From(ToAddressNoPrefix);
22-
TFixedABIData ABIAccountTo = ABI::Address(ToAddressBytes);
23+
TSharedPtr<TFixedABIData> ABIAccountTo = MakeShared<TFixedABIData>(ABI::Address(ToAddressBytes));
2324

24-
TFixedABIData ABIAmount = ABI::Int32(Amount);
25+
TSharedPtr<TFixedABIData> ABIAmount = MakeShared<TFixedABIData>(ABI::Int32(Amount));
2526

2627
FString PaymentTokenNoPrefix = PaymentToken.Mid(2, PaymentToken.Len());
2728
FAddress PaymentTokenBytes = FAddress::From(PaymentTokenNoPrefix);
28-
TFixedABIData ABIAddressPayment = ABI::Address(PaymentTokenBytes);
29+
TSharedPtr<TFixedABIData> ABIAddressPayment = MakeShared<TFixedABIData>(ABI::Address(PaymentTokenBytes));
2930

30-
TFixedABIData ABIMaxTotal = ABI::Int32(MaxTotal);
31+
TSharedPtr<TFixedABIData> ABIMaxTotal = MakeShared<TFixedABIData>(ABI::Int32(MaxTotal));
3132

3233
TArray<TSharedPtr<ABIElement>> ProofArray;
3334
for (const FString& ProofEntry : Proof)
3435
{
3536
TArray<uint8> ProofBytes;
3637
ProofBytes.SetNumUninitialized(32);
3738
FMemory::Memcpy(ProofBytes.GetData(), TCHAR_TO_UTF8(*ProofEntry), FMath::Min(ProofEntry.Len(), 32));
38-
39+
3940
const TFixedABIData* ProofData = new TFixedABIData(ProofBytes);
4041
ProofArray.Add(MakeShared<TFixedABIData>(*ProofData));
4142
}
42-
TDynamicABIArray ABIArrayProof(ProofArray);
43-
44-
TArray<ABIElement*> Arr;
45-
Arr.Add(&ABIAccountTo);
46-
Arr.Add(&ABIAmount);
47-
Arr.Add(&ABIAddressPayment);
48-
Arr.Add(&ABIMaxTotal);
49-
Arr.Add(&ABIArrayProof);
43+
TSharedPtr<TDynamicABIArray> ABIArrayProof = MakeShared<TDynamicABIArray>(ProofArray);
5044

51-
FUnsizedData EncodedData = ABI::Encode(FunctionSignature, Arr);
45+
TArray<TSharedPtr<ABIElement>> Arr;
46+
Arr.Add(ABIAccountTo);
47+
Arr.Add(ABIAmount);
48+
Arr.Add(ABIAddressPayment);
49+
Arr.Add(ABIMaxTotal);
50+
Arr.Add(ABIArrayProof);
5251

52+
TOptional<FUnsizedData> EncodedData = ABI::Encode(FunctionSignature, Arr);
5353
FRawTransaction T;
54-
T.data = "0x" + EncodedData.ToHex();
54+
55+
if (!EncodedData.IsSet())
56+
{
57+
SEQ_LOG(Display, TEXT("Encoded data is invalid"));
58+
return T;
59+
}
60+
61+
T.data = "0x" + EncodedData.GetValue().ToHex();
5562
T.to = ContractAddress;
5663
T.value = "0";
5764

0 commit comments

Comments
 (0)