From 9d0faf1042f720e8c16bf5a67a7eca0a6d5a4890 Mon Sep 17 00:00:00 2001 From: Samuel Dowd Date: Sat, 14 May 2022 11:49:08 -0500 Subject: [PATCH 1/6] added Transaction.setFeePayer --- solana/src/main/java/com/solana/core/Transaction.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/solana/src/main/java/com/solana/core/Transaction.kt b/solana/src/main/java/com/solana/core/Transaction.kt index 17503b60..553c2960 100644 --- a/solana/src/main/java/com/solana/core/Transaction.kt +++ b/solana/src/main/java/com/solana/core/Transaction.kt @@ -19,6 +19,10 @@ class Transaction { message.setRecentBlockHash(recentBlockhash) } + fun setFeePayer(feePayer: Account?) { + message.setFeePayer(feePayer) + } + fun sign(signer: Account) { sign(listOf(signer)) } @@ -52,4 +56,4 @@ class Transaction { companion object { const val SIGNATURE_LENGTH = 64 } -} \ No newline at end of file +} From 61b70c376ea46ee57fcf02a619ad8db140c0e1a9 Mon Sep 17 00:00:00 2001 From: Samuel Dowd Date: Sun, 15 May 2022 09:01:57 -0500 Subject: [PATCH 2/6] Changed feePayer to a PublicKey --- solana/src/main/java/com/solana/core/Message.kt | 6 +++--- solana/src/main/java/com/solana/core/Transaction.kt | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/solana/src/main/java/com/solana/core/Message.kt b/solana/src/main/java/com/solana/core/Message.kt index b9dfec24..413ae8b3 100644 --- a/solana/src/main/java/com/solana/core/Message.kt +++ b/solana/src/main/java/com/solana/core/Message.kt @@ -39,7 +39,7 @@ class Message { private var recentBlockhash: String? = null private val accountKeys: AccountKeysList = AccountKeysList() private val instructions: MutableList - private var feePayer: Account? = null + private var feePayer: PublicKey? = null fun addInstruction(instruction: TransactionInstruction): Message { accountKeys.addAll(instruction.keys) accountKeys.add(AccountMeta(instruction.programId, false, false)) @@ -111,13 +111,13 @@ class Message { return out.array() } - fun setFeePayer(feePayer: Account?) { + fun setFeePayer(feePayer: PublicKey?) { this.feePayer = feePayer } private fun getAccountKeys(): List { val keysList: MutableList = accountKeys.list - val feePayerIndex = findAccountIndex(keysList, feePayer!!.publicKey) + val feePayerIndex = findAccountIndex(keysList, feePayer!!) val newList: MutableList = ArrayList() val feePayerMeta = keysList[feePayerIndex] newList.add(AccountMeta(feePayerMeta.publicKey, true, true)) diff --git a/solana/src/main/java/com/solana/core/Transaction.kt b/solana/src/main/java/com/solana/core/Transaction.kt index 553c2960..713468d8 100644 --- a/solana/src/main/java/com/solana/core/Transaction.kt +++ b/solana/src/main/java/com/solana/core/Transaction.kt @@ -19,7 +19,7 @@ class Transaction { message.setRecentBlockHash(recentBlockhash) } - fun setFeePayer(feePayer: Account?) { + fun setFeePayer(feePayer: PublicKey?) { message.setFeePayer(feePayer) } @@ -29,7 +29,7 @@ class Transaction { fun sign(signers: List) { require(signers.size != 0) { "No signers" } - val feePayer = signers[0] + val feePayer = signers[0].publicKey message.setFeePayer(feePayer) serializedMessage = message.serialize() for (signer in signers) { From f64566b955f244bd1a155acec4ecce0faa326567 Mon Sep 17 00:00:00 2001 From: Samuel Dowd Date: Sun, 15 May 2022 09:29:35 -0500 Subject: [PATCH 3/6] made feePayer public, made Transaction.sign not overwrite feePayer --- solana/src/main/java/com/solana/core/Message.kt | 7 ++----- solana/src/main/java/com/solana/core/Transaction.kt | 8 +++++--- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/solana/src/main/java/com/solana/core/Message.kt b/solana/src/main/java/com/solana/core/Message.kt index 413ae8b3..25918d01 100644 --- a/solana/src/main/java/com/solana/core/Message.kt +++ b/solana/src/main/java/com/solana/core/Message.kt @@ -39,7 +39,8 @@ class Message { private var recentBlockhash: String? = null private val accountKeys: AccountKeysList = AccountKeysList() private val instructions: MutableList - private var feePayer: PublicKey? = null + var feePayer: PublicKey? = null + fun addInstruction(instruction: TransactionInstruction): Message { accountKeys.addAll(instruction.keys) accountKeys.add(AccountMeta(instruction.programId, false, false)) @@ -111,10 +112,6 @@ class Message { return out.array() } - fun setFeePayer(feePayer: PublicKey?) { - this.feePayer = feePayer - } - private fun getAccountKeys(): List { val keysList: MutableList = accountKeys.list val feePayerIndex = findAccountIndex(keysList, feePayer!!) diff --git a/solana/src/main/java/com/solana/core/Transaction.kt b/solana/src/main/java/com/solana/core/Transaction.kt index 713468d8..f0e5710a 100644 --- a/solana/src/main/java/com/solana/core/Transaction.kt +++ b/solana/src/main/java/com/solana/core/Transaction.kt @@ -20,7 +20,7 @@ class Transaction { } fun setFeePayer(feePayer: PublicKey?) { - message.setFeePayer(feePayer) + message.feePayer = feePayer } fun sign(signer: Account) { @@ -29,8 +29,10 @@ class Transaction { fun sign(signers: List) { require(signers.size != 0) { "No signers" } - val feePayer = signers[0].publicKey - message.setFeePayer(feePayer) + // Fee payer defaults to first signer if not set + message.feePayer ?: let { + message.feePayer = signers[0].publicKey + } serializedMessage = message.serialize() for (signer in signers) { val signatureProvider = TweetNaclFast.Signature(ByteArray(0), signer.secretKey) From 96091d274b1ecc75ee4407584682f24ee6f9d4c5 Mon Sep 17 00:00:00 2001 From: Samuel Dowd Date: Sun, 15 May 2022 09:59:52 -0500 Subject: [PATCH 4/6] added toString functions to transaction objects --- solana/src/main/java/com/solana/core/Message.kt | 13 +++++++++++++ solana/src/main/java/com/solana/core/Transaction.kt | 7 +++++++ 2 files changed, 20 insertions(+) diff --git a/solana/src/main/java/com/solana/core/Message.kt b/solana/src/main/java/com/solana/core/Message.kt index 25918d01..f1a22efd 100644 --- a/solana/src/main/java/com/solana/core/Message.kt +++ b/solana/src/main/java/com/solana/core/Message.kt @@ -18,6 +18,10 @@ class Message { ) } + override fun toString(): String { + return "numRequiredSignatures: $numRequiredSignatures, numReadOnlySignedAccounts: $numReadonlySignedAccounts, numReadOnlyUnsignedAccounts: $numReadonlyUnsignedAccounts" + } + companion object { const val HEADER_LENGTH = 3 } @@ -132,6 +136,15 @@ class Message { throw RuntimeException("unable to find account index") } + override fun toString(): String { + return """Message( + | header: not set, + | accountKeys: [${accountKeys.list.joinToString()}], + | recentBlockhash: $recentBlockhash, + | instructions: [${instructions.joinToString()}] + )""".trimMargin() + } + companion object { private const val RECENT_BLOCK_HASH_LENGTH = 32 } diff --git a/solana/src/main/java/com/solana/core/Transaction.kt b/solana/src/main/java/com/solana/core/Transaction.kt index f0e5710a..a9174b8c 100644 --- a/solana/src/main/java/com/solana/core/Transaction.kt +++ b/solana/src/main/java/com/solana/core/Transaction.kt @@ -55,6 +55,13 @@ class Transaction { return out.array() } + override fun toString(): String { + return """Transaction( + | signatures: [${signatures.joinToString()}], + | message: ${message} + )""".trimMargin() + } + companion object { const val SIGNATURE_LENGTH = 64 } From 99e88f11507ce5959d284a29e61f9368dda514e9 Mon Sep 17 00:00:00 2001 From: Samuel Dowd Date: Sun, 15 May 2022 11:05:08 -0500 Subject: [PATCH 5/6] added handling for fee payer not in accounts, more toStrings --- .../main/java/com/solana/core/AccountMeta.kt | 6 ++++- .../src/main/java/com/solana/core/Message.kt | 22 +++++++++++-------- .../main/java/com/solana/core/Transaction.kt | 6 ++--- .../com/solana/core/TransactionInstruction.kt | 10 ++++++++- 4 files changed, 30 insertions(+), 14 deletions(-) diff --git a/solana/src/main/java/com/solana/core/AccountMeta.kt b/solana/src/main/java/com/solana/core/AccountMeta.kt index 8796d121..4b08de55 100644 --- a/solana/src/main/java/com/solana/core/AccountMeta.kt +++ b/solana/src/main/java/com/solana/core/AccountMeta.kt @@ -1,3 +1,7 @@ package com.solana.core -class AccountMeta(var publicKey: PublicKey, var isSigner: Boolean, var isWritable: Boolean) \ No newline at end of file +class AccountMeta(var publicKey: PublicKey, var isSigner: Boolean, var isWritable: Boolean) { + override fun toString(): String { + return "AccountMeta(publicKey: $publicKey, isSigner: $isSigner, isWritable: $isWritable)" + } +} \ No newline at end of file diff --git a/solana/src/main/java/com/solana/core/Message.kt b/solana/src/main/java/com/solana/core/Message.kt index f1a22efd..78ef01d3 100644 --- a/solana/src/main/java/com/solana/core/Message.kt +++ b/solana/src/main/java/com/solana/core/Message.kt @@ -118,11 +118,15 @@ class Message { private fun getAccountKeys(): List { val keysList: MutableList = accountKeys.list - val feePayerIndex = findAccountIndex(keysList, feePayer!!) val newList: MutableList = ArrayList() - val feePayerMeta = keysList[feePayerIndex] - newList.add(AccountMeta(feePayerMeta.publicKey, true, true)) - keysList.removeAt(feePayerIndex) + try { + val feePayerIndex = findAccountIndex(keysList, feePayer!!) + val feePayerMeta = keysList[feePayerIndex] + newList.add(AccountMeta(feePayerMeta.publicKey, true, true)) + keysList.removeAt(feePayerIndex) + } catch(e: RuntimeException) { // Fee payer not yet in list + newList.add(AccountMeta(feePayer!!, true, true)) + } newList.addAll(keysList) return newList } @@ -138,11 +142,11 @@ class Message { override fun toString(): String { return """Message( - | header: not set, - | accountKeys: [${accountKeys.list.joinToString()}], - | recentBlockhash: $recentBlockhash, - | instructions: [${instructions.joinToString()}] - )""".trimMargin() + | header: not set, + | accountKeys: [${accountKeys.list.joinToString()}], + | recentBlockhash: $recentBlockhash, + | instructions: [${instructions.joinToString()}] + |)""".trimMargin() } companion object { diff --git a/solana/src/main/java/com/solana/core/Transaction.kt b/solana/src/main/java/com/solana/core/Transaction.kt index a9174b8c..e3d45140 100644 --- a/solana/src/main/java/com/solana/core/Transaction.kt +++ b/solana/src/main/java/com/solana/core/Transaction.kt @@ -57,9 +57,9 @@ class Transaction { override fun toString(): String { return """Transaction( - | signatures: [${signatures.joinToString()}], - | message: ${message} - )""".trimMargin() + | signatures: [${signatures.joinToString()}], + | message: ${message} + |)""".trimMargin() } companion object { diff --git a/solana/src/main/java/com/solana/core/TransactionInstruction.kt b/solana/src/main/java/com/solana/core/TransactionInstruction.kt index b4ce2e3d..ca658740 100644 --- a/solana/src/main/java/com/solana/core/TransactionInstruction.kt +++ b/solana/src/main/java/com/solana/core/TransactionInstruction.kt @@ -4,4 +4,12 @@ class TransactionInstruction( var programId: PublicKey, var keys: List, var data: ByteArray -) \ No newline at end of file +) { + override fun toString(): String { + return """TransactionInstruction( + | programId: $programId, + | keys: [${keys.joinToString()}], + | data: [${data.joinToString()}] + |)""".trimMargin() + } +} \ No newline at end of file From aa8e74b7e587e3e2e9100e8ac8b652a417997eb3 Mon Sep 17 00:00:00 2001 From: Samuel Dowd Date: Mon, 16 May 2022 14:05:50 -0500 Subject: [PATCH 6/6] updated type in feePayer test --- solana/src/test/java/com/solana/core/MessageTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solana/src/test/java/com/solana/core/MessageTest.java b/solana/src/test/java/com/solana/core/MessageTest.java index 235d12ea..9c43eec8 100644 --- a/solana/src/test/java/com/solana/core/MessageTest.java +++ b/solana/src/test/java/com/solana/core/MessageTest.java @@ -21,7 +21,7 @@ public void serializeMessage() { Message message = new Message(); message.addInstruction(SystemProgram.transfer(fromPublicKey, toPublickKey, lamports)); message.setRecentBlockHash("Eit7RCyhUixAe2hGBS8oqnw59QK3kgMMjfLME5bm9wRn"); - message.setFeePayer(signer); + message.setFeePayer(signer.getPublicKey()); assertArrayEquals(new int[] { 1, 0, 1, 3, 6, 26, 217, 208, 83, 135, 21, 72, 83, 126, 222, 62, 38, 24, 73, 163, 223, 183, 253, 2, 250, 188, 117, 178, 35, 200, 228, 106, 219, 133, 61, 12, 235, 122, 188, 208, 216, 117,