To install Beam SDK for Unity you have to add following dependencies to your manifest.json:
Open Packages/manifest.json and add these lines:
"beam.sdk.client": "https://github.com/BuildOnBeam/beam-sdk-unity.git",
"com.cysharp.unitask": "https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask"
Note: using https://github.com/BuildOnBeam/beam-sdk-unity.git
will always default to the newest version of the main branch. You probably should lock the url to particular release to avoid potential compatibility issues. To do so, add #vX.X.X
to the url, like this: https://github.com/BuildOnBeam/beam-sdk-unity.git#v0.5.3
.
Follow these instructions:
https://docs.unity3d.com/Manual/upm-ui-giturl.html
And add these urls:
https://github.com/BuildOnBeam/beam-sdk-unity.git
https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask
To use the package, initialize BeamClient
:
var beamClient = gameObject.AddComponent<BeamClient>()
.SetBeamApiKey("your-publishable-api-key") // set your Publishable(!) API key
.SetEnvironment(BeamEnvironment.Testnet) // defaults to Testnet
.SetDebugLogging(true) // optional, defaults to false
.SetStorage(yourCustomStorageImplementation); // optional, defaults to PlayerPrefs storage;
var activeSessionResult = await m_BeamClient.GetActiveSessionAsync(BeamEntityId);
if (activeSessionResult.Status == BeamResultType.Success)
{
var session = activeSessionResult.Result;
var validUntil = session.EndTime;
// (...)
}
var activeSessionResult = await m_BeamClient.CreateSessionAsync(BeamEntityId);
if (activeSessionResult.Status == BeamResultType.Success)
{
var session = activeSessionResult.Result;
// you can now sign Operations without leaving the game
}
var sessionAddress = "0x3c31...";
var operationResult = await m_BeamClient.RevokeSessionAsync(
entityId: BeamEntityId,
sessionAddress: sessionAddress
);
if (operationResult.Status == BeamResultType.Success)
{
var operationStatus = operationResult.Result;
// (...)
}
Once you get an operationId from Beam API, that requires signing by the user, you can call BeamClient.SignOperation() to sign and execute given operation:
var operationId = "clxn9u(...)0c4bz7av";
var operationResult = await m_BeamClient.SignOperationAsync(
entityId: BeamEntityId,
operationId: operationId,
signingBy: OperationSigningBy.Auto // accepts Auto, Browser and Session
);
if (operationResult.Status == BeamResultType.Success)
{
var operationStatus = operationResult.Result;
switch (operationResult.Result)
{
case CommonOperationResponse.StatusEnum.Signed:
break;
case CommonOperationResponse.StatusEnum.Pending:
break;
case CommonOperationResponse.StatusEnum.Rejected:
break;
case CommonOperationResponse.StatusEnum.Executed:
break;
case CommonOperationResponse.StatusEnum.Error:
break;
default:
throw new ArgumentOutOfRangeException();
}
}
You can find an example implementation using this demo in beam-sdk-unity-example
WebGL builds are optimized and have Code Stripping enabled by default. We made sure that our models are not stripped using [Preserve] attributes but if you notice a functionality that seemingly breaks with stripping, please let us know, so we can adjust accordingly.