public async Task <List <string> > GetRequiredKeys(List <string> availableKeys, Transaction trx) { int actionIndex = 0; var abiSerializer = new AbiSerializationProvider(Api); var abiResponses = await abiSerializer.GetTransactionAbis(trx); foreach (var action in trx.ContextFreeActions) { action.Data = SerializationHelper.ByteArrayToHexString( abiSerializer.SerializeActionData(action, abiResponses[actionIndex++])); } foreach (var action in trx.Actions) { action.Data = SerializationHelper.ByteArrayToHexString( abiSerializer.SerializeActionData(action, abiResponses[actionIndex++])); } return((await Api.GetRequiredKeys(new GetRequiredKeysRequest() { AvailableKeys = availableKeys, Transaction = trx })).RequiredKeys); }
public async Task <ExcutedResult> TransactionBinToJson(string hexData) { var abiSer = new AbiSerializationProvider(new NgkApi(Configurator, new HttpHandler())); var transaction = await abiSer.DeserializePackedTransaction(hexData); return(ExcutedResult.SuccessResult(transaction)); }
public async Task DeserializePackedTransaction() { var packed_trx = ""; var abiSerializer = new AbiSerializationProvider(DefaultApi); var trx = await abiSerializer.DeserializePackedTransaction(packed_trx); Console.WriteLine(JsonConvert.SerializeObject(trx)); }
private async Task <PushTransactionResponse> CreateTransaction() { var getInfoResult = await DefaultApi.GetInfo(); var getBlockResult = await DefaultApi.GetBlock(new GetBlockRequest() { BlockNumOrId = getInfoResult.LastIrreversibleBlockNum.Value.ToString() }); var trx = new Transaction() { //trx headers Expiration = getInfoResult.HeadBlockTime.Value.AddSeconds(60), //expire Seconds RefBlockNum = (UInt16)(getInfoResult.LastIrreversibleBlockNum.Value & 0xFFFF), RefBlockPrefix = getBlockResult.RefBlockPrefix, // trx info MaxNetUsageWords = 0, MaxCpuUsageMs = 0, DelaySec = 0, ContextFreeActions = new List <Api.v1.Action>(), TransactionExtensions = new List <Extension>(), Actions = new List <Api.v1.Action>() { new Api.v1.Action() { Account = "eosio.token", Authorization = new List <PermissionLevel>() { new PermissionLevel() { Actor = "tester112345", Permission = "active" } }, Name = "transfer", Data = new { from = "tester112345", to = "tester212345", quantity = "0.0001 EOS", memo = "hello crypto world!" } } } }; var abiSerializer = new AbiSerializationProvider(DefaultApi); var packedTrx = await abiSerializer.SerializePackedTransaction(trx); var requiredKeys = new List <string>() { "EOS8Q8CJqwnSsV4A6HDBEqmQCqpQcBnhGME1RUvydDRnswNngpqfr" }; var signatures = await EosConfig.SignProvider.Sign(DefaultApi.Config.ChainId, requiredKeys, packedTrx); return(await DefaultApi.PushTransaction(new PushTransactionRequest() { Signatures = signatures.ToArray(), Compression = 0, PackedContextFreeData = "", PackedTrx = SerializationHelper.ByteArrayToHexString(packedTrx) })); }
public async Task GetRawAbi() { var result = await DefaultApi.GetRawAbi(new GetRawAbiRequest() { account_name = "eosio.token" }); var abiSerializer = new AbiSerializationProvider(DefaultApi); var abiObject = abiSerializer.DeserializePackedAbi(result.abi); }
/// <summary> /// Client wrapper to interact with eos blockchains. /// </summary> /// <param name="config">Configures client parameters</param> public Eos(EosConfigurator config) { EosConfig = config; if (EosConfig == null) { throw new ArgumentNullException("config"); } Api = new EosApi(EosConfig); AbiSerializer = new AbiSerializationProvider(Api); }
/// <summary> /// Client wrapper to interact with eos blockchains. /// </summary> /// <param name="config">Configures client parameters</param> public EosBase(EosConfigurator config, IHttpHelper httpHelper) { EosConfig = config; if (EosConfig == null) { throw new ArgumentNullException("config"); } Api = new EosApi(EosConfig, httpHelper); AbiSerializer = new AbiSerializationProvider(Api); }
/// <summary> /// Client wrapper to interact with vaka blockchains. /// </summary> /// <param name="config">Configures client parameters</param> public Vaka(VakaConfigurator config) { VakaConfig = config; if (VakaConfig == null) { throw new ArgumentNullException("config"); } Api = new VakaApi(VakaConfig); AbiSerializer = new AbiSerializationProvider(Api); }
public List <TokenAccountModel> GetTokenAccounts(string code, decimal symbolCode) { var tempList = new List <TokenAccountTempModel>(); var list = DbSet.Where(m => m.Table == "accounts" && m.Code == code && m.PrimaryKey == symbolCode) .GroupBy(m => m.Scope) .Select(m => new { AccountName = m.Key, Data = m.OrderByDescending(c => c.BlockNum).First() }) .Where(p => p.Data.Present) .ToList(); if (!list.Any()) { return(new List <TokenAccountModel>()); } var codes = list.Select(m => m.Data.Code).Distinct().ToList(); var accounts = DbContext.GetDbSet <Account>() .Where(m => codes.Contains(m.Name)) .ToList(); var abiSerializationProvider = new AbiSerializationProvider(); list.ForEach(item => { var account = accounts .Where(m => m.Name == item.Data.Code && m.BlockNum <= item.Data.BlockNum) .OrderByDescending(m => m.BlockNum) .First(); var abi = abiSerializationProvider.DeserializePackedAbi(account.Abi); var abiTable = abi.tables.First(t => t.name == item.Data.Table); var data = abiSerializationProvider.DeserializeStructData(abiTable.type, item.Data.Value, abi); tempList.Add(new TokenAccountTempModel { AccountName = item.AccountName, Data = data }); }); return(tempList.Select(m => new TokenAccountModel { Balance = m.Balance, AccountName = m.AccountName }) .Where(m => m.Balance > 0) .OrderByDescending(m => m.Balance) .ToList()); }
private PagedResults <TransferRecordModel> GetTransferRecord(IQueryable <ActionTrace> queryable, TransferQueryParams queryParams, PagedResults <TransferRecordModel> result) { var list = queryable .GroupJoin(_dbContext.GetDbSet <BlockInfo>(), m => m.BlockNum, b => b.BlockNum, (m, b) => new { ActionTrace = m, BlockInfo = b }) .SelectMany(combination => combination.BlockInfo.DefaultIfEmpty(), (m, b) => new TransferRecordModel { ActData = m.ActionTrace.ActData, BlockNum = m.ActionTrace.BlockNum, Status = m.ActionTrace.transaction_status.ToString(), BlockTime = b.Timestamp, ActName = m.ActionTrace.ActName, ActionAccount = m.ActionTrace.ActAccount, TransactionId = m.ActionTrace.TransactionId }) .ToList(); var actAccounts = list.Select(m => m.ActionAccount).Distinct().ToList(); var accounts = _dbContext.GetDbSet <Account>() .Where(p => actAccounts.Contains(p.Name)) .ToList(); var abiSerializationProvider = new AbiSerializationProvider(); list.ForEach(item => { var account = accounts.Where(m => m.Name == item.ActionAccount && m.BlockNum <= item.BlockNum) .OrderByDescending(m => m.BlockNum) .FirstOrDefault(); var abi = abiSerializationProvider.DeserializePackedAbi(account.Abi); var action = abi.actions.First(t => t.name == item.ActName); var data = abiSerializationProvider.DeserializeStructData(action.type, item.ActData, abi); item.TempData = data; }); if (string.IsNullOrWhiteSpace(queryParams.TokenSymbol)) { result.Data = list; } else { list = list.Where(m => m.Symbol == queryParams.TokenSymbol).ToList(); result.PagerInfo.TotalRowCount = list.Count; result.Data = list.Skip((queryParams.PageIndex - 1) * queryParams.PageSize).Take(queryParams.PageSize).ToList(); } return(result); }
public List <TokenOfAccountModel> GetTokensOfAccount(string accountName) { var result = new List <TokenOfAccountModel>(); var list = DbSet.Where(m => m.Table == "accounts" && m.Scope == accountName) .GroupBy(m => new { m.Code, m.PrimaryKey }) .Select(m => new { Data = m.OrderByDescending(c => c.BlockNum).First() }) .Where(p => p.Data.Present) .ToList(); if (!list.Any()) { return(result); } var codes = list.Select(m => m.Data.Code).Distinct().ToList(); var accounts = DbContext.GetDbSet <Account>() .Where(m => codes.Contains(m.Name)) .ToList(); var abiSerializationProvider = new AbiSerializationProvider(); list.ForEach(item => { var account = accounts .Where(m => m.Name == item.Data.Code && m.BlockNum <= item.Data.BlockNum) .OrderByDescending(m => m.BlockNum) .First(); var abi = abiSerializationProvider.DeserializePackedAbi(account.Abi); var abiTable = abi.tables.First(t => t.name == item.Data.Table); var data = abiSerializationProvider.DeserializeStructData(abiTable.type, item.Data.Value, abi); var model = new TokenOfAccountModel { Contract = item.Data.Code, Data = data }; if (!ConfigDataKey.FilterTokenSymbol.Contains(model.Symbol)) { result.Add(model); } }); return(result); }
public List <TransactionOfAccountModel> ListOfAccount(string accountName, int page) { var pageSize = 10; var list = DbContext.GetDbSet <ActionTrace>() .Where(m => m.Receiver == accountName) .OrderByDescending(m => m.BlockNum) .ThenBy(m => m.TransactionId) .ThenBy(m => m.ActionOrdinal) .Skip((page - 1) * pageSize) .Take(pageSize) .GroupJoin(DbContext.GetDbSet <BlockInfo>(), m => m.BlockNum, b => b.BlockNum, (m, b) => new { ActionTrace = m, BlockInfo = b }) .SelectMany(combination => combination.BlockInfo.DefaultIfEmpty(), (m, b) => new TransactionOfAccountModel { BlockNum = m.ActionTrace.BlockNum, TransactionId = m.ActionTrace.TransactionId, Timestamp = b.Timestamp, Type = m.ActionTrace.ActName, ActAccount = m.ActionTrace.ActAccount, ActName = m.ActionTrace.ActName, TempData = m.ActionTrace.ActData, }) .ToList(); var actAccounts = list.Select(m => m.ActAccount).Distinct().ToList(); var accounts = DbContext.GetDbSet <Account>() .Where(p => actAccounts.Contains(p.Name)) .ToList(); var abiSerializationProvider = new AbiSerializationProvider(); list.ForEach(item => { var account = accounts.Where(m => m.Name == item.ActAccount && m.BlockNum <= item.BlockNum) .OrderByDescending(m => m.BlockNum) .FirstOrDefault(); var abi = abiSerializationProvider.DeserializePackedAbi(account.Abi); var action = abi.actions.First(t => t.name == item.ActName); var data = abiSerializationProvider.DeserializeStructData(action.type, item.TempData, abi); item.ActData = data; }); return(list); }
public TokenListModel ListToken() { var result = new TokenListModel(); var list = GetAllTokenCodes(); if (!list.Any()) { return(result); } var codes = list.Select(m => m.Code).Distinct().ToList(); var accounts = DbContext.GetDbSet <Account>() .Where(m => codes.Contains(m.Name)) .ToList(); var abiSerializationProvider = new AbiSerializationProvider(); list.ForEach(item => { var account = accounts .Where(m => m.Name == item.Code && m.BlockNum <= item.BlockNum) .OrderByDescending(m => m.BlockNum) .First(); var abi = abiSerializationProvider.DeserializePackedAbi(account.Abi); var abiTable = abi.tables.First(t => t.name == item.Table); var data = abiSerializationProvider.DeserializeStructData(abiTable.type, item.Value, abi); var model = new TokenInfoModel { Contract = item.Code, Data = data }; if (!ConfigDataKey.FilterTokenSymbol.Contains(model.TokenName)) { result.Lists.Add(model); } }); result.TotalTokenCount = result.Lists.Count; return(result); }
public TransactionDetailModel GetTransfer(string trxId) { var transfer = _dbContext.GetDbSet <ActionTrace>() .Where(m => m.TransactionId == trxId.ToUpper() && m.ActionOrdinal == 1) .GroupJoin(_dbContext.GetDbSet <BlockInfo>(), m => m.BlockNum, b => b.BlockNum, (m, b) => new { ActionTrace = m, BlockInfo = b }) .SelectMany(combination => combination.BlockInfo.DefaultIfEmpty(), (m, b) => new TransactionDetailModel { TempData = m.ActionTrace.ActData, BlockNum = m.ActionTrace.BlockNum, Status = m.ActionTrace.transaction_status.ToString(), BlockTime = b.Timestamp, ActName = m.ActionTrace.ActName, ActionAccount = m.ActionTrace.ActAccount, TransactionId = m.ActionTrace.TransactionId }) .FirstOrDefault(); if (transfer == null) { return(transfer); } var accounts = _dbContext.GetDbSet <Account>() .Where(p => p.Name == transfer.ActionAccount) .ToList(); var abiSerializationProvider = new AbiSerializationProvider(); var account = accounts.Where(m => m.Name == transfer.ActionAccount && m.BlockNum <= transfer.BlockNum) .OrderByDescending(m => m.BlockNum) .FirstOrDefault(); var abi = abiSerializationProvider.DeserializePackedAbi(account.Abi); var action = abi.actions.First(t => t.name == transfer.ActName); var data = abiSerializationProvider.DeserializeStructData(action.type, transfer.TempData, abi); transfer.ActData = data; return(transfer); }
public async Task SignTransaction() { var trx = new Transaction() { // trx info MaxNetUsageWords = 0, MaxCpuUsageMs = 0, DelaySec = 0, ContextFreeActions = new List <Api.v1.Action>(), TransactionExtensions = new List <Extension>(), Actions = new List <Api.v1.Action>() { new Api.v1.Action() { Account = "eosio.token", Authorization = new List <PermissionLevel>() { new PermissionLevel() { Actor = "tester112345", Permission = "active" } }, Name = "transfer", Data = new { from = "tester112345", to = "tester212345", quantity = "1.0000 EOS", memo = "hello crypto world!" } } } }; var abiSerializer = new AbiSerializationProvider(DefaultApi); var packedTrx = await abiSerializer.SerializePackedTransaction(trx); var requiredKeys = new List <string>() { "EOS8Q8CJqwnSsV4A6HDBEqmQCqpQcBnhGME1RUvydDRnswNngpqfr" }; var signatures = await EosConfig.SignProvider.Sign(DefaultApi.Config.ChainId, requiredKeys, packedTrx); Assert.IsTrue(signatures.First() == "SIG_K1_Jze1PGnAo9MVHkxRxekZQKJebM11AgtK4NhsFtDEZsLujrocvJ5dnhejyr9RQji2K3DWdyUpM9BGyWts7FFr8Wib95hiTj"); }
public async Task SignTransaction() { var trx = new Transaction() { // trx info MaxNetUsageWords = 0, MaxCpuUsageMs = 0, DelaySec = 0, ContextFreeActions = new List <Api.v1.Action>(), TransactionExtensions = new List <Extension>(), Actions = new List <Api.v1.Action>() { new Api.v1.Action() { Account = "eosio.token", Authorization = new List <PermissionLevel>() { new PermissionLevel() { Actor = "tester112345", Permission = "active" } }, Name = "transfer", Data = new { from = "tester112345", to = "tester212345", quantity = "1.0000 EOS", memo = "hello crypto world!" } } } }; var abiSerializer = new AbiSerializationProvider(DefaultApi); var packedTrx = await abiSerializer.SerializePackedTransaction(trx); var requiredKeys = new List <string>() { "EOS8Q8CJqwnSsV4A6HDBEqmQCqpQcBnhGME1RUvydDRnswNngpqfr" }; var signatures = await EosConfig.SignProvider.Sign(DefaultApi.Config.ChainId, requiredKeys, packedTrx); Assert.IsTrue(signatures.First() == "SIG_K1_K9atRrkPT67BSEdiEqCDvaokWJKXwFRYXni98zMGosvNM1kb9WpNNn1SQe5S8MaKqe495gUbLVnbAH7oLiEN8LoaMG9i3p"); }
public async Task SignTransaction() { var trx = new Transaction() { // trx info max_net_usage_words = 0, max_cpu_usage_ms = 0, delay_sec = 0, context_free_actions = new List <Core.Api.v1.Action>(), transaction_extensions = new List <Extension>(), actions = new List <Core.Api.v1.Action>() { new Core.Api.v1.Action() { account = "eosio.token", authorization = new List <PermissionLevel>() { new PermissionLevel() { actor = "tester112345", permission = "active" } }, name = "transfer", data = new { from = "tester112345", to = "tester212345", quantity = "1.0000 EOS", memo = "hello crypto world!" } } } }; var abiSerializer = new AbiSerializationProvider(DefaultApi); var packedTrx = await abiSerializer.SerializePackedTransaction(trx); var requiredKeys = new List <string>() { "EOS8Q8CJqwnSsV4A6HDBEqmQCqpQcBnhGME1RUvydDRnswNngpqfr" }; var signatures = await EosConfig.SignProvider.Sign(DefaultApi.Config.ChainId, requiredKeys, packedTrx); Assert.IsTrue(signatures.First() == "SIG_K1_KWLNqBX3qhbeagcFpkeKHA5EE9yAEzwmeVwY5zW3fgVcswP1x6ur45qENqWxd2GvjAUKnmaTcrKWG2crWWnw22RHdBE8oS"); }
public async Task SignTransaction() { var trx = new Transaction() { // trx info max_net_usage_words = 0, max_cpu_usage_ms = 0, delay_sec = 0, context_free_actions = new List <Core.Api.v1.Action>(), transaction_extensions = new List <Extension>(), actions = new List <Core.Api.v1.Action>() { new Core.Api.v1.Action() { account = "eosio.token", authorization = new List <PermissionLevel>() { new PermissionLevel() { actor = "tester112345", permission = "active" } }, name = "transfer", data = new { from = "tester112345", to = "tester212345", quantity = "1.0000 EOS", memo = "hello crypto world!" } } } }; var abiSerializer = new AbiSerializationProvider(DefaultApi); var packedTrx = await abiSerializer.SerializePackedTransaction(trx); var requiredKeys = new List <string>() { "EOS8Q8CJqwnSsV4A6HDBEqmQCqpQcBnhGME1RUvydDRnswNngpqfr" }; var signatures = await EosConfig.SignProvider.Sign(DefaultApi.Config.ChainId, requiredKeys, packedTrx); Assert.IsTrue(signatures.First() == "SIG_K1_KVsYuAMd2gopMCsCPxgUMCaPRMvtnMVTbbEDSujBSw6TVeu7v7xHFRYT2Y6nBKSKS6hHjjJE6YZQNdbrMYX71FibTatikf"); }
public async Task GetRawAbi() { bool success = false; try { var result = await DefaultApi.GetRawAbi(new GetRawAbiRequest() { AccountName = "eosio.token" }); var abiSerializer = new AbiSerializationProvider(DefaultApi); var abiObject = abiSerializer.DeserializePackedAbi(result.Abi); success = true; } catch (Exception ex) { Console.WriteLine(JsonConvert.SerializeObject(ex)); } Assert.IsTrue(success); }
public TransactionRawDataModel GetRawData(string txId) { txId = txId?.ToUpper(); var transaction = DbSet.Where(m => m.Id == txId).Select(m => new TransactionRawDataModel { Id = m.Id, BlockNum = m.BlockNum, TransactionOrdinal = m.TransactionOrdinal, FailedDtrxTrace = m.FailedDtrxTrace, status = m.status.ToString(), CpuUsageUs = m.CpuUsageUs, NetUsageWords = m.NetUsageWords, Elapsed = m.Elapsed, NetUsage = m.NetUsage, Scheduled = m.Scheduled, AccountRamDeltaAccount = m.AccountRamDeltaAccount, AccountRamDeltaDelta = m.AccountRamDeltaDelta, AccountRamDeltaPresent = m.AccountRamDeltaPresent, ErrorCode = m.ErrorCode, PartialExpiration = m.PartialExpiration, PartialPresent = m.PartialPresent, PartialSignatures = m.PartialSignatures, PartialDelaySec = m.PartialDelaySec, PartialContextFreeData = m.PartialContextFreeData, PartialRefBlockNum = m.PartialRefBlockNum, PartialRefBlockPrefix = m.PartialRefBlockPrefix, PartialMaxCpuUsageMs = m.PartialMaxCpuUsageMs, PartialMaxNetUsageWords = m.PartialMaxNetUsageWords, Except = m.Except, Actions = DbContext.GetDbSet <ActionTrace>().Where(a => a.TransactionId == txId) .OrderBy(a => a.ActionOrdinal).Select(a => new ActionTraceRawModel { BlockNum = a.BlockNum, TransactionId = a.TransactionId, TransactionStatus = a.transaction_status.ToString(), ActionOrdinal = a.ActionOrdinal, CreatorActionOrdinal = a.CreatorActionOrdinal, ReceiptPresent = a.ReceiptPresent, ReceiptReceiver = a.ReceiptReceiver, ReceiptActDigest = a.ReceiptActDigest, ReceiptGlobalSequence = a.ReceiptGlobalSequence, ReceiptRecvSequence = a.ReceiptRecvSequence, ReceiptCodeSequence = a.ReceiptCodeSequence, ReceiptAbiSequence = a.ReceiptAbiSequence, Receiver = a.Receiver, ActAccount = a.ActAccount, ActName = a.ActName, ActData = a.ActData, ContextFree = a.ContextFree, Elapsed = a.Elapsed, Console = a.Console, Except = a.Except, ErrorCode = a.ErrorCode }).ToList() }) .SingleOrDefault(); if (transaction != null) { var actAccounts = transaction.Actions.Select(m => m.ActAccount).Distinct().ToList(); var accounts = DbContext.GetDbSet <Account>() .Where(p => actAccounts.Contains(p.Name)) .ToList(); var abiSerializationProvider = new AbiSerializationProvider(); transaction.Actions.ForEach(item => { var account = accounts.Where(m => m.Name == item.ActAccount && m.BlockNum <= item.BlockNum) .OrderByDescending(m => m.BlockNum) .First(); var abi = abiSerializationProvider.DeserializePackedAbi(account.Abi); var action = abi.actions.First(t => t.name == item.ActName); var data = abiSerializationProvider.DeserializeStructData(action.type, item.ActData, abi); item.ActTempData = data; }); } return(transaction); }
public async Task GetRequiredKeys() { bool success = false; try { var getInfoResult = await DefaultApi.GetInfo(); var getBlockResult = await DefaultApi.GetBlock(new GetBlockRequest() { BlockNumOrId = getInfoResult.LastIrreversibleBlockNum.Value.ToString() }); var trx = new Transaction() { //trx headers Expiration = getInfoResult.HeadBlockTime.Value.AddSeconds(60), //expire Seconds RefBlockNum = (UInt16)(getInfoResult.LastIrreversibleBlockNum.Value & 0xFFFF), RefBlockPrefix = getBlockResult.RefBlockPrefix, // trx info MaxNetUsageWords = 0, MaxCpuUsageMs = 0, DelaySec = 0, ContextFreeActions = new List <Api.v1.Action>(), Actions = new List <Api.v1.Action>() { new Api.v1.Action() { Account = "eosio.token", Authorization = new List <PermissionLevel>() { new PermissionLevel() { Actor = "tester112345", Permission = "active" } }, Name = "transfer", Data = new { from = "tester112345", to = "tester212345", quantity = "1.0000 EOS", memo = "hello crypto world!" } } }, TransactionExtensions = new List <Extension>() }; int actionIndex = 0; var abiSerializer = new AbiSerializationProvider(DefaultApi); var abiResponses = await abiSerializer.GetTransactionAbis(trx); foreach (var action in trx.ContextFreeActions) { action.Data = SerializationHelper.ByteArrayToHexString(abiSerializer.SerializeActionData(action, abiResponses[actionIndex++])); } foreach (var action in trx.Actions) { action.Data = SerializationHelper.ByteArrayToHexString(abiSerializer.SerializeActionData(action, abiResponses[actionIndex++])); } var getRequiredResult = await DefaultApi.GetRequiredKeys(new GetRequiredKeysRequest() { AvailableKeys = new List <string>() { "EOS8Q8CJqwnSsV4A6HDBEqmQCqpQcBnhGME1RUvydDRnswNngpqfr" }, Transaction = trx }); success = true; } catch (Exception ex) { Console.WriteLine(JsonConvert.SerializeObject(ex)); } Assert.IsTrue(success); }
public List <TransactionModel> ListTransaction(string txId, string blockKey) { var result = new List <TransactionModel>(); if (!string.IsNullOrWhiteSpace(txId) || !string.IsNullOrWhiteSpace(blockKey)) { if (!string.IsNullOrWhiteSpace(txId)) { txId = txId.ToUpper(); var list = DbContext.GetDbSet <ActionTrace>() .Where(m => m.TransactionId == txId) .OrderBy(m => m.ActionOrdinal) .GroupJoin(DbContext.GetDbSet <BlockInfo>(), m => m.BlockNum, b => b.BlockNum, (m, b) => new { ActionTrace = m, BlockInfo = b }) .SelectMany(combination => combination.BlockInfo.DefaultIfEmpty(), (m, b) => new TransactionModel { BlockNum = m.ActionTrace.BlockNum, TransactionId = m.ActionTrace.TransactionId, ActionOrdinal = m.ActionTrace.ActionOrdinal, CreatorActionOrdinal = m.ActionTrace.CreatorActionOrdinal, Timestamp = b.Timestamp, Type = m.ActionTrace.ActName, ActAccount = m.ActionTrace.ActAccount, ActName = m.ActionTrace.ActName, TempData = m.ActionTrace.ActData, }) .ToList(); if (!list.Any()) { return(result); } var actAccounts = list.Select(m => m.ActAccount).Distinct().ToList(); var accounts = DbContext.GetDbSet <Account>() .Where(p => actAccounts.Contains(p.Name)) .ToList(); var abiSerializationProvider = new AbiSerializationProvider(); list.ForEach(item => { var account = accounts.Where(m => m.Name == item.ActAccount && m.BlockNum <= item.BlockNum) .OrderByDescending(m => m.BlockNum) .First(); var abi = abiSerializationProvider.DeserializePackedAbi(account.Abi); var action = abi.actions.First(t => t.name == item.ActName); var data = abiSerializationProvider.DeserializeStructData(action.type, item.TempData, abi); item.ActData = data; if (result.All(m => m.GetHashCode() != item.GetHashCode())) { result.Add(item); } }); } else { BlockInfo blockInfo; var blcokDbSet = DbContext.GetDbSet <BlockInfo>(); if (blockKey.IsBlockNum()) { blockInfo = blcokDbSet.SingleOrDefault(m => m.BlockNum == long.Parse(blockKey)); } else { blockKey = blockKey.ToUpper(); blockInfo = blcokDbSet.SingleOrDefault(m => m.BlockId == blockKey); } if (blockInfo == null) { return(result); } var list = DbContext.GetDbSet <ActionTrace>() .Where(m => m.BlockNum == blockInfo.BlockNum && m.CreatorActionOrdinal == 0) .ToList(); if (!list.Any()) { return(result); } var actAccounts = list.Select(m => m.ActAccount).Distinct().ToList(); var accounts = DbContext.GetDbSet <Account>() .Where(p => actAccounts.Contains(p.Name)) .ToList(); var abiSerializationProvider = new AbiSerializationProvider(); list.ForEach(item => { var account = accounts.Where(m => m.Name == item.ActAccount && m.BlockNum <= item.BlockNum) .OrderByDescending(m => m.BlockNum) .First(); var abi = abiSerializationProvider.DeserializePackedAbi(account.Abi); var action = abi.actions.First(t => t.name == item.ActName); var data = abiSerializationProvider.DeserializeStructData(action.type, item.ActData, abi); result.Add(new TransactionModel { BlockNum = item.BlockNum, TransactionId = item.TransactionId, Timestamp = blockInfo.Timestamp, Type = item.ActName, ActAccount = item.ActAccount, ActName = item.ActName, ActData = data, }); }); } } return(result); }
public async Task GetRequiredKeys() { var getInfoResult = await DefaultApi.GetInfo(); var getBlockResult = await DefaultApi.GetBlock(new GetBlockRequest() { block_num_or_id = getInfoResult.last_irreversible_block_num.ToString() }); var trx = new Transaction() { //trx headers expiration = getInfoResult.head_block_time.AddSeconds(60), //expire Seconds ref_block_num = (UInt16)(getInfoResult.last_irreversible_block_num & 0xFFFF), ref_block_prefix = getBlockResult.ref_block_prefix, // trx info max_net_usage_words = 0, max_cpu_usage_ms = 0, delay_sec = 0, context_free_actions = new List <Core.Api.v1.Action>(), actions = new List <Core.Api.v1.Action>() { new Core.Api.v1.Action() { account = "eosio.token", authorization = new List <PermissionLevel>() { new PermissionLevel() { actor = "tester112345", permission = "active" } }, name = "transfer", data = new Dictionary <string, object>() { { "from", "tester112345" }, { "to", "tester212345" }, { "quantity", "1.0000 EOS" }, { "memo", "hello crypto world!" } } } }, transaction_extensions = new List <Extension>() }; int actionIndex = 0; var abiSerializer = new AbiSerializationProvider(DefaultApi); var abiResponses = await abiSerializer.GetTransactionAbis(trx); foreach (var action in trx.context_free_actions) { action.data = SerializationHelper.ByteArrayToHexString(abiSerializer.SerializeActionData(action, abiResponses[actionIndex++])); } foreach (var action in trx.actions) { action.data = SerializationHelper.ByteArrayToHexString(abiSerializer.SerializeActionData(action, abiResponses[actionIndex++])); } var getRequiredResult = await DefaultApi.GetRequiredKeys(new GetRequiredKeysRequest() { available_keys = new List <string>() { "EOS8Q8CJqwnSsV4A6HDBEqmQCqpQcBnhGME1RUvydDRnswNngpqfr" }, transaction = trx }); }
private async Task <PushTransactionResponse> CreateTransaction() { var getInfoResult = await DefaultApi.GetInfo(); var getBlockResult = await DefaultApi.GetBlock(new GetBlockRequest() { block_num_or_id = getInfoResult.last_irreversible_block_num.ToString() }); var trx = new Transaction() { //trx headers expiration = getInfoResult.head_block_time.AddSeconds(60), //expire Seconds ref_block_num = (UInt16)(getInfoResult.last_irreversible_block_num & 0xFFFF), ref_block_prefix = getBlockResult.ref_block_prefix, // trx info max_net_usage_words = 0, max_cpu_usage_ms = 0, delay_sec = 0, context_free_actions = new List <Core.Api.v1.Action>(), transaction_extensions = new List <Extension>(), actions = new List <Core.Api.v1.Action>() { new Core.Api.v1.Action() { account = "eosio.token", authorization = new List <PermissionLevel>() { new PermissionLevel() { actor = "tester112345", permission = "active" } }, name = "transfer", data = new Dictionary <string, object>() { { "from", "tester112345" }, { "to", "tester212345" }, { "quantity", "1.0000 EOS" }, { "memo", "hello crypto world!" } } } } }; var abiSerializer = new AbiSerializationProvider(DefaultApi); var packedTrx = await abiSerializer.SerializePackedTransaction(trx); var requiredKeys = new List <string>() { "EOS8Q8CJqwnSsV4A6HDBEqmQCqpQcBnhGME1RUvydDRnswNngpqfr" }; var signatures = await EosConfig.SignProvider.Sign(DefaultApi.Config.ChainId, requiredKeys, packedTrx); return(await DefaultApi.PushTransaction(new PushTransactionRequest() { signatures = signatures.ToArray(), compression = 0, packed_context_free_data = "", packed_trx = SerializationHelper.ByteArrayToHexString(packedTrx) })); }
public async Task SignTransaction() { bool success = false; try { var trx = new Transaction() { // trx info max_net_usage_words = 0, max_cpu_usage_ms = 0, delay_sec = 0, context_free_actions = new List <Core.Api.v1.Action>(), transaction_extensions = new List <Extension>(), actions = new List <Core.Api.v1.Action>() { new Core.Api.v1.Action() { account = "eosio.token", authorization = new List <PermissionLevel>() { new PermissionLevel() { actor = "tester112345", permission = "active" } }, name = "transfer", data = new Dictionary <string, string>() { { "from", "tester112345" }, { "to", "tester212345" }, { "quantity", "0.0001 EOS" }, { "memo", "hello crypto world!" } } } } }; var abiSerializer = new AbiSerializationProvider(DefaultApi); var packedTrx = await abiSerializer.SerializePackedTransaction(trx); var requiredKeys = new List <string>() { "EOS8Q8CJqwnSsV4A6HDBEqmQCqpQcBnhGME1RUvydDRnswNngpqfr" }; var signatures = await EosConfig.SignProvider.Sign(DefaultApi.Config.ChainId, requiredKeys, packedTrx); success = signatures.First() == "SIG_K1_Jze1PGnAo9MVHkxRxekZQKJebM11AgtK4NhsFtDEZsLujrocvJ5dnhejyr9RQji2K3DWdyUpM9BGyWts7FFr8Wib95hiTj"; } catch (Exception ex) { Console.WriteLine(JsonConvert.SerializeObject(ex)); } if (success) { Console.WriteLine("Test SignTransaction run successfuly."); } else { Console.WriteLine("Test SignTransaction run failed."); } }