All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.jd.blockchain.transaction.TxRequestBuilder Maven / Gradle / Ivy

package com.jd.blockchain.transaction;

import java.util.ArrayList;
import java.util.List;

import com.jd.blockchain.crypto.AsymmetricKeypair;
import com.jd.blockchain.crypto.HashDigest;
import com.jd.blockchain.ledger.DigitalSignature;
import com.jd.blockchain.ledger.TransactionContent;
import com.jd.blockchain.ledger.TransactionRequest;
import com.jd.blockchain.ledger.TransactionRequestBuilder;

public class TxRequestBuilder implements TransactionRequestBuilder {

//	private static final String DEFAULT_HASH_ALGORITHM = "SHA256";

	private HashDigest transactionHash;

	private TransactionContent txContent;

	private List endpointSignatures = new ArrayList<>();

	private List nodeSignatures = new ArrayList<>();

	public TxRequestBuilder(HashDigest transactionHash, TransactionContent txContent) {
		this.transactionHash = transactionHash;
		this.txContent = txContent;
	}

	@Override
	public HashDigest getTransactionHash() {
		return transactionHash;
	}

	@Override
	public TransactionContent getTransactionContent() {
		return txContent;
	}

	@Override
	public DigitalSignature signAsEndpoint(AsymmetricKeypair keyPair) {
		DigitalSignature signature = SignatureUtils.sign(transactionHash, keyPair);
		addEndpointSignature(signature);
		return signature;
	}

	@Override
	public DigitalSignature signAsNode(AsymmetricKeypair keyPair) {
		DigitalSignature signature = SignatureUtils.sign(transactionHash, keyPair);
		addNodeSignature(signature);
		return signature;
	}

	@Override
	public void addNodeSignature(DigitalSignature... signatures) {
		if (signatures != null) {
			for (DigitalSignature s : signatures) {
				nodeSignatures.add(s);
			}
		}
	}

	@Override
	public void addEndpointSignature(DigitalSignature... signatures) {
		if (signatures != null) {
			for (DigitalSignature s : signatures) {
				endpointSignatures.add(s);
			}
		}
	}

	@Override
	public TransactionRequest buildRequest() {
		TxRequestMessage txMessage = new TxRequestMessage(transactionHash, txContent);
		txMessage.addEndpointSignatures(endpointSignatures);
		txMessage.addNodeSignatures(nodeSignatures);

//		byte[] reqBytes = BinaryProtocol.encode(txMessage, NodeRequest.class);
//		HashDigest reqHash = Crypto.getHashFunction(DEFAULT_HASH_ALGORITHM).hash(reqBytes);
//		txMessage.setTransactionHash(reqHash);

		return txMessage;
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy