пилообразная ошибка отправки запроса на отправку Java - PullRequest
0 голосов
/ 25 мая 2018

Я пытаюсь отправить пакеты, используя Sawtooth java SDK.

1) - я генерирую ключи через sawtooth CLI

2) - я использую процессор для обработки клиентского запроса

3) - Я создаю пакетный запрос.

4) - После отправки запроса у меня всегда есть статус INVALID в ответе.Также у меня есть это сообщение в журнале моего процессора («Applicator-> Apply errorState Get Authorization error. Проверьте входные данные транзакции.»).

Пожалуйста, помогите мне. (Код моего клиента ниже)

открытый класс Main {

public static void main(String[] args) throws UnirestException, NoSuchAlgorithmException {


    ECKey privateKey = Signing.readWif(getWifKey("c1783ac6bf55910ab9bfa6defbd7b819a5b29032dd281fa1976363fd6e08d59d")); //generated pk by sawtooth keygen
    String publicKey = Signing.getPublicKey(privateKey);

    ByteString publicKeyByteString = ByteString.copyFromUtf8(publicKey);

    String payload = "deposit,50,02e664d454c7841ae1e2bd9a597dd12b2fa09f9389b29ab9fda6220674ff7bc7b8";
    String payloadBytes = Utils.hash512(payload.getBytes());
    ByteString payloadByteString = ByteString.copyFrom(payload.getBytes());

    TransactionHeader txnHeader = TransactionHeader.newBuilder()
            .setBatcherPublicKeyBytes(publicKeyByteString)
            .setSignerPublicKeyBytes(publicKeyByteString)
            .setFamilyName("simplewallet")
            .setFamilyVersion("1.0")
            .addInputs(publicKey)
            .setNonce("1")
            .addOutputs("02e664d454c7841ae1e2bd9a597dd12b2fa09f9389b29ab9fda6220674ff7bc7b8")//recipient public key
            .setPayloadSha512(payloadBytes)
            .setSignerPublicKey(publicKey)
            .build();
    ByteString txnHeaderBytes = txnHeader.toByteString();
    String txnHeaderSignature = Signing.sign(privateKey, txnHeaderBytes.toByteArray());

    Transaction txn = Transaction.newBuilder()
            .setHeader(txnHeaderBytes)
            .setPayload(payloadByteString)
            .setHeaderSignature(txnHeaderSignature)
            .build();

    BatchHeader batchHeader = BatchHeader.newBuilder()
            .setSignerPublicKey(publicKey)
            .addTransactionIds(txn.getHeaderSignature())
            .build();
    ByteString batchHeaderBytes = batchHeader.toByteString();
    String batchHeaderSignature = Signing.sign(privateKey, batchHeaderBytes.toByteArray());

    Batch batch = Batch.newBuilder()
            .setHeader(batchHeaderBytes)
            .setHeaderSignature(batchHeaderSignature)
            .addTransactions(txn)
            .build();

    BatchList batchList = BatchList.newBuilder()
            .addBatches(batch)
            .build();
    ByteString batchBytes = batchList.toByteString();

    String serverResponse = Unirest.post("http://localhost:8008/batches")
            .header("Content-Type", "application/octet-stream")
            .body(batchBytes.toByteArray())
            .asString()
            .getBody();

    System.out.println(serverResponse);

}

private static String getWifKey(String sourceKey) throws NoSuchAlgorithmException {

    sourceKey = "80" + sourceKey;

    byte[] pkByteArr = hexStringToByteArray(sourceKey);

    MessageDigest digest = MessageDigest.getInstance("SHA-256");
    byte[] hash = digest.digest(pkByteArr);

    byte[] secondHash = digest.digest(hash);

    byte[] resPkBytes = new byte[pkByteArr.length + 4];

    System.arraycopy(pkByteArr, 0, resPkBytes, 0, pkByteArr.length);

    System.arraycopy(secondHash, 0, resPkBytes, pkByteArr.length, 4);

    return Base58.encode(resPkBytes);
}

private static byte[] hexStringToByteArray(String s) {
    int len = s.length();
    byte[] data = new byte[len / 2];
    for (int i = 0; i < len; i += 2) {
        data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
                + Character.digit(s.charAt(i + 1), 16));
    }
    return data;
}

}

1 Ответ

0 голосов
/ 17 августа 2018

Это означает, что пакет транзакций был обработан процессором транзакций, но процессор транзакций пометил его как недействительный.Это может быть связано с проблемами сериализации или десериализации.

Вот простой пример приложения Sawtooth с использованием клиента Java (и других языков программирования): https://github.com/danintel/sawtooth-simplewallet

...