/// <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); }
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 }); }