Skip to content
This repository was archived by the owner on Feb 12, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Plugins/unreal-immutable-sdk
Submodule unreal-immutable-sdk updated 44 files
+43 −49 Immutable.uplugin
+9 −2 Source/Immutable/Immutable.Build.cs
+10 −7 Source/Immutable/Private/Immutable/ImtblBlui.cpp
+7 −1 Source/Immutable/Private/Immutable/Tests/ImtblMessagesTest.cpp
+19 −0 Source/ImmutablePluginManager/ImmutablePluginManager.Build.cs
+129 −0 Source/ImmutablePluginManager/Private/ImmutablePluginManager.cpp
+25 −0 Source/ImmutablePluginManager/Public/ImmutablePluginManager.h
+23 −0 Source/ImmutablezkEVMAPI/.openapi-generator-ignore
+377 −0 Source/ImmutablezkEVMAPI/.openapi-generator/FILES
+1 −0 Source/ImmutablezkEVMAPI/.openapi-generator/VERSION
+56 −0 Source/ImmutablezkEVMAPI/Private/APIBid.cpp
+5 −0 Source/ImmutablezkEVMAPI/Private/APIMarket.cpp
+4 −0 Source/ImmutablezkEVMAPI/Private/APIMetadataSearchApiOperations.cpp
+2 −0 Source/ImmutablezkEVMAPI/Private/APINFTBundle.cpp
+8 −0 Source/ImmutablezkEVMAPI/Private/APIPricingApiOperations.cpp
+2 −0 Source/ImmutablezkEVMAPI/Private/APIStackBundle.cpp
+46 −0 Source/ImmutablezkEVMAPI/Public/APIBid.h
+1 −1 Source/ImmutablezkEVMAPI/Public/APICancelOrdersRequestBody.h
+31 −0 Source/ImmutablezkEVMAPI/Public/APIHelpers.h
+3 −0 Source/ImmutablezkEVMAPI/Public/APIMarket.h
+2 −0 Source/ImmutablezkEVMAPI/Public/APIMetadataSearchApiOperations.h
+4 −1 Source/ImmutablezkEVMAPI/Public/APINFTBundle.h
+1 −6 Source/ImmutablezkEVMAPI/Public/APINFTMetadataAttribute.h
+4 −0 Source/ImmutablezkEVMAPI/Public/APIPricingApiOperations.h
+3 −0 Source/ImmutablezkEVMAPI/Public/APIStackBundle.h
+1 −6 Source/ImmutablezkEVMAPI/README.md
+13 −0 Source/ImmutablezkEVMAPI/openapi-generator/batch-files/generate.bat
+11 −0 Source/ImmutablezkEVMAPI/openapi-generator/batch-files/generate.sh
+7 −0 Source/ImmutablezkEVMAPI/openapi-generator/batch-files/openapitools.json
+20 −0 Source/ImmutablezkEVMAPI/openapi-generator/template/cpp-ue4/Build.cs.mustache
+55 −0 Source/ImmutablezkEVMAPI/openapi-generator/template/cpp-ue4/api-header.mustache
+67 −0 Source/ImmutablezkEVMAPI/openapi-generator/template/cpp-ue4/api-operations-header.mustache
+330 −0 Source/ImmutablezkEVMAPI/openapi-generator/template/cpp-ue4/api-operations-source.mustache
+160 −0 Source/ImmutablezkEVMAPI/openapi-generator/template/cpp-ue4/api-source.mustache
+501 −0 Source/ImmutablezkEVMAPI/openapi-generator/template/cpp-ue4/helpers-header.mustache
+226 −0 Source/ImmutablezkEVMAPI/openapi-generator/template/cpp-ue4/helpers-source.mustache
+11 −0 Source/ImmutablezkEVMAPI/openapi-generator/template/cpp-ue4/licenseInfo.mustache
+100 −0 Source/ImmutablezkEVMAPI/openapi-generator/template/cpp-ue4/model-base-header.mustache
+40 −0 Source/ImmutablezkEVMAPI/openapi-generator/template/cpp-ue4/model-base-source.mustache
+74 −0 Source/ImmutablezkEVMAPI/openapi-generator/template/cpp-ue4/model-header.mustache
+185 −0 Source/ImmutablezkEVMAPI/openapi-generator/template/cpp-ue4/model-source.mustache
+15 −0 Source/ImmutablezkEVMAPI/openapi-generator/template/cpp-ue4/module-header.mustache
+13 −0 Source/ImmutablezkEVMAPI/openapi-generator/template/cpp-ue4/module-source.mustache
+0 −9,957 Source/ImmutablezkEVMAPI/openapi.json
Original file line number Diff line number Diff line change
Expand Up @@ -85,13 +85,28 @@ void USearchStacksItemWidget::SetName(const FString& Name)

void USearchStacksItemWidget::SetPrice(const ImmutablezkEVMAPI::APIMarketPriceDetails& PriceDetails)
{
if (NFTLowestPrice && PriceDetails.Token.Decimals.IsSet())
if (!NFTLowestPrice)
{
FString Price = FMathUtility::ConvertWeiStringToFloatValueString(PriceDetails.Token.Decimals.GetValue(), PriceDetails.Amount);
return;
}

if (const ImmutablezkEVMAPI::APIMarketPriceERC20Token* APIMarketPriceERC20Token = PriceDetails.Token.OneOf.TryGet<ImmutablezkEVMAPI::APIMarketPriceERC20Token>())
{
const TOptional<int32>& Decimals = APIMarketPriceERC20Token->Decimals;

if (Decimals.IsSet())
{
FString Price = FMathUtility::ConvertWeiStringToFloatValueString(Decimals.GetValue(), PriceDetails.Amount);

NFTLowestPrice->SetText(FText::FromString(Price));
}

NFTLowestPrice->SetText(FText::FromString(Price));
const TOptional<FString>& Symbol = APIMarketPriceERC20Token->Symbol;

SetPriceTokenName(PriceDetails.Token.Symbol.GetValue());
if (Symbol.IsSet())
{
SetPriceTokenName(Symbol.GetValue());
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,11 +79,14 @@ void USearchStacksListingWidget::ProcessModel(const ImmutablezkEVMAPI::Model& Da

if (StackBundle.Stack.Attributes.IsSet())
{
for (auto Attribute : StackBundle.Stack.Attributes.GetValue())
for (const ImmutablezkEVMAPI::APINFTMetadataAttribute& Attribute : StackBundle.Stack.Attributes.GetValue())
{
TSharedPtr<FJsonValue> Value;
const FString* AttributeValue = Attribute.Value.OneOf.TryGet<FString>();

AddMetadataAttribute(Attribute.TraitType, Attribute.Value);
if (ensureAlways(AttributeValue))
{
AddMetadataAttribute(Attribute.TraitType, *AttributeValue);
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
#include "ImmutablezkEVMAPI/Public/APIFee.h"
#include "UI/Utility/MathUtility.h"


void USearchStacksListing_ListingsWidget::AddItem(const ImmutablezkEVMAPI::APIListing& Listing, bool IsIdEven, const UItemWidget::FOnSelectionChange& InOnSelectionChangeDelegate)
{
if (ScrollBoxListings)
Expand All @@ -17,38 +16,41 @@ void USearchStacksListing_ListingsWidget::AddItem(const ImmutablezkEVMAPI::APILi

if (ScrollBoxSlot)
{
auto Decimals = Listing.PriceDetails.Token.Decimals;

if (Decimals.IsSet())
if (const ImmutablezkEVMAPI::APIMarketPriceERC20Token* APIMarketPriceERC20Token = Listing.PriceDetails.Token.OneOf.TryGet<ImmutablezkEVMAPI::APIMarketPriceERC20Token>())
{
FString Price = FMathUtility::ConvertWeiStringToFloatValueString(Decimals.GetValue(), Listing.PriceDetails.Amount);
FString FeeProtocol, FeeRoyalty;
const TOptional<int32>& Decimals = APIMarketPriceERC20Token->Decimals;

for (const auto& Fee : Listing.PriceDetails.Fees)
if (Decimals.IsSet())
{
switch(static_cast<ImmutablezkEVMAPI::APIFee::TypeEnum>(Fee.Type))
FString Price = FMathUtility::ConvertWeiStringToFloatValueString(Decimals.GetValue(), Listing.PriceDetails.Amount);
FString FeeProtocol, FeeRoyalty;

for (const auto& Fee : Listing.PriceDetails.Fees)
{
case ImmutablezkEVMAPI::APIFee::TypeEnum::Protocol:
FeeProtocol = FMathUtility::ConvertWeiStringToFloatValueString(Decimals.GetValue(), Fee.Amount);
break;
case ImmutablezkEVMAPI::APIFee::TypeEnum::Royalty:
FeeRoyalty = FMathUtility::ConvertWeiStringToFloatValueString(Decimals.GetValue(), Fee.Amount);
break;
default:;
switch (static_cast<ImmutablezkEVMAPI::APIFee::TypeEnum>(Fee.Type))
{
case ImmutablezkEVMAPI::APIFee::TypeEnum::Protocol:
FeeProtocol = FMathUtility::ConvertWeiStringToFloatValueString(Decimals.GetValue(), Fee.Amount);
break;
case ImmutablezkEVMAPI::APIFee::TypeEnum::Royalty:
FeeRoyalty = FMathUtility::ConvertWeiStringToFloatValueString(Decimals.GetValue(), Fee.Amount);
break;
default: ;
}
}
}

ListingsItemWidget->RegisterOnSelectionChange(InOnSelectionChangeDelegate);
ListingsItemWidget->SetIsOwned(Listing.Creator.Equals(GetOwningCustomLocalPLayer()->GetPassportWalletAddress()));
ListingsItemWidget->SetListingId(Listing.ListingId);
ListingsItemWidget->SetData(Listing.TokenId,
Listing.Amount,
FeeProtocol,
FeeRoyalty,
Price,
Listing.PriceDetails.Token.Symbol.GetValue(),
IsIdEven);
ListingsItemWidget->Show();
ListingsItemWidget->RegisterOnSelectionChange(InOnSelectionChangeDelegate);
ListingsItemWidget->SetIsOwned(Listing.Creator.Equals(GetOwningCustomLocalPLayer()->GetPassportWalletAddress()));
ListingsItemWidget->SetListingId(Listing.ListingId);

const TOptional<FString>& Symbol = APIMarketPriceERC20Token->Symbol;
if (Symbol.IsSet())
{
ListingsItemWidget->SetData(Listing.TokenId, Listing.Amount, FeeProtocol, FeeRoyalty, Price, Symbol.GetValue(), IsIdEven);
}

ListingsItemWidget->Show();
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ void USearchStacksWidget::RefreshItemList(TOptional<FString> PageCursor)
*
* @param SearchStacksRequest The request object to be passed to SearchStacks method of the Immutable zkEVM API.
* Must-be parameters:
* - AccountAddress: The wallet address of the owning custom local player.
* - ContractAddress: The contract address of NFT we are searching for, retrieved from the policy.
* - ChainName: The name of the blockchain chain .
* Optional parameters:
Expand All @@ -70,7 +69,6 @@ void USearchStacksWidget::RefreshItemList(TOptional<FString> PageCursor)

SearchStacksRequest.PageSize = ListPanel->GetNumberOfColumns() * ListPanel->GetNumberOfRows();
SearchStacksRequest.PageCursor = PageCursor;
SearchStacksRequest.AccountAddress = GetOwningCustomLocalPLayer()->GetPassportWalletAddress();
SearchStacksRequest.ContractAddress = Policy->GetContracts();
SearchStacksRequest.ChainName = Policy->GetChainName();
SearchStacksRequest.OnlyIfHasActiveListings = true;
Expand Down