Integrate Web3Auth with the Soneium Blockchain in Unity
While using the Web3Auth Unity SDK, you get the private key within the user scope. This private key
can interact with the Nethereum Library to make EVM-based blockchain
calls, like getting the user's account
, fetch balance
, sign transaction
, send transaction
,
read
from and write
to the smart contract, etc. We have highlighted a few here to get you
started quickly on that.
Installation
In this reference, we're using the Nethereum
library to demonstrate how to make blockchain calls
using it with Web3Auth.
Package installation instructions (Official repository)
Install via Package Manager using OpenUpm
-
open Edit/Project Settings/Package Manager
-
add a new Scoped Registry (or edit the existing OpenUPM entry)
-
Name package.openupm.com
-
Scope(s) com.nethereum.unity
-
-
click Save or Apply
-
Open Window/Package Manager
-
click +
-
select Add package by name... or Add package from git URL...
-
paste com.nethereum.unity into name
-
paste 4.19.2 into version (or your preferred one)
-
click Add
Installing package for old version
-
Download the latest
net461dllsAOT.zip
package from Nethereum's latest release -
Extract and the rename the folder to
NethereumLib
for easy identification. -
Move the folder to the
Assets/Plugins
folder of your Unity project. -
You might have to delete a few files from the
NethereumLib
folder, if you're getting any errors while building the project. For our implementation, we deleted the following files:Newtonsoft.Json.dll
, all the files starting withSystem.*
,UnityEngine.dll
,Nethereum.Web3Lite.dll
,Nethereum.HdWallet.dll
,NBitcoin.dll
,Nethereum.RPC.Reactive.dll
andCommon.Logging.Core.dll
.
We have followed this guide to set up
the Nethereum
package in our app. You can check their sample applications as well for a decent
reference.
You can also check the Web3Auth Unity Sample Apps, where we have added the required packages.
Chain Details for Soneium
Soneium is currently available on the testnet. The mainnet is coming soon.
- Testnet (Minato)
const chainConfig = {
chainNamespace: CHAIN_NAMESPACES.EIP155,
chainId: "0x799", // hex of 1945
rpcTarget: "https://rpc.soneium.org",
displayName: "Soneium Mainnet Network",
blockExplorerUrl: "https://explorer.soneium.org",
ticker: "ETH",
tickerName: "ETH",
logo: "https://cryptologos.cc/logos/soneium-logo.png",
};
const chainConfig = {
chainNamespace: CHAIN_NAMESPACES.EIP155,
chainId: "0x79a", // hex of 1946
rpcTarget: "https://rpc.minato.soneium.org",
displayName: "Soneium Minato Testnet",
blockExplorerUrl: "https://explorer-testnet.soneium.org",
ticker: "ETH",
tickerName: "ETH",
logo: "https://cryptologos.cc/logos/soneium-logo.png",
// faucet- "https://bridge.soneium.org/en/testnet" bridge the sepolia ETH to Soneium
};
Initialize
using Nethereum.Web3;
using Nethereum.Util;
using Nethereum.Signer;
using Nethereum.Hex.HexConvertors.Extensions;
using Nethereum.ABI.Encoders;
using Nethereum.Hex.HexTypes;
using Nethereum.Web3.Accounts;
using Nethereum.Web3.Accounts.Managed;
public class Web3AuthScript : MonoBehaviour
{
Web3 web3;
Web3Auth web3Auth;
private string privateKey;
private Account account;
const string rpcURL = "" // EVM chain RPC URL
void Start()
{
web3Auth = GetComponent<Web3Auth>();
// Add Web3Auth Unity SDK Initialisation Code here
web3Auth.onLogin += onLogin;
web3Auth.onLogout += onLogout;
web3 = new Web3(rpcURL);
}
private void onLogin(Web3AuthResponse response)
{
privateKey = response.privKey;
var newAccount = new Account(privateKey);
account = newAccount;
}
// ...
}
Get User Info
You get the user information after a successful login returned from the login
method. The userInfo
object contains the user information, whereas
the privKey
object contains the private key that can be used to make blockchain calls.
private string userInfo;
private void onLogin(Web3AuthResponse response)
{
userInfo = JsonConvert.SerializeObject(response.userInfo, Formatting.Indented);
}
Get Account
In this reference, we're using the Nethereum
library to demonstrate how to make blockchain calls
using it with Web3Auth.
Package installation instructions (Official repository)
Install via Package Manager using OpenUpm
-
open Edit/Project Settings/Package Manager
-
add a new Scoped Registry (or edit the existing OpenUPM entry)
-
Name package.openupm.com
-
Scope(s) com.nethereum.unity
-
-
click Save or Apply
-
Open Window/Package Manager
-
click +
-
select Add package by name... or Add package from git URL...
-
paste com.nethereum.unity into name
-
paste 4.19.2 into version (or your preferred one)
-
click Add
Installing package for old version
-
Download the latest
net461dllsAOT.zip
package from Nethereum's latest release -
Extract and the rename the folder to
NethereumLib
for easy identification. -
Move the folder to the
Assets/Plugins
folder of your Unity project. -
You might have to delete a few files from the
NethereumLib
fold er, if you're getting any errors while building the project. For our implementation, we deleted the following files:Newtonsoft.Json.dll
, all the files starting withSystem.*
,UnityEngine.dll
,Nethereum.Web3Lite.dll
,Nethereum.HdWallet.dll
,NBitcoin.dll
,Nethereum.RPC.Reactive.dll
andCommon.Logging.Core.dll
.
We have followed this guide to set up
the Nethereum
package in our app. You can check their sample applications as well for a decent
reference.
You can also check the Web3Auth Unity Sample Apps, where we have added the required packages.
Get Balance
public void getBalance() {
if (account == null) {
Debug.Log("Please Login First");
return;
}
var balance = web3.Eth.GetBalance.SendRequestAsync(account.Address).Result.Value;
Debug.Log(balance);
}
Sign a message
public void signMessage() {
if (account == null) {
Debug.Log("Please Login First");
return;
}
var msg = "test message 19/01/2023 02:55PM";
var signer = new EthereumMessageSigner();
var signature = signer.EncodeUTF8AndSign(msg, new EthECKey(privateKey));
Debug.Log(signature);
}
Send Transaction
public async void sendTransaction() {
if (account == null) {
Debug.Log("Please Login First");
return;
}
var toAddress = "0x2E464..82D5057fB507Cc21";
var transaction = await web3.TransactionManager.SendTransactionAsync(account.Address, toAddress, new Nethereum.Hex.HexTypes.HexBigInteger(1));
Debug.Log(transaction);
}