static void Main(string[] args) { #region Basic Preparation //Init Logger string logName = "ContractTest_" + DateTime.Now.ToString("MMddHHmmss") + ".log"; string dir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "logs", logName); Logger.InitLogHelper(dir); string url = "http://192.168.199.222:8000/chain"; var ch = new CliHelper(url, AccountManager.GetDefaultDataDir()); //Account preparation List <string> accList = new List <string>(); var ci = new CommandInfo("account new", "account"); for (int i = 0; i < 50; i++) { ci.Parameter = "123"; ci = ch.ExecuteCommand(ci); if (ci.Result) { accList.Add(ci.InfoMsg?[0].Replace("Account address:", "").Trim()); } } //Unlock ci = new CommandInfo("account unlock", "account"); ci.Parameter = String.Format("{0} {1} {2}", accList[0], "123", "notimeout"); ci = ch.ExecuteCommand(ci); //Connect Chain ci = new CommandInfo("connect_chain"); ch.ExecuteCommand(ci); Assert.IsTrue(ci.Result, "Connect chain got exception."); //Get AElf.Contracts.Token ABI ci.GetJsonInfo(); TokenAbi = ci.JsonInfo["AElf.Contracts.Token"].ToObject <string>(); //Load default Contract Abi ci = new CommandInfo("load_contract_abi"); ch.RpcLoadContractAbi(ci); Assert.IsTrue(ci.Result, "Load contract abi got exception."); #endregion #region AElf.Token operation var contract = new ContractBase(ch, TokenAbi); contract.Account = accList[0]; //Deploy //contract.DeployContract(out var txId); //Load contract.LoadContractAbi(); //Init contract.ExecuteContractMethod(out var txId1, "Initialize", "elfToken", "ELF", "2000000", "2"); contract.CheckTransactionResult(out var initCi, txId1); //Transfer to Account A, B, C contract.ExecuteContractMethod(out var txIdA, "Transfer", accList[1], "5000"); contract.ExecuteContractMethod(out var txIdB, "Transfer", accList[2], "10000"); contract.ExecuteContractMethod(out var txIdC, "Transfer", accList[3], "15000"); //check result contract.CheckTransactionResult(out var aCi, txIdA); contract.CheckTransactionResult(out var bCi, txIdB); contract.CheckTransactionResult(out var cCi, txIdC); //Get balance contract.ExecuteContractMethod(out var txOwner, "BalanceOf", accList[0]); contract.ExecuteContractMethod(out var txBA, "BalanceOf", accList[1]); contract.ExecuteContractMethod(out var txBB, "BalanceOf", accList[2]); contract.ExecuteContractMethod(out var txBC, "BalanceOf", accList[3]); //Query Result contract.GetTransactionResult(txOwner, out var ciOwner); contract.CheckTransactionResult(out var ciA, txBA); contract.CheckTransactionResult(out var ciB, txBB); contract.CheckTransactionResult(out var ciC, txBC); //Convert to Value ciOwner.GetJsonInfo(); string valueStr1 = ciOwner.JsonInfo["result"]["result"]["return"].ToString(); Logger.WriteInfo($"Owner current balance: {Convert.ToInt32(valueStr1, 16)}"); ciA.GetJsonInfo(); string valueStrA = ciA.JsonInfo["result"]["result"]["return"].ToString(); Logger.WriteInfo($"A current balance: {Convert.ToInt32(valueStrA, 16)}"); ciB.GetJsonInfo(); string valueStrB = ciB.JsonInfo["result"]["result"]["return"].ToString(); Logger.WriteInfo($"B current balance: {Convert.ToInt32(valueStrB, 16)}"); ciC.GetJsonInfo(); string valueStrC = ciC.JsonInfo["result"]["result"]["return"].ToString(); Logger.WriteInfo($"C current balance: {Convert.ToInt32(valueStrC, 16)}"); #endregion #region AElf.Contract.Resource #endregion }