public List <API_SmartContractInfo> SmartContract(byte[] Key) { SmartContractDataResult Smart = _connect.SmartContractDataGet(Key); if (Smart.Status.Code > 0) { throw new Exception(Smart.Status.Message); } return(Smart.Methods?.Select(m => (API_SmartContractInfo) new API_SmartContractInfo_4_3(m)).ToList()); }
//public ApiResult<object> UnsafeTransaction(TransactionCreateModel<string> model) //{ // ApiResult<object> Res = new ApiResult<object>() { Result = null}; // byte[] Private; // try // { // Private = Base58CheckEncoding.DecodePlain(model.Priv); // } // catch (Exception) // { // Private = new byte[64]; // } // byte[] Source; // if (model.Source != null) // { // try // { // Source = Base58CheckEncoding.DecodePlain(model.Source); // } // catch (Exception) // { // Res.Message = "Source is incorrect"; // return Res; // } // } // else // { // Source = new byte[32]; // } // if (model.Amount == null) // { // model.Amount = "0,0"; // } // else // { // model.Amount = model.Amount.Replace(".", ",").Replace(" ", ""); // } // if (model.Fee == null) // { // model.Fee = "0,9"; // } // else // { // model.Fee = model.Fee.Replace(".", ",").Replace(" ", ""); // } // Transaction Trans = new Transaction // { // Source = Source // }; // WalletTransactionsCountGetResult TransactionId = _connect.WalletTransactionsCountGet(Trans.Source); // if (TransactionId.Status.Code == 0) // { // Trans.Id = TransactionId.LastTransactionInnerId + 1; // } // byte[] PervStr = NumbToByte(Trans.Id, 6); // if (model.Smart != null && model.Smart.Code != null) // { // byte[] ByteC = Source; // ConcatByteAr(ref ByteC, PervStr); // SmartContractCompileResult ByteCodes = _connect.SmartContractCompile(model.Smart.Code); // if (ByteCodes.Status.Code == 0) // { // foreach (ByteCodeObject item in ByteCodes.ByteCodeObjects) // { // ConcatByteAr(ref ByteC, item.ByteCode); // } // } // Trans.Target = Blake2s.Blake2S.ComputeHash(ByteC); // } // else // { // try // { // Trans.Target = Base58CheckEncoding.DecodePlain(model.Target); // } // catch (Exception) // { // Res.Message = "Target is incorrect"; // return Res; // } // } // string[] ArStrAmmount = model.Amount.Split(','); // Trans.Amount = new Amount // { // Integral = Convert.ToInt32(ArStrAmmount[0]) // }; // if (ArStrAmmount.Length > 1) // Trans.Amount.Fraction = (long)(ValidDouble("0." + ArStrAmmount[1]) * Math.Pow(10, 18)); // Trans.Balance = new Amount { Fraction = 0, Integral = 0 }; // Trans.Currency = 1; // Trans.TimeCreation = DateTime.Now.Ticks; // FeeRes F = Fee(ValidDouble(model.Fee)); // string FeeIntegral = Convert.ToString(F.Exp, 2); // while (FeeIntegral.Length < 5) // { // FeeIntegral = "0" + FeeIntegral; // } // string FeeFraction = Convert.ToString(F.Mantic, 2); // while (FeeFraction.Length < 10) // { // FeeFraction = "0" + FeeFraction; // } // string FeeBits = "0" + FeeIntegral + FeeFraction; // Trans.Fee = new AmountCommission { Commission = Convert.ToInt16(BitsToNumb(FeeBits)) }; // ConcatByteAr(ref PervStr, Trans.Source); // ConcatByteAr(ref PervStr, Trans.Target); // ConcatByteAr(ref PervStr, NumbToByte(Convert.ToInt32(ArStrAmmount[0]), 4)); // if (ArStrAmmount.Length > 1) // ConcatByteAr(ref PervStr, BitConverter.GetBytes(Trans.Amount.Fraction)); // else // ConcatByteAr(ref PervStr, new byte[8]); // ConcatByteAr(ref PervStr, ReverceByteAr(BitsToBytes(FeeBits))); // ConcatByteAr(ref PervStr, new byte[1] { Convert.ToByte(Trans.Currency) }); // if (model.Smart == null && model.UserData == null) // { // ConcatByteAr(ref PervStr, new byte[1]); // } // else if(model.Smart != null) // { // ConcatByteAr(ref PervStr, new byte[1] { 1 }); // byte[] UserFilds = new byte[0]; // Trans.SmartContract = new SmartContractInvocation(); // ConcatByteAr(ref UserFilds, new byte[3] { 11, 0, 1 }); // if (model.Smart.Method == null) // { // ConcatByteAr(ref UserFilds, new byte[4]); // } // else // { // Trans.SmartContract.Method = model.Smart.Method; // byte[] Method = new byte[model.Smart.Method.Length]; // for (int i = 0; i < model.Smart.Method.Length; i++) // { // Method[i] = Convert.ToByte(model.Smart.Method[i]); // } // ConcatByteAr(ref UserFilds, ReverceByteAr(NumbToByte(model.Smart.Method.Length, 4))); // ConcatByteAr(ref UserFilds, Method); // } // ConcatByteAr(ref UserFilds, new byte[4] { 15, 0, 2, 12 }); // if (model.Smart.Params == null) // { // ConcatByteAr(ref UserFilds, new byte[4]); // } // else // { // ConcatByteAr(ref UserFilds, ReverceByteAr(NumbToByte(model.Smart.Params.Count, 4))); // Trans.SmartContract.Params = new List<Variant>(); // foreach (ParamsCreateModel item in model.Smart.Params) // { // switch (item.Key) // { // case "STRING": // ConcatByteAr(ref UserFilds, new byte[3] { 11, 0, 17 }); // ConcatByteAr(ref UserFilds, ReverceByteAr(NumbToByte(item.Value.Length, 4))); // byte[] Params = new byte[item.Value.Length + 1]; // for (int i = 0; i < item.Value.Length; i++) // { // Params[i] = Convert.ToByte(item.Value[i]); // } // ConcatByteAr(ref UserFilds, Params); // Trans.SmartContract.Params.Add(new Variant { V_string = item.Value }); // break; // case "DOUBLE": // ConcatByteAr(ref UserFilds, new byte[3] { 4, 0, 15 }); // ConcatByteAr(ref UserFilds, ReverceByteAr(BitConverter.GetBytes(Double.Parse(item.Value)))); // ConcatByteAr(ref UserFilds, new byte[1]); // Trans.SmartContract.Params.Add(new Variant { V_double = Double.Parse(item.Value) }); // break; // case "INT": // ConcatByteAr(ref UserFilds, new byte[3] { 8, 0, 9 }); // ConcatByteAr(ref UserFilds, ReverceByteAr(NumbToByte(int.Parse(item.Value), 4))); // ConcatByteAr(ref UserFilds, new byte[1]); // Trans.SmartContract.Params.Add(new Variant { V_int = int.Parse(item.Value) }); // break; // case "BOOL": // ConcatByteAr(ref UserFilds, new byte[3] { 2, 0, 3 }); // ConcatByteAr(ref UserFilds, new byte[1]); // if (bool.Parse(item.Value)) // { // UserFilds[UserFilds.Length - 1] = 1; // } // ConcatByteAr(ref UserFilds, new byte[1]); // Trans.SmartContract.Params.Add(new Variant { V_boolean = bool.Parse(item.Value) }); // break; // } // } // } // ConcatByteAr(ref UserFilds, new byte[8] { 15, 0, 3, 11, 0, 0, 0, 0 }); // ConcatByteAr(ref UserFilds, new byte[4] { 2, 0, 4, 0 }); // if (model.Smart.ForgetNewState) // { // UserFilds[UserFilds.Length - 1] = 1; // Trans.SmartContract.ForgetNewState = true; // } // if (model.Smart.Code != null) // { // ConcatByteAr(ref UserFilds, new byte[3] { 12, 0, 5 }); // ConcatByteAr(ref UserFilds, new byte[3] { 11, 0, 1 }); // Trans.SmartContract.SmartContractDeploy = new SmartContractDeploy // { // SourceCode = model.Smart.Code, // ByteCodeObjects = new List<ByteCodeObject>() // }; // ConcatByteAr(ref UserFilds, ReverceByteAr(NumbToByte(model.Smart.Code.Length, 4))); // byte[] Code = new byte[model.Smart.Code.Length]; // for (int i = 0; i < model.Smart.Code.Length; i++) // { // Code[i] = Convert.ToByte(model.Smart.Code[i]); // } // ConcatByteAr(ref UserFilds, Code); // ConcatByteAr(ref UserFilds, new byte[4] { 15, 0, 2, 12 }); // SmartContractCompileResult CompiledByteCode = _connect.SmartContractCompile(model.Smart.Code); // if (CompiledByteCode.Status.Code > 0) // { // return null; // } // else // { // ConcatByteAr(ref UserFilds, ReverceByteAr(NumbToByte(CompiledByteCode.ByteCodeObjects.Count, 4))); // foreach (ByteCodeObject item in CompiledByteCode.ByteCodeObjects) // { // ConcatByteAr(ref UserFilds, new byte[3] { 11, 0, 1 }); // ConcatByteAr(ref UserFilds, ReverceByteAr(NumbToByte(item.Name.Length, 4))); // byte[] Bytes = new byte[item.Name.Length]; // for (int i = 0; i < item.Name.Length; i++) // { // Bytes[i] = Convert.ToByte(item.Name[i]); // } // ConcatByteAr(ref UserFilds, Bytes); // ConcatByteAr(ref UserFilds, new byte[3] { 11, 0, 2 }); // ConcatByteAr(ref UserFilds, ReverceByteAr(NumbToByte(item.ByteCode.Length, 4))); // Bytes = new byte[item.ByteCode.Length]; // for (int i = 0; i < item.ByteCode.Length; i++) // { // Bytes[i] = Convert.ToByte(item.ByteCode[i]); // } // ConcatByteAr(ref UserFilds, Bytes); // Trans.SmartContract.SmartContractDeploy.ByteCodeObjects.Add(new ByteCodeObject // { // Name = item.Name, // ByteCode = item.ByteCode // }); // } // ConcatByteAr(ref UserFilds, new byte[1]); // } // ConcatByteAr(ref UserFilds, new byte[15] { 11, 0, 3, 0, 0, 0, 0, 8, 0, 4, 0, 0, 0, 0, 0 }); // } // ConcatByteAr(ref UserFilds, new byte[1]); // ConcatByteAr(ref PervStr, NumbToByte(UserFilds.Length, 4)); // ConcatByteAr(ref PervStr, UserFilds); // } // else if (model.UserData != null) // { // byte[] UserFilds = new byte[1] {1}; // ConcatByteAr(ref UserFilds, NumbToByte(model.UserData.Length, 4)); // byte[] ufb = new byte[model.UserData.Length]; // for (int i = 0; i < model.UserData.Length; i++) // { // ufb[i] = Convert.ToByte(model.UserData[i]); // } // ConcatByteAr(ref UserFilds, ufb); // ConcatByteAr(ref PervStr, UserFilds); // Trans.UserFields = ufb; // } // if (model.Priv != null) // { // Rebex.Security.Cryptography.Ed25519 o = new Rebex.Security.Cryptography.Ed25519(); // o.FromPrivateKey(Private); // Trans.Signature = o.SignMessage(PervStr); // } // string Ar16 = "0123456789ABCDEF"; // string Hex = ""; // foreach (var i in PervStr) // { // Hex += Ar16[i >> 4]; // Hex += Ar16[i & 15]; // } // TransactionFlowResult TransRes = _connect.TransactionFlow(Trans); // if (TransRes.Status.Code > 0) // { // Res.Message = TransRes.Status.Message; // } // else // { // Res.Result = TransRes; // } // return Res; //} //public ApiResult<PervStrModel> CreatePervStr(TransactionCreateModel<string> model) //{ // ApiResult<PervStrModel> Res = new ApiResult<PervStrModel>(); // byte[] Source; // try // { // Source = Base58CheckEncoding.DecodePlain(model.Source); // } // catch (Exception) // { // Res.Message = "Source is incorrect"; // return Res; // } // if (model.Amount == null) // { // model.Amount = "0,0"; // } // else // { // model.Amount = model.Amount.Replace(".", ",").Replace(" ", ""); // } // if (model.Fee == null) // { // Res.Message = "Fee is not found"; // return Res; // } // else // { // model.Fee = model.Fee.Replace(".", ",").Replace(" ", ""); // } // PervStrModel ResPervStr = new PervStrModel // { // Source = model.Source // }; // WalletTransactionsCountGetResult TransactionId = _connect.WalletTransactionsCountGet(Source); // if (TransactionId.Status.Code == 0) // { // ResPervStr.Id = TransactionId.LastTransactionInnerId + 1; // } // byte[] PervStr = NumbToByte(ResPervStr.Id, 6); // byte[] Target; // if (model.Smart != null && model.Smart.Code != null) // { // byte[] ByteC = Source; // ConcatByteAr(ref ByteC, PervStr); // SmartContractCompileResult ByteCodes = _connect.SmartContractCompile(model.Smart.Code); // if (ByteCodes.Status.Code == 0) // { // foreach (ByteCodeObject item in ByteCodes.ByteCodeObjects) // { // ConcatByteAr(ref ByteC, item.ByteCode); // } // } // Target = Blake2s.Blake2S.ComputeHash(ByteC); // ResPervStr.Target = Base58CheckEncoding.EncodePlain(Target); // } // else // { // ResPervStr.Target = model.Target; // try // { // Target = Base58CheckEncoding.DecodePlain(ResPervStr.Target); // } // catch (Exception) // { // Res.Message = "Target is incorrect"; // return Res; // } // } // ResPervStr.Amount = model.Amount; // string[] ArStrAmmount = model.Amount.Split(','); // FeeRes F = Fee(Convert.ToDouble(model.Fee.Replace(',','.'))); // string FeeIntegral = Convert.ToString(F.Exp, 2); // while (FeeIntegral.Length < 5) // { // FeeIntegral = "0" + FeeIntegral; // } // string FeeFraction = Convert.ToString(F.Mantic, 2); // while (FeeFraction.Length < 10) // { // FeeFraction = "0" + FeeFraction; // } // string FeeBits = "0" + FeeIntegral + FeeFraction; // ResPervStr.Fee = BitsToNumb(FeeBits).ToString(); // ConcatByteAr(ref PervStr, Source); // ConcatByteAr(ref PervStr, Target); // ConcatByteAr(ref PervStr, NumbToByte(Convert.ToInt32(ArStrAmmount[0]), 4)); // if (ArStrAmmount.Length > 1) // ConcatByteAr(ref PervStr, NumbToByte(Convert.ToInt64(Convert.ToDecimal("0." + ArStrAmmount[1]) * 1000000000000000000), 8)); // else // ConcatByteAr(ref PervStr, new byte[8]); // ConcatByteAr(ref PervStr, ReverceByteAr(BitsToBytes(FeeBits))); // ConcatByteAr(ref PervStr, new byte[1] { 1 }); // var Trans = new Transaction{ // SmartContract = new SmartContractInvocation { // } // }; // if (model.Smart == null) // { // ConcatByteAr(ref PervStr, new byte[1]); // } // else // { // ConcatByteAr(ref PervStr, new byte[1] { 1 }); // byte[] UserFilds = new byte[0]; // ResPervStr.Smart = new ContSmart(); // ConcatByteAr(ref UserFilds, new byte[3] { 11, 0, 1 }); // if (model.Smart.Method == null) // { // ConcatByteAr(ref UserFilds, new byte[4]); // } // else // { // ResPervStr.Smart.Method = model.Smart.Method; // byte[] Method = new byte[model.Smart.Method.Length]; // for (int i = 0; i < model.Smart.Method.Length; i++) // { // Method[i] = Convert.ToByte(model.Smart.Method[i]); // } // ConcatByteAr(ref UserFilds, ReverceByteAr(NumbToByte(model.Smart.Method.Length, 4))); // ConcatByteAr(ref UserFilds, Method); // } // ConcatByteAr(ref UserFilds, new byte[4] { 15, 0, 2, 12 }); // if (model.Smart.Params == null) // { // ConcatByteAr(ref UserFilds, new byte[4]); // } // else // { // ConcatByteAr(ref UserFilds, ReverceByteAr(NumbToByte(model.Smart.Params.Count, 4))); // ResPervStr.Smart.Params = new List<ParamsCreateModel>(); // foreach (ParamsCreateModel item in model.Smart.Params) // { // byte[] Params; // switch (item.Key) // { // case "STRING": // ConcatByteAr(ref UserFilds, new byte[3] { 11, 0, 17 }); // ConcatByteAr(ref UserFilds, ReverceByteAr(NumbToByte(item.Value.Length, 4))); // Params = new byte[item.Value.Length + 1]; // for (int i = 0; i < item.Value.Length; i++) // { // Params[i] = Convert.ToByte(item.Value[i]); // } // ConcatByteAr(ref UserFilds, Params); // ResPervStr.Smart.Params.Add(item); // break; // case "DOUBLE": // ConcatByteAr(ref UserFilds, new byte[3] { 4, 0, 15 }); // ConcatByteAr(ref UserFilds, ReverceByteAr(BitConverter.GetBytes(Double.Parse(item.Value)))); // ConcatByteAr(ref UserFilds, new byte[1]); // ResPervStr.Smart.Params.Add(item); // break; // case "INT": // ConcatByteAr(ref UserFilds, new byte[3] { 8, 0, 9 }); // ConcatByteAr(ref UserFilds, ReverceByteAr(NumbToByte(int.Parse(item.Value), 4))); // ConcatByteAr(ref UserFilds, new byte[1]); // ResPervStr.Smart.Params.Add(item); // break; // case "BOOL": // ConcatByteAr(ref UserFilds, new byte[3] { 2, 0, 3 }); // ConcatByteAr(ref UserFilds, new byte[1]); // if (bool.Parse(item.Value)) // { // UserFilds[UserFilds.Length - 1] = 1; // } // ConcatByteAr(ref UserFilds, new byte[1]); // ResPervStr.Smart.Params.Add(item); // break; // } // } // } // ConcatByteAr(ref UserFilds, new byte[8] { 15, 0, 3, 11, 0, 0, 0, 0 }); // ConcatByteAr(ref UserFilds, new byte[4] { 2, 0, 4, 0 }); // if (model.Smart.ForgetNewState) // { // UserFilds[UserFilds.Length - 1] = 1; // ResPervStr.Smart.ForgetNewState = true; // } // if (model.Smart.Code != null) // { // ConcatByteAr(ref UserFilds, new byte[3] { 12, 0, 5 }); // ConcatByteAr(ref UserFilds, new byte[3] { 11, 0, 1 }); // ResPervStr.Smart.Deploy = new Deploy // { // Code = model.Smart.Code // }; // ConcatByteAr(ref UserFilds, ReverceByteAr(NumbToByte(model.Smart.Code.Length, 4))); // byte[] Code = new byte[model.Smart.Code.Length]; // for (int i = 0; i < model.Smart.Code.Length; i++) // { // Code[i] = Convert.ToByte(model.Smart.Code[i]); // } // ConcatByteAr(ref UserFilds, Code); // ConcatByteAr(ref UserFilds, new byte[4] { 15, 0, 2, 12 }); // SmartContractCompileResult CompiledByteCode = _connect.SmartContractCompile(model.Smart.Code); // if (CompiledByteCode.Status.Code > 0) // { // Res.Message = CompiledByteCode.Status.Message; // return Res; // } // else // { // ConcatByteAr(ref UserFilds, ReverceByteAr(NumbToByte(CompiledByteCode.ByteCodeObjects.Count, 4))); // foreach (ByteCodeObject item in CompiledByteCode.ByteCodeObjects) // { // ConcatByteAr(ref UserFilds, new byte[3] { 11, 0, 1 }); // ConcatByteAr(ref UserFilds, ReverceByteAr(NumbToByte(item.Name.Length, 4))); // byte[] Bytes = new byte[item.Name.Length]; // for (int i = 0; i < item.Name.Length; i++) // { // Bytes[i] = Convert.ToByte(item.Name[i]); // } // ConcatByteAr(ref UserFilds, Bytes); // ConcatByteAr(ref UserFilds, new byte[3] { 11, 0, 2 }); // ConcatByteAr(ref UserFilds, ReverceByteAr(NumbToByte(item.ByteCode.Length, 4))); // Bytes = new byte[item.ByteCode.Length]; // for (int i = 0; i < item.ByteCode.Length; i++) // { // Bytes[i] = Convert.ToByte(item.ByteCode[i]); // } // ConcatByteAr(ref UserFilds, Bytes); // ConcatByteAr(ref UserFilds, new byte[1]); // } // } // ConcatByteAr(ref UserFilds, new byte[15] { 11, 0, 3, 0, 0, 0, 0, 8, 0, 4, 0, 0, 0, 0, 0}); // } // ConcatByteAr(ref UserFilds, new byte[1]); // ConcatByteAr(ref PervStr, NumbToByte(UserFilds.Length, 4)); // ConcatByteAr(ref PervStr, UserFilds); // } // string Ar16 = "0123456789ABCDEF"; // ResPervStr.Priv = ""; // foreach (var i in PervStr) // { // ResPervStr.Priv += Ar16[i >> 4]; // ResPervStr.Priv += Ar16[i & 15]; // } // Res.Result = ResPervStr; // return Res; //} //public ApiResult<bool> Send(PervStrModel model) //{ // ApiResult<bool> Res = new ApiResult<bool> // { // Result = false // }; // Transaction Trans = new Transaction // { // Id = model.Id, // TimeCreation = DateTime.Now.Ticks, // Balance = new Amount { Integral = 0, Fraction = 0 }, // Currency = 1, // Fee = new AmountCommission { Commission = Convert.ToInt16(model.Fee) }, // Signature = new byte[64] // }; // if (model.Priv == null) // { // Res.Message = "Signature is not found"; // return Res; // } // else // { // string Ar16 = "0123456789ABCDEF"; // for (int i = 0; i < model.Priv.Length; i++) // { // for (int j = 0; j < Ar16.Length; j++) // { // if (Ar16[j] == model.Priv[i]) // { // Trans.Signature[i / 2] += Convert.ToByte(j * 16); // } // if (Ar16[j] == model.Priv[i + 1]) // { // Trans.Signature[i / 2] += Convert.ToByte(j); // } // } // i++; // } // } // try // { // Trans.Source = Base58CheckEncoding.DecodePlain(model.Source); // } // catch (Exception) // { // Res.Message = "Source is incorrect"; // return Res; // } // try // { // Trans.Target = Base58CheckEncoding.DecodePlain(model.Target); // } // catch (Exception) // { // Res.Message = "Target is incorrect"; // return Res; // } // if (model.Amount == null) // { // Trans.Amount = new Amount { Integral = 0, Fraction = 0 }; // } // else // { // model.Amount = model.Amount.Replace(".", ",").Replace(" ", ""); // string[] ArStrAmmount = model.Amount.Split(','); // Trans.Amount = new Amount // { // Integral = Convert.ToInt32(ArStrAmmount[0]) // }; // if (ArStrAmmount.Length > 1) // { // Trans.Amount.Fraction = Convert.ToInt64(Convert.ToDecimal("0." + ArStrAmmount[1]) * 1000000000000000000); // } // } // if (model.Smart != null) // { // Trans.SmartContract = new SmartContractInvocation // { // ForgetNewState = model.Smart.ForgetNewState // }; // if (model.Smart.Deploy == null) // { // Trans.SmartContract.Method = model.Smart.Method; // if (model.Smart.Params != null) // { // Trans.SmartContract.Params = new List<Variant>(); // foreach (var item in model.Smart.Params) // { // switch (item.Key) // { // case "STRING": // Trans.SmartContract.Params.Add(new Variant { V_string = item.Value }); // break; // case "DOUBLE": // Trans.SmartContract.Params.Add(new Variant { V_double = Convert.ToDouble(item.Value) }); // break; // } // } // } // } // else // { // Trans.SmartContract.SmartContractDeploy = new SmartContractDeploy // { // SourceCode = model.Smart.Deploy.Code // }; // SmartContractCompileResult ByteCodes = _connect.SmartContractCompile(model.Smart.Deploy.Code); // if (ByteCodes.Status.Code > 0) // { // Res.Message = ByteCodes.Status.Message; // return Res; // } // Trans.SmartContract.SmartContractDeploy.ByteCodeObjects = new List<ByteCodeObject>(); // foreach (ByteCodeObject item in ByteCodes.ByteCodeObjects) // { // Trans.SmartContract.SmartContractDeploy.ByteCodeObjects.Add(new ByteCodeObject // { // Name = item.Name, // ByteCode = item.ByteCode // }); // } // } // } // TransactionFlowResult TransRes = _connect.TransactionFlow(Trans); // if (TransRes.Status.Code > 0) // { // Res.Message = TransRes.Status.Message; // } // else // { // Res.Result = true; // } // return Res; //} public ApiResult <List <SmartContractInfo> > SmartContract(string Key) { ApiResult <List <SmartContractInfo> > Res = new ApiResult <List <SmartContractInfo> > { Result = null }; byte[] Public; try { Public = Base58CheckEncoding.DecodePlain(Key); } catch (Exception) { Res.Message = "Public key is not valid"; return(Res); } SmartContractDataResult Smart = _connect.SmartContractDataGet(Public); if (Smart.Status.Code > 0) { Res.Message = Smart.Status.Message; return(Res); } Res.Result = new List <SmartContractInfo>(); foreach (SmartContractMethod item in Smart.Methods) { SmartContractInfo Info = new SmartContractInfo { ReturnType = item.ReturnType, Name = item.Name, Arguments = new List <SmartArgument>() }; foreach (SmartContractMethodArgument i in item.Arguments) { Info.Arguments.Add(new SmartArgument { Name = i.Name, Type = i.Type }); } Res.Result.Add(Info); } return(Res); }
public ContractInfo ToContractInfo(SmartContract sc, SmartContractDataResult data, int index = 0) { var cInfo = new ContractInfo { Index = index, Address = SimpleBase.Base58.Bitcoin.Encode(sc.Address), SourceCode = Utils.FormatSrc(sc.SmartContractDeploy.SourceCode), TokenStandard = GetTokenStd(sc.SmartContractDeploy.TokenStandard), IsToken = sc.SmartContractDeploy.TokenStandard > 0, HashState = sc.SmartContractDeploy.HashState, ByteCodeLen = sc.SmartContractDeploy.ByteCodeObjects?.Sum(b => b.ByteCode.Length) ?? 0, Deployer = SimpleBase.Base58.Bitcoin.Encode(sc.Deployer), CreateTime = Utils.UnixTimeStampToDateTime(sc.CreateTime), TxCount = sc.TransactionsCount }; if (data == null) { return(cInfo); } var methods = data.Methods.Select( m => $"{Utils.SimplifyJavaType(m.ReturnType)} {m.Name}({string.Join(", ", m.Arguments.Select(a => $"{Utils.SimplifyJavaType(a.Type)} {a.Name}"))});" ).ToArray(); cInfo.Methods = string.Join('\n', methods); var variables = data.Variables.Select(v => $"{Utils.Type(v.Value)} {v.Key} = {Utils.VarToStr(v.Value)};").ToArray(); cInfo.Variables = string.Join('\n', variables); cInfo.MethodDescriptions = data.Methods //.Where(m => !string.IsNullOrEmpty(m.ReturnType) && m.Name.StartsWith("get", StringComparison.InvariantCultureIgnoreCase)) .Select(m => new { ReturnType = Utils.SimplifyJavaType(m.ReturnType), m.Name, Arguments = m.Arguments.Select(a => new { Key = Utils.SimplifyJavaType(a.Type).ToUpper(), a.Name, Value = string.Empty }).ToArray() }) .ToArray(); return(cInfo); }