From 92544e9d478114470fae63a3da9a4c1fdae41d7a Mon Sep 17 00:00:00 2001 From: Mike Hearn Date: Mon, 21 Jul 2014 16:27:14 +0200 Subject: [PATCH] Add ASSURANCE_CONTRACT_CLAIM/PLEDGE/STUB to the purpose field. --- .../com/google/bitcoin/core/Transaction.java | 7 +- .../store/WalletProtobufSerializer.java | 3 + .../main/java/org/bitcoinj/wallet/Protos.java | 106 +++++++++++++----- core/src/wallet.proto | 4 + 4 files changed, 89 insertions(+), 31 deletions(-) diff --git a/core/src/main/java/com/google/bitcoin/core/Transaction.java b/core/src/main/java/com/google/bitcoin/core/Transaction.java index a13360cf..260a0ca4 100644 --- a/core/src/main/java/com/google/bitcoin/core/Transaction.java +++ b/core/src/main/java/com/google/bitcoin/core/Transaction.java @@ -145,7 +145,12 @@ public class Transaction extends ChildMessage implements Serializable { USER_PAYMENT, /** Transaction automatically created and broadcast in order to reallocate money from old to new keys. */ KEY_ROTATION, - + /** Transaction that uses up pledges to an assurance contract */ + ASSURANCE_CONTRACT_CLAIM, + /** Transaction that makes a pledge to an assurance contract. */ + ASSURANCE_CONTRACT_PLEDGE, + /** Send-to-self transaction that exists just to create an output of the right size we can pledge. */ + ASSURANCE_CONTRACT_STUB // In future: de/refragmentation, privacy boosting/mixing, child-pays-for-parent fees, etc. } diff --git a/core/src/main/java/com/google/bitcoin/store/WalletProtobufSerializer.java b/core/src/main/java/com/google/bitcoin/store/WalletProtobufSerializer.java index 80a91a22..0952fb78 100644 --- a/core/src/main/java/com/google/bitcoin/store/WalletProtobufSerializer.java +++ b/core/src/main/java/com/google/bitcoin/store/WalletProtobufSerializer.java @@ -271,6 +271,9 @@ public class WalletProtobufSerializer { case UNKNOWN: purpose = Protos.Transaction.Purpose.UNKNOWN; break; case USER_PAYMENT: purpose = Protos.Transaction.Purpose.USER_PAYMENT; break; case KEY_ROTATION: purpose = Protos.Transaction.Purpose.KEY_ROTATION; break; + case ASSURANCE_CONTRACT_CLAIM: purpose = Protos.Transaction.Purpose.ASSURANCE_CONTRACT_CLAIM; break; + case ASSURANCE_CONTRACT_PLEDGE: purpose = Protos.Transaction.Purpose.ASSURANCE_CONTRACT_PLEDGE; break; + case ASSURANCE_CONTRACT_STUB: purpose = Protos.Transaction.Purpose.ASSURANCE_CONTRACT_STUB; break; default: throw new RuntimeException("New tx purpose serialization not implemented."); } diff --git a/core/src/main/java/org/bitcoinj/wallet/Protos.java b/core/src/main/java/org/bitcoinj/wallet/Protos.java index 56e3c794..1e7f019b 100644 --- a/core/src/main/java/org/bitcoinj/wallet/Protos.java +++ b/core/src/main/java/org/bitcoinj/wallet/Protos.java @@ -2271,7 +2271,7 @@ public final class Protos { * *
      * The public EC key derived from the private key. We allow both to be stored to avoid mobile clients having to
-     * do lots of slow EC math on startup. For DETERMINISTIC_ROOT_SEED and DETERMINISTIC_MNEMONIC entries this is missing.
+     * do lots of slow EC math on startup. For DETERMINISTIC_MNEMONIC entries this is missing.
      * 
*/ boolean hasPublicKey(); @@ -2280,7 +2280,7 @@ public final class Protos { * *
      * The public EC key derived from the private key. We allow both to be stored to avoid mobile clients having to
-     * do lots of slow EC math on startup. For DETERMINISTIC_ROOT_SEED and DETERMINISTIC_MNEMONIC entries this is missing.
+     * do lots of slow EC math on startup. For DETERMINISTIC_MNEMONIC entries this is missing.
      * 
*/ com.google.protobuf.ByteString getPublicKey(); @@ -2735,7 +2735,7 @@ public final class Protos { * *
      * The public EC key derived from the private key. We allow both to be stored to avoid mobile clients having to
-     * do lots of slow EC math on startup. For DETERMINISTIC_ROOT_SEED and DETERMINISTIC_MNEMONIC entries this is missing.
+     * do lots of slow EC math on startup. For DETERMINISTIC_MNEMONIC entries this is missing.
      * 
*/ public boolean hasPublicKey() { @@ -2746,7 +2746,7 @@ public final class Protos { * *
      * The public EC key derived from the private key. We allow both to be stored to avoid mobile clients having to
-     * do lots of slow EC math on startup. For DETERMINISTIC_ROOT_SEED and DETERMINISTIC_MNEMONIC entries this is missing.
+     * do lots of slow EC math on startup. For DETERMINISTIC_MNEMONIC entries this is missing.
      * 
*/ public com.google.protobuf.ByteString getPublicKey() { @@ -3500,7 +3500,7 @@ public final class Protos { * *
        * The public EC key derived from the private key. We allow both to be stored to avoid mobile clients having to
-       * do lots of slow EC math on startup. For DETERMINISTIC_ROOT_SEED and DETERMINISTIC_MNEMONIC entries this is missing.
+       * do lots of slow EC math on startup. For DETERMINISTIC_MNEMONIC entries this is missing.
        * 
*/ public boolean hasPublicKey() { @@ -3511,7 +3511,7 @@ public final class Protos { * *
        * The public EC key derived from the private key. We allow both to be stored to avoid mobile clients having to
-       * do lots of slow EC math on startup. For DETERMINISTIC_ROOT_SEED and DETERMINISTIC_MNEMONIC entries this is missing.
+       * do lots of slow EC math on startup. For DETERMINISTIC_MNEMONIC entries this is missing.
        * 
*/ public com.google.protobuf.ByteString getPublicKey() { @@ -3522,7 +3522,7 @@ public final class Protos { * *
        * The public EC key derived from the private key. We allow both to be stored to avoid mobile clients having to
-       * do lots of slow EC math on startup. For DETERMINISTIC_ROOT_SEED and DETERMINISTIC_MNEMONIC entries this is missing.
+       * do lots of slow EC math on startup. For DETERMINISTIC_MNEMONIC entries this is missing.
        * 
*/ public Builder setPublicKey(com.google.protobuf.ByteString value) { @@ -3539,7 +3539,7 @@ public final class Protos { * *
        * The public EC key derived from the private key. We allow both to be stored to avoid mobile clients having to
-       * do lots of slow EC math on startup. For DETERMINISTIC_ROOT_SEED and DETERMINISTIC_MNEMONIC entries this is missing.
+       * do lots of slow EC math on startup. For DETERMINISTIC_MNEMONIC entries this is missing.
        * 
*/ public Builder clearPublicKey() { @@ -8329,6 +8329,26 @@ public final class Protos { * */ KEY_ROTATION(2, 2), + /** + * ASSURANCE_CONTRACT_CLAIM = 3; + * + *
+       * Stuff used by Lighthouse.
+       * 
+ */ + ASSURANCE_CONTRACT_CLAIM(3, 3), + /** + * ASSURANCE_CONTRACT_PLEDGE = 4; + */ + ASSURANCE_CONTRACT_PLEDGE(4, 4), + /** + * ASSURANCE_CONTRACT_STUB = 5; + * + *
+       * In future: de/refragmentation, privacy boosting/mixing, child-pays-for-parent fees, etc.
+       * 
+ */ + ASSURANCE_CONTRACT_STUB(5, 5), ; /** @@ -8355,6 +8375,26 @@ public final class Protos { * */ public static final int KEY_ROTATION_VALUE = 2; + /** + * ASSURANCE_CONTRACT_CLAIM = 3; + * + *
+       * Stuff used by Lighthouse.
+       * 
+ */ + public static final int ASSURANCE_CONTRACT_CLAIM_VALUE = 3; + /** + * ASSURANCE_CONTRACT_PLEDGE = 4; + */ + public static final int ASSURANCE_CONTRACT_PLEDGE_VALUE = 4; + /** + * ASSURANCE_CONTRACT_STUB = 5; + * + *
+       * In future: de/refragmentation, privacy boosting/mixing, child-pays-for-parent fees, etc.
+       * 
+ */ + public static final int ASSURANCE_CONTRACT_STUB_VALUE = 5; public final int getNumber() { return value; } @@ -8364,6 +8404,9 @@ public final class Protos { case 0: return UNKNOWN; case 1: return USER_PAYMENT; case 2: return KEY_ROTATION; + case 3: return ASSURANCE_CONTRACT_CLAIM; + case 4: return ASSURANCE_CONTRACT_PLEDGE; + case 5: return ASSURANCE_CONTRACT_STUB; default: return null; } } @@ -16188,7 +16231,7 @@ public final class Protos { "BUILDING\020\001\022\013\n\007PENDING\020\002\022\025\n\021NOT_IN_BEST_C" + "HAIN\020\003\022\010\n\004DEAD\020\004\"A\n\006Source\022\022\n\016SOURCE_UNK" + "NOWN\020\000\022\022\n\016SOURCE_NETWORK\020\001\022\017\n\013SOURCE_SEL" + - "F\020\002\"\236\004\n\013Transaction\022\017\n\007version\030\001 \002(\005\022\014\n\004" + + "F\020\002\"\371\004\n\013Transaction\022\017\n\007version\030\001 \002(\005\022\014\n\004" + "hash\030\002 \002(\014\022&\n\004pool\030\003 \001(\0162\030.wallet.Transa" + "ction.Pool\022\021\n\tlock_time\030\004 \001(\r\022\022\n\nupdated" + "_at\030\005 \001(\003\0223\n\021transaction_input\030\006 \003(\0132\030.w" + @@ -16200,27 +16243,30 @@ public final class Protos { "\033.wallet.Transaction.Purpose:\007UNKNOWN\"Y\n" + "\004Pool\022\013\n\007UNSPENT\020\004\022\t\n\005SPENT\020\005\022\014\n\010INACTIV" + "E\020\002\022\010\n\004DEAD\020\n\022\013\n\007PENDING\020\020\022\024\n\020PENDING_IN" + - "ACTIVE\020\022\":\n\007Purpose\022\013\n\007UNKNOWN\020\000\022\020\n\014USER" + - "_PAYMENT\020\001\022\020\n\014KEY_ROTATION\020\002\"N\n\020ScryptPa" + - "rameters\022\014\n\004salt\030\001 \002(\014\022\020\n\001n\030\002 \001(\003:\00516384" + - "\022\014\n\001r\030\003 \001(\005:\0018\022\014\n\001p\030\004 \001(\005:\0011\"8\n\tExtensio", - "n\022\n\n\002id\030\001 \002(\t\022\014\n\004data\030\002 \002(\014\022\021\n\tmandatory" + - "\030\003 \002(\010\" \n\003Tag\022\013\n\003tag\030\001 \002(\t\022\014\n\004data\030\002 \002(\014" + - "\"\261\004\n\006Wallet\022\032\n\022network_identifier\030\001 \002(\t\022" + - "\034\n\024last_seen_block_hash\030\002 \001(\014\022\036\n\026last_se" + - "en_block_height\030\014 \001(\r\022!\n\031last_seen_block" + - "_time_secs\030\016 \001(\003\022\030\n\003key\030\003 \003(\0132\013.wallet.K" + - "ey\022(\n\013transaction\030\004 \003(\0132\023.wallet.Transac" + - "tion\022&\n\016watched_script\030\017 \003(\0132\016.wallet.Sc" + - "ript\022C\n\017encryption_type\030\005 \001(\0162\035.wallet.W" + - "allet.EncryptionType:\013UNENCRYPTED\0227\n\025enc", - "ryption_parameters\030\006 \001(\0132\030.wallet.Scrypt" + - "Parameters\022\022\n\007version\030\007 \001(\005:\0011\022$\n\textens" + - "ion\030\n \003(\0132\021.wallet.Extension\022\023\n\013descript" + - "ion\030\013 \001(\t\022\031\n\021key_rotation_time\030\r \001(\004\022\031\n\004" + - "tags\030\020 \003(\0132\013.wallet.Tag\";\n\016EncryptionTyp" + - "e\022\017\n\013UNENCRYPTED\020\001\022\030\n\024ENCRYPTED_SCRYPT_A" + - "ES\020\002B\035\n\023org.bitcoinj.walletB\006Protos" + "ACTIVE\020\022\"\224\001\n\007Purpose\022\013\n\007UNKNOWN\020\000\022\020\n\014USE" + + "R_PAYMENT\020\001\022\020\n\014KEY_ROTATION\020\002\022\034\n\030ASSURAN" + + "CE_CONTRACT_CLAIM\020\003\022\035\n\031ASSURANCE_CONTRAC" + + "T_PLEDGE\020\004\022\033\n\027ASSURANCE_CONTRACT_STUB\020\005\"", + "N\n\020ScryptParameters\022\014\n\004salt\030\001 \002(\014\022\020\n\001n\030\002" + + " \001(\003:\00516384\022\014\n\001r\030\003 \001(\005:\0018\022\014\n\001p\030\004 \001(\005:\0011\"" + + "8\n\tExtension\022\n\n\002id\030\001 \002(\t\022\014\n\004data\030\002 \002(\014\022\021" + + "\n\tmandatory\030\003 \002(\010\" \n\003Tag\022\013\n\003tag\030\001 \002(\t\022\014\n" + + "\004data\030\002 \002(\014\"\261\004\n\006Wallet\022\032\n\022network_identi" + + "fier\030\001 \002(\t\022\034\n\024last_seen_block_hash\030\002 \001(\014" + + "\022\036\n\026last_seen_block_height\030\014 \001(\r\022!\n\031last" + + "_seen_block_time_secs\030\016 \001(\003\022\030\n\003key\030\003 \003(\013" + + "2\013.wallet.Key\022(\n\013transaction\030\004 \003(\0132\023.wal" + + "let.Transaction\022&\n\016watched_script\030\017 \003(\0132", + "\016.wallet.Script\022C\n\017encryption_type\030\005 \001(\016" + + "2\035.wallet.Wallet.EncryptionType:\013UNENCRY" + + "PTED\0227\n\025encryption_parameters\030\006 \001(\0132\030.wa" + + "llet.ScryptParameters\022\022\n\007version\030\007 \001(\005:\001" + + "1\022$\n\textension\030\n \003(\0132\021.wallet.Extension\022" + + "\023\n\013description\030\013 \001(\t\022\031\n\021key_rotation_tim" + + "e\030\r \001(\004\022\031\n\004tags\030\020 \003(\0132\013.wallet.Tag\";\n\016En" + + "cryptionType\022\017\n\013UNENCRYPTED\020\001\022\030\n\024ENCRYPT" + + "ED_SCRYPT_AES\020\002B\035\n\023org.bitcoinj.walletB\006" + + "Protos" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { diff --git a/core/src/wallet.proto b/core/src/wallet.proto index e74a9e5e..6166130c 100644 --- a/core/src/wallet.proto +++ b/core/src/wallet.proto @@ -256,6 +256,10 @@ message Transaction { USER_PAYMENT = 1; // Created automatically to move money from rotated keys. KEY_ROTATION = 2; + // Stuff used by Lighthouse. + ASSURANCE_CONTRACT_CLAIM = 3; + ASSURANCE_CONTRACT_PLEDGE = 4; + ASSURANCE_CONTRACT_STUB = 5; // In future: de/refragmentation, privacy boosting/mixing, child-pays-for-parent fees, etc. } optional Purpose purpose = 10 [default = UNKNOWN];