hit*_*ill 4 sdk unity-game-engine blockchain kin
关于如何在Unity 中的空项目中使用Kin Unity SDK的逐步说明,有什么很好的解释?
在这10分钟的设置代码(客户端和服务器)中使用包装器,并按如下所示进行调用:
kinWrapper.SendPayment(1.00M, "test send", address);
kinWrapper.Balance();
//etc
Run Code Online (Sandbox Code Playgroud)
这是有关实现包装器的详细教程。
该健blockchain是一个恒星协议的叉。因此,您应用程序中的操作可归结为以下内容:
您可以在此处克隆示例实现-或可以按照以下步骤进行基本了解。
创建一个空的Unity项目,然后安装Kin Unity插件并按照此处所述修改gradle文件。
注意: SDK仅在Android / iOS设备或模拟器上运行。SDK 不会在统一编辑器或统一远程中运行-因此您需要在仿真器或设备中编译并运行代码。
创建一个空的MonoBehaviour脚本-将其命名为KinWrapper,并声明Kin命名空间:
using Kin;
Run Code Online (Sandbox Code Playgroud)
您还可以通过将以下内容添加到您的MonoBehaviour中来启用区块链侦听器:
public class KinWrapper : MonoBehaviour, IPaymentListener, IBalanceListener
Run Code Online (Sandbox Code Playgroud)
接下来声明Kin客户和Kin帐户的实例
private KinClient kinClient;
private KinAccount kinAccount;
Run Code Online (Sandbox Code Playgroud)
该客户端处理取决于你所使用的平台上的本机代码。(Android或iOS)。该帐户是您将要使用的主界面。
在使用该帐户之前,您首先必须通过客户端实例化它。
kinClient = new KinClient(Kin.Environment.Test, "appId");
if (!kinClient.HasAccount())
{
kinAccount = kinClient.AddAccount();
}else{
kinAccount = kinClient.GetAccount(0);
}
Run Code Online (Sandbox Code Playgroud)
上面的代码首先检查设备上是否存在本地帐户。如果不是,它将在设备上创建一个帐户,并将其作为参考返回。
注意: “创建的帐户”只是设备上生成的公钥和私钥。这些本地密钥使设备能够与区块链进行通信。
您现在可以通过调用以下命令获取公钥(客户的区块链地址):
kinAccount.GetPublicAddress();
Run Code Online (Sandbox Code Playgroud)
由于此密钥仅在本地存在,因此您需要将其“加载”到区块链中。换句话说,需要调用一个特殊功能来在线进行资金注册。在完成此步骤之前,该地址在区块链上被视为无效,并且无法接收或进行交易。这是恒星协议的一部分,以避免垃圾邮件和不必要的帐户创建。
您可以通过调用以下功能来检查该帐户是否已经注册并注资:
kinAccount.GetStatus(GetStatusCallback)
void GetStatusCallback(KinException ex, AccountStatus status)
{
if (status == AccountStatus.Created)
{
}
else
{
}
}
Run Code Online (Sandbox Code Playgroud)
要在测试区块链上注册帐户并为其提供资金,您有3种选择:
选项1:您可以通过将地址粘贴到Kin的friend-bot service上手动进行操作。这将自动为您注册该帐户。
选项2:您可以通过您的代码作为HTTP请求调用的朋友,BOT https://friendbot-testnet.kininfrastructure.com/?addr=address_here
public static IEnumerator FundAccount( string publicAddress, Action<bool> onComplete = null )
{
var url = "http://friendbot-testnet.kininfrastructure.com/?addr=" + publicAddress;
var req = UnityWebRequest.Get( url );
yield return req.SendWebRequest();
if( req.isNetworkError || req.isHttpError )
{
Debug.Log( req.error );
if( onComplete != null )
onComplete( false );
}
else
{
Debug.Log( "response code: " + req.responseCode );
Debug.Log( req.downloadHandler.text );
if( onComplete != null )
onComplete( true );
}
}
Run Code Online (Sandbox Code Playgroud)
选项3:您可以使用服务器端代码自己提供资金(在生产环境中必须这样做)。基本上,您的客户将需要致电您的服务器并要求加入。然后,您的服务器可以使用Kin的python SDK或node SDK来执行入职。
这是 可以用于服务器的便捷的 python实现或Node.js实现。
从Unity调用实现很简单,如下所示:
public IEnumerator FundMe(decimal amount, Action<bool> fundCallback = null)
{
WWWForm form = new WWWForm();
form.AddField("address", kinAccount.GetPublicAddress());
form.AddField("amount", amount.ToString());
reqUrl = "http://address.to.your.server";
var req = UnityWebRequest.Post(reqUrl, form);
yield return req.SendWebRequest();
if (req.isNetworkError || req.isHttpError)
{
Debug.LogError(req.error);
fundCallback(false);
}
else
{
fundCallback(true);
}
}
Run Code Online (Sandbox Code Playgroud)
注意: Kin有两个区块链。生产和测试。测试区块链仅具有“流通货币”,您可以在不产生成本的情况下运行测试。生产区块链具有现实价值
account.GetBalance(GetBalanceCallback);
void GetBalanceCallback(KinException ex, decimal balance)
{
if (ex == null)
{
Debug.Log( "Balance: " + balance );
}
else
{
Debug.LogError( "Get Balance Failed. " + ex );
}
}
Run Code Online (Sandbox Code Playgroud)
kinClient.DeleteAccount(0);
Run Code Online (Sandbox Code Playgroud)
注意: GetBalance()需要回调,因为它正在与区块链在线通信。DeleteAccount()不会,因为它只是删除客户端上的私钥和公钥。一旦删除,这些密钥将无法恢复。
事务具有以下参数:
备注:具有附加信息的可选字符串。
地址:收件人的地址
金额:您发送的亲戚金额(不包括费用)
费用:您将为区块链处理的交易支付的费用。当前费用为100/100000 KIN。该费用可保护区块链免受垃圾邮件的侵害。
注意:费用以Kin的最小单位表示。(夸克)。就像一美元的最小单位是一分。因此,在进行交易时,将费用设置为100(夸克)-100/100000 KIN。设置费用告诉区块链您明确同意支付交易费用。如果您将费用设置得太低,则交易将被拒绝。
您可以在以下网址查看Kin的区块链上的所有交易:https ://laboratory.kin.org/index.html#explorer ? resource = payments
要发送付款,请先在本地构建交易:
kinAccount.BuildTransaction(address, amount, fee, memo, BuildTransactionCallBack);
Run Code Online (Sandbox Code Playgroud)
建立交易对客户端执行多项操作以对其进行授权和签名。建立交易后,使用以下回调将其发送到Kin的区块链。
void BuildTransactionCallBack(KinException ex, Transaction transaction)
{
if (ex == null)
{
kinAccount.SendTransaction(transaction, SendTransactionCallback);
}
else
{
Debug.LogError("Build Transaction Failed. " + ex);
}
}
Run Code Online (Sandbox Code Playgroud)
将交易发送到Kin的区块链后,您可以监听响应,以确保交易正确进行。交易通常需要不到10秒的时间才能完成。
void SendTransactionCallback(KinException ex, String transactionId)
{
if (ex == null)
{
//Success
}
else
{
Debug.LogError("Send Transaction Failed. " + ex);
}
}
Run Code Online (Sandbox Code Playgroud)
注意:您应该将协同例程用于需要等待的功能。这样可以防止您的代码在等待响应时挂起,并可以提供更好的用户体验。
您可以通过Kin基金会列入白名单,以零费用发送交易。要列入白名单,只需向Kin Developer Program注册。获得批准后,您可以执行额外的步骤,让您的客户以零费用发送交易。
在构建交易后发送零费用交易:
客户需要联系您列入白名单的服务器。
您的服务器将批准/签署交易,并将其发送回客户端。
然后,客户将把这笔批准的交易发送到Kin的区块链上,并免费进行处理。
我们已经建立了交易,现在将其列入白名单
void BuildTransactionCallBack(KinException ex, Transaction transaction)
{
if (ex == null)
{
StartCoroutine(WhitelistTransaction(transaction, WhitelistTransactionCallback))
}
else
{
Debug.LogError("Build Transaction Failed. " + ex);
}
}
Run Code Online (Sandbox Code Playgroud)
我们正在呼叫列入白名单的服务器以授权交易
IEnumerator WhitelistTransaction(Transaction transaction, Action<string, string> onComplete)
{
var postDataObj = new WhitelistPostData(transaction);
var postData = JsonUtility.ToJson(postDataObj);
var rawPostData = Encoding.UTF8.GetBytes(postData);
// UnityWebRequest does not work correclty when posting a JSON string so we use a byte[] and a hacky workaround
var req = UnityWebRequest.Post(baseURL + whitelistURL, "POST");
req.SetRequestHeader("Content-Type", "application/json");
req.uploadHandler = new UploadHandlerRaw(rawPostData);
yield return req.SendWebRequest();
if (req.isNetworkError || req.isHttpError)
{
Debug.LogError(req.error);
onComplete(null, null);
}
else
{
onComplete(req.downloadHandler.text, transaction.Id);
}
}
Run Code Online (Sandbox Code Playgroud)
我们的服务器已批准交易,并发送回签名字符串。现在,我们将此签名的字符串发送到Kin的区块链
void WhitelistTransactionCallback(string whitelistTransaction, string transactionId)
{
if (whitelistTransaction != null)
{
kinAccount.SendWhitelistTransaction(transactionId, whitelistTransaction, SendTransactionCallback);
}
else
{
Debug.LogError("Whitelisting Transaction Failed. ");
}
}
Run Code Online (Sandbox Code Playgroud)
和往常一样,我们等待看看交易是否成功
void SendTransactionCallback(KinException ex, String transactionId)
{
if (ex == null)
{
//Success
}
else
{
Debug.LogError("Send Transaction Failed. " + ex);
}
}
Run Code Online (Sandbox Code Playgroud)
在服务器被批准列入白名单之前,您可以在TEST环境中使用此预先批准的服务器。 http://34.239.111.38:3000/whitelist。
public static IEnumerator WhitelistTransaction( Transaction transaction, Action<string> onComplete = null )
{
var postDataObj = new WhitelistPostData( transaction );
var postData = JsonUtility.ToJson( postDataObj );
var rawPostData = Encoding.UTF8.GetBytes( postData );
// UnityWebRequest does not work correclty when posting a JSON string so we use a byte[] and a hacky workaround
var url = "http://34.239.111.38:3000/whitelist";
var req = UnityWebRequest.Post( url, "POST" );
req.SetRequestHeader( "Content-Type", "application/json" );
req.uploadHandler = new UploadHandlerRaw( rawPostData );
yield return req.SendWebRequest();
if( req.isNetworkError || req.isHttpError )
{
Debug.Log( req.error );
if( onComplete != null )
onComplete( null );
}
else
{
Debug.Log( "response code: " + req.responseCode );
Debug.Log( req.downloadHandler.text );
if( onComplete != null )
onComplete( req.downloadHandler.text );
}
}
Run Code Online (Sandbox Code Playgroud)
一旦获得批准,您就可以使用示例 python实现或Node.js实现来批准服务器上的事务。您也可以使用node.js SDK。
您可以添加侦听器,以防止您的客户端过度查询区块链。只需添加以下代码
kinAccount.AddPaymentListener(this);
kinAccount.AddBalanceListener(this);
public void OnEvent(PaymentInfo data)
{
//Listening for incoming and outgoing payments
}
public void OnEvent(decimal balance)
{
//Listening for changes in client's balance
}
Run Code Online (Sandbox Code Playgroud)
您可以在MIT许可下的https://github.com/hitwill/kin-sdk-unity-tutorial上找到实现的代码。
您也可以查看此开发者手册 -有关使用Kin创建的一些高级概念。
(占位符)
这是有关服务器端安全性的出色文章。
(占位符)
(占位符)
归档时间: |
|
查看次数: |
355 次 |
最近记录: |