Example #1
0
        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);
        }
Example #2
0
        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));
        }
Example #3
0
        public async Task DeserializePackedTransaction()
        {
            var packed_trx    = "";
            var abiSerializer = new AbiSerializationProvider(DefaultApi);
            var trx           = await abiSerializer.DeserializePackedTransaction(packed_trx);

            Console.WriteLine(JsonConvert.SerializeObject(trx));
        }
Example #4
0
        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);
        }
Example #6
0
 /// <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);
 }
Example #7
0
 /// <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);
 }
Example #8
0
        /// <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);
        }
Example #9
0
        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());
        }
Example #10
0
        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);
        }
Example #11
0
        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);
        }
Example #12
0
        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);
        }
Example #13
0
        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);
        }
Example #14
0
        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);
        }
Example #15
0
        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");
        }
Example #16
0
        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");
        }
Example #17
0
        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");
        }
Example #18
0
        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");
        }
Example #19
0
        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);
        }
Example #20
0
        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);
        }
Example #21
0
        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);
        }
Example #22
0
        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.");
            }
        }