This commit is contained in:
2023-11-28 11:36:18 +05:30
commit 3fe8517bab
482 changed files with 54087 additions and 0 deletions

View File

@@ -0,0 +1,63 @@
using System.Text;
using Nethereum.Signer;
using Nethereum.Util;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using Web3Unity.Scripts.Library.Web3Wallet;
public class WalletLogin : MonoBehaviour
{
public Toggle rememberMe;
ProjectConfigScriptableObject projectConfigSO = null;
private void Start()
{
// loads the data saved from the editor config
projectConfigSO = (ProjectConfigScriptableObject)Resources.Load("ProjectConfigData", typeof(ScriptableObject));
PlayerPrefs.SetString("ProjectID", projectConfigSO.ProjectID);
PlayerPrefs.SetString("ChainID", projectConfigSO.ChainID);
PlayerPrefs.SetString("Chain", projectConfigSO.Chain);
PlayerPrefs.SetString("Network", projectConfigSO.Network);
PlayerPrefs.SetString("RPC", projectConfigSO.RPC);
// if remember me is checked, set the account to the saved account
if (PlayerPrefs.HasKey("RememberMe") && PlayerPrefs.HasKey("Account"))
if (PlayerPrefs.GetInt("RememberMe") == 1 && PlayerPrefs.GetString("Account") != "")
// move to next scene
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
}
public async void OnLogin()
{
// get current timestamp
var timestamp = (int)System.DateTime.UtcNow.Subtract(new System.DateTime(1970, 1, 1)).TotalSeconds;
// set expiration time
var expirationTime = timestamp + 60;
// set message
var message = expirationTime.ToString();
// sign message
var signature = await Web3Wallet.Sign(message);
// verify account
var account = SignVerifySignature(signature, message);
var now = (int)System.DateTime.UtcNow.Subtract(new System.DateTime(1970, 1, 1)).TotalSeconds;
// validate
if (account.Length == 42 && expirationTime >= now)
{
// save account
PlayerPrefs.SetString("Account", account);
if (rememberMe.isOn)
PlayerPrefs.SetInt("RememberMe", 1);
else
PlayerPrefs.SetInt("RememberMe", 0);
print("Account: " + account);
// load next scene
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
}
}
public string SignVerifySignature(string signatureString, string originalMessage)
{
var msg = "\x19" + "Ethereum Signed Message:\n" + originalMessage.Length + originalMessage;
var msgHash = new Sha3Keccack().CalculateHash(Encoding.UTF8.GetBytes(msg));
var signature = MessageSigner.ExtractEcdsaSignature(signatureString);
var key = EthECKey.RecoverFromSignature(signature, msgHash);
return key.GetPublicAddress();
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 52913904a0404486cbc6143d85432c7c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,63 @@
using System;
using System.Runtime.InteropServices;
using UnityEngine;
using UnityEngine.SceneManagement;
#if UNITY_WEBGL
public class WebLogin : MonoBehaviour
{
[DllImport("__Internal")]
private static extern void Web3Connect();
[DllImport("__Internal")]
private static extern string ConnectAccount();
[DllImport("__Internal")]
private static extern void SetConnectAccount(string value);
private int expirationTime;
private string account;
ProjectConfigScriptableObject projectConfigSO = null;
void Start()
{
// loads the data saved from the editor config
projectConfigSO = (ProjectConfigScriptableObject)Resources.Load("ProjectConfigData", typeof(ScriptableObject));
PlayerPrefs.SetString("ProjectID", projectConfigSO.ProjectID);
PlayerPrefs.SetString("ChainID", projectConfigSO.ChainID);
PlayerPrefs.SetString("Chain", projectConfigSO.Chain);
PlayerPrefs.SetString("Network", projectConfigSO.Network);
PlayerPrefs.SetString("RPC", projectConfigSO.RPC);
}
public void OnLogin()
{
Web3Connect();
OnConnected();
}
async private void OnConnected()
{
account = ConnectAccount();
while (account == "")
{
await new WaitForSeconds(1f);
account = ConnectAccount();
};
// save account for next scene
PlayerPrefs.SetString("Account", account);
// reset login message
SetConnectAccount("");
// load next scene
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
}
public void OnSkip()
{
// burner account for skipped sign in screen
PlayerPrefs.SetString("Account", "");
// move to next scene
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
}
}
#endif

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: afa6e5a3cdd404aeebca024db9afeae7
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: