BuilderImpl builder = new BuilderImpl(version, senderPublicKey, amountNQT, feeNQT, timestamp, deadline, transactionType.parseAttachment(buffer, version)) .referencedTransactionFullHash(referencedTransactionFullHash) .signature(signature) .ecBlockHeight(ecBlockHeight) .ecBlockId(ecBlockId); if (transactionType.hasRecipient()) { builder.recipientId(recipientId); builder.message(new Appendix.Message(buffer, version)); builder.encryptedMessage(new Appendix.EncryptedMessage(buffer, version)); builder.publicKeyAnnouncement(new Appendix.PublicKeyAnnouncement(buffer, version)); builder.encryptToSelfMessage(new Appendix.EncryptToSelfMessage(buffer, version)); return builder.build(); } catch (NxtException.NotValidException|RuntimeException e) {
BuilderImpl builder = new BuilderImpl(version, senderPublicKey, amountNQT, feeNQT, timestamp, deadline, transactionType.parseAttachment(attachmentData)) .referencedTransactionFullHash(referencedTransactionFullHash) .signature(signature).height(height);; builder.recipientId(recipientId); builder.message(Appendix.Message.parse(attachmentData)); builder.encryptedMessage(Appendix.EncryptedMessage.parse(attachmentData)); builder.publicKeyAnnouncement((Appendix.PublicKeyAnnouncement.parse(attachmentData))); builder.encryptToSelfMessage(Appendix.EncryptToSelfMessage.parse(attachmentData)); builder.ecBlockHeight(((Long) transactionData.getLong("ecBlockHeight")).intValue()); builder.ecBlockId(Convert.parseUnsignedLong(transactionData.getString("ecBlockId"))); TransactionImpl tx = builder.build(); tx.setConfirmations(confirmations); return tx;
long recipientLong = Convert.parseAccountId(NxtMain.get(), recipient); TransactionImpl.BuilderImpl builder = new TransactionImpl.BuilderImpl(version, nxtPublicKey, amountNQT, feeNQT, timestamp, deadline, Attachment.ORDINARY_PAYMENT); if (version > 0) { builder.ecBlockHeight(0); builder.ecBlockId(0L); Transaction transaction = builder.recipientId(recipientLong).build(); transaction.sign(nxtPrivateKey); byte[] txBytes = transaction.getBytes();
public static NxtSendRequest to(NxtFamilyWallet from, NxtAddress destination, Value amount) { checkNotNull(destination.getType(), "Address is for an unknown network"); checkState(from.getCoinType() == destination.getType(), "Incompatible destination address coin type"); checkState(TypeUtils.is(destination.getType(), amount.type), "Incompatible sending amount type"); checkTypeCompatibility(destination.getType()); NxtSendRequest req = new NxtSendRequest(destination.getType()); byte version = (byte) 1; int timestamp; if (req.type instanceof NxtMain) { timestamp = Convert.toNxtEpochTime(System.currentTimeMillis()); } else if (req.type instanceof BurstMain) { timestamp = Convert.toBurstEpochTime(System.currentTimeMillis()); } else { throw new RuntimeException("Unexpected NXT family type: " + req.type.toString()); } TransactionImpl.BuilderImpl builder = new TransactionImpl.BuilderImpl(version, from.getPublicKey(), amount.value, req.fee.value, timestamp, NxtFamily.DEFAULT_DEADLINE, Attachment.ORDINARY_PAYMENT); builder.recipientId(destination.getAccountId()); // TODO extra check, query the server if the public key announcement is actually needed if (destination.getPublicKey() != null) { Appendix.PublicKeyAnnouncement publicKeyAnnouncement = new Appendix.PublicKeyAnnouncement(destination.getPublicKey()); builder.publicKeyAnnouncement(publicKeyAnnouncement); } req.nxtTxBuilder = builder; return req; }
builder = new TransactionImpl.BuilderImpl(version, nxtPublicKey, amountNQT, feeNQT, timestamp, deadline, Attachment.ARBITRARY_MESSAGE); if (version > 0) { builder.ecBlockHeight(0); builder.ecBlockId(0L); builder.encryptedMessage(msg); Transaction transaction = builder.recipientId(recipientLong).build(); transaction.sign(nxtPrivateKey); byte[] txBytes = transaction.getBytes();
@Test public void testNxtTransaction() throws WalletAccount.WalletAccountException, NxtException.ValidationException { NxtAddress destination = (NxtAddress) otherAccount.getReceiveAddress(); Value amount = NXT.value("1"); NxtSendRequest req = nxtAccount.sendCoinsOffline(destination, amount); nxtAccount.completeAndSignTx(req); Transaction nxtTx = req.nxtTxBuilder.build(); // nxtTx.sign(nxtSecret); byte[] txBytes = req.nxtTxBuilder.build().getBytes(); req.tx = new NxtTransaction(NXT, req.nxtTxBuilder.build()); Transaction parsedTx = TransactionImpl.parseTransaction(txBytes); assertEquals(Attachment.ORDINARY_PAYMENT, parsedTx.getAttachment()); assertEquals(NxtFamily.DEFAULT_DEADLINE, parsedTx.getDeadline()); assertEquals((req.tx.getRawTransaction()).getTimestamp(), parsedTx.getTimestamp()); assertEquals(nxtAccountId, parsedTx.getSenderId()); assertArrayEquals(nxtPublicKey, parsedTx.getSenderPublicKey()); assertEquals(amount.value, parsedTx.getAmountNQT()); assertEquals(req.fee.value, parsedTx.getFeeNQT()); assertEquals(destination.getAccountId(), parsedTx.getRecipientId()); // System.out.println(Convert.toHexString(nxtTx.getBytes())); // TODO check signature }
public void completeTransaction(NxtSendRequest request) throws WalletAccountException { checkArgument(!request.isCompleted(), "Given SendRequest has already been completed."); if (request.type.getTransactionVersion() > 0) { request.nxtTxBuilder.ecBlockHeight(lastEcBlockHeight); request.nxtTxBuilder.ecBlockId(lastEcBlockId); } // TODO check if the destination public key was announced and if so, remove it from the tx: // request.nxtTxBuilder.publicKeyAnnouncement(null); try { request.tx = new NxtTransaction(type, request.nxtTxBuilder.build()); request.setCompleted(true); } catch (NxtException.NotValidException e) { throw new WalletAccount.WalletAccountException(e); } if (request.signTransaction) { signTransaction(request); } }