/** * serialize the transaction data to protobuf data. * * @return the protobuf data * @throws Exception the exception */ public byte[] toProto() throws Exception { TransactionOuterClass.Transaction.Builder builder = TransactionOuterClass.Transaction.newBuilder(); builder.setAlg(this.getAlg().getType()); builder.setChainId(this.getChainID()); builder.setFrom(ByteString.copyFrom(this.getFrom().bytes())); builder.setTo(ByteString.copyFrom(this.getTo().bytes())); builder.setValue(ByteString.copyFrom(ByteUtils.ToFixedSizeBytes(this.getValue().toByteArray(), 16))); builder.setGasLimit(ByteString.copyFrom(ByteUtils.ToFixedSizeBytes(this.getGasLimit().toByteArray(), 16))); builder.setGasPrice(ByteString.copyFrom(ByteUtils.ToFixedSizeBytes(this.getGasPrice().toByteArray(), 16))); builder.setNonce(this.getNonce()); builder.setHash(ByteString.copyFrom(this.getHash())); builder.setSign(ByteString.copyFrom(this.getSign())); builder.setTimestamp(this.getTimestamp()); builder.setData(this.getData()); TransactionOuterClass.Transaction t = builder.build(); return t.toByteArray(); }
@Test public void calculateHash() throws Exception { String encodedText = "CiCCVuSptT1oavBbf2UJfh+FHaOb15rhXgvMnyMPrpaLORIaGVfKCoAu9e0830glBZkJcmNoRXXOUbwvcz8aGhlXygqALvXtPN9IJQWZCXJjaEV1zlG8L3M/IhAAAAAAAAAAAAAAAAAAAAAKKAEwxbrg1gU6LAoGZGVwbG95EiJ7IlNvdXJjZVR5cGUiOiIxMSIsIlNvdXJjZSI6IjExMSJ9QGRKEAAAAAAAAAAAAAAAAAAATiBSEAAAAAAAAAAAAAAAAAAPQkBYAWJB5ZgDuJwK+EPpThEY0sAHc19immxH/LJCyXzj3OeaDUV7JGil7aIlcRTVsWAd32D5T12q9INlNVCT9m2lEV6/YgE="; byte[] result = ByteUtils.Base64ToBytes(encodedText); Transaction transaction = Transaction.FromProto(result); byte[] originHash = transaction.getHash(); byte[] calHash = transaction.calculateHash(); Assert.assertTrue(ByteUtils.Equal(originHash, calHash)); }