Exemplo n.º 1
0
        /// <summary>
        /// Calculate required keys to sign the given transaction
        /// </summary>
        /// <param name="availableKeys">available public keys list</param>
        /// <param name="trx">transaction requiring signatures</param>
        /// <returns>required public keys</returns>
        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.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++]));
            }

            return((await Api.GetRequiredKeys(new GetRequiredKeysRequest()
            {
                available_keys = availableKeys,
                transaction = trx
            })).required_keys);
        }
Exemplo n.º 2
0
        public async Task <string> CreateTransaction(Transaction trx)
        {
            if (EosConfig.SignProvider == null)
            {
                throw new ArgumentNullException("SignProvider");
            }

            GetInfoResponse getInfoResult = null;
            string          chainId       = EosConfig.ChainId;

            if (string.IsNullOrWhiteSpace(chainId))
            {
                getInfoResult = await Api.GetInfo();

                chainId = getInfoResult.chain_id;
            }

            if (trx.expiration == DateTime.MinValue ||
                trx.ref_block_num == 0 ||
                trx.ref_block_prefix == 0)
            {
                if (getInfoResult == null)
                {
                    getInfoResult = await Api.GetInfo();
                }

                var getBlockResult = await Api.GetBlock(new GetBlockRequest()
                {
                    block_num_or_id = getInfoResult.last_irreversible_block_num.ToString()
                });

                trx.expiration       = getInfoResult.head_block_time.AddSeconds(EosConfig.ExpireSeconds);
                trx.ref_block_num    = (UInt16)(getInfoResult.last_irreversible_block_num & 0xFFFF);
                trx.ref_block_prefix = getBlockResult.ref_block_prefix;
            }

            var packedTrx = await AbiSerializer.SerializePackedTransaction(trx);

            var availableKeys = await EosConfig.SignProvider.GetAvailableKeys();

            var requiredKeys = await GetRequiredKeys(availableKeys.ToList(), trx);

            IEnumerable <string> abis = null;

            if (trx.actions != null)
            {
                abis = trx.actions.Select(a => a.account);
            }

            var signatures = await EosConfig.SignProvider.Sign(chainId, requiredKeys, packedTrx, abis);

            var result = await Api.PushTransaction(new PushTransactionRequest()
            {
                signatures  = signatures.ToArray(),
                compression = 0,
                packed_context_free_data = "",
                packed_trx = SerializationHelper.ByteArrayToHexString(packedTrx)
            });

            return(result.transaction_id);
        }
Exemplo n.º 3
0
        public async Task <string> CreateTransaction(Transaction trx)
        {
//            if (VakaConfig.SignProvider == null)
//                throw new ArgumentNullException("SignProvider");

            GetInfoResponse getInfoResult = null;
            string          chainId       = VakaConfig.ChainId;

            if (string.IsNullOrWhiteSpace(chainId))
            {
                getInfoResult = await Api.GetInfo();

                chainId = getInfoResult.ChainId;
            }

            if (trx.Expiration == DateTime.MinValue ||
                trx.RefBlockNum == 0 ||
                trx.RefBlockPrefix == 0)
            {
                if (getInfoResult == null)
                {
                    getInfoResult = await Api.GetInfo();
                }

                var getBlockResult = await Api.GetBlock(new GetBlockRequest()
                {
                    BlockNumOrId = getInfoResult.LastIrreversibleBlockNum.GetValueOrDefault().ToString()
                });

                trx.Expiration     = getInfoResult.HeadBlockTime.Value.AddSeconds(VakaConfig.ExpireSeconds);
                trx.RefBlockNum    = (UInt16)(getInfoResult.LastIrreversibleBlockNum.Value & 0xFFFF);
                trx.RefBlockPrefix = getBlockResult.RefBlockPrefix;
            }

            var packedTrx = await AbiSerializer.SerializePackedTransaction(trx);

            IEnumerable <string> signatures = new string[] { };

            if (VakaConfig.SignProvider != null)
            {
                var availableKeys = await VakaConfig.SignProvider.GetAvailableKeys();

                var requiredKeys = await GetRequiredKeys(availableKeys.ToList(), trx);

                IEnumerable <string> abis = null;

                if (trx.Actions != null)
                {
                    abis = trx.Actions.Select(a => a.Account);
                }


                signatures = await VakaConfig.SignProvider.Sign(chainId, requiredKeys, packedTrx, abis);
            }

            var result = await Api.PushTransaction(new PushTransactionRequest()
            {
                Signatures            = signatures.ToArray(),
                Compression           = 0,
                PackedContextFreeData = "",
                PackedTrx             = SerializationHelper.ByteArrayToHexString(packedTrx)
            });

            return(result.TransactionId);
        }
Exemplo n.º 4
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);
        }
Exemplo n.º 5
0
        public static async Task <string> CreateTransaction(Transaction trx)
        {
            core.Services.AbiSerializationProvider.Prefix = "VHKD";
            var eosConfig = new EosConfigurator()
            {
                HttpEndpoint  = "http://192.168.1.61", //Mainnet
                ExpireSeconds = 60,
                ChainId       = "afe97f023511453c09c64f5bb655e7f4dc6694685aff7231219964e9cc521585",
                SignProvider  = new core.Services.DefaultSignProvider("5JNNWKaCoWvN5xojDXsW38Z6uoLmvM9NPh3coQD5z3TgsuY4nmt", "VHKD")
            };
            var api           = new EosApi(eosConfig, new HttpHandler());
            var abiSerializer = new core.Services.AbiSerializationProvider(api);

            if (eosConfig.SignProvider == null)
            {
                throw new ArgumentNullException("SignProvider");
            }

            GetInfoResponse getInfoResult = null;
            string          chainId       = eosConfig.ChainId;

            if (string.IsNullOrWhiteSpace(chainId))
            {
                getInfoResult = await api.GetInfo();

                chainId = getInfoResult.chain_id;
            }

            if (trx.expiration == DateTime.MinValue ||
                trx.ref_block_num == 0 ||
                trx.ref_block_prefix == 0)
            {
                if (getInfoResult == null)
                {
                    getInfoResult = await api.GetInfo();
                }

                var getBlockResult = await api.GetBlock(new GetBlockRequest()
                {
                    block_num_or_id = getInfoResult.last_irreversible_block_num.ToString()
                });

                trx.expiration       = getInfoResult.head_block_time.AddSeconds(eosConfig.ExpireSeconds);
                trx.ref_block_num    = (UInt16)(getInfoResult.last_irreversible_block_num & 0xFFFF);
                trx.ref_block_prefix = getBlockResult.ref_block_prefix;
            }

            var packedTrx = await abiSerializer.SerializePackedTransaction(trx);

            var availableKeys = await eosConfig.SignProvider.GetAvailableKeys();

            var requiredKeys = await GetRequiredKeys(api, abiSerializer, availableKeys.ToList(), trx);

            IEnumerable <string> abis = null;

            if (trx.actions != null)
            {
                abis = trx.actions.Select(a => a.account);
            }

            var signatures = await eosConfig.SignProvider.Sign(chainId, requiredKeys, packedTrx, abis);

            var result = await api.PushTransaction(new PushTransactionRequest()
            {
                signatures  = signatures.ToArray(),
                compression = 0,
                packed_context_free_data = "",
                packed_trx = SerializationHelper.ByteArrayToHexString(packedTrx)
            });

            return(result.transaction_id);
        }
Exemplo n.º 6
0
        public async Task <string> CreatePackedTransaction(TransactionsPackedRequest request)
        {
            var action = new EosSharp.Core.Api.v1.Action
            {
                account       = request.Account,
                authorization = request.Authorization?.Select(p => new PermissionLevel()
                {
                    actor = p.Actor, permission = p.Permission
                }).ToList(),
                name = request.Name,
                data = request.Data
            };

            if (action.data != null && action.data is JObject)
            {
                action.data = ((JObject)action.data).ToDictionary();
            }
            if (string.IsNullOrEmpty(action.account))
            {
                throw new ArgumentNullException(nameof(request.Account));
            }

            if (string.IsNullOrEmpty(action.name))
            {
                throw new ArgumentNullException(nameof(request.Name));
            }

            if (action.authorization == null || action.authorization.Count == 0)
            {
                throw new ArgumentNullException(nameof(request.Authorization));
            }

            var trx = new Transaction()
            {
                actions = new List <EosSharp.Core.Api.v1.Action>()
                {
                    action
                }
            };

            GetInfoResponse getInfoResult = null;
            string          chainId       = m_EosConfig.ChainId;

            if (string.IsNullOrWhiteSpace(chainId))
            {
                getInfoResult = await m_EosApi.GetInfo();

                chainId = getInfoResult.chain_id;
            }

            if (trx.expiration == DateTime.MinValue ||
                trx.ref_block_num == 0 ||
                trx.ref_block_prefix == 0)
            {
                if (getInfoResult == null)
                {
                    getInfoResult = await m_EosApi.GetInfo();
                }

                var getBlockResult = await m_EosApi.GetBlock(new GetBlockRequest()
                {
                    block_num_or_id = getInfoResult.last_irreversible_block_num.ToString()
                });

                trx.expiration       = getInfoResult.head_block_time.AddSeconds(m_EosConfig.ExpireSeconds);
                trx.ref_block_num    = (UInt16)(getInfoResult.last_irreversible_block_num & 0xFFFF);
                trx.ref_block_prefix = getBlockResult.ref_block_prefix;
            }

            var packedTrx = await m_AbiSerializer.SerializePackedTransaction(trx);

            return(SerializationHelper.ByteArrayToHexString(packedTrx));
        }
Exemplo n.º 7
0
        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)
            }));
        }
Exemplo n.º 8
0
        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
            });
        }