Пример #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 static async Task <List <string> > GetRequiredKeys(EosApi api, core.Services.AbiSerializationProvider abiSerializer, List <string> availableKeys, Transaction trx)
        {
            int actionIndex  = 0;
            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);
        }
Пример #2
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
            });
        }