### Question:
Transaction { protected void setData(byte[] data) { this.data = data; parsed = true; } Transaction(byte[] rawData);  Transaction(TransactionType type, BigInteger value, byte[] receiveAddress,
                       long referenceBlockNum, byte[] referenceBlockHash, BigInteger energonPrice,
                       BigInteger energonLimit, byte[] data,  Integer chainId);  Transaction(TransactionType type, BigInteger value, byte[] receiveAddress,
                       long referenceBlockNum, byte[] referenceBlockHash, BigInteger energonPrice,
                       BigInteger energonLimit, byte[] data);  Transaction(TransactionType type, BigInteger value, byte[] receiveAddress,
                       long referenceBlockNum, byte[] referenceBlockHash, BigInteger energonPrice,
                       BigInteger energonLimit, byte[] data, byte[] r, byte[] s, byte v, Integer chainId);  Transaction(TransactionType type, BigInteger value, byte[] receiveAddress,
                       long referenceBlockNum, byte[] referenceBlockHash, BigInteger energonPrice,
                       BigInteger energonLimit, byte[] data, byte[] r, byte[] s, byte v); synchronized void verify(); synchronized void protoParse(); boolean isParsed(); byte[] getHash(); byte[] getRawHash(); boolean isValueTx(); BigInteger getValue(); byte[] getReceiveAddress(); BigInteger getEnergonPrice(); BigInteger getEnergonLimit(); long nonZeroDataBytes(); long zeroDataBytes(); byte[] getData(); ECDSASignature getSignature(); long getReferenceBlockNum(); byte[] getReferenceBlockHash(); TransactionType getTransactionType(); byte[] getContractAddress(); boolean isContractCreation(); synchronized byte[] getSender(); Integer getChainId(); void sign(ECKey key); @Override String toString(); byte[] getEncodedRaw(); byte[] getEncoded(); @Override //todo what the purpose of this function? int hashCode(); @Override boolean equals(Object obj); static Transaction createDefault(TransactionType type, BigInteger amount,
                                            byte[] to, long referenceBlockNum, BigInteger referenceBlockHash); static Transaction createDefault(TransactionType type, BigInteger amount,
                                            byte[] to, long referenceBlockNum, BigInteger referenceBlockHash, Integer chainId); static Transaction create(TransactionType type, byte[] to,
                                     BigInteger amount, long referenceBlockNum, BigInteger referenceBlockHash,
                                     BigInteger energonPrice, BigInteger energonLimit); static Transaction create(TransactionType type, byte[] to,
                                     BigInteger amount, long referenceBlockNum, BigInteger referenceBlockHash,
                                     BigInteger energonPrice, BigInteger energonLimit, Integer chainId); static final int HASH_LENGTH; static final int ADDRESS_LENGTH; }### Answer:
@Test public void testTransaction3() { byte[] privKey = Hex.decode("c85ef7d79691fe79573b1a7064c19c1a9819ebdbd1faaab1a8ec92344438aaf4"); TransactionType transactionType = TransactionType.CONTRACT_DEPLOY; BigInteger value = BigInteger.ZERO; byte[] receiveAddress = new byte[0]; long referenceBlockNum = 1000; byte[] referenceBlockHash = HashUtil.sha3(privKey); BigInteger energonPrice = new BigInteger("20000"); BigInteger energonLimit = new BigInteger("100"); Integer chainId = null; String classStr = "mySmartContract.class"; byte[] className = classStr.getBytes(); String codeBin = "79573b1a7064c19c1a9819hy79573b1a7064c19c1a981979573b1a7064c19c1a981979573b1a7064c19c1a9819"; byte[] codeBinary = codeBin.getBytes(); ContractDeployRequest.Builder newContract = ContractDeployRequest.newBuilder(); newContract.setClassName(classStr); newContract.setData(ByteString.copyFrom(codeBinary)); byte[] data = newContract.build().toByteArray(); testTransactionbase(privKey, data, transactionType, value, receiveAddress, referenceBlockNum,referenceBlockHash, energonPrice, energonLimit, chainId); }