예제 #1
0
    async Task <EvmContract> GetContract()
    {
        var writer = RPCClientFactory.Configure()
                     // .WithLogger(Debug.unityLogger)
                     .WithWebSocket("ws://127.0.0.1:46657/websocket")
                     .Create();

        var reader = RPCClientFactory.Configure()
                     // .WithLogger(Debug.unityLogger)
                     .WithWebSocket("ws://127.0.0.1:9999/queryws")
                     .Create();

        var client = new DAppChainClient(writer, reader)
        {
            // Logger = Debug.unityLogger
        };

        client.TxMiddleware = new TxMiddleware(new ITxMiddlewareHandler[] {
            new NonceTxMiddleware {
                PublicKey = publicKey,
                Client    = client
            },
            new SignedTxMiddleware(privateKey)
        });

        string      abi          = bettingABI.ToString();
        var         contractAddr = Address.FromHexString(bettingAddress.ToString());
        EvmContract evmContract  = new EvmContract(client, contractAddr, from, abi);

        evmContract.EventReceived += ContractEventReceived;
        return(evmContract);
    }
예제 #2
0
    async Task <EvmContract> GetContract(byte[] privateKey, byte[] publicKey)
    {
        var writer = RPCClientFactory.Configure()
                     .WithLogger(Debug.unityLogger)
                     // .WithHTTP("http://127.0.0.1:46658/rpc")
                     .WithWebSocket("ws://127.0.0.1:46657/websocket")
                     .Create();

        var reader = RPCClientFactory.Configure()
                     .WithLogger(Debug.unityLogger)
                     // .WithHTTP("http://127.0.0.1:46658/query")
                     .WithWebSocket("ws://127.0.0.1:9999/queryws")
                     .Create();

        var client = new DAppChainClient(writer, reader)
        {
            Logger = Debug.unityLogger
        };

        // required middleware
        client.TxMiddleware = new TxMiddleware(new ITxMiddlewareHandler[] {
            new NonceTxMiddleware {
                PublicKey = publicKey,
                Client    = client
            },
            new SignedTxMiddleware(privateKey)
        });

        string abi          = simpleStoreABI.ToString();
        var    contractAddr = await client.ResolveContractAddressAsync("SimpleStore");

        var callerAddr = Address.FromPublicKey(publicKey);

        return(new EvmContract(client, contractAddr, callerAddr, abi));
    }
        static void Main(string[] args)
        {
            Action <Exception> handleException = ex =>
            {
                Console.WriteLine(ex.Message);
            };
            int       port      = 9999;
            int       count     = 1000000;
            RPCServer rPCServer = new RPCServer(port);

            rPCServer.RegisterService <IHello, Hello>();
            rPCServer.Start();
            IHello    client = null;
            Stopwatch watch  = new Stopwatch();

            watch.Start();
            LoopHelper.Loop(count, () =>
            {
                client = RPCClientFactory.GetClient <IHello>("127.0.0.1", port);
            });
            watch.Stop();

            //var res = client.SayHello("Hello");
            //Console.WriteLine($"客户端:{res}");

            Console.WriteLine($"耗时:{watch.ElapsedMilliseconds}ms");

            Console.ReadLine();
            Console.WriteLine("完成");
            Console.ReadLine();
        }
예제 #4
0
        public ActionResult Test()
        {
            IHello client = RPCClientFactory.GetClient <IHello>("127.0.0.1", 9999);
            var    res    = client.SayHello("aa");

            return(Content(res));
        }
예제 #5
0
        static void Main(string[] args)
        {
            int port  = 11111;
            int count = 1;

            RPCServer rPCServer = new RPCServer(port);

            rPCServer.RegisterService <IHello, Hello>();
            rPCServer.Start();
            Stopwatch watch = new Stopwatch();

            var client = RPCClientFactory.GetClient <IHello>("127.0.0.1", port);

            client.SayHello("Hello");

            watch.Start();
            LoopHelper.Loop(count, () =>
            {
                var res = client.SayHello("Hello");
                //Console.WriteLine($"{DateTime.Now.ToString("HH:mm:ss:fff")}客户端:{res}");
            });
            watch.Stop();

            Console.WriteLine($"耗时:{(double)watch.ElapsedMilliseconds/count}ms");

            Console.ReadLine();
        }
예제 #6
0
        public IActionResult FileUpLoad()
        {
            var  files = Request.Form.Files;
            long size  = files.Sum(f => f.Length);

            foreach (var formFile in files)
            {
                if (formFile.Length > 0)
                {
                    string fileExt = Path.GetExtension(formFile.FileName);
                    if (String.IsNullOrEmpty(fileExt) || Array.IndexOf(((String)extTable["file"]).Split(','), fileExt.Substring(1).ToLower()) == -1)
                    {
                        return(new JsonResult(new { d = false, msg = "上传文件扩展名是不允许的扩展名" }));
                    }
                    long   fileSize    = formFile.Length;
                    string newFileName = System.Guid.NewGuid().ToString() + fileExt;
                    if (size > imgMaxSize)
                    {
                        return(new JsonResult(new { d = false, msg = "上传文件大小超过限制" }));
                    }
                    var    stream = formFile.OpenReadStream();
                    byte[] btye   = StreamToBytes(stream);
                    var    client = RPCClientFactory.GetClient <IFileUpLoad>("127.0.0.1", 9999);
                    string msg    = client.ImagesUpLoad(new Identify()
                    {
                        FileName = newFileName, fs = btye, Project = "STSys"
                    });
                    return(new JsonResult(new { d = true, msg = msg }));
                }
            }
            return(new JsonResult(new { d = false, msg = "上传失败" }));
        }
예제 #7
0
        static void Main(string[] args)
        {
            IHello client = RPCClientFactory.GetClient <IHello>("127.0.0.1", 9999);
            var    msg    = client.SayHello("Hello");

            Console.WriteLine(msg);
            Console.ReadLine();
        }
예제 #8
0
        static void Main(string[] args)
        {
            IBasicDataRpcService client = RPCClientFactory.GetClient <IBasicDataRpcService>("127.0.0.1", 39999);
            string content = string.Join(",", client.GetAllStages().Select(p => p.StageName));

            Console.WriteLine("完成,返回内容:" + content);
            Console.ReadLine();
        }
예제 #9
0
        static void Main(string[] args)
        {
            IHello client = RPCClientFactory.GetClient <IHello>("127.0.0.1", 39999);
            string s      = client.HeloBay("zhangsna");

            Console.WriteLine("完成:" + s);
            Console.ReadLine();
        }
예제 #10
0
 /// <summary>
 /// 微软
 ///
 /// 需要封装
 /// </summary>
 static void DotNettyTest()
 {
     DotNettyTest.IHello client = RPCClientFactory.GetClient <DotNettyTest.IHello>(ServerIp, CommonHelper.DotNettyPort);
     CodeTimerPro.Start("DotNetty", Times, _ =>
     {
         var result = client.SayHello(CommonArgs);
     }, ThreadCount);
 }
예제 #11
0
    public async void SignIn()
    {
        var privateKey = CryptoUtils.GeneratePrivateKey();
        var publicKey  = CryptoUtils.PublicKeyFromPrivateKey(privateKey);
        var callerAddr = Address.FromPublicKey(publicKey);

        this.statusTextRef.text = "Signed in as " + callerAddr.ToAddressString();

        var writer = RPCClientFactory.Configure()
                     .WithLogger(Debug.unityLogger)
                     //.WithHTTP("http://127.0.0.1:46658/rpc")
                     .WithWebSocket("ws://127.0.0.1:46657/websocket")
                     .Create();

        var reader = RPCClientFactory.Configure()
                     .WithLogger(Debug.unityLogger)
                     //.WithHTTP("http://127.0.0.1:46658/query")
                     .WithWebSocket("ws://127.0.0.1:9999/queryws")
                     .Create();

        var client = new DAppChainClient(writer, reader)
        {
            Logger = Debug.unityLogger
        };

        client.TxMiddleware = new TxMiddleware(new ITxMiddlewareHandler[] {
            new NonceTxMiddleware {
                PublicKey = publicKey,
                Client    = client
            },
            new SignedTxMiddleware(privateKey)
        });

        var contractAddr = await client.ResolveContractAddressAsync("BluePrint");

        this.contract = new Contract(client, contractAddr, callerAddr);

        // Subscribe to DAppChainClient.OnChainEvent to receive all events

        /*
         * client.OnChainEvent += (sender, e) =>
         * {
         *  var jsonStr = System.Text.Encoding.UTF8.GetString(e.Data);
         *  var data = JsonConvert.DeserializeObject<SampleEvent>(jsonStr);
         *  Debug.Log(string.Format("Chain Event: {0}, {1}, {2} from block {3}", data.Method, data.Key, data.Value, e.BlockHeight));
         * };
         */

        // Subscribe to DAppChainClient.OnEvent to receive events from a specific smart contract
        this.contract.OnEvent += (sender, e) =>
        {
            var jsonStr = System.Text.Encoding.UTF8.GetString(e.Data);
            var data    = JsonConvert.DeserializeObject <SampleEvent>(jsonStr);
            Debug.Log(string.Format("Contract Event: {0}, {1}, {2} from block {3}", data.Method, data.Key, data.Value, e.BlockHeight));
        };
    }
        static void DotNettyRPCTest()
        {
            RPCServer rpcServer = new RPCServer(9999);

            rpcServer.RegisterService <IOrderService, OrderService>();
            rpcServer.Start();
            IOrderService client = RPCClientFactory.GetClient <IOrderService>("127.0.0.1", 9999);
            var           res    = client.CalculateFinalOrderSum(9, 3);

            Console.ReadLine();
        }
예제 #13
0
        public ActionResult Index()
        {
            Stopwatch stopwatch = new Stopwatch();

            stopwatch.Start();
            IHello client = RPCClientFactory.GetClient <IHello>("127.0.0.1", 39999);

            client.SayHello("aa");
            stopwatch.Stop();
            return(Content(stopwatch.ElapsedMilliseconds.ToString()));
        }
예제 #14
0
    public async void SignIn()
    {
#if !UNITY_WEBGL
        try
        {
            CertValidationBypass.Enable();
            var authClient  = this.CreateAuthClient();
            var accessToken = await authClient.GetAccessTokenAsync();

            var keyStore = await this.CreateKeyStore(accessToken);

            this.identity = await authClient.GetIdentityAsync(accessToken, keyStore);
        }
        finally
        {
            CertValidationBypass.Disable();
        }
#else
        var authClient = this.CreateAuthClient();
        this.identity = await authClient.GetIdentityAsync("", null);
#endif
        this.statusTextRef.text = "Signed in as " + this.identity.Username;

        var writer = RPCClientFactory.Configure()
                     .WithLogger(Debug.unityLogger)
                     .WithHTTP("http://127.0.0.1:46658/rpc")
                     //.WithWebSocket("ws://127.0.0.1:46657/websocket")
                     .Create();

        var reader = RPCClientFactory.Configure()
                     .WithLogger(Debug.unityLogger)
                     .WithHTTP("http://127.0.0.1:46658/query")
                     //.WithWebSocket("ws://127.0.0.1:47000/queryws")
                     .Create();

        var client = new DAppChainClient(writer, reader)
        {
            Logger = Debug.unityLogger
        };
        client.TxMiddleware = new TxMiddleware(new ITxMiddlewareHandler[] {
            new NonceTxMiddleware {
                PublicKey = this.identity.PublicKey,
                Client    = client
            },
            new SignedTxMiddleware(this.identity.PrivateKey)
        });

        var contractAddr = await client.ResolveContractAddressAsync("BluePrint");

        var callerAddr = this.identity.ToAddress("default");
        this.contract = new Contract(client, contractAddr, callerAddr);
    }
예제 #15
0
        public ActionResult Index()
        {
            Stopwatch stopwatch = new Stopwatch();

            stopwatch.Start();
            IHello client = RPCClientFactory.GetClient <IHello>("127.0.0.1", 39999);

            client.SayHello("aa");
            stopwatch.Stop();
            var ms = (double)stopwatch.ElapsedTicks / 10000;

            return(Content($"{ms}ms"));
        }
예제 #16
0
파일: Program.cs 프로젝트: zxbe/EFX.Core
        static void Main(string[] args)
        {
            Console.WriteLine("--------------------------------------------------------------------------------------");
            Console.WriteLine("欢迎测试任务调度");
            Console.WriteLine("指令说明:");
            Console.WriteLine("1.停止Tibos任务,2.停止Test任务");
            Console.WriteLine("3.启动Tibos任务,4.启动Test任务");
            Console.WriteLine("5.启动全部任务 ,6.停止全部任务");
            Console.WriteLine("--------------------------------------------------------------------------------------");
            IHello client      = RPCClientFactory.GetClient <IHello>("127.0.0.1", 9988);
            var    instruction = "";

            while (instruction != "0")
            {
                Console.WriteLine("请输入指令!");
                instruction = Console.ReadLine();
                switch (instruction)
                {
                case "1":
                    client.PauseJobAsync("job", "group4");
                    break;

                case "2":
                    client.PauseJobAsync("job4", "group4");
                    break;

                case "3":
                    client.ResumeAsync("job", "group4");
                    break;

                case "4":
                    client.ResumeAsync("job4", "group4");
                    break;

                case "5":
                    client.ResumeAllAsync();
                    break;

                case "6":
                    client.PauseAllAsync();
                    break;

                default:
                    break;
                }
            }
            Console.WriteLine("游戏结束!");
            Console.ReadLine();
        }
예제 #17
0
        static void RpcTest()
        {
            int       port       = 9999;
            int       count      = 1;
            int       errorCount = 0;
            RPCServer rPCServer  = new RPCServer(port);

            rPCServer.HandleException = ex =>
            {
                Console.WriteLine(ExceptionHelper.GetExceptionAllMsg(ex));
            };
            rPCServer.RegisterService <IHello, Hello>();
            rPCServer.Start();
            IHello client = null;

            client = RPCClientFactory.GetClient <IHello>("127.0.0.1", port);
            client.SayHello("aaa");
            Stopwatch   watch = new Stopwatch();
            List <Task> tasks = new List <Task>();

            watch.Start();
            LoopHelper.Loop(1, () =>
            {
                tasks.Add(Task.Run(() =>
                {
                    LoopHelper.Loop(count, () =>
                    {
                        string msg = string.Empty;
                        try
                        {
                            msg = client.SayHello("Hello");
                            Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff")}:{msg}");
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine(ExceptionHelper.GetExceptionAllMsg(ex));
                        }
                    });
                }));
            });
            Task.WaitAll(tasks.ToArray());
            watch.Stop();
            Console.WriteLine($"每次耗时:{(double)watch.ElapsedMilliseconds / count}ms");
            Console.WriteLine($"错误次数:{errorCount}");
        }
예제 #18
0
        static void DotNettyRPCTest()
        {
            int       threadCount = 1;
            int       port        = 9999;
            int       count       = 10000;
            int       errorCount  = 0;
            RPCServer rPCServer   = new RPCServer(port);

            rPCServer.RegisterService <IHello, Hello>();
            rPCServer.Start();
            IHello client = null;

            client = RPCClientFactory.GetClient <IHello>("127.0.0.1", port);
            client.SayHello("aaa");
            Stopwatch   watch = new Stopwatch();
            List <Task> tasks = new List <Task>();

            watch.Start();
            for (int i = 0; i < threadCount; i++)
            {
                tasks.Add(Task.Run(() =>
                {
                    for (int j = 0; j < count; j++)
                    {
                        string msg = string.Empty;
                        try
                        {
                            //msg = client.SayHello("Hello");
                            //Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff")}:{msg}");
                        }
                        catch (Exception ex)
                        {
                            errorCount++;
                            //Console.WriteLine(ExceptionHelper.GetExceptionAllMsg(ex));
                        }
                    }
                }));
            }
            Task.WaitAll(tasks.ToArray());
            watch.Stop();
            Console.WriteLine($"并发数:{threadCount},运行:{count}次,每次耗时:{(double)watch.ElapsedMilliseconds / count}ms");
            Console.WriteLine($"错误次数:{errorCount}");
        }
예제 #19
0
    // Get's the contract as an object
    async Task <EvmContract> GetContract(byte[] privateKey, byte[] publicKey)
    {
        // Get the writer and reader for the Loom node
        var writer = RPCClientFactory.Configure()
                     .WithLogger(Debug.unityLogger)
                     .WithWebSocket("ws://127.0.0.1:46657/websocket")
                     .Create();
        var reader = RPCClientFactory.Configure()
                     .WithLogger(Debug.unityLogger)
                     .WithWebSocket("ws://127.0.0.1:9999/queryws")
                     .Create();

        // Create a client object from them
        var client = new DAppChainClient(writer, reader)
        {
            Logger = Debug.unityLogger
        };

        // required middleware
        client.TxMiddleware = new TxMiddleware(new ITxMiddlewareHandler[]
        {
            new NonceTxMiddleware
            {
                PublicKey = publicKey,
                Client    = client
            },
            new SignedTxMiddleware(privateKey)
        });

        // ABI of the Solidity contract
        string abi = realmBaseABI.ToString();
        // Address of the Solidity contract
        var contractAddr = Address.FromHexString(realmBaseAddress.ToString());
        // Address of the user
        var callerAddr = Address.FromPublicKey(publicKey);

        // Return the Contract object
        return(new EvmContract(client, contractAddr, callerAddr, abi));
    }
예제 #20
0
        static void Main(string[] args)
        {
            IHello client = RPCClientFactory.GetClient <IHello>("127.0.0.1", 9999);
            var    msg1   = client.SayHello("Hello1");

            Console.WriteLine(msg1);

            var msg2 = client.SayHello("Hello2");

            Console.WriteLine(msg2);

            decimal       prize        = 100.1M;
            IOrderService orderService = RPCClientFactory.GetClient <IOrderService>("127.0.0.1", 9999);
            var           sum1         = orderService.CalculateFinalOrderSum(500, prize);

            Console.WriteLine(sum1);

            var sum2 = orderService.CalculateFinalOrderSum(11000, 1000);

            Console.WriteLine(sum2);

            Console.ReadLine();
        }
        private async Task <EvmContract> GetContract()
        {
            this.writer = RPCClientFactory.Configure()
                          .WithLogger(Debug.unityLogger)
                          .WithWebSocket("ws://127.0.0.1:46657/websocket")
                          .Create();

            this.reader = RPCClientFactory.Configure()
                          .WithLogger(Debug.unityLogger)
                          .WithWebSocket("ws://127.0.0.1:9999/queryws")
                          .Create();

            this.client = new DAppChainClient(this.writer, this.reader)
            {
                Logger = this.logger
            };

            // required middleware
            this.client.TxMiddleware = new TxMiddleware(new ITxMiddlewareHandler[]
            {
                new NonceTxMiddleware
                {
                    PublicKey = this.publicKey,
                    Client    = this.client
                },
                new SignedTxMiddleware(this.privateKey)
            });

            const string abi          = "[{\"constant\":false,\"inputs\":[{\"name\":\"_tileState\",\"type\":\"string\"}],\"name\":\"SetTileMapState\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"GetTileMapState\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"state\",\"type\":\"string\"}],\"name\":\"OnTileMapStateUpdate\",\"type\":\"event\"}]\r\n";
            var          contractAddr = await this.client.ResolveContractAddressAsync("TilesChain");

            var         callerAddr  = Address.FromPublicKey(this.publicKey);
            EvmContract evmContract = new EvmContract(this.client, contractAddr, callerAddr, abi);

            evmContract.EventReceived += this.EventReceivedHandler;
            return(evmContract);
        }
예제 #22
0
        private async Task <Contract> GetContract()
        {
            this.writer = RPCClientFactory.Configure()
                          .WithLogger(Debug.unityLogger)
                          .WithWebSocket("ws://127.0.0.1:46657/websocket")
                          .Create();

            this.reader = RPCClientFactory.Configure()
                          .WithLogger(Debug.unityLogger)
                          .WithWebSocket("ws://127.0.0.1:9999/queryws")
                          .Create();

            this.client = new DAppChainClient(this.writer, this.reader)
            {
                Logger = this.logger
            };

            // required middleware
            this.client.TxMiddleware = new TxMiddleware(new ITxMiddlewareHandler[]
            {
                new NonceTxMiddleware
                {
                    PublicKey = this.publicKey,
                    Client    = this.client
                },
                new SignedTxMiddleware(this.privateKey)
            });

            var contractAddr = await this.client.ResolveContractAddressAsync("TileChain");

            var      callerAddr = Address.FromPublicKey(this.publicKey);
            Contract contract   = new Contract(this.client, contractAddr, callerAddr);

            contract.EventReceived += ChainEventReceivedHandler;
            return(contract);
        }
예제 #23
0
    public async void SignIn()
    {
#if !UNITY_WEBGL
        try
        {
            CertValidationBypass.Enable();
            var authClient  = this.CreateAuthClient();
            var accessToken = await authClient.GetAccessTokenAsync();

            var keyStore = await this.CreateKeyStore(accessToken);

            this.identity = await authClient.GetIdentityAsync(accessToken, keyStore);
        }
        finally
        {
            CertValidationBypass.Disable();
        }
#else
        var authClient = this.CreateAuthClient();
        this.identity = await authClient.GetIdentityAsync("", null);
#endif
        this.statusTextRef.text = "Signed in as " + this.identity.Username;

        var writer = RPCClientFactory.Configure()
                     .WithLogger(Debug.unityLogger)
                     //.WithHTTP("http://127.0.0.1:46658/rpc")
                     .WithWebSocket("ws://127.0.0.1:46657/websocket")
                     .Create();

        var reader = RPCClientFactory.Configure()
                     .WithLogger(Debug.unityLogger)
                     //.WithHTTP("http://127.0.0.1:46658/query")
                     .WithWebSocket("ws://127.0.0.1:9999/queryws")
                     .Create();

        var client = new DAppChainClient(writer, reader)
        {
            Logger = Debug.unityLogger
        };
        client.TxMiddleware = new TxMiddleware(new ITxMiddlewareHandler[] {
            new NonceTxMiddleware {
                PublicKey = this.identity.PublicKey,
                Client    = client
            },
            new SignedTxMiddleware(this.identity.PrivateKey)
        });

        var contractAddr = await client.ResolveContractAddressAsync("BluePrint");

        var callerAddr = this.identity.ToAddress("default");
        this.contract = new Contract(client, contractAddr, callerAddr);

        // Subscribe to DAppChainClient.OnChainEvent to receive all events

        /*
         * client.OnChainEvent += (sender, e) =>
         * {
         *  var jsonStr = System.Text.Encoding.UTF8.GetString(e.Data);
         *  var data = JsonConvert.DeserializeObject<SampleEvent>(jsonStr);
         *  Debug.Log(string.Format("Chain Event: {0}, {1}, {2} from block {3}", data.Method, data.Key, data.Value, e.BlockHeight));
         * };
         */

        // Subscribe to DAppChainClient.OnEvent to receive events from a specific smart contract
        this.contract.OnEvent += (sender, e) =>
        {
            var jsonStr = System.Text.Encoding.UTF8.GetString(e.Data);
            var data    = JsonConvert.DeserializeObject <SampleEvent>(jsonStr);
            Debug.Log(string.Format("Contract Event: {0}, {1}, {2} from block {3}", data.Method, data.Key, data.Value, e.BlockHeight));
        };
    }
예제 #24
0
    public async void SignIn()
    {
        if (dAppChainCfg == null)
        {
            Start();
        }

        if (this.identity != null)
        {
            return;
        }
#if !UNITY_WEBGL
        if (PlayerPrefs.GetString("identityString") == "" && PlayerPrefs.GetString("usernameString") == "")
        {
            try
            {
                CertValidationBypass.Enable();
                var authClient  = this.CreateAuthClient();
                var accessToken = await authClient.GetAccessTokenAsync();

                var keyStore = await this.CreateKeyStore(accessToken);

                this.identity = await authClient.GetIdentityAsync(accessToken, keyStore);
            }
            finally
            {
                CertValidationBypass.Disable();
            }
        }
        else
        {
            this.identity = new Identity {
                Username   = PlayerPrefs.GetString("usernameString"),
                PrivateKey = CryptoUtils.HexStringToBytes(PlayerPrefs.GetString("identityString"))
            };
        }
#else
        var authClient = this.CreateAuthClient();
        this.identity = await authClient.GetIdentityAsync("", null);
#endif

        PlayerPrefs.SetString("identityString", CryptoUtils.BytesToHexString(this.identity.PrivateKey));
        PlayerPrefs.SetString("usernameString", this.identity.Username);

        var writer = RPCClientFactory.Configure()
                     .WithLogger(Debug.unityLogger)
                     .WithHTTP(dAppChainCfg.write_host)
                     //.WithWebSocket("ws://etherboy-stage.loomapps.io/websocket")
                     .Create();

        var reader = RPCClientFactory.Configure()
                     .WithLogger(Debug.unityLogger)
                     .WithHTTP(dAppChainCfg.read_host)
                     //.WithWebSocket("ws://etherboy-stage.loomapps.io/queryws")
                     .Create();

        var client = new DAppChainClient(writer, reader)
        {
            Logger = Debug.unityLogger
        };
        client.TxMiddleware = new TxMiddleware(new ITxMiddlewareHandler[] {
            new NonceTxMiddleware {
                PublicKey = this.identity.PublicKey,
                Client    = client
            },
            new SignedTxMiddleware(this.identity.PrivateKey)
        });

        // There is only one contract address at the moment...
        var contractAddr = Address.FromHexString("0xe288d6eec7150D6a22FDE33F0AA2d81E06591C4d");
        var callerAddr   = this.identity.ToAddress("default");
        this.contract = new Contract(client, contractAddr, callerAddr);

        //call create account, if it's a new user, an account will be created for Etherboy
        if (PlayerPrefs.GetInt("hasAccount") == 0)
        {
            CreateAccount();
        }
    }