这是indexloc提供的服务,不要输入任何密码
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
ebc0538
checkpoint
rob1997 Sep 30, 2024
0fcdc74
Merge branch 'dev' into rob/light-weight-web3
rob1997 Sep 30, 2024
7d99e85
checkpoint
rob1997 Sep 30, 2024
837ba3d
checkpoint
rob1997 Sep 30, 2024
16e8d62
checkpoint
rob1997 Sep 30, 2024
fdad213
checkpoint
rob1997 Sep 30, 2024
4de70c7
Merge branch 'dev' into rob/light-weight-web3
rob1997 Oct 1, 2024
6414a7d
working demo
rob1997 Oct 1, 2024
8c840eb
Merge branch 'rob/light-weight-web3' of https://github.com/ChainSafe/…
rob1997 Oct 1, 2024
7262149
checkpoint
rob1997 Oct 2, 2024
0c18a2d
Merge branch 'rob/light-weight-web3' of https://github.com/ChainSafe/…
rob1997 Oct 2, 2024
7924193
checkpoint
rob1997 Oct 2, 2024
7eccd91
sample instantiation and execution updated
rob1997 Oct 2, 2024
6226ed0
optimizations
rob1997 Oct 2, 2024
6c860a1
Analytics fix
rob1997 Oct 2, 2024
32078b6
fix
rob1997 Oct 2, 2024
814f312
exception fix
rob1997 Oct 2, 2024
7c26dce
logout and multiCall fix
rob1997 Oct 2, 2024
69a8c8c
better logging and exception methods
rob1997 Oct 2, 2024
a205fb7
Merge branch 'dev' into rob/light-weight-web3
rob1997 Oct 2, 2024
00265d3
some calls in EvmCalls.cs are read-only so I turned it into a LightWe…
rob1997 Oct 2, 2024
adc2623
exception thrown fix (new type of exception)
rob1997 Oct 3, 2024
c6523b8
Ramp Sample fix
rob1997 Oct 3, 2024
2d426ce
removed sample util,
rob1997 Oct 4, 2024
71c6e5d
merged from dev
rob1997 Oct 4, 2024
602c0e4
fixes
rob1997 Oct 4, 2024
5637f4a
more merge fixes
rob1997 Oct 4, 2024
c122636
test fix
rob1997 Oct 4, 2024
41fe804
unity tests fix
rob1997 Oct 4, 2024
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
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ namespace ChainSafe.Gaming.HyperPlay
/// Connection provider for connecting via HyperPlay Launcher.
/// </summary>
[CreateAssetMenu(menuName = "ChainSafe/Connection Provider/HyperPlay", fileName = nameof(HyperPlayConnectionProvider))]
public class HyperPlayConnectionProvider : RestorableConnectionProvider, IHyperPlayConfig
public class HyperPlayConnectionProvider : ConnectionProvider, IHyperPlayConfig
{
public string SignMessageRpcMethodName => "personal_sign";

Expand All @@ -24,16 +24,18 @@ public class HyperPlayConnectionProvider : RestorableConnectionProvider, IHyperP
[field: SerializeField, DefaultAssetValue("Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Prefabs/HyperPlayRow.prefab")]
public override Button ConnectButtonRow { get; protected set; }

public bool RememberConnection => RememberSession;
bool IHyperPlayConfig.RememberSession => RememberSession;

public override bool IsAvailable => Application.isEditor || !Application.isMobilePlatform;

private bool _storedSessionAvailable;

public override Task Initialize()

#if UNITY_WEBGL && !UNITY_EDITOR
public override Task Initialize(bool rememberSession)
{
return Task.CompletedTask;
}
#endif

protected override void ConfigureServices(IWeb3ServiceCollection services)
{
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ public override async Task<string> Connect()
return account;
}

if (_config.RememberConnection)
if (_config.RememberSession)
{
_data.RememberSession = true;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ namespace ChainSafe.Gaming.Exchangers.Ramp
/// <summary>
/// Add Ramp service when building a Web3 instance.
/// </summary>
public class RampServiceAdapter : MonoBehaviour, IWeb3BuilderServiceAdapter
public class RampServiceAdapter : MonoBehaviour, IServiceAdapter
{
[SerializeField] private RampExchangerConfigSO rampConfig;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1323,7 +1323,7 @@ Canvas:
m_AdditionalShaderChannelsFlag: 25
m_UpdateRectTransformForStandalone: 0
m_SortingLayerID: 0
m_SortingOrder: 10
m_SortingOrder: 100
m_TargetDisplay: 0
--- !u!114 &5300875160999448504
MonoBehaviour:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
/// ConnectionProvider for connecting wallet via Web3Auth.
/// </summary>
[CreateAssetMenu(menuName = "ChainSafe/Connection Provider/Web3Auth", fileName = nameof(Web3AuthConnectionProvider))]
public class Web3AuthConnectionProvider : RestorableConnectionProvider, ILogoutHandler, IWeb3InitializedHandler
public class Web3AuthConnectionProvider : ConnectionProvider, ILogoutHandler, IWeb3InitializedHandler
{
[field: SerializeField, DefaultAssetValue("Packages/io.chainsafe.web3-unity.web3auth/Runtime/Prefabs/Web3AuthRow.prefab")]
public override Button ConnectButtonRow { get; protected set; }
Expand Down Expand Up @@ -71,8 +71,10 @@ private void Awake()
_instance = this;
}

public override async Task Initialize()
public override async Task Initialize(bool rememberSession)
{
await base.Initialize(rememberSession);

_initializeTcs = new TaskCompletionSource<string>();

var projectConfig = ProjectConfigUtilities.Load();
Expand All @@ -91,11 +93,6 @@ public override async Task Initialize()

await _initializeTcs.Task;
}
#else
public override Task Initialize()
{
return Task.CompletedTask;
}
#endif

protected override void ConfigureServices(IWeb3ServiceCollection services)
Expand Down
14 changes: 14 additions & 0 deletions Packages/io.chainsafe.web3-unity/Runtime/Prefabs/Web3Unity.prefab
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ GameObject:
- component: {fileID: 6268052643211326401}
- component: {fileID: 153625530502621119}
- component: {fileID: 8371115045377063251}
- component: {fileID: 8854369476742677865}
m_Layer: 0
m_Name: Web3Unity
m_TagString: Untagged
Expand Down Expand Up @@ -103,3 +104,16 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 0d30a4f4c7d578c42beeecc2e2bbd394, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!114 &8854369476742677865
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9007579812972099230}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 2c73b0a0dd309a546843eca313ee76c3, type: 3}
m_Name:
m_EditorClassIdentifier:
pollingInterval: 1
Original file line number Diff line number Diff line change
Expand Up @@ -10,26 +10,27 @@ namespace ChainSafe.Gaming.UnityPackage.Connection
/// <summary>
/// A concrete implementation of <see cref="IConnectionHandler"/>.
/// </summary>
public class ConnectionHandler : MonoBehaviour, IConnectionHandler, IWeb3BuilderServiceAdapter
public class ConnectionHandler : MonoBehaviour, IConnectionHandler, ILightWeightServiceAdapter
{
// Handed in ConnectionHandlerEditor
[HideInInspector, SerializeField] private ConnectionProvider[] providers;

public HashSet<IWeb3BuilderServiceAdapter> Web3BuilderServiceAdapters { get; private set; }
public HashSet<IServiceAdapter> Web3BuilderServiceAdapters { get; private set; }

public ConnectionProvider[] Providers => providers;

/// <summary>
/// Initializes Connection Handler.
/// <param name="rememberConnection">Remember this connection on next login.</param>
/// </summary>
public async Task Initialize()
public async Task Initialize(bool rememberConnection)
{
Web3BuilderServiceAdapters = GetComponentsInChildren<IWeb3BuilderServiceAdapter>(true)
.Concat(FindObjectsOfType<Web3BuilderServiceAdapter>(true)).ToHashSet();
Web3BuilderServiceAdapters = GetComponentsInChildren<IServiceAdapter>(true)
.Concat(FindObjectsOfType<ServiceAdapter>(true)).ToHashSet();

foreach (var provider in Providers)
{
await provider.Initialize();
await provider.Initialize(rememberConnection);
}
}

Expand All @@ -39,10 +40,9 @@ public async Task Restore()

await data.LoadOneTime();

var provider = Providers.OfType<RestorableConnectionProvider>()
.SingleOrDefault(p => p.GetType() == data.Type);
var provider = Providers.SingleOrDefault(p => p.GetType() == data.Type);

if (provider != null && provider.RememberSession && await provider.SavedSessionAvailable())
if (provider != null && await provider.SavedSessionAvailable())
{
await (this as IConnectionHandler).Connect(provider);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ public static class ConnectionHandlerExtensions
/// Add the given adapter to the <see cref="Web3Builder"/>.
/// </summary>
/// <param name="web3Builder">Web3Builder instance to be configured.</param>
/// <param name="adapter"><see cref="IWeb3BuilderServiceAdapter"/> to be added to <see cref="Web3Builder"/>.</param>
/// <param name="adapter"><see cref="IServiceAdapter"/> to be added to <see cref="Web3Builder"/>.</param>
/// <returns>Configured <see cref="Web3Builder"/>.</returns>
public static Web3Builder ConfigureServices(this Web3Builder web3Builder, IWeb3BuilderServiceAdapter adapter)
public static Web3Builder ConfigureServices(this Web3Builder web3Builder, IServiceAdapter adapter)
{
return adapter.ConfigureServices(web3Builder);
}
Expand All @@ -24,9 +24,9 @@ public static Web3Builder ConfigureServices(this Web3Builder web3Builder, IWeb3B
/// Add the given adapters to the <see cref="Web3Builder"/>.
/// </summary>
/// <param name="web3Builder">Web3Builder instance to be configured.</param>
/// <param name="adapters">Multiple <see cref="IWeb3BuilderServiceAdapter"/> to be added to <see cref="Web3Builder"/>.</param>
/// <param name="adapters">Multiple <see cref="IServiceAdapter"/> to be added to <see cref="Web3Builder"/>.</param>
/// <returns>Configured <see cref="Web3Builder"/>.</returns>
public static Web3Builder ConfigureServices(this Web3Builder web3Builder, HashSet<IWeb3BuilderServiceAdapter> adapters)
public static Web3Builder ConfigureServices(this Web3Builder web3Builder, IEnumerable<IServiceAdapter> adapters)
{
foreach (var adapter in adapters)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
using System;
using System.Threading.Tasks;
using ChainSafe.Gaming.LocalStorage;
using ChainSafe.Gaming.Web3.Build;
using ChainSafe.Gaming.Web3.Core.Logout;
using UnityEngine;
using UnityEngine.UI;

Expand All @@ -9,7 +11,7 @@ namespace ChainSafe.Gaming.UnityPackage.Connection
/// <summary>
/// Connection Provider Scriptable Object.
/// </summary>
public abstract class ConnectionProvider : ScriptableObject, IWeb3BuilderServiceAdapter
public abstract class ConnectionProvider : ScriptableObject, IServiceAdapter
{
/// <summary>
/// Is provider available for connection.
Expand All @@ -22,20 +24,55 @@ public abstract class ConnectionProvider : ScriptableObject, IWeb3BuilderService
/// </summary>
public abstract Button ConnectButtonRow { get; protected set; }

protected bool RememberSession { get; private set; }

/// <summary>
/// Initialize Connection provider.
/// </summary>
/// <param name="rememberSession">Remember current session on next login (RememberMe).</param>
/// <returns>Awaitable Task.</returns>
public abstract Task Initialize();

public virtual Task Initialize(bool rememberSession)
{
RememberSession = rememberSession;

return Task.CompletedTask;
}

/// <summary>
/// Configure services for the Web3 instance.
/// This is where you add wallet connection services to <see cref="Web3Builder"/>.
/// </summary>
/// <param name="web3Builder"></param>
/// <returns></returns>
public abstract Web3Builder ConfigureServices(Web3Builder web3Builder);
public Web3Builder ConfigureServices(Web3Builder web3Builder)
{
return web3Builder.Configure(services =>
{
if (RememberSession)
{
services.AddSingleton<IStorable, IWeb3InitializedHandler, ILogoutHandler, StoredConnectionProviderData>(
_ => new StoredConnectionProviderData
{
TypeName = GetType().AssemblyQualifiedName
});
}

ConfigureServices(services);
});
}

/// <summary>
/// Configure services for the connection provider.
/// </summary>
/// <param name="services">Service collection to add services to.</param>
protected abstract void ConfigureServices(IWeb3ServiceCollection services);

/// <summary>
/// Check if a saved session is available.
/// </summary>
/// <returns>True if a saved session is available.</returns>
public abstract Task<bool> SavedSessionAvailable();

/// <summary>
/// Handle exception thrown during connection.
/// Different providers might handler it differently.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using ChainSafe.Gaming.Connection;
using ChainSafe.Gaming.Evm.Contracts;
Expand All @@ -21,7 +22,7 @@ public interface IConnectionHandler
/// <summary>
/// All service providers used for configuring <see cref="Web3"/> instance services.
/// </summary>
public HashSet<IWeb3BuilderServiceAdapter> Web3BuilderServiceAdapters { get; }
public HashSet<IServiceAdapter> Web3BuilderServiceAdapters { get; }

/// <summary>
/// Login by Building a <see cref="Web3"/> Instance.
Expand All @@ -30,21 +31,30 @@ public async Task Connect(ConnectionProvider provider)
{
try
{
Web3Builder web3Builder = new Web3Builder(ProjectConfigUtilities.Load())
.Configure(ConfigureCommonServices)
.ConfigureServices(Web3BuilderServiceAdapters)
.ConfigureServices(provider);

var web3 = await web3Builder.LaunchAsync();

await OnWeb3Initialized(web3);
await LaunchWeb3(Web3BuilderServiceAdapters.Append(provider));
}
catch (Exception e)
{
provider.HandleException(e);
}
}

private async Task LaunchWeb3(IEnumerable<IServiceAdapter> adapters)
{
var web3Builder = new Web3Builder(ProjectConfigUtilities.Load())
.Configure(ConfigureCommonServices)
.ConfigureServices(adapters);

var web3 = await web3Builder.LaunchAsync();

await OnWeb3Initialized(web3);
}

public async Task LaunchLightWeightWeb3()
{
await LaunchWeb3(Web3BuilderServiceAdapters.OfType<ILightWeightServiceAdapter>());
}

private async Task OnWeb3Initialized(CWeb3 web3)
{
var web3InitializedHandlers = web3.ServiceProvider.GetServices<IWeb3InitializedHandler>();
Expand All @@ -57,7 +67,6 @@ private async Task OnWeb3Initialized(CWeb3 web3)

private void ConfigureCommonServices(IWeb3ServiceCollection services)
{
// TODO: most of these can/should be service adapters
services
.UseUnityEnvironment()
.UseRpcProvider();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using ChainSafe.Gaming.Web3.Build;

namespace ChainSafe.Gaming.UnityPackage.Connection
{
/// <summary>
/// Provides services for building a light weight <see cref="Web3"/> instance.
/// </summary>
public interface ILightWeightServiceAdapter : IServiceAdapter
{

}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ namespace ChainSafe.Gaming.UnityPackage.Connection
/// <summary>
/// Provides services for building a <see cref="Web3"/> instance.
/// </summary>
public interface IWeb3BuilderServiceAdapter
public interface IServiceAdapter
{
/// <summary>
/// Configures services for building a <see cref="Web3"/> instance.
Expand Down
Loading
Loading