Skip to content

Commit

Permalink
Problem: Missing SendEip155Transaction on Metaverse demo (fix cronos-…
Browse files Browse the repository at this point in the history
  • Loading branch information
damoncro authored Apr 17, 2023
1 parent 4513c9f commit 09af406
Show file tree
Hide file tree
Showing 13 changed files with 234 additions and 40 deletions.
Binary file not shown.
2 changes: 1 addition & 1 deletion Metaverse/Source/Metaverse/MetaverseCharacter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ void AMetaverseCharacter::SetAccount(FText account) {
MetaverseOverlay->SetAccount(AttributeComponent->GetAccount()); // display
}

void AMetaverseCharacter::SetInitialBalance(FText account) {
void AMetaverseCharacter::SetBalance(FText account) {
ADefiWalletCoreActor *DefiWalletCore =
DefiWalletCoreComponent->GetDefiWalletCore();
if (DefiWalletCore) {
Expand Down
2 changes: 1 addition & 1 deletion Metaverse/Source/Metaverse/MetaverseCharacter.h
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ class AMetaverseCharacter : public ACharacter {
void AddCoin(float value);
void ShowQR(UTexture2D *QRTexture);
void HideQR();
void SetInitialBalance(FText account);
void SetBalance(FText account);

UFUNCTION(BlueprintCallable,
meta = (DisplayName = "CreateDynamicContract",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,10 @@ void UDefiWalletCoreComponent::Setup() {
// NewDefiWalletCore->myCronosChainID = 1;
// NewDefiWalletCore->myCronosRpc =
// "https://api.infura.io/v1/jsonrpc/mainnet";
NewDefiWalletCore->myCronosChainID = 25;
NewDefiWalletCore->myCronosRpc = "https://evm-dev.cronos.org/";
// NewDefiWalletCore->myCronosChainID = 338;
// NewDefiWalletCore->myCronosRpc = "https://evm-t3.cronos.org";
// NewDefiWalletCore->myCronosChainID = 25;
// NewDefiWalletCore->myCronosRpc = "https://evm-dev.cronos.org/";
NewDefiWalletCore->myCronosChainID = 338;
NewDefiWalletCore->myCronosRpc = "https://evm-t3.cronos.org";
UE_LOG(LogTemp, Display, TEXT("%s was created"),
*NewDefiWalletCore->GetActorNameOrLabel());
_DefiWalletCore = NewDefiWalletCore;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,6 @@ void UWalletConnectTriggerComponent::BeginPlay() {
Super::BeginPlay();

UE_LOG(LogTemp, Display, TEXT("WalletConnect Trigger Commponent Alive"));

OnWalletconnectSignPersonalDelegate.BindDynamic(
this,
&UWalletConnectTriggerComponent::OnWalletconnectSignPersonalFinished);
OnWalletconnectSignEip155TransactionDelegate.BindDynamic(
this, &UWalletConnectTriggerComponent::OnWalletconnectSignEip155TransactionFinished);
}

void UWalletConnectTriggerComponent::TickComponent(
Expand All @@ -39,7 +33,7 @@ APlayCppSdkActor *UWalletConnectTriggerComponent::Setup() {
FString url = "http://localhost:8080/";
TArray<FString> icon_urls;
FString name = "New Defi WalletConnect Web3 Example";
int64 chain_id = 25;
int64 chain_id = 338;
EConnectionType connection_type = EConnectionType::QR_TEXTURE;

if (PlayCppSdk) {
Expand Down Expand Up @@ -211,11 +205,6 @@ void UWalletConnectTriggerComponent::SignPersonal(FString message) {
}
}

void UWalletConnectTriggerComponent::OnWalletconnectSignPersonalFinished(
FWalletSignTXEip155Result SigningResult) {
UE_LOG(LogTemp, Log, TEXT("Signing Signature: %s, Result: %s"),
*UUtlis::ToHex(SigningResult.signature), *SigningResult.result);
}

void UWalletConnectTriggerComponent::OnRestoreSessionReadySignPersonalFinished(
FWalletConnectEnsureSessionResult SessionResult, FString Result) {
Expand Down Expand Up @@ -292,12 +281,6 @@ void UWalletConnectTriggerComponent::SignEip155Transaction(
}
}

void UWalletConnectTriggerComponent::
OnWalletconnectSignEip155TransactionFinished(
FWalletSignTXEip155Result SigningResult) {
UE_LOG(LogTemp, Log, TEXT("Signing Signature: %s, Result: %s"),
*UUtlis::ToHex(SigningResult.signature), *SigningResult.result);
}

void UWalletConnectTriggerComponent::
OnRestoreSessionReadySignEip155TransactionFinished(
Expand Down Expand Up @@ -332,6 +315,85 @@ void UWalletConnectTriggerComponent::
_WalletConnectTxEip155, OnWalletconnectSignEip155TransactionDelegate);
}

//
// SendEip155Transaction
//
void UWalletConnectTriggerComponent::SendEip155Transaction(
FWalletConnectTxEip155 info) {

_PlayCppSdk = this->Setup();
_WalletConnectTxEip155 = info; // set the interal value

UE_LOG(LogTemp, Display, TEXT("%s walletconnect status: %s"),
*_PlayCppSdk->GetActorNameOrLabel(),
*UEnum::GetValueAsString(
_PlayCppSdk->GetWalletConnectSessionInfo().sessionstate))
switch (_PlayCppSdk->GetWalletConnectSessionInfo().sessionstate) {
case EWalletconnectSessionState::StateInit:
case EWalletconnectSessionState::StateDisconnected: {

_PlayCppSdk->OnRestoreSessionReady.BindDynamic(
this, &UWalletConnectTriggerComponent::OnRestoreSessionReadySendEip155TransactionFinished);

_PlayCppSdk->OnNewSessionReady.BindDynamic(
this, &UWalletConnectTriggerComponent::OnNewSessionReadySendEip155TransactionFinished);

_PlayCppSdk->OnQRReady.BindDynamic(
this, &UWalletConnectTriggerComponent::OnQRReadyFinished);

break;
}
case EWalletconnectSessionState::StateConnecting:
break;
case EWalletconnectSessionState::StateConnected:
case EWalletconnectSessionState::StateRestored:
case EWalletconnectSessionState::StateUpdated: {

_PlayCppSdk->SendEip155Transaction(
info, OnWalletconnectSendEip155TransactionDelegate);

break;
}
default:
break;
}
}

void UWalletConnectTriggerComponent::
OnRestoreSessionReadySendEip155TransactionFinished(
FWalletConnectEnsureSessionResult SessionResult, FString Result) {
UE_LOG(LogTemp, Log,
TEXT("OnRestoreSession Account[0]: %s, Chain id: %d, Result: %s"),
SessionResult.addresses.Num() > 0
? *UUtlis::ToHex(SessionResult.addresses[0].address)
: *FString("No Addresses"),
SessionResult.chain_id, *Result);

// Send Eip155
_PlayCppSdk->SendEip155Transaction(
_WalletConnectTxEip155, OnWalletconnectSendEip155TransactionDelegate);
}

void UWalletConnectTriggerComponent::
OnNewSessionReadySendEip155TransactionFinished(
FWalletConnectEnsureSessionResult SessionResult, FString Result) {
FString address = SessionResult.addresses.Num() > 0
? UUtlis::ToHex(SessionResult.addresses[0].address)
: FString("No Addresses");
int64 chain_id = SessionResult.chain_id;
UE_LOG(LogTemp, Log,
TEXT("OnNewSession Account[0]: %s, Chain id: %d, Result: %s"),
*address, chain_id, *Result);
// Hide QR
this->OnHideQRAndUpdateOverlay.ExecuteIfBound(address, chain_id);

// SendEip155Transaction
_PlayCppSdk->SendEip155Transaction(
_WalletConnectTxEip155, OnWalletconnectSendEip155TransactionDelegate);
}



//
// Disconnect
//
Expand Down
2 changes: 1 addition & 1 deletion Metaverse/Source/Metaverse/Private/NPC/Help.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ void AHelp::HideQRAndUpdateOverlay(FString Address, int64 ChainID) {
MetaverseCharacter->SetAccount(
FText::FromString(FString::Printf(TEXT("0x%s"), *Address)));

MetaverseCharacter->SetInitialBalance(
MetaverseCharacter->SetBalance(
FText::FromString(FString::Printf(TEXT("0x%s"), *Address)));

MetaverseCharacter->HideQR();
Expand Down
55 changes: 55 additions & 0 deletions Metaverse/Source/Metaverse/Private/NPC/SendEthTransaction.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
// Copyright 2022, Cronos Labs. All Rights Reserved

#include "NPC/SendEthTransaction.h"

#include "Components/PrimitiveComponent.h"
#include "Components/WalletConnectTriggerComponent.h"
#include "../../MetaverseCharacter.h"
#include "PlayCppSdkActor.h"
#include "Utlis.h"

// Called when the game starts or when spawned
void ASendEthTransaction::BeginPlay() {
Super::BeginPlay();
GetWalletConnectTriggerComponent()->OnComponentBeginOverlap.AddDynamic(
this, &ASendEthTransaction::OnSendEthTransactionBeginOverlap);
}

void ASendEthTransaction::OnSendEthTransactionBeginOverlap(
UPrimitiveComponent *OverlappedComponent, AActor *OtherActor,
UPrimitiveComponent *OtherComp, int32 OtherBodyIndex, bool bFromSweep,
const FHitResult &SweepResult) {
MetaverseCharacter = Cast<AMetaverseCharacter>(OtherActor);
if (MetaverseCharacter->GetAccount().IsEmpty()) {
MetaverseCharacter->SetAccount(
FText::FromString(FString::Printf(TEXT("Plase scan QR Code"))));
} else {
MetaverseCharacter->SetAccount(MetaverseCharacter->GetAccount());
}

UWalletConnectTriggerComponent *WalletConnectTriggerComponent =
GetWalletConnectTriggerComponent();

WalletConnectTriggerComponent->OnWalletconnectSendEip155TransactionDelegate
.BindDynamic(
this,
&ASendEthTransaction::OnWalletconnectSendEip155TransactionFinished);

FWalletConnectTxEip155 tx;
tx.to = FString("0xA914161b1b8d9dbC9c5310Fc7EBee5A5B18044b7");
tx.value = FString("1000000000000000000");
WalletConnectTriggerComponent->SendEip155Transaction(tx);

WalletConnectTriggerComponent->OnShowQR.BindDynamic(this, &Super::ShowQR);
}

void ASendEthTransaction::OnWalletconnectSendEip155TransactionFinished(
FWalletSendTXEip155Result SendResult) {
UE_LOG(LogTemp, Log, TEXT("Transaction Hash: %s, Result: %s"),
*UUtlis::ToHex(SendResult.tx_hash), *SendResult.result);
// Update new balance
// TODO Check transaction receipt before querying the balance
if (MetaverseCharacter) {
MetaverseCharacter->SetBalance(MetaverseCharacter->GetAccount());
}
}
17 changes: 13 additions & 4 deletions Metaverse/Source/Metaverse/Private/NPC/SignEthTransaction.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
#include "Components/PrimitiveComponent.h"
#include "Components/WalletConnectTriggerComponent.h"
#include "../../MetaverseCharacter.h"
#include "PlayCppSdkActor.h"
#include "Utlis.h"

// Called when the game starts or when spawned
void ASignEthTransaction::BeginPlay() {
Expand All @@ -28,14 +30,21 @@ void ASignEthTransaction::OnSignEthTransactionBeginOverlap(
UWalletConnectTriggerComponent *WalletConnectTriggerComponent =
GetWalletConnectTriggerComponent();

WalletConnectTriggerComponent->OnWalletconnectSignEip155TransactionDelegate
.BindDynamic(
this,
&ASignEthTransaction::OnWalletconnectSignEip155TransactionFinished);

FWalletConnectTxEip155 tx;
tx.to = FString("0xA914161b1b8d9dbC9c5310Fc7EBee5A5B18044b7");
tx.gas = FString("50000");
tx.gas_price = FString("20000000000");
tx.value = FString("1000000000000000000");
// tx.data = ;
tx.nonce = FString("1");
WalletConnectTriggerComponent->SignEip155Transaction(tx);

WalletConnectTriggerComponent->OnShowQR.BindDynamic(this, &Super::ShowQR);
}

void ASignEthTransaction::OnWalletconnectSignEip155TransactionFinished(
FWalletSignTXEip155Result SigningResult) {
UE_LOG(LogTemp, Log, TEXT("Signing Signature: %s, Result: %s"),
*UUtlis::ToHex(SigningResult.signature), *SigningResult.result);
}
11 changes: 11 additions & 0 deletions Metaverse/Source/Metaverse/Private/NPC/SignPersonal.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
#include "Components/PrimitiveComponent.h"
#include "Components/WalletConnectTriggerComponent.h"
#include "../../MetaverseCharacter.h"
#include "PlayCppSdkActor.h"
#include "Utlis.h"

// Called when the game starts or when spawned
void ASignPersonal::BeginPlay() {
Expand All @@ -28,7 +30,16 @@ void ASignPersonal::OnSignPersonalBeginOverlap(
UWalletConnectTriggerComponent *WalletConnectTriggerComponent =
GetWalletConnectTriggerComponent();

WalletConnectTriggerComponent->OnWalletconnectSignPersonalDelegate
.BindDynamic(this, &ASignPersonal::OnWalletconnectSignPersonalFinished);

WalletConnectTriggerComponent->SignPersonal(FString("HELLO WORLD"));

WalletConnectTriggerComponent->OnShowQR.BindDynamic(this, &Super::ShowQR);
}

void ASignPersonal::OnWalletconnectSignPersonalFinished(
FWalletSignTXEip155Result SigningResult) {
UE_LOG(LogTemp, Log, TEXT("Signing Signature: %s, Result: %s"),
*UUtlis::ToHex(SigningResult.signature), *SigningResult.result);
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,6 @@ class METAVERSE_API UWalletConnectTriggerComponent : public USphereComponent {
FString _SignPersonalMessage;
FWalletConnectTxEip155 _WalletConnectTxEip155;

FWalletconnectSignPersonalDelegate OnWalletconnectSignPersonalDelegate;
UFUNCTION()
void OnWalletconnectSignPersonalFinished(
FWalletSignTXEip155Result SigningResult);

FWalletconnectSignEip155TransactionDelegate
OnWalletconnectSignEip155TransactionDelegate;
UFUNCTION()
void OnWalletconnectSignEip155TransactionFinished(
FWalletSignTXEip155Result SigningResult);

UFUNCTION()
void OnRestoreSessionReadyConnectFinished(
FWalletConnectEnsureSessionResult SessionResult, FString Result);
Expand All @@ -45,6 +34,10 @@ class METAVERSE_API UWalletConnectTriggerComponent : public USphereComponent {
void OnRestoreSessionReadySignEip155TransactionFinished(
FWalletConnectEnsureSessionResult SessionResult, FString Result);

UFUNCTION()
void OnRestoreSessionReadySendEip155TransactionFinished(
FWalletConnectEnsureSessionResult SessionResult, FString Result);

UFUNCTION()
void OnNewSessionReadyConnectFinished(
FWalletConnectEnsureSessionResult SessionResult, FString Result);
Expand All @@ -57,6 +50,10 @@ class METAVERSE_API UWalletConnectTriggerComponent : public USphereComponent {
void OnNewSessionReadySignEip155TransactionFinished(
FWalletConnectEnsureSessionResult SessionResult, FString Result);

UFUNCTION()
void OnNewSessionReadySendEip155TransactionFinished(
FWalletConnectEnsureSessionResult SessionResult, FString Result);

UFUNCTION()
void OnQRReadyFinished(UTexture2D *Texture);

Expand Down Expand Up @@ -88,13 +85,25 @@ class METAVERSE_API UWalletConnectTriggerComponent : public USphereComponent {
Category = "WalletConnect")
void SignEip155Transaction(FWalletConnectTxEip155 info);

UFUNCTION(BlueprintCallable,
meta = (DisplayName = "SendEip155Transaction",
Keywords = "WalletConnect"),
Category = "WalletConnect")
void SendEip155Transaction(FWalletConnectTxEip155 info);

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "WalletConnect")
FShowQR OnShowQR;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "WalletConnect")
FHideQRAndUpdateOverlay OnHideQRAndUpdateOverlay;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "WalletConnect")
FHideQR OnHideQR;

FWalletconnectSignPersonalDelegate OnWalletconnectSignPersonalDelegate;
FWalletconnectSignEip155TransactionDelegate
OnWalletconnectSignEip155TransactionDelegate;
FWalletconnectSendEip155TransactionDelegate
OnWalletconnectSendEip155TransactionDelegate;

protected:
// Called when the game starts
virtual void BeginPlay() override;
Expand Down
34 changes: 34 additions & 0 deletions Metaverse/Source/Metaverse/Public/NPC/SendEthTransaction.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// Copyright 2022, Cronos Labs. All Rights Reserved

#pragma once

#include "CoreMinimal.h"
#include "NPC/Help.h"
#include "SendEthTransaction.generated.h"

struct FWalletSendTXEip155Result;
class AMetaverseCharacter;

/**
*
*/
UCLASS()
class METAVERSE_API ASendEthTransaction : public AHelp {
GENERATED_BODY()

protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;

UFUNCTION()
void OnSendEthTransactionBeginOverlap(
UPrimitiveComponent *OverlappedComponent, AActor *OtherActor,
UPrimitiveComponent *OtherComp, int32 OtherBodyIndex, bool bFromSweep,
const FHitResult &SweepResult);

private:
UFUNCTION()
void OnWalletconnectSendEip155TransactionFinished(
FWalletSendTXEip155Result SendResult);
AMetaverseCharacter *MetaverseCharacter;
};
Loading

0 comments on commit 09af406

Please sign in to comment.